What it is:
A simple Chrome browser extension that just prompts you to say what you intend to do when you open a new tab & times your session. My goal is not to block myself from using any given site but just to add enough friction that I have to be slightly more intentional about that usage.
Why I built it:
I used to use “Freedom” and its associated apps which let you place time limits on tabs, block certain sites during focus sessions, and more. It was really cool, but ultimately it was overkill, and it slowed my browser down, so after a few years of using their apps, I deleted them all in favor of good old-fashioned self-discipline.
Sometimes that breaks down, and as I’m trying to ship more, I need to push any time spent browsing into building.
Tech stack:
Component | Tool | Info |
|---|---|---|
Coding agent | Codex | AI coding agent |
Extension platform | Chrome Extensions Manifest V3 | Chrome extension using a background service worker, content scripts, extension pages, and MV3 permissions |
Language | TypeScript | Used across background tracking, content script prompt UI, storage helpers, and stats dashboard code |
UI | Plain HTML + CSS + DOM APIs | Lightweight custom UI without React or a frontend framework |
Website overlay | Content Script + Shadow DOM | Injects the focus prompt over normal websites while isolating styles from the page |
Dashboard | Static extension page | stats.html / stats.ts display locally stored focus stats |
Build | TypeScript compiler | tsc compiles src into dist; a small Node script copies static extension files |
Storage | Chrome Storage API | chrome.storage.local stores completed analytics locally; chrome.storage.session stores active/pending sessions |
Browser APIs | Chrome tabs, runtime, storage APIs | Tracks tab lifecycle, passes prompt messages, stores data, and closes tabs for early exits |
Dependencies | TypeScript + @types/chrome | Dev-only packages for compiling and typing Chrome extension APIs |
Hosting | Chrome local/unpacked extension | Built files are loaded from dist via chrome://extensions; no web hosting required |
