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

- Kotlin
- Jetpack Compose
- MapLibre
- MIT
Trailscape
Tells you what to ride today — and builds the loop for it.
A training companion for gravel and road bikes. Your watch's resting heart rate, HRV and sleep become a daily readiness score, the plan says what's due, and Trailscape builds a matching loop from your front door. Crash-safe GPS recording, Bluetooth sensors, offline maps — local-first, no account, no subscription.
View on GitHub ↗
- Kotlin Multiplatform
- Compose
- SQLDelight
- Ktor
Drops.
A bean memory with dial-in helper for home espresso.
Bought a bean again after a year? The recipe and grind setting are right there. Drops keeps your beans with roast date and freshness, logs dial-in attempts and saves the good one as the bean's recipe. A Kotlin Multiplatform app with an optional Ktor sync server — fully offline without an account.
View on GitHub ↗
- Kotlin
- Jetpack Compose
- Wear OS
Dottie.
A retro pixel reaction game — one tap decides.
A dot circles a track; tap while it crosses the green zone, hit the bright center for PERFECT streaks. Rising scores unlock twists like pulsing, drifting and chained zones. Daily challenge, unlockable skins, a Wear OS companion — everything drawn in code, no assets.
View on GitHub ↗
- Kotlin
- Jetpack Compose
- Wear OS
PocketPi
Your coding agent's sessions, in your pocket.
A native Android remote for pi, the coding agent on my Mac. Pair by QR code, follow sessions and subagents live, reply with text, voice, photos or files, and get a push when the agent finishes or has a question. A Wear OS app brings it to the wrist; everything is end-to-end encrypted.
View on GitHub ↗
- Kotlin
- Custom pixel renderer
- Android
Mephi the Daemon
A troll platformer where the devil deals the traps.
Bevel, a tiny data packet, just wants to reach the door, and Mephi, the croupier of hell, deals a trap card against him at every step. 144 levels descend from a hellish basement through a data center down to the circuit board. Hell-CRT pixel look, synthesized sound, an 80 KB APK.
View on GitHub ↗
- Kotlin Multiplatform
- Compose
- OpenGL ES
Birdy
Tap. Dodge. Fly through — a one-finger arcade flyer in 3D.
A low-poly 3D arcade flyer: tap to flap, swipe to switch between three lanes, each with its own gap in the pipes. Gaps shrink and move, cacti pop out in time with the music, zones change as you go. Kotlin Multiplatform with a hand-written OpenGL ES renderer.
View on GitHub ↗
Mini Networks
Mini Metro, but you're wiring the internet.
Devices request services, you lay the cables, from ISDN to fiber, and keep bandwidth and ping in check while excavators cut your lines and servers overload. Five sceneries from the late '90s to 2030 on an isometric map, rendered in Kotlin with OpenGL ES, no game engine.
View on GitHub ↗