A·BT // anthonybt.com

03 — PROJECTS

Things I build after hours

Each of these started as a real problem — mine, or someone close to me — that no product quite solved, and each is an excuse to learn a stack I don't use at work. Click one to open it.

// SEVEN_THINGS_ON_THE_BENCH_AND_ONE_IN_THE_ATTIC

P/01

Heimdall

ON-DEVICE AIMCP
A gatekeeper between cloud and local AI — sends the mechanical, token-heavy work to models running on my own machine.
IN DAILY USE
FIG.01 — DASHBOARD — MEMORY BUDGET & OFFLOAD, MODELS AVAILABLE

// WHY_I_BUILT_IT

Coding agents are brilliant and expensive, and most of what they do is typing rather than thinking. Heimdall is the switchboard: an MCP server that discovers what Ollama and LM Studio are serving, routes the boring jobs there, and hands back propose-only diffs so nothing touches a repo without review. In Claude Code it's a /offload skill — the mechanical work goes local, and my Claude subscription goes a lot further.

// THE_INTERESTING_BIT

It has quietly become the local AI server for everything else. Freyr, my finance app, runs its AI here so the numbers never leave the laptop, and open-source coding harnesses like DeepSeek Harness and Opencode run on it fully offline. Every run gets rated — used as-is, fixed, rewritten, discarded — so the routing learns which local models actually earn their keep on this hardware.

STACK MCPClaude CodeOllamaLM StudioDS4DeepSeek HarnessOpencode Heimdall — guardian of the bridge between worlds
P/02

Mimir

AI MEMORYAGENT
A personal AI with a memory it maintains itself — a private wiki that grows and corrects itself every time we talk.
IN DAILY USE
FIG.02 — A MORNING WITH MIMIR — DEMO DATA, ALAN PARTRIDGE'S INBOX

// WHY_I_BUILT_IT

Plenty of assistants remember things now, but none of them build a real working picture of my life — who people are, what I've committed to, where I'm meant to be — and use it to help before I ask. I wanted something always on, like OpenClaw, but with control over exactly how it handles my email, calendar and memories. So Mimir keeps a versioned markdown wiki per “Space” — work, home, a project — edits it live as we talk, and shows every change as a card in the conversation that I can undo.

// THE_INTERESTING_BIT

The useful part is joining the dots. It reads TfL's travel alerts against the routes my calendar says I'll take that day, and only mentions the delays that affect me. It flags the newsletters that mention topics I actually care about and quietly files the rest. Before I accept an invitation, it tells me what it clashes with. And every night it dreams: a pass that consolidates the day, links orphaned people and projects, fixes contradictions at the source, and queues at most three questions for the morning. Memory that isn't curated rots; this is the gardener.

STACK Gemini APIGmail APIGoogle Calendar APIFirestoreCloud Run Mimir — keeper of the well of knowledge
P/03

Thor

VOICE AIACCESSIBILITY
A speaking aid for the iPad that listens to the conversation and suggests what to say next, so its user can take part again.
IN INITIAL TRIALS
FIG.03 — ON THE IPAD — CONVERSATION MODE, SPEAK SCREEN

// WHY_I_BUILT_IT

I built Thor for a family member who can no longer rely on their own voice. Speaking aids tend to offer a board of stock phrases, and stock phrases don't respond to what the other person is actually talking about — by the time you've typed a real answer, the conversation has moved on. Thor listens, and borrows the best of next-word prediction: replies to what was just said, whole-sentence completions after a word or two, all in the way they'd say it. The aim is simple — to be in the conversation again, not a beat behind it.

// THE_INTERESTING_BIT

The hard part is latency, not AI. Phrases are rendered ahead of time and play in under 100 ms, suggested sentences are pre-rendered before they're tapped, common word libraries download for offline use, and if the network drops the iPad's own voice takes over so a tap never falls silent. Suggestions come from Gemini 3.8, shaped by the time of day and what Thor knows about its user, and a single keyword — doctor's surgery, chess, supermarket — grows a whole scenario library of phrases. That context syncs across phone, tablet and laptop. One firm rule: the AI only listens. It suggests, they choose, and nothing is ever said that they didn't pick.

STACK Gemini 3.8Gemini TTSGemini Live APIReact PWACloud RunVertex AI Thor — god of thunder — never short of a voice
P/04

JiaYou

LANGUAGEVOICE AI
A Mandarin tutor for the Tube — spaced-repetition flashcards, short AI-generated podcasts, and a live voice tutor.
IN DAILY USE
FIG.04 — ON THE PHONE — SPLASH, TUTOR, PODCAST, VOCAB

// WHY_I_BUILT_IT

I'm learning Mandarin and nothing fitted a 40-minute commute underground. JiaYou schedules flashcards with FSRS and turns today's BBC News feed — or any topic I choose — into three-to-five-minute podcast episodes that reuse my key vocab and end with a quiz. When there's signal, it holds a real-time spoken conversation that hears tone, hesitation and stress rather than transcribing them away, in scenarios built from the words I've just mastered. A kid mode swaps pub chat for playground talk, because my eight-year-old son uses it too.

// THE_INTERESTING_BIT

