All work

Researched, designed, and built a Persian dating app alone, backend to 36 screens, in six weeks

ElaraJuly 2026 to September 2026Research · design · UX · full build · solo
36
Screens shipped: the app plus a 14-page admin panel
18
Personality tools, 861 items, written in Persian
773 tests
219 commits, alone, in six weeks
Live
elaraa.ir · @Elaradate_bot, in production

Context

Elara is a Persian dating and personality-matching mini-app inside Telegram, and I researched, designed, and built the entire thing myself. I started from a market scan, not an idea I liked. Iran's only licensed matchmaking platform makes you verify your identity and pass a mandatory psychology test before you see a single profile; most of the online dating that actually happens in Iran runs through unverified Telegram bots instead, a photo and a short bio with no trust signal at all. Romance-scam losses were climbing globally in the background, $823M reported to the FTC in the US in 2024 alone, and every major dating app I studied ran a skewed gender ratio that eventually degrades the experience for everyone on the platform. Telegram itself had quietly removed the one real barrier to entry: 500M people were already using mini-apps by 2024, zero install size, inside a platform roughly 45M Iranians use despite the filtering. Nobody had built the product that actually sat at that intersection.

The reframe

The research kept converging on one sentence: no product in this category held security, credibility, and a good experience at the same time. Iran's licensed competitor won on legitimacy and lost users at the door, since verification and a mandatory test both come before a user has seen any value. The unverified Telegram bots won on ease and had no trust layer at all. So the reframe wasn't 'build a better dating app'; it was to keep the three things that clearly work (the serious-relationship framing, identity verification, personality testing as core to the product rather than a side quiz) and remove the exact point where each one currently costs you the user before they've seen anything. Verification and the personality tools stayed. I just made both free and optional from the first screen, with a reward for finishing them, instead of a wall in front of it.

What I built

Before writing code, I locked ten decisions so I wouldn't relitigate them daily, then built the whole stack alone: market research, an RTL-first design system, a NestJS backend and Postgres data model, a Next.js frontend across 36 screens, and a 14-page admin panel so someone else could run verification, moderation, and pricing without touching code. The single decision most visible in the product: swiping used to mean judgment, left as a 'no'. I changed it so a swipe is just navigation, both directions loop so you can come back, and rejection moved to an explicit button that's instantly reversible and invisible to the other person, because a product framed around a serious search for a partner shouldn't make casual browsing feel like rejecting people. Personality assessment grew from a two-question placeholder into the product's second engine: 18 instruments, 861 items, all written natively in Persian rather than translated, gated at 80% completion so a match is never computed off a guess. Retention runs on the same idea in a different register: seven two-player games inside the chat itself (I redesigned tic-tac-toe so it can't end in a draw, since a solved game bores two experienced players fast), a daily Hafez fortune with a written interpretation for all 495 ghazals, and a non-monetary currency, Star, earned only through verification, invites, and finishing a profile, the exact behaviors that make the network more trustworthy. No payment gateway shipped in v1; getting one in Iran requires a trust certificate, which is its own project, so I built the pricing logic to be config-driven from day one instead.

What I killed

I killed the idea that a swipe should carry a verdict. The first version treated every card exactly like the category's biggest players do: left is rejection, and the app quietly counts it as a data point. Once I looked at what that meant for a product explicitly framed around a serious search rather than casual browsing, it read wrong: flipping through a deck shouldn't feel like a string of small rejections. I moved the actual 'don't show me this again' action to its own explicit button, made it instantly reversible, and made sure it carries zero signal to the other person. Swiping went back to being navigation, nothing more.

Outcome

There's no user-growth number to report, and the case study I wrote for this deliberately withholds any real user data, infrastructure detail, or security mechanics; that line matters more in a dating product than almost anywhere else. What I can stand behind is that it's finished and running: 36 screens across the user app and the admin panel, a real Postgres-backed match and chat system, 773 automated tests passing on every change, and it is live in production right now at elaraa.ir and inside @Elaradate_bot, not a prototype sitting in a repo.

Where my role stopped

There's no one else's code or judgment to credit here: I did the research, the product decisions, the visual design, the backend, the frontend, and the admin tooling myself, which is exactly why I'm careful about what I claim past that. The screenshots in the actual case study come from a real test account inside the live app; the portraits shown are fabricated for the presentation and belong to no real user. And v1 deliberately shipped without a payment gateway, since opening one in Iran requires a trust certificate that wasn't a problem this scope could absorb, so the economy runs on an earned in-app currency instead, by design, not as a stopgap I ran out of time for.

What I know now

Writing the ten decisions down before touching code is the thing I'd repeat first: it turned most disagreements with myself into 'did the evidence actually change,' not a fresh debate every morning. The bigger lesson was that a constraint can become the idea instead of just a limit on it: no photos in chat and no payment gateway read like restrictions on day one, and became the two-player games and the Star economy by the end. And localization turned out to be structural, not cosmetic: Persian numerals throughout, distance computed from province centers instead of live GPS, a Hafez fortune, games that were already familiar. None of that is translation, and all of it changed what the product actually does, not just how it reads.