-
-
Human verification
-
On going voice interview
-
Gemini based Agent conversations/scouting begins
-
Gemini Vibe analysis + assortative beauty match
-
What the Voice interview do
-
Welcome login screen
-
Picture upload for Gemini Vibe Analysis
-
Vibe summary detected by Gemini in Profile
-
1- Agent Dossier after Gemini Picture + Audio combination
-
2 - Agent Dossier after Gemini Picture + Audio combination
-
Chat view with matches/awaiting/benched with Gemini scouting ongoing
-
Successful App Store approval - 10 beta users tested
[Alter iOS app has passed the App Store Developer Review] Alter started from a pretty simple frustration: modern dating apps make people do a lot of work that doesn’t feel human. You swipe for hours, sort through low-effort profiles, second-guess everyone’s intentions, and increasingly wonder whether you’re even talking to a real person. I wanted to flip that. Instead of making people spend energy on the most mechanical part of dating, I asked: what if AI handled the filtering, organizing, and pattern-matching, so the user could focus on the part that actually matters, which is being a person with another person?
The Latest version of the app now uses Gemini Embedding 2. :)
Inspiration
I was inspired by how exhausting online dating has become. Most products optimize for engagement, not sincerity. I wanted to build something that felt more intentional and a little more intimate: an experience where you don’t perform for an algorithm all day, but instead let your agent understand who you are, what kind of energy you bring, and what kind of connection you’re actually looking for.
That led me to an unusual idea: combine real conversation, visual signals, memory, and even Vedic compatibility into a system that feels less like swiping and more like being represented by a thoughtful matchmaker.
How I built it
I built Alter as a native iOS app in SwiftUI, with Supabase handling auth, database, storage, and realtime chat. The onboarding flow has two main inputs: photos and a live voice interview.
For the interview, I used Gemini Live so onboarding feels like an actual conversation instead of a form. As the conversation happens, I extract structured traits and store them in a living dossier. For photos, I use Gemini 2.0 Flash to analyze style, vibe, and interests, then turn that profile into embeddings with gemini-embedding-001.
Those embeddings are stored in PostgreSQL with pgvector, and my Python matchmaker service runs on Google Cloud Run with Cloud Scheduler. The scoring system blends semantic similarity, behavioral signals, explicit preferences, and Vedic compatibility. At a high level, the score looks like:
$$ \text{final score} = w_v \cdot \text{vector similarity} + w_b \cdot \text{behavioral fit} + w_a \cdot \text{vedic compatibility} $$
From there, high-confidence pairs go through an agent negotiation step, where both users’ agents generate a short introduction before the match is revealed. I also built an in-chat AI wingman and a vibe-check layer to help with openers, tone, and ghosting-risk detection.
Challenges I faced
One of the hardest parts was getting the AI to feel useful without feeling fake. It’s easy for agent-generated dating copy to sound generic or overproduced, so I spent a lot of time tuning prompts and constraints so the negotiation and wingman features sounded specific, grounded, and believable.
Another big challenge was orchestration. This project touches mobile, realtime systems, LLMs, embeddings, scheduled jobs, and database logic all at once. Getting photo analysis, live interview extraction, dossier generation, matching, and nightly reveals to work as one coherent flow took a lot of iteration.
The matching logic was also tricky. I didn’t want to rely only on vibes from an LLM, but I also didn’t want a rigid formula that ignored nuance. Finding the right balance between deterministic scoring and AI-generated reasoning was one of the most important technical problems in the project.
What I learned
The biggest lesson was that AI works best here when it stays in the background. The most valuable thing it can do is reduce emotional and cognitive friction: summarize, screen, compare, explain, and support. The goal was never to replace chemistry. It was to make space for chemistry.
I also learned that multimodal inputs are much richer than a static profile. A short voice conversation plus a few photos tells you far more about someone than a bio ever could. And on the engineering side, I learned how important it is to make every boundary explicit when you’re building across mobile, AI systems, and cloud infrastructure. Good prompts matter, but good interfaces and clean data flow matter even more.
Built With
- deno
- gemini-2.0-flash
- google-cloud-run
- google-cloud-scheduler
- google-gemini-live-api
- google-secret-manager
- pgvector
- postgresql
- python
- realtime
- sql
- supabase
- supabase-edge-functions
- swift
- swiftui
- typescript
- websockets
Log in or sign up for Devpost to join the conversation.