Halvyn
Flagship projectThe interactive couple app that turns conversations into a game. ~117K lines of code, 1,135 commits, 17 Docker services in prod, 1,196 automated tests.
Why I built it
With my partner, there was a whole layer of small everyday things — preferences, memories, instincts — that you normally only learn from each other over months, sometimes years. I didn't want to wait. Halvyn was born from that impatience: turn mutual discovery into a game to create more complicity, faster. A space where every quiz, every mini-game and every conversation adds another brick to what we know about each other.
Structural technical decisions
A legacy Express server proxying /v1 to a V1 backend in clean architecture (modules / repositories / services / presenters). Lets the monolith migrate to a modern API with no big-bang rewrite and no downtime.
A single client codebase that ships native on iOS, Android and Web with more than 95% shared code — one design system, three platforms delivered.
WebSocket with user / couple / session rooms server-side, and an IndexedDB v3 LWW mutation queue client-side. Both partners play simultaneously and offline mutations (moods, bucket-list) replay deterministically on reconnect.
Five Workers in front of the origin (rate-limiter, showcase-cache, media-CDN, cron dispatch, og-renderer) absorb bursts and public traffic without hitting the API.
The non-trivial challenge
Each partner answers an A/B question independently, reveal only happens when both have answered, match is computed, Love Coins are distributed — and all of that has to survive a mobile disconnect mid-round, a double-answer, a partner quitting the app, or a Worker crashing. Idempotent, with clean state recovery, and mission / badge / streak events firing at the right time with no double-counting. A distributed WebSocket state machine with Postgres persistence and offline reconcile, not just pub/sub.
Lesson learned
If I did it again, I would start on the V1 clean architecture from commit one instead of dragging a legacy Express alongside for months — the /v1 proxy cost more in deploy complexity and mental load than a straight rewrite would have.
Features
Interactive questions between partners
Love Coins, streaks & missions
Games to strengthen your bond
Text messages & voice notes
Shared memories and events
AI-powered compatibility analysis
Secure subscriptions and payments
Web + iOS + Android, 9 languages