Blog
Programming challenges, experiments, and build notes behind short videos.
Programming challenges, experiments, and build notes behind short videos.

I have tried every website blocker. I have also defeated every website blocker, usually within a minute, usually while telling myself I was "just turning it off to check one thing." If you have ever done the same, you already know the design flaw: a blocker treats you as an adversary to be stopped, and a determined brain always wins that fight eventually. The moment it loses, you stop trusting it — and an untrusted blocker is just a browser extension you feel guilty about.
So I built icecut on the opposite bet. It does not try to stop you. It assumes you will get through, and spends its entire design budget making sure that when you do, the cut is deliberate, timed, and permanently on the record.
A hard block is a binary: allowed or forbidden. "Forbidden" lasts exactly until you want it badly enough, and then you disable the extension, add an exception, or just pick up your phone. Nothing is logged, nothing is learned, and the tool that was supposed to help is now the thing you are sneaking around. The failure is not your willpower. It is that the tool picked a fight it was always going to lose.
icecut flags the sites you choose — it calls them daemons — and when you open one, it does not slam a door. It runs a breach protocol: a full-screen interstitial that makes you type a reason for being there, holds you through a forced countdown, and then lets you through. Every completed visit is a breach, and every breach is written to a log with your reason attached.
You can always cut through. That is the point. What you cannot do is cut through silently.
In cyberpunk canon, ICE — Intrusion Countermeasures Electronics — is the software guarding a secured system, and an ICE-cutter is the netrunner's tool for slicing through it. icecut just inverts who is being defended. Your attention is the secured system. The distracting sites are hostile ICE probing it, and every time you open one you are cutting through your own guard — so icecut records the cut. The metaphor is committed, but it never lies about what the software actually does: it logs visits to sites you flagged yourself. Nothing more.
Open instagram.com with icecut watching and the feed never loads first. The screen goes to a dark interstitial:
HOSTILE ICE DETECTED — instagram.com
BLACK ICE. This node has flatlined you before.
There is a field you have to fill in — the intrusion log entry, your reason for jacking in. It has to be real: at least ten characters, and "n/a" or a row of spaces gets rejected. Then comes a countdown you cannot skip. The delay scales with how dangerous you rated the site — five seconds at the mildest setting, climbing a second per severity step. Instagram and X ship at severity 8, which is a twelve-second hold; TikTok is a nine, so thirteen. There is no "skip," no "trust this site for an hour," no snooze. When the timer ends you are through, and the breach is logged.
Twelve seconds is nothing, and also enough. It is long enough for the impulse to lose its grip, and long enough that typing "just checking notifications" for the fortieth time this week starts to feel like exactly what it is.
Everything above is scaffolding around one screen: the log. Seeing your own words — "quick break," "just checking," "bored" — stacked up and counted back to you is the intervention. There is no streak badge, no shame animation, no AI "insight" telling you what it all means. Your reasons are the insight. The tool's only job is to hold up the mirror and then get out of the way.
Anything that would "boost engagement" by breaking one of these does not ship. No gamification, no leaderboards, no social feed — those are just new distractions wearing a productivity costume.
icecut is one Bun-workspaces monorepo with three surfaces that share a single source of truth:
The rules that matter — what counts as a daemon, how a domain is matched, how long a breach delay lasts, whether a reason is valid — live once in a shared @icecut/core package as Zod schemas and pure functions, so the extension and the server can never drift apart on them. Domain matching uses tldts on the registrable domain, so m.instagram.com and instagram.com/reels both resolve to the same daemon. And because focus does not wait for a network, the extension is offline-first: breaches queue locally and sync in idempotent batches, so a cut is never lost and never double-counted.
v0 is done and dogfoodable: the extension enforces the breach protocol, keeps a local breach log, and ships with the classic attention-attackers flagged out of the box, next to a cyberpunk landing page and a working waitlist. Accounts, cross-device sync, and the full dashboard — the log, focus runs, uptime — are v1. The extension is completely usable offline in the meantime.
If a distraction tool that lets you through but never lets you forget sounds like the right kind of wrong, the waitlist is at icecut.app. It will not block you. It will just remember every cut you make.
