Inspiration
We are the generation that figured out who we were on the internet. Not the polished, algorithm sorted internet of today, but the messy, handmade one we grew up on. The one where your MySpace Top 8 was a public declaration about your entire heart. Where your profile song autoplayed whether your visitors liked it or not. Where an AIM away message was basically a tiny poem, a buddy list felt like a neighborhood, and "thanks for the add" actually meant something. We spent hours customizing every pixel of our little corners online, glittery cursors and clashing colors and all, because back then the web felt like a place you got to be a person instead of a product.
Then we looked at modern dating apps and felt all of that warmth drain out of the screen. They take a whole human being, with a whole inner world, and flatten them into one photo and a swipe. If you are shy, or creative, or neurodivergent, or just tired of the meat market energy of it all, that format pushes you out the door before your personality ever gets a turn to speak. And we kept coming back to the same simple thought: people are not their best selfie. People are their moments. The song they wore out in 2009. The messy desk where they make things. The inside joke buried in a blurry photo.
So we set out to build a place where you fall for someone because of their world, not their headshot. A place that feels like the warm, weird, low stakes internet we miss. That is the heart of MemoryMatch, a video first dating app with a Y2K soul.
What it does
Your profile is a Vibe Page, your own little corner of the internet again. The centerpiece is a Memory Reel, a montage of your photos and moments with captions, set to a track that matches your vibe. You pick a Top Eight of interests, set an AIM style mood status, and choose from custom color palette themes so the whole page actually feels like you.
Instead of swiping, you send low pressure Charms, like a wave or a sticker or a little note on the exact frame that caught your eye. You can browse by vibe and by who is near you. And when two people are into each other, ReelChemistry unlocks. It is a warm match moment that hands you conversation starters built from what you genuinely share, so nobody has to sit there staring at a blank message box. There are no public like counts anywhere, and Soft Launch Mode keeps the whole thing gentle and unintimidating.
Monetization is simple and built right in: free to use, with paid extras like more Charms, premium themes, and music packs.
It is adults only, with blocking, reporting, and real account deletion built in from day one.
How we built it
The app is Next.js on the App Router, React, and TypeScript, deployed on Vercel. Authentication runs through Clerk, with middleware protecting routes and a webhook that syncs each new user into our database. Our system of record is Amazon Aurora PostgreSQL, Serverless v2, with Drizzle as the ORM, and we modeled the entire product as a relational schema of seventeen tables.
We leaned on the database to keep us honest. Writes go through server actions that get validated with Zod and authorization checked on every single call, because we never trust a user id that comes from the client. The match engine is the heart of it. When you like someone, we check for a like back, and if it is there we create a match with a canonical ordering so it can never duplicate, then build conversation starters from your shared interests with simple deterministic logic and no AI. Likes are idempotent, blocks are bidirectional and filter every read, and deleting your account truly cascade purges your data. Aurora is encrypted at rest with AWS KMS, with its credentials kept in AWS Secrets Manager. Location runs on the Google Places API for city autocomplete and a distance filter. And the Memory Reel itself is a React slideshow built with Framer Motion, which was a deliberate choice. We did not want to fake a video. We wanted the feeling of a montage.
Challenges we faced
The hardest parts were the unglamorous ones. Getting a serverless Vercel app to talk to Aurora reliably over SSL took real care. Getting the mutual match logic correct, idempotent, and impossible to duplicate took more thought than we expected, and making blocks airtight across every single query was its own quiet battle. Syncing Clerk identity into our own users table through webhooks was fiddly, but it mattered.
On the design side, the constant push and pull was nostalgia versus usability. Y2K can get loud and unreadable fast, so we kept reining ourselves back toward something clean and accessible while protecting the soul of the thing. And with three people and only a few weeks, the real challenge was being honest about scope. We chose to build real foundations and stay clear about what we were saving for later, instead of faking a finished platform.
What we learned
We learned a ton about running a relational database in a serverless world, and about letting the schema enforce correctness for us instead of scattering defensive code everywhere. We got a real feel for production grade auth and authorization, and why you push identity checks to the server every single time. We came away genuinely believing that a good data model is a design decision, not an afterthought. And we saw how much a small team can ship when everyone agrees on what matters and guards the scope together.
What's next
Real media uploads with moderation, smarter matching, and a creator marketplace for the themes and music that give MemoryMatch its feel. We built the foundation to grow into all of it, and we are just getting started!
Built With
- amazon-aurora
- amazon-web-services
- aws-kms
- aws-secrets-manager
- clerk
- drizzle-orm
- framer-motion
- google-places
- javascript
- next.js
- node.js
- postgres.js
- postgresql
- react
- shadcn-ui
- sql
- tailwindcss
- typescript
- upstash-redis
- vercel
- zod
Log in or sign up for Devpost to join the conversation.