← All projects
Project · Product / Startup

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.

The product bet

Most dating apps optimize for more swipes. Loom tests the opposite idea: fewer choices, stronger context, and a smaller set of daily matches.

From problem to product

What Loom does differently.

Problem
  • Infinite scrolling
  • Shallow profile judgment
  • Choice overload
  • Low trust
Loom's Direction
  • Two daily matches
  • Prompt-based profiles
  • Campus verification
  • Prompt-informed matching
How Loom works

From prompt to pair.

  1. 01
    Vibe Check

    Users answer prompts around intent, personality, and communication style.

  2. 02
    Relational Filters

    Baseline compatibility rules remove obvious mismatches.

  3. 03
    Text Embeddings

    Prompt answers become compatibility signals.

  4. 04
    Daily Match Pair

    Each evening, two matches arrive. Pick one to open a focused chat.

Build log

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
What I owned

End-to-end ownership.

01

Product & game theory

Designed the anti-swipe rules: scarce daily matches, one connection at a time, and a campus launch threshold.

02

Full-stack app

Built the client, live 1:1 chat, match states, and an admin console to monitor drops.

03

Matching engine

Built the nightly matching job: similarity scoring, hard filters, and decay so stale pairs fade.

04

Edge cases

Kept match state consistent across daily drops and chose numeric codes over magic links, which school email scanners break.

Technical architecture

System flow.

.edu Campus Auth
Onboarding Spec Sheet
Daily Rotating Prompt
pgvector Matching (Nightly pg_cron)
Focus Mode (1:1)
Supporting material

Artifacts.

Next project
Compass →