Work

Professional work. Each one: the problem, what I built, and what changed.

Inkla — bilingual notes with an MCP server for agents

Problem
Note apps treat right-to-left text as an afterthought and AI access as an export, so an agent editing a note clobbers what the person is typing.
Solution
One Cloudflare Worker, a Durable Object per account holding a Yjs CRDT, and D1 as a rebuildable read model. Browser, desktop, Android and MCP clients all write through the same document.
Result
Agent edits merge with live typing, account deletion provably erases 13 tables plus history, and 645 unit tests and 29 end-to-end audits gate every deploy.
Case study on Lytron →

Chogan — offline games, reproducible Android builds

Problem
Ship the same app through GitHub Releases and F-Droid, which normally re-signs apps with its own key, without the two channels drifting apart.
Solution
Byte-for-byte reproducible builds with a Gradle-only chain (no Node), one version constant driving every target, and CI that inspects the built APK rather than its configuration.
Result
F-Droid ships the identical signed APK, the app declares one permission (vibration), and 318 automated checks run with no server, database or paid service.
Case study on Lytron →

Nabz — uptime monitoring that only pages when zones agree

Problem
A monitor checking from one place can't tell a real outage from a bad network path, so it either pages on noise or gets tuned until it stays silent.
Solution
Go workers in each zone with their own Valkey queue, and a central evaluator that only opens an incident when N of M zones agree. The whole fleet is provisioned from nothing by GitHub Actions.
Result
A production fleet of 3 servers for about €19 a month, benchmarked at roughly 4,500 checks per second, with 6 alert channels and a dead-man's switch for silent zones.
Case study on Lytron →