2026 · 1.9k LOC client
Smereski Apps
A private app store for my own software — live catalog over Tailscale, one-tap sideload, no storefront in the middle.
Smereski Apps is the answer to a boring problem: every game I make has to get onto the phone, and doing that by hand with adb gets old fast. So distribution became its own product — a private store that carries only my software and lives entirely on my own network.
The client is Flutter. On launch it fetches a live catalog from a gateway route over Tailscale; if the network is down it surfaces a retry instead of spinning forever, on an eight-second timeout. Browse is a two-column grid with search and category chips. Each app has a detail page with screenshots, version, and an install button that tracks its own download, installing, installed, and update states.
Install is the whole point. Tap a card, the client downloads the APK to temp storage and hands it to the Android package installer for sideload. An updates screen diffs installed versions against the catalog and offers one-tap upgrades when something ships a new build.
The backend is not a separate service — the store routes fold into the gateway that already runs my agent fleet, serving the catalog and the APK files from the same host. Publishing is a single command from inside any project directory: it builds the release APK, signs it if it has to, uploads it, and upserts the catalog entry. A game finished on Saturday is on the home screen Saturday night.