Inspiration
I follow way too many gaming channels. Every week some video convinces me I need to play something, I think "I'll remember that," and I never do. Meanwhile my actual backlog sits across Steam wishlists, a notes app, and pure vibes. QuestLog is my fix: a place where a game goes in the moment I hear about it, and a way to actually pick something on a free evening instead of scrolling storefronts for 40 minutes and going to bed.
What it does
QuestLog is a game backlog tracker. You search any of 500,000+ games (IGDB), save it in two taps, and sort your pile into Wishlist / Playing / Beaten / Dropped. The fun part is closing the loop:
- Backlog roulette — fling a wheel and let it pick tonight's game. Filter by mood or by how long a game takes to beat, so a work night doesn't hand you an 80-hour RPG.
- Pile of shame — a live counter of your unplayed hours. Mine says 395. It hurts.
- Rate what you beat, write a one-line verdict, and share generated cards (beat-it card, top 10, year wrapped).
- Browse trailers, screenshots and similar games without leaving the app.
Free up to 15 games; QuestLog Plus (annual with 7-day free trial, monthly, or lifetime via RevenueCat) unlocks unlimited library, full stats, all share templates and roulette filters.
How I built it
Kotlin Multiplatform + Compose Multiplatform, one shared codebase for iOS and Android — same UI, same SQLDelight database, same Koin graph. IGDB (via Twitch OAuth) powers search, covers, time-to-beat and the Discover shelves. RevenueCat (purchases-kmp) handles the paywall on both stores. The app ships in 17 languages.
Challenges
- My original games API died mid-build. Not slowed down, died — DNS to nowhere. Swapped the whole data layer to IGDB in a day, which the repository seam made survivable.
- Embedded YouTube trailers are cursed. A raw iframe renders a black void in a WebView; the IFrame Player API finally worked, and some publishers disable embedding entirely, so there's an escape hatch to the YouTube app.
- Compose Multiplatform renders Android-style
\'escapes literally. Found that one on a device screenshot that proudly said "Tonight\'s quest." - Getting the spin physics right: fling velocity, exponential decay, a tick per segment. Way more tuning than expected for a wheel.
What I learned
That a shared Kotlin codebase can genuinely ship a polished app on both stores, and that the last 10% (store metadata in 17 locales, IAP setup, RTL layouts) is its own project.
What's next
Steam import, HowLongToBeat-style community times, and wrapped cards for end-of-year. Also actually beating Elden Ring instead of tracking it.
Log in or sign up for Devpost to join the conversation.