back to the projects

Hub

It started as a mail filter. Now it runs my days.

In September I wanted one place that would tell me when something broke. Seven weeks later Hub is the app my days run on: my calendar, four chat apps, four mailboxes, a running coach, my health data, my budget, my morning news, and a game that locks me out until I check in. It is private, only my Google account can sign in, so here is the tour. Anything personal in the screenshots is scrambled.

7 weeksfrom first commit to today
2,300commits
94,000lines of Python
8,000tests
81scheduled jobs
76specs, grilled first
148database migrations
4 + 4mailboxes + chat apps
Attention in the Hub, private text scrambledAttention

Attention

one feed for whatever needs me

A failing job, a warn email, a sick server, a LinkedIn InMail, a note dictated to my watch: everything lands here and pings my phone. Next to it, the day as a timeline.

  • Any item becomes a calendar slot in one tap
  • Focus: one switch holds every push on every device, except event reminders and sick servers
  • Capture from the Watch, Siri, the iPhone share sheet or Raycast
Planner in the Hub, private text scrambledPlanner

Planner

an agent that moves my week, after asking

A full week grid with drag, resize and undo, plus a Claude Opus agent next to it. It reads my calendars and to-dos through tools, proposes a card of changes in plain French, and nothing happens until I confirm.

  • 149 routines, deadlines, follow-ups, an Inbox and a Waiting list
  • Morning, evening, weekly and conflict passes
  • Journeys: leave times from Google Routes, rechecked every 10 minutes in the 90 minutes before I go
Messages in the Hub, private text scrambledMessages

Messages

four chat apps, one inbox

WhatsApp, Messenger, Instagram and Signal in one list, through Matrix bridges on my own server. A message shows up within seconds, and I can reply, react, or send photos and files from the Hub.

  • "Waiting on you" sorted by who has waited longest
  • Voice notes, quotes, read receipts, group details
  • Mute for an hour, a day, a week or for good
Mail in the Hub, private text scrambledMail

Mail

98% agreement, and it learns on Sundays

Four mailboxes read every 5 minutes. Sender rules first, then Jev, TypeSafe's classifier, scores each email, and Claude writes one line on the ones that matter. Every Sunday, Claude Opus proposes better definitions from my corrections. Nothing changes until I approve.

  • Last 30 days: 1,526 of 1,558 emails stayed where they were sorted
  • One set of definitions per mailbox, graded on an answer key
  • The Hub never sends, moves or deletes mail
Habits in the Hub, private text scrambledHabits

Habits

a 90-day game that locks me out

From 6:30 the Hub refuses to open until I answer the morning Check-in. My steps walk Frodo and Sam across Middle-earth, my runs move the Three Hunters, my reps climb a mountain. A Ghost sets the pace. Drinks feed the Ring, and past its line my progress is halved.

  • Season 1 runs 90 days, Season 2 is Game of Thrones
  • A workout player like a fitness app: drawn animated figures, sets, rest timer, a chrono for holds, targets that grow
  • A real reward: clothes, scaled by how far I got
Sport in the Hub, private text scrambledSport

Sport

the Coach says what, the Planner says when

On Sunday at 18:00 a Claude Coach reviews my week and writes the next one. Code checks it against hard rules (never two hard runs in a row, no hard session on a padel day), and the Planner places it around my calendar. I can argue with the Coach in a chat.

  • Every run gets a verdict from the Coach
  • Half-marathon plan, zones, tests
  • Sessions go to my watch
Health in the Hub, private text scrambledHealth

Health

my iPhone reports every hour

Apple Health posts everything to the Hub, with history back to 2024. A Sleep score on fixed targets, a Health score, and alerts that compare me to my own baseline rather than a fixed threshold. Exact values are blurred here.

  • Three questions: last night, getting fitter, doing enough
  • Poor nights hold back the push to train
  • 90-day, 1-year and all-time charts on every metric
Brief + À voir in the Hub, private text scrambledBrief + À voir

Brief + À voir

my morning paper, picked by Claude

At 07:30, a read of about ten minutes from some 70 sources: RSS, an X list, newsletters and YouTube. A Claude Editor picks the items and my thumbs teach it. What I want to watch later goes to À voir, sorted by how long I have.

  • Share a link from the iPhone, or add a video to a YouTube playlist
  • La Leçon: one computer science lesson with questions, 120 written so far
  • Weekly proposal to change topics and sources
Finance in the Hub, private text scrambledFinance

Finance

read from my notes, blurred for you

My budget stays in my Obsidian vault. The Hub pulls it through git, checks every commit (amounts, splits, accounts), and swaps the page only when the data is valid. A bad commit keeps the last good copy and tells me which file is wrong.

  • Spending against my usual level by this day of the month
  • Net worth, projection, loan, envelopes, subscriptions
  • Checked to the cent against the old dashboard
Machine in the Hub, private text scrambledMachine

Machine

81 jobs that tell on each other

Every scheduled job has a run history, Run now and Pause. Cron jobs on other machines report through a small wrapper, 27 sites get checked every 10 minutes, two servers and a seedbox send their stats, and silence counts as a failure.

  • First week: found 751 silent cron failures and a site down since January
  • My other apps can raise their own alerts in Attention
  • Encrypted nightly backups to Cloudflare R2

Follow one thing through

A run

Apple Watch→Apple Health→/api/health→session matched→to-do ticked→Coach verdict→Three Hunters move on the map

An email

Gmail→rules, then Jev→Claude summary→Attention + push→"Add to calendar"→Planner card→calendar event→push at 10 min, 1 min

Sunday, 18:00

weekly review→Coach writes the week→code checks hard rules→Planner places it→other to-dos go around it→card waits for my OK

A friend on WhatsApp

bridge→Synapse→Hub in seconds→push→reply from the Hub→marked read on WhatsApp

How one person built this in seven weeks

Every feature goes the same way: I get grilled on the idea, that becomes a spec, the spec becomes tickets, and Claude Code agents build the tickets in parallel on an integration branch. A small fix goes straight to production once the 8,000 tests pass, and the deploy takes about 4 minutes. 76 specs so far, and the Hub watches its own jobs too.

Everything it talks to

Google

GmailCalendarContactsRoutesPlacesYouTube

AI

Claude OpusClaude HaikuJev (TypeSafe)Agents with tools

Messaging

Matrix / SynapseWhatsAppMessengerInstagramSignalWeb Push

Apple

Health Auto ExportWatchShortcutsSiriPWA

Also talks to

XRSSObsidian vaultIt's a PlanUltra.ccMedia JanitorRaycast

Under it

PythonFastAPIhtmxSQLiteAPSchedulerDockerCaddyoauth2-proxyCloudflare R2GitHub Actions