ESP32 boards on the desk, sites on strange TLDs, games with real players — journaled daily, synthesized twice a day, ranked each dawn. A single user — me.
Brain Dashboard renders a private GitHub markdown repo — journals, project notes, decisions, an inbox — through a planner-style interface, and folds in the operational exhaust around it: site analytics, service health, Claude Code usage. A twice-daily Groq cron synthesizes the week into a paragraph and a do-next list; a nightly Opus routine ranks concrete suggestions with evidence; a GitHub webhook busts the read cache seconds after any push.
those numbers are real, measured on the live instance — every project name below is invented. the brain itself stays private, behind GitHub OAuth with an allowlist of one.
Today's journal, the morning's ranked suggestion up top, active projects, and recent decisions in one stream. 27 projects are active right now — the stream surfaces the fresh and the flagged, not all of them.
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 — with a cross-project activity table underneath.
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.
Open todos routed to their projects, plus everything quick-captured today — each line committed to the repo, then routed to a project file or the day's journal.
The twice-daily Groq synthesis paragraph, the rules Claude taught itself this week, and brain meta-stats — 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 remote Opus routine reads the whole brain overnight and ranks twelve concrete next moves — each with its evidence. Every run is archived here; three of every twelve go to shipped sites that have gone quiet.
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. These numbers are real: a $100/month plan doing about $10,000 of pay-as-you-go work in 30 days, without missing a day.
15 custom-domain sites in one place — PostHog for the pageviews, Neon for the per-game signup ledgers. When a game finds players, the count lives here, not in a spreadsheet.
A ten-minute probe over 31 things that can go down — sites, databases, data freshness, external APIs, and boards on the desk that stop reporting — so a dead service never gets discovered by a visitor.
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 the boards on the desk 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