Skip to main content

Blog

Build notes

Write-ups about things I built and still run: two browser games, a Telegram agent that has been in the same group chats since 2015, and a dashboard for a fleet of robot mowers. What was built, how, and what went wrong along the way.

Sort by
The White Stair in Rainroam, under a RevenueCat Shipaton 2026 badge: 2nd place, Best App for Galaxy
RevenueCat Shipaton 2026 · 2nd place

Rainroam: one action RPG, drawn by two renderers

A souls-lite adventure for phones, played with one thumb, that switches between soft 3D and pixel art mid-fight. 2nd place for Best App for Galaxy at RevenueCat Shipaton 2026, a hackathon with more than 28,000 participants. Out on the web, Galaxy Store and the App Store, and four of its scenes run live in the post.

TypeGPUWebGPUPhaserCapacitorRevenueCat
Orb Knight facing a mechanical castle on the game title screen
Gamedev.js Jam 2026 · 6th in Gameplay

Orb Knight: a 3D browser roguelite in 13 days

A machine knight with a sword, a gun and a chargeable laser, cutting its way out of a foundry: 6th in Gameplay and 12th overall of 483 ranked jam entries. Build log, scores and live WebGL scenes from the game, embedded in the post.

Three.jsThrelteRapierSvelteKitWeb Audio
Architecture diagram for the MowFleet operations dashboard and AWS services
Hobby-freelance project

MowFleet Control Center: operating an autonomous mower fleet

A dashboard that shows whether the robots mowed the site: a Next.js app and a serverless AWS pipeline turning Husqvarna fleet data into coverage, utilization, errors, live warnings and reports.

Next.jsServerlessAWS LambdaDynamoDBFleet data
Architecture diagram for the Telegram agent and its asynchronous workers
Personal build · since 2015

Telegram agent architecture: from commands to asynchronous workers

Eleven years of the same bot: how a small image-search webhook became a routing-only ingress with FIFO queues, idempotent workers, a fail-closed authorization gate and a gated agent, in the same group chats throughout.

AgentsAWS LambdaSQSIdempotencyTools