I got tired of running 4 browser extensions, so I built one

작성자

카테고리:

← 피드로
DEV Community · Abhishek Sharma · 2026-07-21 개발(SW)

Abhishek Sharma

I had a website blocker, a Pomodoro timer, a tab suspender, and a time tracker installed at the same time — four separate extensions, four separate settings pages, none of them talking to each other. Starting a focus session meant manually turning on the blocker, then starting the timer, and neither knew the other existed. So I built TabInsights, which does all four and actually connects them.

What it does

Website blocker — block by domain, category, or schedule, with an optional typed “unblock challenge” for the days willpower isn’t enough.

Pomodoro focus timer — one click starts a 15/25/45-minute sprint, which also auto-blocks distracting categories for the duration and unblocks them automatically when it ends. This is the part that actually solves my original problem — the timer and the blocker are the same feature, not two extensions coincidentally running at once.

Memory saver — auto-suspends tabs you haven’t touched in a configurable window (15–60 min), freeing roughly 50MB of RAM each via chrome.tabs.discard(). Suspended tabs stay in your tab bar and reload exactly where you left off with one click.

Automatic time tracking — logs time per domain with no manual start/stop, and shows a daily focus score.

A few implementation notes

Manifest V3 removed persistent background pages, which meant every “ongoing” feature — sprint timers, the daily summary, auto-suspend checks, license re-validation — had to be rebuilt on chrome.alarms instead of a long-lived timer. The gotcha: Chrome clamps alarm intervals to a minimum of 1 minute in packaged (published) extensions, so anything needing finer granularity has to accept that floor rather than fight it.

The blocker uses declarativeNetRequest — you hand Chrome a set of match rules and it enforces them at the browser level. The extension never actually reads the blocked request; it can’t, by design, which is also the honest answer any time someone asks whether a blocker “sees” their browsing.

The bigger architectural decision was privacy: the extension makes zero external network requests during normal use. That meant bundling the UI font locally instead of pulling from Google Fonts, using Chrome’s on-device favicon cache instead of a favicon API, and replacing what used to be rotating Unsplash background photos with a CSS-only gradient. None of that needed a server to begin with — it was just easier to reach for one during early development, and ended up being worth ripping out.

Where it’s early

This is genuinely early — first real push toward finding users happened this week, after building it primarily for myself. If you try it and something’s missing or feels like four extensions wearing a trenchcoat instead of one, I’d like to hear it.

Free, with an optional one-time $4.99 Pro upgrade (site time limits, scheduled blocking, unlimited workspaces, cloud sync) — no subscription either way.

Chrome Web Store: https://chromewebstore.google.com/detail/jfnfcaeagpcloialnbhibiecbphohebm

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다