So guys, I did a thing
This morning I got a call from a friend asking for help shooting a “product-ish” video. Turns out, she had also done a thing xD.
Jokes aside, the reason for the call was this: she’d built a postcard sending app using Streamlit and wanted to document it with a short video. Just a normal scenario, learn something, build a tiny product, ship it, talk about it. Honestly, I was (and still am) genuinely happy for her.
There was just one tiny problem. She had absolutely no idea how much I hate Streamlit.

The moment the call ended, I swear I felt some sort of divine intervention or maybe just my inner monologue screaming (definitely this one):
“Create a similar app… but please, for the love of clean UI, don’t use Streamlit.”
And so, naturally, I did exactly that. I built a simple app of my own.
Inspiration is a tricky thing
You want to be inspired, not accidentally produce a bargain-bin knockoff. You need to be different enough to stand on your own, otherwise you end up as a cheap copycat that gets neither credit nor attention. That’s the tightrope I found myself walking and this post is about how I tried not to fall off it.
Initial thoughts
So initially, I just wanted to build a prototype. That’s usually how I start anything. My process is pretty simple: I use tools like Lovable, v0, Google AI Studio, or Bolt to get a working app up and running quickly, with the basic functionality in place.
Out of all of these, my personal favourite is v0, mostly because it comes from the Next.js team and leans heavily on solid UI libraries like shadcn/ui. The result? Clean, aesthetic apps with surprisingly little effort. It just gets the vibe I’m going for.
The others are great too. Most of them seem to rely on Vite.js and UI libraries like daisyUI, which are perfectly capable and honestly quite powerful. They’re just… not my type. And that’s okay. In tech, as in life, preferences matter.
Building the app
The initial prompt
Problem (Got very used to giving very lazy prompts and thats what I gave again)
I need to build a postcard sending webapp. basically it should ask From Name, To Name, Receipient email, Postcard message, then it should have a phot as well. it can aither be uploaded or taken directly. the postcard should be aesthetic. this shoulod be the aestejtic of the final pdf
App mockups and iterations
Below are some screenshots of the initial UI I put together.
Neumorphic UI
I have been wanting to try out neumorphism for some time now, so naturally the goal was to build a neumorphic web app. For this part, Google AI Studio turned out to be surprisingly good. I dialled in the right prompt and had a basic app ready in no time.
Workflow and Implementation
From there, the workflow was fairly standard: push the app to GitHub, connect the repo to Vercel, and publish it to my domain. Nothing fancy, just a clean ship-it moment.
For version control, I used GitKraken, something I’ve been using for a long time now. I originally got it through the GitHub Education Pack, which (sadly) I no longer qualify for. I’ve got about 10 days of access left, but that’s fine. GitHub Desktop covers 90% of what I use GitKraken for on a daily basis anyway.
Once the repo was pulled locally, I jumped into Cursor to work on it. A few tweaks, some fixes, a couple of hours later… and there you go. The app was done.
The App!
Looking sweet right?

So, what does the app actually do? Nothing wild and that’s kind of the point.
It asks for a few basic details, uses those to generate a postcard front and back via the Gemini API (thanks Google for the very generous $300 credit 🙏), and then sends the postcard out via email using the Resend API.
That’s it. No magic tricks, no overengineering. Just a fairly simple, straightforward app that does one thing and does it well.
Final thoughts
The original inspiration
So, my friend, also has her own version of the app. I checked it out too, and honestly, Streamlit aside, she’s done a really neat job.
I’ve always wanted to build cute apps… and have failed miserably at it. Repeatedly. I guess that’s just not my style. Her app, on the other hand, is genuinely adorable, with teddy bears, soft visuals, the whole vibe. I’m always amazed by how some people make cute design feel so effortless, while I remain completely incapable of pulling it off.
If you’re curious, you can check out her app here .
Now, about my app.
There are still a few things I want to improve, the app itself is fine, but the email delivery definitely needs more work. I’ve already designed a proper HTML + CSS email template, but I haven’t pushed it to production yet for a few reasons.

For one, Gmail sometimes flags the emails as spam. Other times, it doesn’t even do that it just silently ignores them, even though Resend happily returns a 200 OK and marks the message as delivered. Fun.
Another small hiccup was embedding images in the email and providing a clean download link for the generated postcards. I do have a working prototype for this now using Neon. I’m storing the image pairs in a Neon DB when the “send email” button is clicked, and the download link fetches the images using their respective IDs.
I’ll push these improvements soon once the email quirks are properly ironed out. In the meantime, feel free to check out my app as well, it’s hosted here .
Thanks for reading! This has to be one of the longest posts I’ve written so far. (AstroJS still says it’s a 5-minute read though, so I guess we’re good.)
