A Chrome extension that stops the spiral and helps you go touch grass — now with an Iron Man–inspired HUD.
- Scroll & Shorts limits — warns you once you scroll too far on a site, or watch too many YouTube Shorts.
- Block any site — keep your own monitored list; defaults include the usual time-sinks.
- Live settings — changes apply to open tabs instantly, no reload needed.
- Heads-up intervention — a full-screen alert that fades the page out, then sends you off to touch grass.
- Private by design — only the
storagepermission, no tracking, no servers, no remote code, self-hosted fonts.
Built with TypeScript + esbuild (no framework).
pnpm install
pnpm build # typecheck, bundle to build/, and zip to dist/build.zip
pnpm watch # rebuild on change (reload the unpacked extension manually)
pnpm typecheck # tsc --noEmitLoad the unpacked extension from build/ via chrome://extensions (Developer mode → Load unpacked).
src/— TypeScript sources (popup,contentScript,background, plus sharedconstants/types/warning).public/— static assets (manifest.json,popup.html,fonts.css, fonts, icons) copied verbatim tobuild/.scripts/build.mjs— the esbuild build (3 entries → classic IIFE bundles).
- Customizable alert message — set your own directive headline (e.g. "Touch Grass") in settings; it applies live to open tabs.
- Release pipeline now triggers on version-tag pushes and auto-creates the GitHub Release with the built
.zipattached.
- Master on/off switch — a "System power" toggle in settings to pause all monitoring; the header indicator reflects Online/Offline state.
- Patched ReDoS advisories in transitive dev dependencies (
minimatch,brace-expansion) via pnpm overrides.
- Raised the default scroll threshold to 8000px.
- Warning now fires on how far down the page you are, not total distance scrolled — scrolling up and back down no longer triggers it early.
- Detect scrolling inside inner containers (e.g. LinkedIn's feed) so the warning fires on sites that don't scroll the document itself.
- The resolved "directive" screen now uses a calm blue scanline.
- Fix the in-page warning overlay collapsing into a squished vertical column on sites with aggressive global text-wrapping CSS (e.g. Reddit, YouTube).
- Refined the app icon to a circular arc-reactor badge (transparent corners).
- Refreshed Chrome Web Store assets (icon, promo tiles) and added listing copy.
- Complete visual redesign into a dark, Iron Man–style HUD: arc-reactor logo, holographic grid, neon-cyan controls, and a full-screen "threshold exceeded" alert that resolves into a calm "touch grass" directive.
- Rewritten in TypeScript with strict type-checking.
- New build system — replaced webpack with esbuild (sub-100ms builds, one dev dependency).
- Hardened for 2026 MV3 best practices:
- Fixed a URL-matching bug where a blocked domain could match unrelated sites (now parses the hostname with subdomain awareness).
- Dropped the
tabspermission — the extension now requests onlystorage. - Content script self-initializes and reacts to setting changes live via
storage.onChanged(no page reload). - YouTube Shorts detection now uses the Navigation API (with a fallback).
- Self-hosted fonts (no third-party network requests) and an explicit Content Security Policy.
- New arc-reactor app icon.
- Added a settings card so you can save custom scroll distance and YouTube Shorts limits.
- Slowed down the warning flash.
- Added support for YouTube Shorts blocking!
- Added a help button
- Various bug fixes and improvements
- Allow specifying subdomains
- Name update
- Description update
- UI Improvements.
- Major bug fixes involving blocked sites not working on install.
- User Experience Improvements.
- Upgraded vulnerable dependencies.
- Minor bug fixes.
- Major UI/UX Improvements.
- Initial release!
Suggestions and pull requests are welcomed!


