Loom.
A college dating app that replaces endless swiping with two matches every 24 hours, picked by a nightly matching system I built end to end.
Most dating apps optimize for more swipes. Loom tests the opposite idea: fewer choices, stronger context, and a smaller set of daily matches.
What Loom does differently.
- Infinite scrolling
- Shallow profile judgment
- Choice overload
- Low trust
- Two daily matches
- Prompt-based profiles
- Campus verification
- Prompt-informed matching
From prompt to pair.
- 01Vibe Check
Users answer prompts around intent, personality, and communication style.
- 02Relational Filters
Baseline compatibility rules remove obvious mismatches.
- 03Text Embeddings
Prompt answers become compatibility signals.
- 04Daily Match Pair
Each evening, two matches arrive. Pick one to open a focused chat.
From sketch to engine.
- What shipped
- PostgreSQL schema, 1,536-D embeddings, pgvector cosine queries, nightly pg_cron batch, and Focus Mode.
- Key decision
- Run matching server-side on a schedule, with zero client dependency.
- Artifact
- View source on GitHub
End-to-end ownership.
Product & game theory
Designed the anti-swipe rules: scarce daily matches, one connection at a time, and a campus launch threshold.
Full-stack app
Built the client, live 1:1 chat, match states, and an admin console to monitor drops.
Matching engine
Built the nightly matching job: similarity scoring, hard filters, and decay so stale pairs fade.
Edge cases
Kept match state consistent across daily drops and chose numeric codes over magic links, which school email scanners break.
System flow.
Artifacts.
Loom Prototype
The working app: onboarding, daily prompt, match drop, and Focus Mode chat.
GitHub
Full-stack source: client, database schema, and matching job.
Slide Deck
Product strategy, market framing, and launch plan.
Final Report
Long-form write-up covering product, architecture, and launch strategy.