The live tutor uses barge-in audio, so you can interrupt it mid-sentence like a real person. Behind it sits a lesson-planner agent that tracks progress against the lesson's goals and drip-feeds context to the teacher model, so it can't accidentally give the answers away. Everything except the live tutor works offline and syncs when it can — a good reminder that the hard part of a language app is never the AI. It's the service worker.

STACK Gemini Live APIFSRSOffline PWA JiaYou — 加油 — “add fuel!”, a cheer
P/05

Freyr

FINANCELOCAL-FIRST
Household finances as a decision engine — encrypted, local-first, and built to answer “what if?” rather than “what was?”.
IN DAILY USE
FIG.05 — DEMO DATA — ALAN PARTRIDGE'S HOUSEHOLD, NOT MINE

// WHY_I_BUILT_IT

Every finance app wants your bank credentials and gives you a budget. I wanted a faithful record of real balances and a way to model the big calls — starting a company, moving house — as saved, comparable scenarios. It starts with a monthly snapshot ritual: net worth over time, across accounts and currencies.

// THE_INTERESTING_BIT

The interesting part is the statements. I drop in bank and card statements; parsers read them, rules file the familiar payees, and a local model served through Heimdall categorises whatever the rules can't — fully offline, so no bank data ever goes to the cloud. From that it works out the real monthly and annual recurring costs, tracks spending against budget, and projects where savings are heading. Money is stored in integer minor units with no floats anywhere, the database is encrypted with SQLCipher and unlocks with Touch ID, and nothing leaves the laptop. Also my excuse to build something fast and local in Rust.

STACK RustTauriSQLCipherHeimdall Freyr — god of prosperity
P/06

Völund

ROBOTICSVISION
A desktop robot arm learning to build tessellations — show it a photo of a pattern and it assembles it from wooden tiles.
IN DEVELOPMENT
FIG.06 — THE MYCOBOT 280 (PHOTO: ELEPHANT ROBOTICS) · DASHBOARD — CHAPTER 5, PICK-AND-PLACE

// WHY_I_BUILT_IT

I've wanted robots on construction sites since my Arup days, and the only honest way to understand why that's hard is to make a small one do a small job. Völund is a six-axis myCobot on the bench, driven from my Mac, working through a chapter-by-chapter path: a safe workspace, teach-by-hand positions, a suction cup, pick-and-place, then an overhead camera.

// THE_INTERESTING_BIT

The rule is AI only where it earns its place. Tile detection, calibration and motion are classical OpenCV and geometry; a local vision model reads the reference photo into a pattern spec and a lighter one checks each placement as it goes. Assembly is a planning problem long before it's an AI problem.

STACK myCobot 280pymycobotOpenCVGemma 4LM Studio Völund — the smith of Norse myth
P/07

Huginn

MACOSOPEN SOURCE
Menu bar screenshot markup for the Mac — Ctrl+Space, drag, draw a red box, Space to copy. Under five seconds, no toolbar.
IN DAILY USE

// WHY_I_BUILT_IT

Most of my screenshots are “look at this bit” shares into Slack, Notion and email, and the built-in macOS markup takes too many clicks to get there. The Windows Snipping Tool was the benchmark: one shortcut, one drag, mark it up, gone. Huginn copies the marked-up image to the clipboard, saves a PNG and closes, all from the keyboard.

// THE_INTERESTING_BIT

The discipline was in the non-goals: no colours, no thickness, no arrows or text — a red box, a pen and undo. A native Swift app written with Claude Code in an evening, using macOS's own crosshair for capture rather than reinventing it. The fiddliest part wasn't the drawing; it was keeping Screen Recording permission across rebuilds.

STACK SwiftAppKitSwiftUIXcodeGenClaude Code SOURCE ON GITHUB ↗ Huginn — Odin's raven of thought — flies out, brings back what it saw
P/08

AntWeb

HTML 3.2GEOCITIES
My first website, hand-typed in Notepad at twelve from a library book on HTML — the first kid at school to have one.
RETIRED
FIG.08 — MESSAGE BOARD & VOTING POLL — GEOCITIES, C.1997

// WHY_I_BUILT_IT

Someone had put a book about HTML in the school library, so I read it and typed the tags into Notepad until a page appeared. It went up on GeoCities, before Yahoo bought it, with a message board, a guestbook, a voting poll and a home button that was an arrow I drew myself. Chris from my class had a rival site; the poll was there to settle it.

// THE_INTERESTING_BIT

The instinct hasn't changed in thirty years: find a real problem, learn just enough to build something, put it in front of people and ask what they think. The tools have improved. The animated GIFs, I'd argue, have not.

STACK NotepadGeoCitiesAmazing Forums AntWeb — the exception to the naming rule — I was twelve

Of the seven live ones, Huginn is on GitHub; the rest are private repos. Six I built for my own problems and one for someone close to me; five are in daily use, Thor is in its first trials and the robot is still learning. Ask me about any of them on LinkedIn.

// ON_THE_NAMES Norse myth, mostly — the guardian of the bridge between worlds, the keeper of the well, the god of thunder, the god of plenty, the smith, Odin's raven. Two exceptions: JiaYou — 加油, literally “add fuel!”, what you shout from the sidelines — and AntWeb, which I named at twelve.