Station — my self-hosted second brain

Station — my self-hosted second brain

The Station logo: a small stylised antenna mark beside the word Station.

● As at 5 September 2026 · 277 architecture decisions · 928 pull requests · 677 AI coding sessions

A most bodacious second brain. Be excellent to each other.

Station catches my half-thoughts, asks the questions a good colleague would, remembers what matters, and turns the ideas that survive into plans I actually finish. It runs on my own hardware, at home. Since I last wrote this page in July it has also taken over looking after my health, my homelab, my work day — and, increasingly, its own development.

It’s named after the character Station from Bill & Ted’s Bogus Journey, for a few reasons:

  • The two creatures together form a superintelligent being.
  • Station builds robot versions of Bill & Ted, that:
    • work autonomously
    • can be controlled by them
An animated clip of the two small creatures called Station from Bill and Ted's Bogus Journey, stacking together to form one being.

⚠️ Station is a showcase, not a release. The source isn’t public. If you want to know more, get in touch.

The four-minute version

Rather watch than read? This is the whole thing, end to end. (Stick around for the part about the evening phone call — there’s a twist.)

A narrated walkthrough of Station — 4 minutes 26, in my own cloned voice, with captions.

Pick a room

Each tile says how long it takes to read — most are about five minutes, a few are longer — and most have a short narrated video. Start anywhere; nothing below assumes you’ve read the others.

◎The grand tourEvery screen, grouped the way the app’s own sidebar is.REFRESHED8 min read▶ video
✦Capturing thingsOne box, three levels of pushback, and seven other doors in.REFRESHED4 min read▶ video
✔From idea to donePlans, tasks, calendar: one row in the database, four views.REFRESHED5 min read▶ video
☾The daily rhythmInbox, meetings, the evening call in my own voice, follow-ups.REFRESHED6 min read▶ video
◈AI overviewsWhat Gemini and NotebookLM made of Station. One is very funny.REFRESHED3 min read▶ watch
♥WellbeingMedication reminders, meals in plain words, getting outside, my rhythms mined from the house.NEW5 min read▶ video
▦HomelabThe fleet map, the Chronicler’s why-layer, container updates, backups, certificates.NEW6 min read▶ video
▣WorkA Microsoft 365 for one: everything about a project in one place, that comes with me between employers.NEW8 min read▶ video
⚙Helpers and agentsSentinel, Hermes, the Homelab Helper, Backup Guardian: what each may touch, and what it reports.NEW10 min read▶ video
⟳Station builds itselfThe development board, Station deploying itself, releases judged against the roadmap.NEW7 min read▶ video
♪Voice, chat and filesStation speaks in my actual voice; chat that keeps what it makes; files that open before they download.NEW7 min read▶ video
✧What changedThe Ember redesign: a sidebar, a front page that’s a worklist, pins, breadcrumbs.NEW3 min read▶ video
⌂Family, school and homeThe parts that touch my family, described in words only. No screenshots, on purpose.NEW2 min read▶ video
➤RufusThe coding cockpit that built almost all of this, and now ships itself.NEW5 min read▶ video
↗Origins and growthFrom a capture box in April to this. The numbers, charted.NEW4 min read▶ video
★Vibe-coded: games and sitesEverything else I’ve talked an AI into building, with an honest “how it was built” card each.NEWgallery
Station's front page in September 2026: a worklist showing today's top three picked tasks, a row of pinned items, clickable counts of what is waiting, and columns for what arrived recently and what is in flight.
Station’s front page in September 2026: a worklist showing today’s top three picked tasks, a row of pinned items, clickable counts of what is waiting, and columns for what arrived recently and what is in flight.

What problem is it solving?

I have a lot of ideas. Most of them are bad. The ones that aren’t bad usually die because I never wrote them down properly, or I wrote them down somewhere I never looked again.

Existing tools either:

  • capture, but don’t think with you — you do all the work of pulling threads;
  • are excellent at exactly one thing — and know nothing about what the others know;
  • want my data, badly — and decide which AI features I’m allowed to have.

