{
  "generated_from": "CHANGELOG.md",
  "latest": "2.0.1",
  "releases": [
    {
      "version": null,
      "date": null,
      "unreleased": true,
      "changes": {},
      "highlights": [],
      "markdown": ""
    },
    {
      "version": "2.0.1",
      "date": "2026-10-31",
      "unreleased": false,
      "changes": {
        "Fixed": [
          "**The DeepZone icon is back** — 2.0.0's new icon was a pale mark with nothing behind it, so macOS showed an empty grey square in Finder, the Dock, notifications and the installer. The icon is now the Aperture — the same mark as the menu bar and deepzone.app — on the violet-to-blue tile, everywhere, at every size."
        ]
      },
      "highlights": [
        "The DeepZone icon is back"
      ],
      "markdown": "### Fixed\n- **The DeepZone icon is back** — 2.0.0's new icon was a pale mark with nothing behind it, so macOS showed an empty grey square in Finder, the Dock, notifications and the installer. The icon is now the Aperture — the same mark as the menu bar and deepzone.app — on the violet-to-blue tile, everywhere, at every size."
    },
    {
      "version": "2.0.0",
      "date": "2026-08-16",
      "unreleased": false,
      "changes": {
        "Added": [
          "**FocusMate lock in one click** — \"FocusMate lock · copies a link\" in the menu bar (and on the FocusMate screen): the link is on your clipboard before you can blink, Share… hands it to Messages/Mail/AirDrop, and the lock starts by itself the moment your friend sets the password. No wizard. The full flow (choose duration, passphrase) is still under More….",
          "**What are you working on?** — Start from the menu bar by naming the thing. It becomes the headline of the block screen when you drift, and a small \"Working on\" checklist lives under the timer. Recent tasks come back as one-tap suggestions. Local only.",
          "**The block screen** — Full screen, one idea: the task you were working on, a breathing orb, \"Return to work\". A one-tap reason (bored · don't know where to start · stuck · real break · something else) if you want DeepZone to learn; \"Take a break…\" opens the same bounded break with the same unlock delay, daily limit and break budget as before. A quiet quote in the corner. Nothing else.",
          "**The end-of-session question** — When a session of five minutes or more ends: \"Two hours, kept. What was pulling?\" with what got through and how many times you chose each reason before. Skip is right there. Asked once, never mid-session.",
          "**Now** — The DeepZone window opens on a ring timer, focused-today (+/− vs yesterday), impulses held, your day streak, an 08→20 histogram of when you drift with a \"Block <top pull>\" shortcut, what pulled at you, why you left, and a nudge for the dominant reason. Pro sees 14 days; free sees today.",
          "**FocusMate has its own screen** — create a lock link, see who holds your key and until when, ask to unlock, and a local record of locks held for you (kept / ended early).",
          "**Anonymous usage data toggle** — General → System. On by default; off stops every TelemetryDeck signal.",
          "**Menu bar mark** — The Aperture: white at rest, mint while a session runs, with a second dot when a FocusMate holds the key. Optional timer next to it.",
          "Categories in a profile are ranked by what actually pulled at you in the last 30 days."
        ],
        "Changed": [
          "**Profiles, one screen** — sidebar of profiles, and per profile: Blocklist (one \"Block these / Allow only these\" switch, sites, apps with the running-apps picker, ranked categories, always-allowed chips), Schedule, Rules (keywords, short-form video). Every control from the old settings window is there; the \"Quick Start h/min\" duplicate is not (the menu bar has duration).",
          "**General** in five groups: Focus defaults (default profile and duration), Guardrails (was \"Interruption\"), Working hours (End-of-day review — was \"Workspace cleanup review\" — plus a nudge when a scheduled window starts), System, Licence.",
          "The menu bar popover shows one idea per state (Ready / Running); the profile toggle list moved to the Profiles screen — schedules still switch profiles on by themselves.",
          "Manrope and JetBrains Mono ship inside the app (OFL). Dark-only.",
          "The reason list changed: frustrated and saturated became \"stuck\", the intentional break became \"a real break\", and \"something else\" was added. Old records are mapped, not lost.",
          "The HTTP block page for HTTPS sites is on the same design as the block screen; the 4-2-6 guided breath became the same slow 9-second breath as everywhere else.",
          "Upgrade shows the same price and checkout as deepzone.app (€9.99 with EARLYBIRD, €19 after) and an honest table (all 12 categories, 90-day history)."
        ],
        "Fixed": [
          "**Watch mode no longer hijacks tabs** — visiting a merely watched site (blocking off) redirected the tab to the block page. It is logged and left alone now.",
          "Any valid LemonSqueezy licence key — from any store — used to activate Pro because the store/product ids were unset. The build now refuses to release until they are set, and DEBUG builds assert. Form bodies to the licence API are properly percent-encoded.",
          "The debug triple-tap that toggled Pro is gone from release builds.",
          "The block page no longer blocks its socket thread on the main actor to read the licence state (a deadlock shape on every blocked page load).",
          "Profile-toggle feedback used a deprecated notification API; it uses UNUserNotificationCenter now and follows the nudge setting."
        ],
        "Removed": [
          "The mid-session survey (four steps: trigger → context → rest → friction) and its follow-up screens, the typed next action, the 10-minute sprint and its floating panel. Focus Music (dead player), the never-started calendar protection, quotes as notifications, an unused keyboard-shortcuts dependency."
        ]
      },
      "highlights": [
        "FocusMate lock in one click",
        "What are you working on?",
        "The block screen",
        "The end-of-session question",
        "Now",
        "FocusMate has its own screen",
        "Anonymous usage data toggle",
        "Menu bar mark",
        "Profiles, one screen",
        "General",
        "Watch mode no longer hijacks tabs"
      ],
      "markdown": "The v3 design, everywhere. Same product, less of it on screen at once.\n\n### Added\n- **FocusMate lock in one click** — \"FocusMate lock · copies a link\" in the menu bar (and on the FocusMate screen): the link is on your clipboard before you can blink, Share… hands it to Messages/Mail/AirDrop, and the lock starts by itself the moment your friend sets the password. No wizard. The full flow (choose duration, passphrase) is still under More….\n- **What are you working on?** — Start from the menu bar by naming the thing. It becomes the headline of the block screen when you drift, and a small \"Working on\" checklist lives under the timer. Recent tasks come back as one-tap suggestions. Local only.\n- **The block screen** — Full screen, one idea: the task you were working on, a breathing orb, \"Return to work\". A one-tap reason (bored · don't know where to start · stuck · real break · something else) if you want DeepZone to learn; \"Take a break…\" opens the same bounded break with the same unlock delay, daily limit and break budget as before. A quiet quote in the corner. Nothing else.\n- **The end-of-session question** — When a session of five minutes or more ends: \"Two hours, kept. What was pulling?\" with what got through and how many times you chose each reason before. Skip is right there. Asked once, never mid-session.\n- **Now** — The DeepZone window opens on a ring timer, focused-today (+/− vs yesterday), impulses held, your day streak, an 08→20 histogram of when you drift with a \"Block <top pull>\" shortcut, what pulled at you, why you left, and a nudge for the dominant reason. Pro sees 14 days; free sees today.\n- **FocusMate has its own screen** — create a lock link, see who holds your key and until when, ask to unlock, and a local record of locks held for you (kept / ended early).\n- **Anonymous usage data toggle** — General → System. On by default; off stops every TelemetryDeck signal.\n- **Menu bar mark** — The Aperture: white at rest, mint while a session runs, with a second dot when a FocusMate holds the key. Optional timer next to it.\n- Categories in a profile are ranked by what actually pulled at you in the last 30 days.\n\n### Changed\n- **Profiles, one screen** — sidebar of profiles, and per profile: Blocklist (one \"Block these / Allow only these\" switch, sites, apps with the running-apps picker, ranked categories, always-allowed chips), Schedule, Rules (keywords, short-form video). Every control from the old settings window is there; the \"Quick Start h/min\" duplicate is not (the menu bar has duration).\n- **General** in five groups: Focus defaults (default profile and duration), Guardrails (was \"Interruption\"), Working hours (End-of-day review — was \"Workspace cleanup review\" — plus a nudge when a scheduled window starts), System, Licence.\n- The menu bar popover shows one idea per state (Ready / Running); the profile toggle list moved to the Profiles screen — schedules still switch profiles on by themselves.\n- Manrope and JetBrains Mono ship inside the app (OFL). Dark-only.\n- The reason list changed: frustrated and saturated became \"stuck\", the intentional break became \"a real break\", and \"something else\" was added. Old records are mapped, not lost.\n- The HTTP block page for HTTPS sites is on the same design as the block screen; the 4-2-6 guided breath became the same slow 9-second breath as everywhere else.\n- Upgrade shows the same price and checkout as deepzone.app (€9.99 with EARLYBIRD, €19 after) and an honest table (all 12 categories, 90-day history).\n\n### Fixed\n- **Watch mode no longer hijacks tabs** — visiting a merely watched site (blocking off) redirected the tab to the block page. It is logged and left alone now.\n- Any valid LemonSqueezy licence key — from any store — used to activate Pro because the store/product ids were unset. The build now refuses to release until they are set, and DEBUG builds assert. Form bodies to the licence API are properly percent-encoded.\n- The debug triple-tap that toggled Pro is gone from release builds.\n- The block page no longer blocks its socket thread on the main actor to read the licence state (a deadlock shape on every blocked page load).\n- Profile-toggle feedback used a deprecated notification API; it uses UNUserNotificationCenter now and follows the nudge setting.\n\n### Removed\n- The mid-session survey (four steps: trigger → context → rest → friction) and its follow-up screens, the typed next action, the 10-minute sprint and its floating panel. Focus Music (dead player), the never-started calendar protection, quotes as notifications, an unused keyboard-shortcuts dependency."
    },
    {
      "version": "1.3.0",
      "date": "2026-08-16",
      "unreleased": false,
      "changes": {
        "Added": [
          "**Workspace cleanup review** — Opt-in (Settings → Working hours). When a focus session ends, the review arms; your first distraction during configured working hours (visiting a watched site or opening a listed app) brings up a tidy-up window listing open apps and every browser tab (Safari/Chrome/Brave/Edge/Arc/Vivaldi/Opera). Distraction tabs come pre-checked; nothing closes unless ticked. Fires at most once per session end",
          "**Calm breathing page instead of a dead browser error** — Blocked HTTPS sites used to end on the browser's \"can't connect\" page. Now, once a blocked navigation is confirmed, DeepZone redirects the tab to a meditative page: a guided breathing orb (4s in, 2s hold, 6s out), soft twilight palette, and rotating motivational quotes in the same handwritten style as the interruption popup. The block page for HTTP sites uses the same new design"
        ],
        "Fixed": [
          "**No more popups from tracking pixels** — Website interruptions only fire when the frontmost app is a browser whose active tab is actually on the blocked domain (verified via AppleScript for Safari/Chrome/Brave/Edge/Arc/Vivaldi/Opera). Reddit pixels and embeds loaded by other pages or apps no longer trigger the popup",
          "**Blocked app is no longer visible behind the interruption popup** — App interruptions now show an opaque full-screen cover on every screen under the popup, so the app can't be seen or browsed while deciding. Blocked apps are also hidden instantly and force-terminated if they ignore the polite quit (Catalyst apps like Stocks/Bourse did)"
        ]
      },
      "highlights": [
        "Workspace cleanup review",
        "Calm breathing page instead of a dead browser error",
        "No more popups from tracking pixels",
        "Blocked app is no longer visible behind the interruption popup"
      ],
      "markdown": "### Added\n- **Workspace cleanup review** — Opt-in (Settings → Working hours). When a focus session ends, the review arms; your first distraction during configured working hours (visiting a watched site or opening a listed app) brings up a tidy-up window listing open apps and every browser tab (Safari/Chrome/Brave/Edge/Arc/Vivaldi/Opera). Distraction tabs come pre-checked; nothing closes unless ticked. Fires at most once per session end\n- **Calm breathing page instead of a dead browser error** — Blocked HTTPS sites used to end on the browser's \"can't connect\" page. Now, once a blocked navigation is confirmed, DeepZone redirects the tab to a meditative page: a guided breathing orb (4s in, 2s hold, 6s out), soft twilight palette, and rotating motivational quotes in the same handwritten style as the interruption popup. The block page for HTTP sites uses the same new design\n\n### Fixed\n- **No more popups from tracking pixels** — Website interruptions only fire when the frontmost app is a browser whose active tab is actually on the blocked domain (verified via AppleScript for Safari/Chrome/Brave/Edge/Arc/Vivaldi/Opera). Reddit pixels and embeds loaded by other pages or apps no longer trigger the popup\n- **Blocked app is no longer visible behind the interruption popup** — App interruptions now show an opaque full-screen cover on every screen under the popup, so the app can't be seen or browsed while deciding. Blocked apps are also hidden instantly and force-terminated if they ignore the polite quit (Catalyst apps like Stocks/Bourse did)"
    },
    {
      "version": "1.2.1",
      "date": "2026-07-21",
      "unreleased": false,
      "changes": {
        "Added": [
          "**Behavioral interruption flow** — Opening a blocked app now asks \"What's making you leave your work?\" (bored / frustrated / saturated / don't know where to start / intentional break) with a contextual response for each trigger, per the rebuild brief",
          "**Bounded intentional breaks** — Unlocking grants a 5/10/15-minute allowance for that one target only, then re-blocks automatically with a notification",
          "**Unlock friction** — 30s delay with countdown, shows today's unlock count, escalates to 120s after 3 unlocks/day. Neutral tone, no guilt language",
          "**Quick Lock** — One-click lock using the last-used duration. Random passphrase; early exit only via a deliberate 5-minute emergency unlock wait",
          "**Next-action floating panel** — The smallest next action stays visible top-right after returning to work, with 10-minute sprint countdown",
          "**Pattern dashboard** — Menu bar now shows impulses interrupted, returns to work, return-to-work rate, and top trigger of the day",
          "**FocusMate notifications** — Notification when your FocusMate sets the password, plus lock start/end and break-expiry notifications",
          "Menu bar icon shows a padlock while Lock Mode is active"
        ],
        "Changed": [
          "Blocked-app termination no longer shows a quote notification — the interruption window replaces it",
          "Lock buttons redesigned: ⚡ Quick Lock + \"More…\" for the full passphrase/FocusMate flow",
          "\"Return to work\" now kills the distraction for real: closes matching browser tabs, terminates the app, and snoozes the popup (5 min; 10 min for sprints) so it doesn't reappear while you work",
          "Daily break budget: configurable max break minutes/day (default 30) — when spent, listed sites/apps stay locked until tomorrow",
          "Watch mode: visits to your listed sites are logged (not blocked) even outside focus sessions, via DNS passthrough — toggleable in Settings",
          "Daily pattern report notification after 18:00 with trend vs yesterday (urge journal)",
          "Handwritten motivational quote in the interruption popup",
          "Focus Music removed from the menu bar (player broken; will return)",
          "Landing page accent shifted from orange to violet"
        ]
      },
      "highlights": [
        "Behavioral interruption flow",
        "Bounded intentional breaks",
        "Unlock friction",
        "Quick Lock",
        "Next-action floating panel",
        "Pattern dashboard",
        "FocusMate notifications"
      ],
      "markdown": "### Added\n- **Behavioral interruption flow** — Opening a blocked app now asks \"What's making you leave your work?\" (bored / frustrated / saturated / don't know where to start / intentional break) with a contextual response for each trigger, per the rebuild brief\n- **Bounded intentional breaks** — Unlocking grants a 5/10/15-minute allowance for that one target only, then re-blocks automatically with a notification\n- **Unlock friction** — 30s delay with countdown, shows today's unlock count, escalates to 120s after 3 unlocks/day. Neutral tone, no guilt language\n- **Quick Lock** — One-click lock using the last-used duration. Random passphrase; early exit only via a deliberate 5-minute emergency unlock wait\n- **Next-action floating panel** — The smallest next action stays visible top-right after returning to work, with 10-minute sprint countdown\n- **Pattern dashboard** — Menu bar now shows impulses interrupted, returns to work, return-to-work rate, and top trigger of the day\n- **FocusMate notifications** — Notification when your FocusMate sets the password, plus lock start/end and break-expiry notifications\n- Menu bar icon shows a padlock while Lock Mode is active\n\n### Changed\n- Blocked-app termination no longer shows a quote notification — the interruption window replaces it\n- Lock buttons redesigned: ⚡ Quick Lock + \"More…\" for the full passphrase/FocusMate flow\n- \"Return to work\" now kills the distraction for real: closes matching browser tabs, terminates the app, and snoozes the popup (5 min; 10 min for sprints) so it doesn't reappear while you work\n- Daily break budget: configurable max break minutes/day (default 30) — when spent, listed sites/apps stay locked until tomorrow\n- Watch mode: visits to your listed sites are logged (not blocked) even outside focus sessions, via DNS passthrough — toggleable in Settings\n- Daily pattern report notification after 18:00 with trend vs yesterday (urge journal)\n- Handwritten motivational quote in the interruption popup\n- Focus Music removed from the menu bar (player broken; will return)\n- Landing page accent shifted from orange to violet"
    },
    {
      "version": "1.2.0",
      "date": "2026-02-07",
      "unreleased": false,
      "changes": {
        "Fixed": [
          "**DMG now has proper app icon** — Volume icon displays correctly in Finder",
          "**DMG installer improved** — Styled layout with app and Applications folder side by side",
          "**App bundle structure fixed** — Resources properly included, menu bar icon now appears reliably"
        ],
        "Changed": [
          "Build script improved with better error handling and resource copying"
        ]
      },
      "highlights": [
        "DMG now has proper app icon",
        "DMG installer improved",
        "App bundle structure fixed"
      ],
      "markdown": "### Fixed\n- **DMG now has proper app icon** — Volume icon displays correctly in Finder\n- **DMG installer improved** — Styled layout with app and Applications folder side by side\n- **App bundle structure fixed** — Resources properly included, menu bar icon now appears reliably\n\n### Changed\n- Build script improved with better error handling and resource copying"
    },
    {
      "version": "1.1.0",
      "date": "2026-02-07",
      "unreleased": false,
      "changes": {
        "Added": [
          "**FocusMate Lock** — Send a link to a friend who sets the password. You can't cheat because you never know the password! Access via deepzone.app/lock/",
          "**Focus Music** — Built-in ambient music player using YouTube embeds. Plays focus-friendly audio while YouTube browsing stays blocked",
          "**YouTube Shorts blocking** — Block Shorts/Reels specifically without blocking all of YouTube. Uses PAC proxy for path-level blocking",
          "**Enriched categories** — 3-4x more domains per category. New categories: Adult Content, Dating Sites",
          "**Colored toggle style** — Profile toggles now show red when OFF for better visibility"
        ],
        "Improved": [
          "Block page server — Better TLS detection, faster connection handling",
          "Quick Focus — Now properly activates/deactivates the selected profile",
          "FocusMate branding — Consistent \"FocusMate\" terminology throughout the app",
          "Helper script — PAC proxy support for content-level blocking"
        ],
        "Fixed": [
          "Lock password handling — Fixed issue where FocusMate remote password wasn't applied correctly",
          "Profile toggle — Enforcement now triggers immediately when toggling profiles"
        ]
      },
      "highlights": [
        "FocusMate Lock",
        "Focus Music",
        "YouTube Shorts blocking",
        "Enriched categories",
        "Colored toggle style"
      ],
      "markdown": "### Added\n- **FocusMate Lock** — Send a link to a friend who sets the password. You can't cheat because you never know the password! Access via deepzone.app/lock/\n- **Focus Music** — Built-in ambient music player using YouTube embeds. Plays focus-friendly audio while YouTube browsing stays blocked\n- **YouTube Shorts blocking** — Block Shorts/Reels specifically without blocking all of YouTube. Uses PAC proxy for path-level blocking\n- **Enriched categories** — 3-4x more domains per category. New categories: Adult Content, Dating Sites\n- **Colored toggle style** — Profile toggles now show red when OFF for better visibility\n\n### Improved\n- Block page server — Better TLS detection, faster connection handling\n- Quick Focus — Now properly activates/deactivates the selected profile\n- FocusMate branding — Consistent \"FocusMate\" terminology throughout the app\n- Helper script — PAC proxy support for content-level blocking\n\n### Fixed\n- Lock password handling — Fixed issue where FocusMate remote password wasn't applied correctly\n- Profile toggle — Enforcement now triggers immediately when toggling profiles"
    },
    {
      "version": "1.0.1",
      "date": "2026-01-15",
      "unreleased": false,
      "changes": {
        "Fixed": [
          "Minor bug fixes and stability improvements"
        ]
      },
      "highlights": [],
      "markdown": "### Fixed\n- Minor bug fixes and stability improvements"
    },
    {
      "version": "1.0.0",
      "date": "2026-01-01",
      "unreleased": false,
      "changes": {
        "Added": [
          "Initial release",
          "Website blocking via /etc/hosts",
          "App blocking (Pro)",
          "Focus profiles with schedules",
          "Quick Focus timer",
          "Block page with motivational quotes",
          "Lock Mode (Pro)",
          "LemonSqueezy integration for Pro purchases"
        ]
      },
      "highlights": [],
      "markdown": "### Added\n- Initial release\n- Website blocking via /etc/hosts\n- App blocking (Pro)\n- Focus profiles with schedules\n- Quick Focus timer\n- Block page with motivational quotes\n- Lock Mode (Pro)\n- LemonSqueezy integration for Pro purchases"
    }
  ]
}
