Build a free, beautifully-designed website & app blocker that genuinely helps people focus and beat distraction — distributed as an open-source app anyone can download for free. The signature differentiator is a modern, Apple-style "liquid glass" interface that feels premium even though it costs nothing.
A desktop application (Windows first, other platforms later) that lets a user block distracting websites — and in later phases, apps — on demand or on a schedule. It runs entirely on the user's own computer: no server, no online accounts, and all settings stored in a local file. This keeps it free to run and private by design. It is distributed through a public GitHub repository with official releases and a dedicated download webpage.
It is inspired by the concept of focus-blocker apps (like Cold Turkey), but is an original product — our own name, our own code, our own design — with no copied branding or assets (see Legal Safety rules below).
In one line: a free, open-source, locally-run focus blocker with a beautiful liquid-glass UI.
Name: Vitreous (decided — "vitreous" = glasslike, fitting the liquid-glass identity).
Status legend: ✅ Decided | ⬜ Still to decide | 🔜 Future / later phase
- ✅ Free for everyone — no paywall, no subscription.
- ✅ Beautiful design — Apple-style "liquid glass" UI as a signature look.
- ✅ Useful — genuinely helps people block distractions.
- ✅ Public & open — open-source GitHub repo with releases.
- ✅ Legally safe — see Section 2.
Building a focus/blocker app is fully legal (many competitors exist). To stay safe:
- ✅ Do NOT use the name "Cold Turkey", their logo, or branding.
- ✅ Do NOT copy their code, icons, or exact layouts.
- ✅ Do NOT claim any affiliation with them.
- ✅ DO use our own name, our own code, our own original design.
- ✅ DO take inspiration from the concept (this is allowed).
Rule of thumb: same idea, our brand, our code, our design.
| Phase | Feature | Status |
|---|---|---|
| 1 | Website blocking (block sites like youtube.com, reddit.com) | ✅ Start here |
| 2 | App blocking (block apps/games like Steam.exe) | ✅ Built (kill-on-sight) |
| 3 | Scheduling (recurring blocks, e.g. 9am–5pm weekdays) | ✅ Built (pending Windows verification) |
| 4 | "Hard to bypass" lockdown (Cold Turkey's signature stubbornness) | ✅ Built (pending Windows verification) |
| 5 | Reflections (activity history & insights — focus time, block counts, heatmap, trends) | ✅ Built (pending Windows verification) |
Vision: block anything distracting. We just get there in solid steps instead of one giant half-working version.
- ✅ No backend / no server needed. Everything runs locally on the user's PC.
- ✅ All settings/block-lists saved in a local file on the user's machine.
- ⬜ Detailed component architecture — to be designed (Step 4 of our plan).
Enforcement note (the "real engineering" part): ✅ decided — websites are
blocked via the Windows hosts file. Enabled website rules are written to a fenced
# Vitreous region (each domain → 0.0.0.0, expanded to apex + www.). Writing
hosts needs admin, so the app runs unprivileged and delegates the write to a
once-approved elevated Windows Scheduled Task — installed on the first Start
(one UAC prompt, ever) and thereafter the single hosts writer for manual +
scheduled + lockdown enforcement. Start/Stop write the desired state to
settings.json and trigger the helper (schtasks /Run, no prompt); enforceNow()
verifies the change applied and falls back to a direct elevated write if the helper
is unavailable, so blocking never silently fails. The pure desired-state logic is
enforce.js#computeDesiredBlock (unit-tested); the minute-tick reconciles all
sources in one pass. Blocking is a master switch with optional timed sessions;
state lives in settings.json (blocking: { active, sessionEndsAt, source }) and
is reconciled on launch. See docs/superpowers/specs/2026-06-02-blocking-engine-design.md.
Scheduling enforcement: ✅ built — schedules are time-window rules
(daily / specific weekdays / a single date / a date range, incl. overnight
windows) over the existing blocklist. A once-approved elevated Windows
Scheduled Task runs Vitreous.exe --scheduler-tick every minute and reconciles
the hosts file silently — even when the app is closed. Edge-triggered, so a manual
Stop persists until the next window (a suppressedUntil marker keeps that true
across app relaunches). Global notifications fire a start toast and an optional
pre-start reminder (customizable lead time). Sounds are deferred (user-supplied in
assets/sounds/). See docs/superpowers/specs/2026-06-04-scheduling-design.md.
App enforcement: ✅ decided — blocked apps are enforced by a background
watcher that polls running processes (~1.5s) and force-closes matches with a
desktop notification, while a session is active. Hybrid matching: entries added by
picking/browsing match the exact exe path; typed entries match the exe name.
Apps are added three ways (pick a running window, type the exe name, or browse for
an .exe). Killing is best-effort (elevated apps survive — addressed in the
phase-4 lockdown). See docs/superpowers/specs/2026-06-02-app-blocking-design.md.
Lockdown enforcement: ✅ built — now mandatory. Lockdown is no longer a
toggle: every session is a locked session (the enable/disable switch was
removed; only password count/length remain configurable). Starting one generates
random passwords and a stop requires retyping the user's reason + a cost line and
all passwords (masked, no paste, verified in the main process). The blocklist is
frozen (add-only) during a session, and the elevated minute-tick self-heals the
locked snapshot (re-applies hosts, reverts an active flip).
Two session types, both locked:
- Timed — passwords shown once (60s reveal), hash-only afterward; a lost password just means waiting out the timer.
- "Until I stop" (indefinite) —
lockSession.lockedUntilisnull(never auto-expires); its plaintext passwords are persisted locally and stay re-viewable for the whole session (Home "View passwords" + shown in the stop gate), so it can never become an un-stoppable trap.
Known limitation: system-clock rollback is not defended. See
docs/superpowers/specs/2026-06-05-lockdown-design.md and
docs/superpowers/specs/2026-06-14-mandatory-lockdown-design.md.
Reflections (activity history): ✅ built — a new append-only local event
log events.jsonl (userData dir) records focus sessions (start/end + duration),
app kills, and website blocks. The browser extension reports blocked visits back
over the existing loopback bridge. Aggregation runs in the main process
(history.js) and only a derived summary crosses to the renderer, which renders it
with Recharts (focus-over-time, top-blocked, goal ring) plus a CSS time-of-day
heatmap. Optional daily focus goal in settings. Retention ~365 days; "Clear
history" wipes the log. Still local-first — nothing leaves the machine. See
docs/superpowers/specs/2026-06-05-reflections-design.md.
| Layer | Technology | Why |
|---|---|---|
| App shell | Electron | Build a desktop app with web tech; full design control |
| UI design | HTML + CSS | Where the "liquid glass" look lives |
| Interactivity | JavaScript (likely React) | Makes the UI dynamic |
| OS / enforcement | Node.js (bundled with Electron) | Touches the system to enforce blocks |
| Storage | Local file (e.g. JSON) | No server; keeps it free |
- ✅ Open-source GitHub repository (public).
- ✅ GitHub Releases — users download the installable app from there.
- ✅ Download webpage — a landing/download site (planned via GitHub Pages).
- ⬜ Repo name, license choice, and webpage design — to be decided.
- ✅ Final app name — Vitreous
- ⬜ Logo direction (idea: frosted-glass / cold / clarity theme)
- ⬜ Color palette & visual identity
- ✅ Orientation — tech, features, backend?, legal (done)
- ✅ Scope decision — websites first, apps later (done)
- ✅ Name — Vitreous
- 🔜 Feature decisions — scheduling + "hard-to-bypass" behavior
- 🔜 Logo direction
- 🔜 Detailed architecture
- 🔜 Future roadmap (app blocking, etc.)
- 🔜 Distribution details (repo name, license, download page)
- 🔜 Final design doc → review → implementation plan
(We'll collect anything we want to revisit here.)
- Final name confirmation
- Should blocks be on-demand, scheduled, or both?
How "stubborn" should the lockdown be (easy to turn off vs. truly hard)?✅ Decided indocs/superpowers/specs/2026-06-05-lockdown-design.md: stop gate (paragraph game + 5 generated passwords), frozen blocklist during a session, self-healing watchdog. Lockdown is now mandatory (2026-06-14) — no on/off toggle; every session is locked. Indefinite ("until I stop") sessions are allowed and keep their passwords viewable so they're never a trap. Seedocs/superpowers/specs/2026-06-14-mandatory-lockdown-design.md.- Repo name + which open-source license
- Cross-platform later (Mac/Linux) or Windows-only?
This is a living document. We update it together, step by step.