Station — my self-hosted second brain

● 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

⚠️ 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.)
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.
✦Capturing thingsOne box, three levels of pushback, and seven other doors in.
✔From idea to donePlans, tasks, calendar: one row in the database, four views.
☾The daily rhythmInbox, meetings, the evening call in my own voice, follow-ups.
◈AI overviewsWhat Gemini and NotebookLM made of Station. One is very funny.
♥WellbeingMedication reminders, meals in plain words, getting outside, my rhythms mined from the house.
▦HomelabThe fleet map, the Chronicler’s why-layer, container updates, backups, certificates.
▣WorkA Microsoft 365 for one: everything about a project in one place, that comes with me between employers.
⚙Helpers and agentsSentinel, Hermes, the Homelab Helper, Backup Guardian: what each may touch, and what it reports.
⟳Station builds itselfThe development board, Station deploying itself, releases judged against the roadmap.
♪Voice, chat and filesStation speaks in my actual voice; chat that keeps what it makes; files that open before they download.
✧What changedThe Ember redesign: a sidebar, a front page that’s a worklist, pins, breadcrumbs.
⌂Family, school and homeThe parts that touch my family, described in words only. No screenshots, on purpose.
➤RufusThe coding cockpit that built almost all of this, and now ships itself.
↗Origins and growthFrom a capture box in April to this. The numbers, charted.
★Vibe-coded: games and sitesEverything else I’ve talked an AI into building, with an honest “how it was built” card each.

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.

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.

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.

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.

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 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.

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:
- knows me without a company owning that knowledge;
- asks me good questions instead of waiting passively;
- doesn’t fragment what I think across a dozen apps;
- plays well with other agents instead of being a walled garden;
- 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.

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.
