curfew-extension

Curfew logo # Curfew **The internet curfew for your distraction sites.** Daily time budgets for the sites you choose, enforced at the network level. Local-only. Zero tracking. Zero install warnings. **Rules you have to mean:** relaxing one costs a solved puzzle, not a click. Curfew in action [![CI](https://github.com/devacc8/curfew-extension/actions/workflows/ci.yml/badge.svg)](https://github.com/devacc8/curfew-extension/actions/workflows/ci.yml) [![Chrome Web Store](https://img.shields.io/badge/Chrome%20Web%20Store-install-7da2ff.svg)](https://chromewebstore.google.com/detail/curfew/obnikdokealeimpbhfbjhpdmfcgbgcje) [![License: MIT](https://img.shields.io/badge/License-MIT-7da2ff.svg)](LICENSE) ![Manifest V3](https://img.shields.io/badge/Manifest-V3-7da2ff.svg) ![No tracking](https://img.shields.io/badge/tracking-none-7fce95.svg) [Why](#why-willpower-is-not-a-plan) · [Willpower Protection](#willpower-protection) · [Features](#features) · [Privacy](#privacy) · [Development](#development)

Why willpower is not a plan

There is no shortage of extensions that limit how long you spend on a site. They share one weakness: you can switch them off with a click. So the whole thing rests on willpower, and willpower is exactly what ran out ten minutes ago, when you are deep in a feed and want one more scroll. A budget you can remove in one click is a budget you will remove.

So I put a puzzle in front of every way out. Want to keep scrolling after the budget is gone? Solve (79) × 7 + 77 + 61 + 65 = ? first. Want to disable the budget, delete the site, or import a config with looser rules? Same puzzle. The part of you that wanted the feed now has to do arithmetic, and that is the whole trick: in practice, it gives up.

And you keep control. This was never meant to be a jail. When something genuinely needs to change, you will solve the puzzle, and the fact that you did is the point: the decision became deliberate instead of automatic. Adding sites and blocking them stays free, because those are the directions that help you.

Call it a prosthetic for willpower. It does not make you disciplined, and it does not pretend to. It puts one small piece of structure exactly where the discipline runs out, and it comes off when you genuinely decide to take it off.

The rest of the extension is the boring part that makes the lock worth having: real budgets, enforced for real.

Willpower Protection

Optional mode for the hard days. When it is on, every permissive change asks you to solve a challenge first:

What it gates:

What stays free: adding sites, editing patterns, blocking, and tightening a limit (a smaller budget, a longer cooldown, a shorter session limit). The lock only guards the direction you regret.

Willpower Protection: the 15-puzzle challenge

Features

See more screenshots

Popup dashboard Settings The wall Equation challenge

How it works

  1. Add a site: right-click any page → “Add this site to Curfew”, or type a domain. Chrome asks for access to that site, and only that site
  2. Set a budget: e.g. 30 min/day. Time counts only while you are actually looking at the site
  3. Hit zero: a request-level rule intercepts the site and shows the wall: time spent today, passes left
  4. Stay anyway? 15-minute passes, counted honestly in the dashboard. Or wait: the wall comes down by itself at midnight

At install the browser shows zero warnings: the extension gets access only to the sites you add, one prompt per site, revocable at any time.

What this is not

Privacy

The full policy, the same text the Chrome Web Store listing links to: PRIVACY.md.

Install

From the Chrome Web Store:

Install Curfew on Chrome 121 or newer, or any Chromium browser that takes Chrome extensions.

From source (Chrome 121+):

git clone https://github.com/devacc8/curfew-extension.git
cd curfew-extension
npm ci

Then: chrome://extensions → Developer mode → Load unpacked → select the curfew-extension folder.

Development

npm test          # eslint + tsc --noEmit + unit tests (node --test)
npm run smoke     # E2E: real Chrome clicks through the protection flows
npm run package   # build the Chrome Web Store zip into dist/
npm run capture   # regenerate store screenshots + README demo gif
npm run promo     # regenerate the store promo tiles
npm run gen:icons # regenerate icons

The nontrivial logic (time math, pattern grammar, budget decisions, puzzle and equation generators) lives in pure modules under src/common/ and is fully unit-tested; security invariants (permission allowlist, no network calls, web-accessible surface) are enforced by tests as well.

Deep design documents:

License

MIT