Live Updated 2026-08

Get Off That Site

A privacy-first Chrome extension that makes distraction limits hard to dismiss on autopilot through shared timers and escalating friction.

React TypeScript Vite Chrome Extension APIs Manifest V3
yoizuki.dev

Problem

Most website blockers become easy to ignore. A predictable warning and a familiar dismiss button quickly turn into another piece of interface people click through without thinking.

Get Off That Site is designed around a different question: how can the easy choice remain leaving, while continuing to scroll requires a deliberate decision?

One Budget Across Every Tab

The extension keeps one time budget per blocked domain instead of one timer per tab. Opening another tab, refreshing the page, or closing the tab that showed the reminder does not reset the allowance.

A Manifest V3 background worker owns the shared state. Content scripts report whether a blocked site is visible, browser alarms preserve the countdown across worker suspension, and changes are broadcast through local extension storage. Time is only consumed while the site is actually visible, and the budget resets after a configurable period away.

Friction That Escalates

When the focus window runs out, the extension raises a full-screen intervention with three ways forward: leave, pause this tab, or snooze the whole site.

Leaving is intentionally easy. Staying requires a press-and-hold gesture, and the required hold grows when the user repeatedly overrides the limit. After a configurable number of pauses, the user must also type a short acknowledgement before the pause option unlocks. A brief reflection delay prevents the bypass actions from being used immediately, while daily pause, snooze, and walk-away counts make repeated choices visible.

Breaking Autopilot

The intervention changes its theme, accent, typeface, position, message, visual, and entrance animation each time it appears. The variation is functional rather than decorative: it prevents the reminder from becoming visual wallpaper with a memorized escape target.

The surrounding interaction stays consistent enough to understand. The healthy exit remains a single click, while only the choice to keep browsing carries added friction.

The React popup provides one-click blocking for the current site, manual domain management, a configurable 5–60 minute focus window, idle-reset controls, and a daily behavior summary. Settings and per-domain timer state persist through chrome.storage.local so the extension remains useful across tabs and browser sessions.

Private by Design

There is no account, analytics layer, or remote service. The blocklist, settings, timers, and daily counters stay in the browser’s local extension storage, and the extension makes no network requests. The full experience works offline.

Lessons Learned

Effective friction has to be selective. Making every action difficult would only encourage users to disable the extension; making the desired exit easy and the override increasingly deliberate creates a more useful behavioral boundary.

The other key lesson was that timer correctness is a state-coordination problem. A blocker feels unreliable as soon as new tabs or a suspended background worker can bypass it, so shared persistent state and explicit visibility reporting became core product behavior rather than implementation details.