Valentine's App 2026 - Full Source Code
Full source code for a full-stack scratch card game: React + TypeScript frontend, Express + PostgreSQL backend, animated with Framer Motion
TL;DR: I shipped a working Valentine’s Day scratch-and-win app in 33 minutes using Replit. React, Drizzle, shadcn, Postgres. One scratch per email per day, persistent progress, fully customizable. Full source code below — fork it, swap the hearts for whatever you want, run it for your own newsletter.
Read this article first. This code is the companion resource.
I shared the Valentine’s Day scratch card app. The DMs were unanimous: give us the code.
So here it is. The whole thing. Tweak it, ship it, run it for your own list.
The Stack
Nothing exotic. Every piece is something a vibe coder can paste into Replit, Lovable, or Cursor and get a working build on the first try.
Three Things Worth Stealing
One scratch per day, per participant.
This is enforced where it matters: in the database.
There’s a unique constraint on (participant_id, date), which means the backend only accepts one scratch per person per day.
Even if someone clears cookies, opens an incognito window, or tries to outsmart the frontend, the second scratch gets rejected.
No flimsy client-side check. The constraint is the rule.
Progress also persists across sessions.
Enter your email a week later, and the app remembers which hearts you already scratched and which prizes you won.
Persistent state is the difference between a one-day traffic spike and a week of actual engagement.
Everything is swappable in one file.
Change the hearts to stars, gift boxes, pumpkins, tiny judgmental raccoons. Whatever fits your brand. Swap the prizes for discount codes, free chapters, 1:1 calls, paid-tier upgrades, bonus templates, or secret links.
The structure is clean enough that you’ll be done in 33 minutes.
Progress is persistent. When someone returns and enters their email again, the app remembers which hearts they already scratched and shows their previous prizes.
Change the hearts to stars, gift boxes, anything.
Swap the prizes to fit your audience.
Adjust the colors to match your brand.
The structure is clean enough to make it yours in 33 minutes.
You Might Also Enjoy
Paid subscribers get the full source code drop below: every file, the Drizzle schema, the Express routes, the React components, and the deploy config.
Source Code
Paste into your vibe coding tool and ask to build this exact app and ask what parts you want to customize.





