I built Unspeakable, a digital version of the classic forbidden-word party game Taboo, designed for chaotic in-person play with one phone per team. The idea was simple: physical cards can’t react to what’s happening in the game, but separate connected devices can.
The biggest challenge was the multiplayer architecture. I built a host/client system over WebSockets using Ktor, where one phone acts as the game server and others connect over LAN. Getting state to stay in sync across devices took a lot of debugging. Reusing the host and client logic for the local mode was quite of a hussle. At one point I spent over an hour debugging a stuttering animation, only to realize I’d set my phone’s animation speed to 0.5x ._.
I’m most proud of the UI, it looks really clean and the little details make it feel polished My favourite is the pill-shaped dark/light mode toggle animation.
I never found the right moment to post a devlog, because I always wanted one more feature done first. That’s why they ended up so far apart.
The app ships with ~1.4k English and ~1.4k German cards, a full custom card editor, and bulk JSON import so you can drop in AI-generated decks instantly. Built with Kotlin Multiplatform + Jetpack Compose, runs on Android and Desktop.