Work
Three applications, built and launched solo, with AI agents as the build team. What follows is how they were built, because that is the part that transfers. None of this is client work — all of it is mine, shipped and running.

Yes we kanji — kick-off to a live prototype in one day
A web app for memorising Japanese kanji.
Nine commits, all on 23 September 2026. Deployment and cross-device testing were mine, on Ubuntu, Android and iPhone browsers.
- 1 daykick-off to live
- 1,987jōyō kanji
- 6decision records
The decision worth naming
The app makes no network calls at runtime. The kanji database is generated at build time from KANJIDIC2, and all 100 audio files are pre-generated into 2.4 MB of committed MP3s rather than synthesised per request. That is why it survives on free-tier hosting. Six Architecture Decision Records, each recording what was rejected.
Live demoSource
gengiscan — a vision-LLM pipeline running in production
A Discord bot that turns a phone photo of a handwritten page into structured Markdown, committed straight into the user's GitHub notes repository.
April 2026, 11 modules, deployed on Railway. The repository is private, so there is no link.
- 2 dayssolo build
- 1,874lines of Python
- $0.003per page
The decisions worth naming
- A/B testing showed that the full OpenCV tonal chain — shadow removal, denoise, CLAHE, sharpen — amplifies paper texture into speckle and hurts vision-LLM accuracy. The default preprocessing is therefore deliberately minimal: perspective-correct and deskew only. A measured decision, not a stack preference.
- Messaging apps strip EXIF, so phone photos arrive sideways, and rotated handwriting makes a vision model hallucinate wholesale. A 480-pixel thumbnail is sent in all four rotations and the model picks the upright one, at about $0.003 per page.

ChoCacao — build time against run time
A web app that finds the hottest and coolest communes in metropolitan France for any hour in the week ahead.
Built solo in June 2026.
- 3 dayssolo build
- 2,036grid points
- 12decision records
The decision worth naming
The expensive work happens once, offline. At build time a 25 km grid over France (2,036 points) is reverse-geocoded through geo.api.gouv.fr into about 1,160 sampled communes. At run time the app loads that prebuilt index, fetches hourly temperatures from Open-Meteo in batches and caches daily, so the request path stays cheap. Twelve Architecture Decision Records, numbered 0001 to 0012.
Live demoSource
The method is the transferable asset
Twelve decision records in ChoCacao, six in Yes we kanji: two independent projects, two months apart, both writing down the alternatives they rejected. One repository with ADRs is a habit; two is a method. When AI agents write most of the code, the decision record is what survives the session — and what a client still owns after I leave.
Beyond my own products
A production platform, built from scratch. For the venture I co-founded I stood up the whole thing: OVH compute, a Railway-hosted database, Prefect orchestration, Argo CD and GitOps continuous delivery, GCP, VPN, multi-tenant Streamlit dashboards. I led the technical build, coordinated a team of five, and built an in-house team of AI coding agents that turns one command into a deployed forecasting pipeline for a new market.
Applied research, for a US client (name withheld). Consistency models and neural operators for diffusion-based image generation, aimed at cutting sampling steps and training cost. Research, not a shipped system: it is here for the depth, not the delivery.
Book 30 minutes