Chapter One
A throwaway question
Z
My Chrome browsing history is stored locally, right? Can you access it?
C
Chrome keeps all browsing history in a SQLite database: ~/Library/Application Support/Google/Chrome/Default/History. Let me take a look.
Claude queried the database and got back 14,837 URLs
C
Found it. Lately you've been watching LiveKit voice AI videos, browsing several GitHub projects, trying Phota Studio's AI portrait editor, plus a pile of posts on X. I can query by time, domain, or keyword. What would you like to do with this data?
Chapter Two
The real problem
Z
I have a tab management problem. I open tons of tabs and never close them. Some are half-finished tasks; I switch to another task and completely forget the first one (might be a little ADHD). The only time I ever close tabs is when there are so many that my computer crashes and I'm forced to close everything.
Could you do something with my browsing history to help?
Retro note
Zara didn't say "build me a Chrome extension" or "build me a tab manager." She just described the problem itself. That gave Claude maximum creative room.
C
A few directions, from practical to playful:
- Task Autopsy: AI reads your browsing history like a detective and reconstructs "you researched LiveKit voice agents at 2pm on Tuesday, viewed 7 pages, then suddenly switched to Stripe and never came back"
- Focus Score: like a step counter, but for attention. A daily score: how many tasks did you start vs how many did you finish?
- Second Brain: accept that you will abandon tabs, but quietly save the context at the moment you do
- The Nudger: "You have 47 tabs open. Last time you hit 50, your computer crashed"
- Mission Control: turns 80 anonymous tabs into: Voice AI research (4) / Stripe billing setup (3) / GitHub PR reviews (5)
Z
Nothing that dramatic. Simple and actually useful.
C
Then what if it's just a simple page that answers one question: "What am I working on, and what have I forgotten?"
It reads your browsing history, uses AI to cluster your browsing behavior into "tasks," then shows you which are active and which are forgotten. You never write a to-do list; it generates itself from your behavior.
Z
Worth a try. But how do we make sure I actually use it, instead of forgetting about it too?
Chapter Three
The key discovery: the new tab page
C
A few ways to make it unavoidable:
- (A) Make it your new tab page: every time you open a new tab, you see your task board instead of Google
- (B) Pop up every morning: it lands in front of you like a newspaper
- (C) A Chrome extension: a little toolbar icon showing how many parallel tasks you have going
The turning point
This is the pivotal moment of the whole product. It was only here that Zara learned Chrome's new tab page can be replaced. That technical capability (
chrome_url_overrides.newtab) was proposed by Claude, not something Zara thought of herself. Zara later reflected:
"I shouldn't arrive with a solution. I should only describe the problem."
Chapter Four
A mockup from real data
Z
Could you build a mockup with my real browsing data so I can see it?
Claude queried the history, clustered the tasks by hand, and generated an HTML mockup
C
Done, take a look. These are the tasks detected from your real data:
Active:
• Brand DNA tool (localhost:5173, visited 141 times)
• Voice AI research (LiveKit + Peter Steinberger)
• Frontend Slides PR reviews (#43 and #26)
Gone cold:
• Phota Studio AI portraits (18 pages, abandoned halfway)
• DESIGN.md research (saved from X, never went deeper)
Z
Looks good. Can it also close tabs for me? Some of these tasks are finished, I just forgot to close them.
C
Yes. A Chrome extension can see all your open tabs through the chrome.tabs API, and close them too. Every task on the board can get a "close all tabs" button.
Chapter Five
Iterating, iterating
Z
The AI grouped unrelated tabs together. Every YouTube video should be its own task, not a vague "watching AI videos." And localhost should be grouped by port number.
C
Updated the AI prompt with granularity rules. Every video and every article is now its own task, and localhost groups by port.
Z
The AI descriptions sound too robotic: "The user is investigating Anthropic's constitutional AI." Don't say "the user." Just say "researching Anthropic's..." Make it sound like a real person talking.
Z
Every new tab takes a few seconds to load. Can it be faster?
C
Added caching. If your tabs haven't changed, the next new tab reads straight from cache: zero delay, zero token cost.
Z
Actually, it shouldn't call the AI by default at all. A new tab should just group by domain: free, instant. Only call the AI when I click the "organize with AI" button.
Product instinct
This was an important architectural decision. Free and instant by default; intelligence is opt-in. It saves money, but more importantly it makes the page load with zero waiting.
Chapter Five, continued
Sweating the details
Z
When a tab title is long I can't see the rest of it. And each tab should be clickable, jumping me straight to that tab, not opening a new one.
C
Every tab title is now clickable; it uses chrome.tabs.update to jump to the already-open tab. Added hover highlighting and a separate X button for closing a single tab.
Z
Gmail shouldn't show the unread count. "Inbox (16,359)" is ugly; just show "Inbox." And strip my email address out of tab titles, that's private information.
Z
This specific email shouldn't be in the "Homepages" category. Only the Gmail inbox itself counts as a homepage; individual emails should stay in the Gmail group.
C
Changed the homepage detection logic. Gmail now counts only the inbox itself as a homepage; specific emails (URLs containing #inbox/) stay in the Gmail group. Email addresses and unread counts are now filtered out globally.
Z
For X/Twitter tabs I want to see which tweet it actually is, not just "Home." And localhost should show the port number so I can tell my projects apart.
C
Tweet tabs now show the author and a snippet of the content. localhost tabs show the port in front of the title, like "5173 Brand DNA Tool." All localhost tabs collect into one group.
Z
Closing the "Homepages" category also closed the specific pages I had open on those sites! I only wanted to close the homepages themselves.
C
That happened because closing matched by domain, so closing mail.google.com took every Gmail tab with it. The homepage category now uses exact URL matching: it closes only the inbox homepage and leaves individual emails alone.
Iteration notes
These all look like small things, but every single one was discovered through real use. The quality of a tab manager hides inside these little rules: what counts as a "homepage," what counts as "content," which parts of a title to show and which to hide. Not one of these details could have been guessed correctly in advance.
Chapter Six
Adding some fun
Z
Could closing tabs come with a really satisfying animation and sound effect?
C
Added a swoosh sound (synthesized with the Web Audio API, no audio file needed) and confetti particles. When you close a group of tabs, the card slides away and the confetti flies.
Z
After I click "organize with AI," could the AI write a one-line roast about me at the top? Look at what tabs I have open and say something in the voice of a friend. Make it a little funny.
C
Updated the prompt. The AI now writes a single line, like:
"12 AI tools open at once. You're either building the future or procrastinating."
"Three localhost projects, two research rabbit holes, and one recipe. Classic."
Chapter Seven
Cutting the AI
Three days later
Z
I have to admit something. I've used it for three days and never once clicked the "organize with AI" button.
I just want to see my tabs grouped by domain. Domain grouping alone already clears my head.
C
So the AI feature can just go?
Z
Cut it. Also, I've noticed some tabs are especially easy to close: the Gmail homepage, X homepage, YouTube homepage, GitHub homepage. These "homepages" never need to stay open. They're easy wins. Could you group them together and put them at the very top?
C
Added a "Homepages" group. It detects the Gmail inbox, X home, YouTube home, LinkedIn home, and GitHub home, and collects them into one card. One click closes them all.
The product lesson
This was the biggest turn of the whole project. We spent days building the AI clustering feature: choosing an LLM, writing prompts, building the cache, tuning granularity. In the end, the user (Zara herself) didn't need it at all.
Domain grouping plus quick homepage cleanup already solved 80% of the problem. No AI, no tokens, no API key. Sometimes the best feature is the one you delete.
Chapter Eight
Naming and shipping
Z
Let's pick a name. I already have the slogan: Keep tabs on your tabs.
C
A few directions:
- Tabula Rasa: Latin for "blank slate," every cleanup is a fresh start
- Tab Rehab: a rehab center for tab addiction; it rhymes, and it's self-deprecating
- Tab Out: close them, tap out, walk away from the chaos
Pushed to GitHub, repo set to public
Chapter Nine
User feedback changed everything
Z
Posted it on X. Someone ran a security audit and found that /api/update was a serious vulnerability: any website could call it and run git reset --hard + npm install on my machine.
C
He's right. I removed that endpoint, locked down CORS (localhost and chrome-extension only), pinned the dependency versions, and added a LICENSE file.
Z
Someone else asked: why does it need a Node.js server at all? Can't a Chrome extension just use chrome.storage directly?
C
chrome.storage.local can fully replace SQLite for the "save for later" data. Which means the entire server can go. Tab Out can become a pure Chrome extension: zero dependencies, and installing it is just loading a folder.
Deleted server/, dashboard/, scripts/, package.json, node_modules
Architecture evolution
The product went from "AI-powered browsing history analyzer + Node.js server + Chrome extension" all the way down to "one pure Chrome extension folder."
AI went from core feature, to optional, to removed entirely.
The server went from required, to optional, to deleted.
The simplest version won.
Chapter Ten
The retrospective
Z
Looking back, the new tab page idea came from you, not me, right?
C
Yes. You described the problem, I proposed three options, you picked A and C. The new tab override was my suggestion; the choice was yours.
Z
I think there's a lesson in this for me: when I work with you, I shouldn't arrive with a solution. I should only describe the problem, in an open-ended way.
C
The pattern that worked best in this whole project was exactly that: you describe the problem, or the feeling you want, then I propose options and you choose and shape them.
If you had opened with "build me a Chrome extension that groups tabs by domain in a grid layout," you would have gotten exactly that, and nothing more. No AI clustering exploration, no confetti, no roast messages, no "save for later," and no process of discovering, through iteration, what actually matters.