Station is what happens when you build the tool you actually wanted, on hardware you control.


The core loop: capture → challenge → decide → do

Every thought takes the same path, and Station does most of the boring bits.

1. Capture it before it evaporates

One box. Type the half-thought and choose how hard you want to be pushed back on: Park (save it, ask me nothing), Triage (one sharp question — the default), or Dig (up to three). Whichever you pick, it saves first and thinks afterwards, so you can close the tab and the questions still arrive.

The Capture screen: a large text box, the Park, Triage and Dig buttons with Triage selected, the expanded optional details showing importance, desired action and timeframe dropdowns, and a rail on the right listing eight other kinds of record to create.
The Capture screen: a large text box, the Park, Triage and Dig buttons with Triage selected, the expanded optional details showing importance, desired action and timeframe dropdowns, and a rail on the right listing eight other kinds of record to create.

Notes, bookmarks, files, recordings, tasks, plans and wiki pages have their own front doors now, and things arrive without me typing at all. The full set is in Capturing things →.

2. The model challenges me

A local model reads the idea, pulls in related context from my memory and my past ideas, and asks the follow-up questions a good co-worker would — "is this a real requirement, or just frustration with your current setup?" I answer in plain text on the idea’s own page, and Station scores how complete the idea is so it knows when to stop nagging.

That score is deliberately dumb, by the way: five boxes, 20% each — a title, a body, an importance, a desired action, a timeframe. 100% means the boxes are filled in, not that the idea is any good. That’s my job.

One idea open in full, showing the body, the model's follow-up questions with my typed answers underneath, a completeness breakdown, and buttons to research it or promote it to a plan or task.
One idea open in full, showing the body, the model’s follow-up questions with my typed answers underneath, a completeness breakdown, and buttons to research it or promote it to a plan or task.

3. Triage decides what each thing becomes

The queue serves up whatever is still undecided, sharpest-first — and "sharpest" combines how unfinished an idea is, how important it is, and how long it’s been sitting there. An old, vague, important idea outranks a fresh urgent one, because the queue exists to surface what’s been waiting on a decision.

Four buttons: keep and challenge it, promote it to a plan, send it to research, or bin it. Binning is a soft delete — it’s recoverable for 30 days.

The Triage queue: a list of undecided ideas, each with chips showing whether it has an importance, an action and a timeframe, above four buttons to keep and challenge, promote to a plan, send to research, or bin it.
The Triage queue: a list of undecided ideas, each with chips showing whether it has an importance, an action and a timeframe, above four buttons to keep and challenge, promote to a plan, send to research, or bin it.

4. Do the work

A plan is a sequence of tasks with a finish line. It has no priority or due date of its own — both are borrowed from its unfinished tasks, so a plan’s deadline moves on its own as you tick things off. That isn’t a bug; it’s the next real deadline.

The Plans page: cards for each plan with a progress bar, a borrowed due date, and a status word.
The Plans page: cards for each plan with a progress bar, a borrowed due date, and a status word.

Plans, boards, buckets, the calendar and the Work summary all read the same rows. The whole back half is in From idea to done →.


It runs my day

The big shift since last year: Station stopped being a place I go and became something that shows up.

  • The front page is a worklist. Since 11 August 2026 it opens on what’s actually open — counts you can click, up to three things you’ve said lead the day, and anything you’ve pinned there yourself.
  • Inbox triage. Station reads my mail, judges each message, and only ever acts on two verdicts by itself: delete and decline — and only when the message is the routine version of something it already knows. Everything else is suggested, with the reason and a confidence attached.
  • Meeting capture. Meeting audio goes through Whisper locally, and Station extracts one thing only: the commitments I made out loud. Since 28 August 2026 it also matches each recording to the actual meeting in my calendar, so it knows whose project it belongs to. (There’s also a swear jar. I’m not proud. It has tallies.)
  • The evening call. On weekday evenings my phone rings with a full-screen call from Station, speaking in a clone of my own voice. It interviews me about the day, writes the journals, and captures the work I did but never tracked — after I approve it out loud.
  • The follow-up loop. Every feature that ships is registered with a test plan and brought back at 2, 7, 14 and 30 days: did you actually use this? Nothing I build gets to quietly rot — including Station’s own features.
