
I'm throwing a Halloween karaoke night in Prague and wanted the invite to be part of the fun. I used it as a playground for four experiments: guest-only access, playful UI, how far an AI app builder can get on its own, and running the whole backend on free tools. It went from idea to live in 4 days.
A party invite is a tiny product with real stakes: it handles names, phone numbers, venues and money, and a single forwarded link can leak all of it. I wanted to test four things:
Privacy & gating. Can a link-based invite stay private without asking guests to make an account?
Delight. Can an RSVP make people smile instead of feeling like a form?
Lovable vs Claude Code. How far does an AI app builder go before I need to take over the code?
Cost. Can it run without paying for anything new - no backend bill, no new domain?
Started in Lovable, finished in code. Lovable gave me the first version in an afternoon. I then moved the code to my machine and continued with Claude Code and Codex, which handed work to each other through a shared notes file.
Google Sheets as the backend. Instead of paying for a database, every RSVP and payment goes to a Google Sheet through a small Apps Script, and a same-site proxy keeps that address hidden from the browser.
A custom domain without buying one. The invite first lived on a free vercel.app address, which looked like a test page. Instead of paying for a new domain, I gave it a subdomain of the one I already own - halloween.shaunteles.com - so it feels like a real product and costs nothing extra.
Gating in layers. Guests get in with the last 4 digits of their phone number, and two wrong tries lock the browser. Venues stay blurred until I confirm their payment - the real address isn't even sent until then. Search engines and AI bots are blocked.



Delight in small places. One-tap RSVP, a live countdown, a three-act night (1st bar → karaoke → 2nd bar), and a "Sadly, no" button that runs away from your finger.


Live at halloween.shaunteles.com - guests need a code to get in.
The first gate was too strict. The browser lock caught guests who had their own personal link, so I narrowed it to visits from the shared link only.
The joke button had to be tuned. "Sadly, no" first dodged too slowly to be funny, then it escaped off the screen. It took two rounds to get the timing right.
Hiding the code broke the site. Scrambling the page code so people couldn't snoop broke the live build, and automated checks for the backend proxy came out of the fix.
My own folder fought me. The project wouldn't run locally because of an apostrophe in the folder name, and builds failed inside Dropbox.
Scope got cut. The song-request, notes and "which part are you coming to?" fields all went. Every field I removed made the RSVP faster.