back to the projects

Hub

Everything that needs me, in one feed

Hub: browser windows showing sorted mail tagged warn or keep, the scheduled tasks with their last runs, a server panel, the Attention feed reading All clear, and Jev's 98% agreement score
Hub

Overview

Hub is where I watch everything I run. It reads my work, personal and support mailboxes every 5 minutes, and Jev, the TypeSafe classifier, sorts each email into warn or keep. Claude adds a one-line summary to the ones that matter. It also runs or watches 48 scheduled tasks: mail fetches, Obsidian crons, checks on 26 sites and heartbeats from two servers. Anything that breaks or waits for me lands in one feed, Attention, and sends a notification to my phone. Only my Google account can sign in.

Why I built this

My projects are spread over two servers, a seedbox and Netlify, and I usually found out something was broken by chance. The first week the hub ran, it showed that my Obsidian crons had failed silently for 751 runs and that pingmaster.fr had been down since January. I wanted one place that tells me, so I stop checking ten.

Features

  • Mail sorted by Jev. Two Gmail accounts and one IMAP mailbox are read every 5 minutes. Sender rules decide first, then Jev scores every email, and anything with a 10% chance of needing me is flagged warn, because a missed email costs more than an extra one. Claude Haiku summarizes each warn mail in one line, and Slack gets a digest morning and evening.
  • Definitions that get better every week. On Sunday, Claude Opus reads the emails Jev got wrong and proposes new definitions. Jev regrades them on every email I've labeled, with one in five kept hidden from Claude, and nothing changes until I click Approve. Over the last 30 days, 1,415 of 1,439 emails stayed where Jev put them.
  • One feed for everything that needs me. Failing jobs, sick servers, expired Google logins, weekly proposals, warn mail still waiting and captures all land in Attention. Any item becomes a Google Task with a due date in one tap. The hub is installed as a Home Screen app on my iPhone and pushes a notification for each new item.
  • Capture from the wrist. One Apple Shortcut, started from the iPhone, an Apple Watch complication or Siri, sends a note straight to the hub. It waits in Attention until I deal with it or turn it into a task.
  • Jobs, sites and servers. Every task has its run history, a Run now button and Pause. Crons on other machines report through a small wrapper, 26 sites are checked every 10 minutes for an HTTP 200 and 14 days of TLS left, and both servers send disk, memory and container stats every 5 minutes. Fifteen minutes of silence counts as a failure.

Tech stack

Backend

Python 3.12 FastAPI APScheduler SQLite Jev (TypeSafe) Claude Gmail & Tasks APIs

Frontend

htmx Jinja2 PWA Web Push Apple Shortcuts

Infrastructure

Docker Compose oauth2-proxy Caddy GitHub Actions Cloudflare R2