Inspiration
The idea behind Playpile is the backlog everyone with a game library already has: dozens of games bought or started, most of them abandoned a few hours in, with no record of why. Was it boring, too hard, or just interrupted by something else? Existing trackers ask for completionist effort: achievements, percentages, playtime logs. That's the wrong tool for someone who doesn't finish things. We wanted an app built for the honest version of that behavior: start a lot, finish some, and always know what to pick back up tonight, rather than one that quietly shames you for not finishing everything.
What it does
Playpile is a backlog tracker, not a completionist log.
- Add a game by searching for it, sharing a link from another app, taking a screenshot of your library, or typing it in by hand.
- The pile reads by cover art, grouped by status: Playing, Backlog, Finished, Dropped. Color is used for exactly one thing: showing status, never anything else, and never a page background.
- Tonight picks one game to play right now instead of scrolling the whole backlog, with a shuffle if it's not the right pick.
- Finishing asks for one honest sentence and a rating, not a review, plus a private note to yourself that never leaves your phone, even when you share the pile with someone else.
- Share or save a pile link to compare your backlog against a friend's: games neither of you has played, games they finished that you never started, and games you've both finished. A shared link also opens as a real page in any browser, no app install needed to see it.
- Share cards turn a finished game or a whole pile into an image you can post anywhere.
- Works fully offline, with gentle local reminders (a release-day heads-up, a weekly recap, a nudge when a game's gone quiet) that don't need an account to work.
How we built it
Playpile is a native Android app, built to feel like it belongs on the phone rather than a website squeezed into an app shape. Everything you add lives on your own device, so the app works fully offline and doesn't need an account to function.
A small backend service handles the two things a phone genuinely can't do safely on its own: looking up games from a public game database without exposing an API key, and hosting a shareable link when you publish a pile. That same backend also serves the plain webpage version of a shared pile, so a friend can open a link and see your backlog without installing anything.
Buying Pro is a single one-time purchase handled through Google Play, using a payments toolkit built for exactly that, so it survives a phone change or reinstall without needing an account of our own. Crashes are reported automatically, but stripped of anything personal before they're sent, no game titles, no notes, nothing from your actual pile.
Challenges we ran into
Saying "no accounts, no user record on any server" is easy. Making it true everywhere, every time, took real discipline. It meant going back through every feature we added and asking the uncomfortable question: does this quietly leak something it shouldn't? The private note you write for yourself, for example, had to be actively kept out of anything that gets shared, not just hidden from view. Crash reports had to be checked to make sure a game's title could never end up in one. Unsharing a link had to actually confirm it was gone before telling you it was safe, instead of just assuming the best.
Keeping the app and the shared webpage feeling like the same product was harder than expected. They're built as two separate pieces, and a game with no cover art needed to show the exact same placeholder color in both places, down to the pixel. Getting two unrelated pieces of software to agree that precisely, for something as small as a placeholder color, took more back-and-forth than we expected for a detail most people will never consciously notice.
The color rules themselves were harder to hold onto than to write down. We decided early that a color could only ever mean one thing (a game's status) and nothing else, no matter how tempting it was to reuse a nice green for something unrelated. Sticking to that across every screen and every edge case meant saying no to a lot of shortcuts that would have been faster in the moment.
Accomplishments that we're proud of
- A tracker with zero accounts anywhere. Not a login screen we skipped for the demo, but a real decision: everything lives on your device, and buying Pro is tied to your Google Play account, not one of ours.
- A pile that's genuinely shareable: a link opens as a real, nicely designed page in any browser, not a wall of raw data or a nag to install an app, for the one moment (showing a friend your backlog) an install would be the wrong ask.
- Bottom navigation that doesn't look like every other app's: four separate floating pieces, the current one showing its name, the rest as plain icons.
- A level of design consistency you can actually check against, not just aim for: minimum touch sizes, color contrast, and clear rules for what loading, empty, and error states are allowed to look like.
What we learned
The hardest part wasn't any single feature. It was making sure every privacy promise stayed true after each new change, not just true the day it was written. That meant going back and re-checking old decisions in light of new ones, because a promise like this can quietly stop being true if only one piece of the app is keeping it. We also learned that a one-time purchase changes how you talk about your paid tier: every feature row has to say what Pro adds, never what the free version is missing, which is a different, more generous way to write a paywall than the usual subscription upsell.
What's next for Playpile
- True bulk-add from screenshots. Right now, scanning a screenshot detects multiple titles but adds them one by one through the search flow. The next step is turning those detected lists into a genuine one-tap bulk import.
- Smarter push notifications. Deciding on push for the Keep Them Coming Back category. Genuinely useful for bringing people back, but it means being upfront and specific with users about the one new thing it would track, rather than adding it quietly.
- Usage-driven scope. After launch: watch how real people actually use it (installs, retention, how many buy Pro) and let that shape where the free and paid line should really sit.
Built With
- cloudflare-workers
- coroutines
- javascript
- jetpack-compose
- kotlin
- room