Skip to content

Latest commit

 

History

History
206 lines (157 loc) · 9.79 KB

File metadata and controls

206 lines (157 loc) · 9.79 KB

Project Plan & Roadmap

🎯 Goal

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.

📝 Summary

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


1. Guiding goals ✅

  • 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.

2. Legal safety rules ✅

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.


3. Scope — what we build, in order ✅

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.


4. Architecture (high level) ✅ / ⬜

  • 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.lockedUntil is null (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.


5. Tech stack ✅

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

6. Distribution plan ✅ / ⬜

  • 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.

7. Branding ⬜

  • Final app nameVitreous
  • Logo direction (idea: frosted-glass / cold / clarity theme)
  • Color palette & visual identity

8. Our step-by-step path (conversation map)

  1. Orientation — tech, features, backend?, legal (done)
  2. Scope decision — websites first, apps later (done)
  3. NameVitreous
  4. 🔜 Feature decisions — scheduling + "hard-to-bypass" behavior
  5. 🔜 Logo direction
  6. 🔜 Detailed architecture
  7. 🔜 Future roadmap (app blocking, etc.)
  8. 🔜 Distribution details (repo name, license, download page)
  9. 🔜 Final design doc → review → implementation plan

9. Open questions parking lot

(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 in docs/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. See docs/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.