Mindful procrastination blocker — 5-second pause on distracting sites
  • TypeScript 72.2%
  • CSS 11.3%
  • JavaScript 6.9%
  • HTML 5.4%
  • Python 4.2%
Find a file
2026-07-15 16:24:45 +02:00
public/icons feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
scripts feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
src feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
tests feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
.gitignore feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
_data_sites.mjs feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
_lib_sites.mjs feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
AGENTS.md feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
biome.json feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
LICENSE feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
package.json feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
pnpm-lock.yaml feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
pnpm-workspace.yaml feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
README.md feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
tsconfig.json feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
vitest.config.ts feat: gatekeeper v0.1.0 2026-07-12 12:17:58 +02:00
wxt.config.ts feat: add update_url for Chrome MV3 self-update endpoint 2026-07-15 16:24:45 +02:00

GateKeeper

Friction, not force. A mindful 5-second pause before you open a distracting site.

GateKeeper is a Chrome extension that doesn't block procrastination sites — it makes you pause before opening them. When you navigate to Reddit, YouTube, Twitter/X, Instagram, TikTok, Facebook, Netflix, or any custom site you add, you'll see a full-page overlay asking "Do you really want to visit [site]?" with a 5-second countdown. After the countdown, the default action — highlighted, one click away — is Take me back. "I'm sure, let me in" is there if you mean it, but it's deliberately less prominent.

Features

  • 5-second mindful pause before opening any blocked site
  • 12 default sites: Reddit, Twitter/X, YouTube, Instagram, TikTok, Facebook, Netflix, Twitch, 9GAG, Imgur, Pinterest
  • Custom site list — add any hostname you want
  • On/off toggle — the master switch
  • Interception counter — see how often you were saved from yourself
  • 100% free, no premium, no paywalls — see Branding below

Branding

GateKeeper is part of the Greasy Sprocket family. Greasy Sprocket tools are always 100% free — no premium tiers, no feature limits, no paywalls. The only monetization is a voluntary "buy me a coffee" banner that appears after 2 days of use (with a 30-day cooldown between appearances), and a feedback form on uninstall pointing to https://greasysprocket.com/feedback.

Tech stack

  • WXT 0.20.27 — extension build tool
  • TypeScript 6.0.3 (strict)
  • Biome 2.5.1 — linter + formatter
  • Vitest 4.1.9 — tests
  • pnpm 11.x — package manager

Project layout

gatekeeper/
├── src/
│   ├── data/sites.ts              # canonical default blocklist
│   ├── lib/
│   │   ├── sites.ts               # isBlocked, normalizeSite, matchingSite
│   │   └── storage.ts             # Settings, Stats, chrome.storage.local helpers
│   └── entrypoints/
│       ├── background.ts          # uninstall URL, message handler, coffee logic
│       ├── content.ts             # full-page overlay on blocked sites
│       └── popup/                 # enable toggle, site editor, stats
├── tests/sites.test.ts
├── public/icons/                  # 16/32/48/96/128 px PNGs
├── scripts/generate-icons.py
├── wxt.config.ts
├── package.json
├── tsconfig.json
└── biome.json

Develop

pnpm install
pnpm dev         # wxt dev — loads in a dev-mode browser
pnpm test        # vitest watch
pnpm test:ci     # vitest run
pnpm typecheck   # tsc --noEmit
pnpm lint        # biome check
pnpm validate    # typecheck + lint + test
pnpm build       # → .output/chrome-mv3/
pnpm zip         # → .output/gatekeeper-*.zip

License

Apache-2.0. See LICENSE.