Smaller things I build for myself — mostly open experiments living on GitHub.

Kotlin · Jetpack Compose · MapLibre · MIT
Trailscape
Local-first GPS tracking & route planning for Android.
A free, open-source alternative to Strava and Komoot, built natively with Kotlin and Jetpack Compose. Records your rides with crash-safe background GPS tracking, plans routes via BRouter with bike-type profiles, navigates with off-route warnings, imports and exports GPX and works with fully offline MapLibre maps. Reads heart rate, HRV and sleep from Health Connect and turns everything into training plans and a daily readiness score — all local-first: your data stays on your device, no accounts, no cloud, optional self-hosted sync.
View on GitHub ↗
Kotlin · Jetpack Compose · Room
Drops.
A bean memory with dial-in helper for home espresso.
Bought a bean again after a year? Open the app, search, and the recipe and grind setting are right there. Drops keeps a bean library with roaster, roast date and freshness, logs your dial-in attempts (grind size, dose in/out, shot time, sour/bitter/good) and freezes the good one as the bean's recipe — complete with a rotary grind dial like the ring on your grinder. Native Android, local and offline: no account, no sync, no cloud.
View on GitHub ↗
Kotlin · Jetpack Compose · Wear OS
Dottie.
A retro pixel reaction game — one tap decides.
A dot circles a track on its own; tap while it crosses the green zone — the bright center counts as PERFECT and builds a bonus streak. With a rising score the game unlocks twists that remix every round: pulsing zones, drifting zones, a ghosting dot, decoy traps and chained zones. Daily challenge with a shared seed, a sky that cycles from day to night, unlockable dot skins, a Wear OS companion app, spiteful game-over quips, haptic feedback — everything drawn in code, no assets, built natively with Kotlin and Jetpack Compose.
View on GitHub ↗
Kotlin · Jetpack Compose · Navigation 3
PocketPi
Your coding agent's sessions, in your pocket.
A native Android remote for pi, the coding agent running on my Mac. Scan a QR code to pair the phone, then browse shared projects, follow sessions and subagents live, and keep conversations going on the road — quote earlier messages, dictate prompts, attach photos and files, switch models and thinking levels, and get a push notification when the agent finishes or has a question. Everything travels end-to-end encrypted through a small relay; pairings and drafts stay in Android Keystore-backed, no-backup storage, and model credentials never leave the Mac.
Private · lives in the Noah monorepo