Tab Obituary
Chrome Extension · Solo build · In progress
The Idea
Most people with 40+ open tabs don't want to be fixed. They want to know where the week went. Tab Obituary watches your browsing locally, and every Sunday morning it emails you a short story about it — the rabbit holes you fell down, the tabs you opened and abandoned, the domains you couldn't quit. No scores, no streaks, no “you wasted 6 hours.” Just a perceptive friend telling you what happened.
The hero feature is rabbit-hole detection: the extension finds one to three sustained-attention sessions from the week and writes them up as paragraphs. The rest of the email fills in the texture — ghost tabs, top obsessions, themes, and a few week-over-week observations.
The Constraints
Two things shaped every decision. First, privacy had to be real, not a marketing line. Page contents are never read or stored, and the cloud AI step is a separate opt-in that only ever sees URLs and titles. Second, this was a solo build on a tight budget, so the running cost had to stay near-zero.
How It's Built
A pnpm monorepo with three packages: a Preact + Vite extension, shared wire contracts, and a Cloudflare Worker backend. I picked Preact for its ~3KB runtime because popup latency is something you feel. Browsing events log to IndexedDB on the device. Once a week the Worker pulls the data, runs the LLM pipeline, and sends the email through Resend.
The interesting decision was the model. The first plan used Anthropic models, which would have run into the hundreds of dollars a month at the volume I expected. Switching to DeepSeek V3.2 through fal.ai's OpenRouter proxy dropped that to about $17.64/month for the same 40M-in / 20M-out workload — a single model handling coherence scoring, theme extraction, the ghost picker, week-over-week framing, and the rabbit-hole narrative. Cloudflare's free tier, 100k requests a day plus cron triggers, covered the rest where Vercel's hobby plan would have choked on the scheduled jobs.
Where It Landed
The full pipeline ships: local capture, the LLM report generation, HTML and text email rendering, the weekly send, and a day-6 reminder. The shared contracts are published to npm as @tabob/shared under MIT, and the extension source is mirrored to a public repo so anyone can audit what runs on their machine. The backend stays private. Tests sit above 2,000 across the monorepo, including a hand-graded eval set for the LLM voice.
What's left is the Chrome Web Store gauntlet: icons, store screenshots, listing copy, a production deploy, and a live end-to-end run.