bain.monster turns a private git repo of plain markdown into the interface you actually plan from. The AI's job is editorial: read everything, keep what matters, say what's next. User count: one, working as intended.
The mechanism is deliberately plain: git is the database, markdown is the schema, and eleven views render straight from the repo — journal, projects, decisions, inbox. Twice a day a Groq cron condenses the week into a paragraph and a do-next list, and an Opus routine ranks the next moves through a quality gate. Around the core sits the operational exhaust: site analytics, service health, Claude Code usage down to the token. Your notes stay markdown in a repo you own; every capture and status flip lands as a plain git commit.
Those numbers are real, measured on the live instance — ESP32 boards on the desk, sites on strange TLDs, games with real players. Every project name below is invented; the brain itself stays private, behind GitHub OAuth with an allowlist of one.
The morning page: today's journal, the ranked suggestion up top, recent decisions underneath. 27 projects are active right now — too many to show at once, so it surfaces the fresh and the flagged.
the board parses a 40 KB feed on-device and misses its 90-second refresh window whenever the api is slow — the proxy returns 1.2 KB of pre-parsed rows
ship the shopping-list share link before the weekend cooks do
the share link is the most-captured ask — 4 of the last 10 captures mention it — and PR #23 has sat open five days with one review comment left
The whole journal as a river — one colored band per project, wider on busier days, a diamond for each carried win. 56 of 68 days logged since the end of April. Scrub any day open; the riverbank tracks streaks, rhythm, and landmarks.
All 71 projects on one page, shelved by frontmatter status: 27 active, 6 paused, 15 done, 23 honestly abandoned. The activity table underneath catches the latest moves — a decision landed, a project flagged stagnant.
A single project rendered from its markdown file — frontmatter status, decisions log, open todos. This one is a piece of hardware: decisions about refresh ghosting and OTA handshakes live next to web-app decisions in the same brain.
get the departure fetch off the board. the proxy returns 1.2 KB of pre-parsed rows instead of the raw 40 KB feed — firmware just renders. partial refresh stays at 90s, full refresh only on the hour: ghosting is worse than a stale minute.
A thought goes in, a commit comes out — every line lands in the repo in seconds and gets routed to a project file or the day's journal, so nothing has to survive the night in your head. Open todos across the active projects queue underneath.
The twice-daily Groq synthesis paragraph, the rules Claude taught itself this week, and the totals underneath: 967 decisions logged.
The week belongs to gleis-board — four of the last seven entries open with it, and all three open todos point at the same departure fetch. crumbsheet is the second story: the share link is one review comment from shipping, and saturday morning is when the cooks show up. gather-play logged the ledger-per-game decision that unblocks deletes, menubar-mixer landed per-device volume, and quali-board has slipped past six days — the jun 30 ghosting decision is still unexercised. Sunday stayed light, as usual.
mined weekly from session transcripts; zero rules is a valid output.
A code-ranked scorecard nominates the candidates; a remote Opus routine writes up the moves that clear the bar — at most six per run, each with its evidence, and zero is a valid output. Every run is archived here; live-site health is one of the four score signals, so shipped-but-quiet sites still surface.
the board parses a 40 KB feed on-device and misses its 90-second refresh window whenever the api is slow — the proxy returns 1.2 KB of pre-parsed rows
Every Claude Code session lands here via a local forwarder — a $100/month plan doing $10,361 of pay-as-you-go work in the last 30 days, without missing a day.
15 custom-domain sites — PostHog for the pageviews, Neon for the per-game signup ledgers. When a game finds players, the count lives here, not in a spreadsheet.
An hourly probe over 31 things that can go down — sites, databases, data freshness, external APIs, and boards on the desk that stop reporting — so you find out before a visitor does.
200 in 240ms · vercel edge
sensor readings 26m old · expected every 10m
select 1 · 38ms · eu-central-1
Free-form questions over the entire brain — Gemini's long context takes the whole repo in one go, and answers cite the exact decisions and journals they came from. The brain remembers why, so you don't have to.
Deliberate — you pinned partial refresh at 90 seconds on jul 1 because e-ink ghosting above that beat a stale minute, and full refresh only runs on the hour. The refresh window isn’t the bottleneck anyway: the board spends up to 4 seconds parsing the raw 40 KB feed.
The open plan is to move that parse behind the edge proxy (decision logged this morning) — after that, 30 seconds becomes feasible if you still want it.
One private repo, read through a 30-minute tagged cache that a push webhook busts within seconds. Crons synthesize into Neon; PostHog and Supabase carry the operational views. Writes go back to the repo as commits.
fridays and thursdays carry the most weight
| date | project | kind | summary |
|---|---|---|---|
| 2026-07-06 | gleis-board | dec | thin edge proxy for departures — schema changes stop bricking mornings |
| 2026-07-06 | crumbsheet | cap | share link is the top capture this week — ship the OG image with it |
| 2026-07-06 | quali-board | flag | flagged stagnant — 6 days without a journal mention |
| 2026-07-03 | gather-play | dec | one signup ledger per game — deletes stay trivial |
captured from any page with c — one line in, committed to inbox/quick.md, routed to a project or the day's journal from here.
reachable · 210ms