Inspiration

Dating fatigue is real: endless swipes, shallow bios, and mismatched expectations. We wanted a way to know before you say hello by stress-testing chemistry with AI before investing emotional energy.

We're inspired by economic matching theory and the idea that better information beats more swiping. If you can preview the vibe and friction points up front, you make kinder, smarter choices.

What it does

  • Simulates a first-date conversation between two AI personas built from each user's deep profile, then summarizes highs, friction points, and vibe.
  • Provides an AI Bestie that debriefs you, updates your profile with learnings, and suggests next steps.
  • Lets you browse, swipe, and chat with profiles while pulling structured data from JSON to keep the UI fast and predictable.
  • Surfaces a Simulation Report with highlights, friction points, vibe score, and suggested icebreakers so users act on insights, not guesses.

How we built it

Backend (FastAPI): Orchestrates onboarding, bestie chats, simulations, and transcription. Uses Google Gemini for both persona chats and trailer summaries. Profiles are stored as JSON; Pydantic models keep responses typed.

Simulation Engine: Runs turns based two-agent chats, then summarizes the transcript into a Trailer (high point, friction point, vibe, snippet, icebreakers). Prompts live in YAML config files.

AI Bestie: A supportive agent that greets with current profile context, chats naturally, then emits updated profile JSON. Deep-merges changes back to disk.

Matching Algorithms: Includes Gale–Shapley Deferred Acceptance and Top Trading Cycle to explore optimal matchings beyond naive filters.

Frontend (React + Vite + Tailwind + shadcn/ui): Gradient hero landing, routed pages for login, questionnaire, dashboard, swiping, and chat. React Query hooks fetch profile data and simulation results.

Challenges we ran into

  • LLM Parsing: Ensuring Gemini outputs clean JSON required fence stripping and defensive parsing to avoid crashes on malformed responses.
  • Determinism vs. Warmth: Balancing concise, warm greetings with consistent simulation behavior meant capping turns and carefully crafting prompts.
  • State and Persistence: Merging AI-updated profile JSON without overwriting user data needed a custom deep-merge to preserve existing fields.
  • Voice & Latency: For the experimental Magic Mirror (voice cloning), handling audio sample rates and channel configs while keeping latency tolerable was nontrivial.

Accomplishments that we're proud of

  • A full simulation loop: from profile ingestion → two-agent date simulation → summarized trailer with actionable insights.
  • The AI Bestie that not only chats supportively but writes back structured profile improvements.
  • Integrating real matching theory (DA and TTC) alongside AI to move beyond swipe-era heuristics.
  • A polished landing page and user flows with consistent branding, gradients, and responsive layouts.

What we learned

  • Prompt hygiene (code-fence stripping, JSON validation) dramatically improves reliability of AI features.
  • Unidirectional architecture simplifies reasoning about dependencies and makes refactors safer.
  • Economic algorithms pair well with AI: theory provides guarantees, AI provides nuance.
  • Small UI details (hero gradients, consistent logo usage) matter for conveying trust in an AI-driven dating product.

What's next for Preview

  • Richer Simulations: Longer or branching dialogues with sentiment signals \( s_t \) and a rolling vibe score:

$$ v = \frac{1}{T}\sum_{t=1}^{T} s_t $$

  • Adaptive Onboarding: Dynamic question trees that shorten when confidence is high.
  • Safety & Bias Checks: Automated audits of prompt outputs to flag problematic suggestions.
  • Mobile-Ready Voice: Expand Magic Mirror with lower-latency TTS/STT paths for live phone-like previews.
  • Scoring Transparency: Expose why a match scores well/poorly with interpretable facets (values, lifestyle, communication).

Built With

  • coqui
  • dotenv;-google-gemini-(simulations-&-summaries)
  • fastapi
  • json
  • lucide
  • openai-(transcription)
  • prompts;
  • pydantic
  • python
  • react-(typescript)
  • react-query
  • react-router
  • shadcn/ui
  • sounddevice
  • speechtotext
  • tailwind-css
  • tts
  • vite
  • yaml-driven
Share this project:

Updates