React / Typescript / Next.js / Express
Supabase + Drizzle ORM / Supabase auth
ngrok during development
Postforge was built for a public school in NYC who wanted to increase their social media presence by posting more often. The principal receives dozens of photo emails each day from teachers and parents. To create a single post, she had to open every email, go through each attachment, choose a photo, download it onto her phone, upload to instagram and finally write a caption.
I worked directly with the principal to identify the core features PostForge needed: email ingestion, image dashboard, and caption generation.
Handling real-world photo attachments + volume turned out to be the main difficulty I faced. During end-to-end testing I faced problems such as:
Each part of the pipeline had to be idempotent, observable, and resilient to retries, because email ingestion and AI post generation turned out to be rather failure-prone in production.
In designing Postforge, my main goal was to respect the principal's on-the-go, mostly mobile and email-based workflow.
I realized she didn't need another dashboard of decisions, but to reduce friction + decision making as much as possible. I made a few key decisions to support this:
The solution here was the email digest: at the end of each school day, a cron job sends that day's images to Claude for caption generation, and ready-to-share posts will arrive directly in her inbox each evening.
The app is not available for public use because it's been white-labeled for the school. I worked with the IT coordinator to host it on their own domain and accept pictures using custom email addresses.
I learned that even "simple" software can become really complex in production when you're handling formats, limits, retries, API failures, UX edge cases, etc. Getting to MVP is the easy part. After that, there's a seemingly infinite amount of engineering to be done to cover all possible failure modes. I really had to prioritize.
I only have a limited amount of time and resources to build this and wish I could have polished it up more, but the principal is happy, and Postforge saves her time every day. Win! :)