The Daily debriefs page: one row per evening call, each dated and carrying its state as a shape and a word — pending, reviewing, dismissed, expired — with the number of proposals it produced.
The Daily debriefs page: one row per evening call, each dated and carrying its state as a shape and a word — pending, reviewing, dismissed, expired — with the number of proposals it produced.

The whole daily pipeline has its own page: The daily rhythm →.


What it looks after now

In July this page was about thinking and planning. Four whole areas have grown since, and each has its own page rather than a paragraph here:

  • My health — medication reminders that know which days, meals logged in plain words after the fact, whether I got outside, and the shape of my day mined from the house’s own sensors. Built through August 2026.
  • The homelab — the fleet Station watches over got its own menu on 10 August 2026: a live map, a Chronicler that records why a thing is set up the way it is, container updates you can actually work through, backup health, and certificates that renew themselves.
  • Work — a workspace per engagement, holding its chats, files, meetings, notes and its "state of play": the things that are actually settled, each with the evidence they came from.
  • Itself — Station now runs the board that tracks its own development, reads back the week’s coding sessions to tell me what keeps going wrong, judges releases against its own roadmap, and deploys itself.

Writing in my voice — Draft Studio

Draft Studio turns Station into a ghost-writer that actually sounds like me.

I give it a topic and a brain-dump. Station grounds a brief in my own writing — past posts plus transcripts of my talks and videos — and a coding agent drafts the piece into a private repo, where every revision is a commit.

What makes it more than "ask an AI to write a blog post":

  • It’s grounded in me, not the internet. The structure, vocabulary and opinions come from things I actually published.
  • You can teach the voice. When a draft gets something wrong I record a rule, and it constrains every future draft, not just this one.
  • Revise, don’t restart. Feedback refines the same piece, with the full history kept.
  • It reconciles with reality. Once I publish, Station diffs the draft against what I actually posted. The edits I made by hand are the strongest possible signal of my real voice, and they go straight back in.
Draft Studio: a drafting brief grounded in my own posts and talk transcripts, with actions to copy out, revise, and teach the voice a rule.
Draft Studio: a drafting brief grounded in my own posts and talk transcripts, with actions to copy out, revise, and teach the voice a rule.

Using it from other tools

Station exposes an MCP server over both transports the spec defines, so other clients — Claude Desktop, Open WebUI, LibreChat — can search my ideas, look up memory facts, query my homelab inventory, and (with a write token) leave findings behind. Since 21 July 2026 an agent can also scope a search to one area of life, so a work question doesn’t drag my homelab into the answer.

It’s in my pocket too: a native Android app with its own screens for today’s work, triage, inbox, capture (including voice), search and a grounded chat. It follows the same design as the web app. Push notifications deep-link straight to the thing that needs me, and the evening debrief arrives as a full-screen incoming call. Deliberately home-network-only: no cloud push relay, because the whole point is that my data doesn’t leave the house.


What this isn’t

Worth being blunt about, because "AI second brain" could mean almost anything.

Where my data goes. Everything Station holds lives in a database on a machine in my house. Nothing is synced to a vendor, nothing trains anyone’s model, and there is no account to delete because there’s no company to have one with. The work that reads my most personal material — the challenge engine, mail classification, transcription, the search embeddings, the voice that calls me — runs on my own hardware on local models. Conversational chat is the exception and I’ll say so plainly: it reasons with Claude, over an API, and falls back to the local model when Claude isn’t reachable. A badge on every reply says which one answered.

What these pages never show. No IP addresses, no credentials, no API keys, no client names, and nothing about my family, my kids’ school or my health records. Client names on any work screenshot are substituted with fictional companies, and every image is checked against a redaction list before it goes anywhere near this site. Where a screen was too personal to redact honestly, I’ve written about it in words instead — that’s why Family, school and home has no pictures at all.

