1TerraV2
Since June 2025 · Tauri (Rust), Next.js, Mantine
The desktop and Android app at the centre: a dashboard for the LifeUp task tracker, new tasks with their rewards worked out, a chat with the language models, and [REDACTED]. It grew out of an Electron app and then a Tauri app, both begun in 2024.
Private code
2pourterra.com
Since June 2024 · Next.js, Tailwind
This paper. Its Ask column puts questions to the White Book through the language-model backend, and the MfML series comes from the blog backend.
3LLM_BE
Since June 2024 · Python, FastAPI, LiteLLM
One way in to several model providers. It streams answers, keeps chat sessions, and lets a model call tools: read the task list, search the White Book, or remember a fact for later.
4Productivity_BE
Since July 2024 · Python, FastAPI
Where the LifeUp data lives: tasks, skills, history and achievements. Every morning it has a model write up the past week and emails it. It also keeps the error log that the app and the model backend write to.
Private code
5Website_BE
Since September 2025 · Python, FastAPI, Postgres
Serves the blog posts, and [REDACTED]
Private code
6TerraCode
Since March 2026 · TypeScript, Bun
A coding agent, forked from opencode, with a long-term memory, a shell that runs in its own container apart from the machine, and skills it loads when a task calls for them.
Private code
7TerraMCP
Since March 2026 · Python, FastMCP
The agent's toolbox: notes in Obsidian, tasks for LifeUp, the error log, and a look into TerraCode's own sessions and memory, each a tool it can call.
Private code
8LifeUp MCP
Since May 2026 · TypeScript
A bridge that lets an agent read and add tasks on the phone directly, over the home network.
Private code
9Arete Engine
Since May 2026 · TypeScript
The rules for rewards in one place: how much experience and gold a task is worth. The experience formula draws on research into practice and skill.
The front of house
Two things are made to be looked at. Everything else exists to feed them.
1TerraV2
Since June 2025 · Tauri (Rust), Next.js, Mantine
The desktop and Android app at the centre: a dashboard for the LifeUp task tracker, new tasks with their rewards worked out, a chat with the language models, and [REDACTED]. It grew out of an Electron app and then a Tauri app, both begun in 2024.
Private code
2pourterra.com
Since June 2024 · Next.js, Tailwind
This paper. Its Ask column puts questions to the White Book through the language-model backend, and the MfML series comes from the blog backend.
The back rooms
Three small servers, each woken only when called, hold the data, send the emails and talk to outside services.
3LLM_BE
Since June 2024 · Python, FastAPI, LiteLLM
One way in to several model providers. It streams answers, keeps chat sessions, and lets a model call tools: read the task list, search the White Book, or remember a fact for later.
4Productivity_BE
Since July 2024 · Python, FastAPI
Where the LifeUp data lives: tasks, skills, history and achievements. Every morning it has a model write up the past week and emails it. It also keeps the error log that the app and the model backend write to.
Private code
5Website_BE
Since September 2025 · Python, FastAPI, Postgres
Serves the blog posts, and [REDACTED]
Private code
The agents
The newest layer: a coding agent, and the tools written for it.
6TerraCode
Since March 2026 · TypeScript, Bun
A coding agent, forked from opencode, with a long-term memory, a shell that runs in its own container apart from the machine, and skills it loads when a task calls for them.
Private code
7TerraMCP
Since March 2026 · Python, FastMCP
The agent's toolbox: notes in Obsidian, tasks for LifeUp, the error log, and a look into TerraCode's own sessions and memory, each a tool it can call.
Private code
8LifeUp MCP
Since May 2026 · TypeScript
A bridge that lets an agent read and add tasks on the phone directly, over the home network.
Private code
The rules
Every part that hands out a reward asks the same small library what it should be.
9Arete Engine
Since May 2026 · TypeScript
The rules for rewards in one place: how much experience and gold a task is worth. The experience formula draws on research into practice and skill.
Before this
- Streamlit site (opens in a new tab)2024 · became pourterra.comThe site before this one, with a chat that impersonated the keeper.
- myPM and CTk (opens in a new tab)2024Two desktop chats: one fetched tasks through function calls, one looked through the webcam and spoke.
- Electron app2024 · became Tauri appThe first LifeUp desktop app, a Streamlit app packed into Electron.
- Tauri app2024 · became TerraV2The rewrite in Rust with Tauri, which for a while ran a small Llama model on the machine.
Other work
- Image generation with diffusionNVIDIA courseA small diffusion model that learned to turn noise back into pictures of clothing.
- Knowledge tracing2025Predicting whether a student will get the next question right, with an attention model from a 2020 paper.
Earlier work, on GitHub
- Preprocessing for PhaseNet (opens in a new tab)2023Prepares raw seismic records for PhaseNet, the network that picks earthquake arrivals.
- Seismic hazard function (opens in a new tab)2023How likely the ground is to shake harder than a set level within fifty years.
- Horizontal-to-vertical spectral ratio (opens in a new tab)2023Using one station's records to measure how much the soil makes shaking stronger.
- Channels in stratigraphic slices (opens in a new tab)2023An attempt to find channels in seismic slices better than a public neural network. It did not win.
- Siamese network (opens in a new tab)2023A network that learned to recognise one face, the keeper's.