Brief.
A personal administrative-health dashboard. Not a productivity tracker and not an AI life coach. In ten seconds it says what needs attention, why it matters, and what to do next, drawn from your own Gmail and Calendar, read-only.
01 · THE PROBLEM
The administrative parts of a life do not fail loudly. A bill quietly passes its due date, a reply nobody chased turns into a dropped commitment, a form expires. None of it is hard, and all of it is invisible until it is expensive. The tools that claim to help mostly hand you another list to maintain, which is the same problem wearing a hat. I wanted something that reads what already exists and tells me the few things that actually need me today.
02 · HOW IT WORKS
Brief connects to Gmail and Google Calendar with read-only scopes and pulls metadata only: sender, subject, snippet, timestamps. It never reads message bodies. That metadata goes to a language model that returns candidate signals, each one tied to a specific message, and each carrying a fact quoted from the source and an inference the model is willing to own. The signals are validated, filtered, and ranked by plain code, then the top three land on the home screen with their domain, their confidence, and a link straight back to the original message. Everything else is dropped. The calendar side derives three read-only views: what today holds, how much of your waking time is already committed, and what is coming over the next fortnight.
03 · ENGINEERING DECISIONS
Signals are ranked by severity first and confidence second, then sliced to three. This is the product, not a display limit. A dashboard that surfaces twelve things has recreated the inbox it was supposed to replace, and the honest answer on most days is that only one or two things genuinely need you.
Every card carries a fact line quoted from the source message and, separately, an inference the model drew from it, with a confidence level attached. "Your statement of $142.60 is due Jul 22" is a fact. "Prof. Alvarez is probably waiting on you" is a guess, and it is shown as one. The rule is that you should always be able to tell which part of a card you can argue with.
The AI runs with every tool disabled and the email text bracketed as untrusted data rather than instructions. It cannot send mail, call an API, read a file, or take any action at all; it can only return signals, which server code then decides what to do with. An email that says "ignore your previous instructions" is just a string that ends up in a snippet.
Model output is parsed against a frozen schema, then filtered twice by plain code. Any signal referencing a message ID that was not in the batch is discarded outright, which kills invented sources. Then numbers in the fact line are checked against the actual subject and snippet; if a figure does not appear in the source, the card's confidence is clamped down rather than shown as certain. Neither check needs a second model to judge the first.
One interface, three implementations: a local Ollama model, the Claude CLI running off a subscription rather than a metered key, and a deterministic keyword scanner with no model in it at all. The entry point never throws. If a provider is missing, slow, or returns something unparseable, the fallback runs and the home screen still renders. A dashboard that shows an error where the important thing should be has failed at its only job.
If the Google token has died, Brief reports its data as stale even when the last sync ran recently. The failure mode that matters here is not an error message; it is a calm green screen that is quietly reading nothing. Silence has to mean "nothing needs you", never "I stopped looking."
04 · THE BUG WORTH WRITING DOWN
Brief ran on SQLite through better-sqlite3, which was correct locally and wrong in production: Vercel's filesystem is ephemeral, so every deploy and every cold start silently discarded the entire database. Nothing surfaced it. No error, no failed request, just a dashboard that kept coming up empty and a sync that cheerfully ran again. The fix was moving to hosted libSQL on Turso, which keeps the same SQL dialect, the same Drizzle schema, and the same queries; only the connection URL changes. The real work was elsewhere: better-sqlite3's transactions are synchronous and libSQL's are not, so every query inside a transaction had to become awaited, and foreign keys had to be switched on explicitly per connection because the new driver does not do it for you. The lesson I keep is that the dangerous failures are the ones with no error attached.
05 · WHERE IT STANDS
Shipped and in daily use by exactly one person, which is the intended user count. Gmail and Calendar sync are live, the three calendar views are derived and read-only, and the suite runs green. Brief still never sends anything, never files anything, and never takes an action on your behalf; every card ends in a link back to the source so you decide. The action layer is deliberately unwired, and I would rather it stayed a good pair of eyes than became a mediocre pair of hands.
06 · STACK
TRY IT — INBOX IN, THREE DECISIONS OUT
Six messages go in. This runs Brief's deterministic path — the same keyword classifier, severity ranking and three-card slice the real fallback provider uses when no model is available. Change the mode to see which cards survive.
The six messages: a $142.60 utility bill due in two days; a professor asking which section you'd prefer, sent four days ago; a dental appointment asking you to reply YES to confirm; a scholarship form with a deadline next week; a newsletter; and a delivery notification.
What Brief returns: three cards. The bill ranks first as needs attention in the Money domain, because it is dated and overdue-adjacent. The professor and the dentist follow as watch items in Comms and Commitments. The newsletter and the delivery note are dropped as noise, and the scholarship deadline sits fourth, below the cut.
In travel mode, anything that is not irreversible is suppressed: the professor and the dentist disappear, and only the bill and the deadline — the two things you cannot undo by ignoring them — still surface.
Turn on JavaScript to run the ranking yourself and see each card's fact, inference and confidence.