What Station won’t do on its own. Chat can’t run commands on my machines. The inbox only ever deletes or declines by itself, never replies. Facts it learns about me land as pending until I accept them. Agents that touch the real world are on written lists of what they’re allowed to do — which is the whole subject of Helpers and agents.

And it isn’t a product. There’s no download, no waitlist, no beta. It’s one person’s tool, shown honestly.


How to follow along

  • My GitHub profile is public, and the vibe-coding write-up there is where the cadence numbers and the weekly chart live.
  • The code is private. Station’s repository lives on my own Git server at home, along with the coding agent that builds it. These pages are the public face.
  • The vibe-coded gallery has the games and sites — every one built by conversation, each with an honest card showing the time, the models and the cost.
  • Or just say hello.

Why I built it

I wanted a tool that:

  1. knows me without a company owning that knowledge;
  2. asks me good questions instead of waiting passively;
  3. doesn’t fragment what I think across a dozen apps;
  4. plays well with other agents instead of being a walled garden;
  5. runs on my own hardware.

Of the five, the surprise is number two. The capture box was the easy part. The thing that changed how I work is a piece of software that pushes back.

If that resonates, hi 👋 — get in touch.


What’s next

The roadmap and changelog live inside the app, and they drive everything above. Two things I said were "next" in July have since shipped: the overnight thinker (it’s called Hermes, and it has been continuing my thinking since 1 August 2026) and delegation — a task can now be assigned to an agent that runs on a schedule, and that agent can tick it off.

What I’m reaching for now, as at 3 September 2026:

  • ○ Station renewing its own sign-ins. One of its cloud logins expired in July and stayed dead for 29 days while everything quietly fell back to the local model. Station now detects that within 15 minutes. Fixing it unattended is the next rung, deliberately held back until the detection has proven itself in the wild.
  • ○ A "build this" agent. When an idea looks buildable, gather the configs, repos and notes Station already holds and open a conversation proposing how to build it.
  • ○ Feedback that actually changes what gets retrieved. Station has been collecting thumbs-up and thumbs-down on its answers for months and nothing reads them yet.
  • ○ A real graph database, if and when the knowledge graph outgrows what it’s on.
The Progress page: Station's in-app roadmap and changelog, listing shipped phases and recent entries.
The Progress page: Station’s in-app roadmap and changelog, listing shipped phases and recent entries.

Under the hood (for the curious — this is a functionality showcase, so the tech lives down here)

Is it RAG? Sort of, but that’s not what it is. Station has the RAG-shaped pieces — a vector store, embeddings on capture, retrieval grounded in real entities — but the source of truth is a structured database, memory facts carry a validity window nobody calls "RAG", and the model is a participant in a workflow (asking questions, proposing plans, extracting facts) rather than a chatbot answering one-shot questions over a corpus. RAG is a feature of Station, not its identity.

The stack:

  • Backend: Python 3.12, FastAPI, SQLAlchemy, APScheduler
  • Storage: PostgreSQL as the source of truth, Qdrant for vectors
  • Frontend: server-rendered templates + HTMX + Tailwind — no single-page app, no build step, no JavaScript framework
  • Design system: Ember — warm graphite, one accent, a focus ring that is never the accent colour, and status conveyed by shape and word rather than colour (I’m colour-blind)
  • Models: local-first via LocalAI for challenge, classification, extraction and embeddings; Claude for conversational chat, with the local model as the fallback
  • Speech: Whisper for transcription; a locally-hosted clone of my own voice for the evening call
  • Research: GPT Researcher, running locally
  • Sign-in: password, mandatory two-factor, and passkeys; every page is closed unless you’re signed in
  • Agent surface: an MCP server over SSE and Streamable HTTP, with per-write-token authorisation
  • Mobile: a native Kotlin and Jetpack Compose app over a versioned API, with device pairing and home-network-only push
  • Deployment: Docker Compose on a single home server, deployed by Station itself

As at 5 September 2026 that’s 277 architecture decisions, 177 database migrations, 92 screens and 36 written help pages. One codebase, one app, one database. No microservices.