← Back to the tea house

Projects

Things I've built. The first two are where most of my time goes — they run on your own machine, so the way in is the repo.

Long-form 2026 building

Wordhord

a local-first AI language-learning platform

A per-word, per-skill, evidence-based map of what you actually know — and the classic techniques (graded reading, shadowing, cloze, Pimsleur-style audio) generated fresh against it, about things you actually care about. Japanese is fully built; Korean, German and Spanish generate their own materials on first start.

The Chat

A teacher that remembers you and never interrupts. Every message earns a rewrite card — mistakes get fixed, clean messages get one reachable step above your level.

The Hoard

Every word you master, with receipts: tap any word, anywhere, ever, and see what the app believes about it and why.

Honest about failure

Where a capability failed its audit — pitch accent at 60% cross-model agreement against a 95% bar — the room says so instead of shipping unverified data.

The chat, mid-lesson

Runs on your machine · your keys · no cloud, no account, no telemetry

PythonDeepSeekElevenLabsFSRSlocal-first
READ THE SOURCE ↗
Long-form 2026 playable, all core mechanics in

LLM Monster Hunter

every monster written, painted, and refereed at play time

The archetypal creature-catching adventure, except no creature exists before you meet it. The code only manages context and stores data — the AI does the storytelling, the balancing, and the refereeing. Where most games ship gigabytes of assets, this one ships two API keys.

Word ladders, not HP

The one rule the whole architecture obeys: the LLM only ever picks words, Python owns every number. Combat state is a position on a ladder from fresh to incapacitated.

Monsters that remember

Battles, conversations, defeats and journeys persist across runs — a monster you beat can come back hostile, friendly, or wary, and evolution repaints use the old art as reference so it stays recognizably itself.

You can just say things

Type a free-text action in battle and the referee decides whether it is possible. Recruitment is negotiation: monsters join by their own will, or talk, plead, and flee on their own turns.

Monsters painted at play time

Windows 10/11 · one double-click setup · bring a DeepSeek key

PythonFlaskReactDeepSeekGeminiSSE
READ THE SOURCE ↗

Playable in the browser

Weekend-scale experiments. These you can just click.

2026 playable

Armies of Gielinor

a game that died in 2018, rebuilt from screenshots

Jagex shipped this turn-based strategy game on FunOrb; FunOrb died in 2018 and took it with it, leaving wiki pages and a handful of screenshots. Claude rebuilt it from those — every sprite and sound generated fresh, no original assets. It ships with an in-browser content editor: click anything in a running match and you are editing that exact thing. A fan tribute, not affiliated with Jagex.

gamedevagentsgauntlet loopcontent editor
The recreation, mid-match
2026 proof of concept

BLACKWATER

cave-diving zombies, built in a weekend

Black Ops zombies, except you are cave diving. Procedural cave graph, a full in-game level editor, and 58 commits across four days. All audio — sound design, voice lines, music — came out of the ElevenLabs API.

Three.jsgamedevElevenLabslevel editor
Descending the flooded site
2026 finished

Grind & Grimoire

a Venice Beach wizard story

A skateboarding wizard with a 2 AM open-mic slot and no poem written. Grind anything with an edge, fireball the fiends, buy drip for compliments that inflate an EGO stat your wizard resents. One prompt, one evening, everything procedural.

Three.jsone-shotElevenLabs
The boardwalk, before the open mic