You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore(release): bump version to 1.1.0 and update documentation
- Bump version to 1.1.0 across manifest, package.json, and UI files
- Update CHANGELOG.md with comprehensive v1.1.0 release notes
- Refine README.md and landing page to reflect YouTube Watch support and new features
- improve manifest and package description
-**YouTube Watch support**: Limitra now tracks and enforces limits on regular YouTube Watch pages (`/watch`) in addition to Shorts, with a 10-second watch threshold before a video counts.
13
+
-**Block Condition setting** (`Strict` / `Flexible`): Choose whether enforcement triggers when **either** limit is reached (OR) or only when **both** limits are exceeded simultaneously (AND). Configurable from the Command Center with dynamic descriptions and full i18n support.
14
+
-**Customizable Block Duration**: Users can now set how long a block lasts (15 minutes to 24 hours) instead of a fixed 6-hour interval.
15
+
-**Smart Session Lock**: An immutable `NEXT_RESET_KEY` prevents time-travel bypass during active blocks - the reset time is locked in as soon as a block begins.
16
+
-**Settings Lock During Active Block**: Settings modifications (limits, time limits, tracking mode) are rejected while a block is active, preventing last-second workarounds.
17
+
-**Sarcastic and Stoic quote tones**: Two new motivational tone modes added alongside the existing Gentle, Harsh, and Philosophical options, with expanded quote sets across all tones.
18
+
-**Global Settings Reset**: A dedicated reset action in the Command Center restores all global preferences to defaults.
19
+
-**Brutalist Modal Component**: A reusable confirmation modal used for the reset action and future destructive operations.
20
+
-**Brutal Tooltip Component**: Contextual tooltips integrated across the settings dashboard to explain options inline.
21
+
-**Hot-Swap Platform Detection**: The content engine now detects platform boundary crossings (e.g., Shorts → Watch) and re-bootstraps automatically without page reload, with full lifecycle cleanup to prevent memory leaks.
22
+
-**Dynamic Overlay Enforcement Reason**: The blocking overlay now displays the precise trigger - `Time`, `Count`, `Time & Video Limits` (both), or `Bypass` - resolved at enforcement time.
23
+
-**Ports & Adapters (Hexagonal) Architecture**: Core logic is now fully decoupled from Chrome APIs via abstract interfaces (`core/interfaces/`) and concrete adapters (`adapters/chrome/`). `BackgroundOrchestrator` is now environment-agnostic. Dependencies are injected exclusively at the composition roots (`background.ts`, `content.ts`).
24
+
-**Multi-Platform Scoped Storage**: All storage keys are dynamically prefixed per platform (`limitra_${platform}_key`), eliminating cross-platform data collisions and laying the foundation for future platform expansion.
25
+
-**Context-Aware Popup UI**: The popup now auto-detects the active platform or presents a platform selector dropdown on unsupported pages.
26
+
- Twitter/X social links added across the website and extension.
27
+
-`background-orchestrator.test.ts` added; `storage.test.ts` updated to use injected `StorageFacade`.
28
+
29
+
### Changed
30
+
31
+
-`StorageFacade` converted from a singleton to an injectable class.
32
+
-`SessionManager` now receives injected `StorageFacade` and `ConnectionManager`.
33
+
-`Messenger` now receives an injected `MessageBus`, removing direct `chrome.runtime` calls.
34
+
-`BLOCK_NOW` messages are now filtered by `PlatformId` to prevent cross-platform message crosstalk.
35
+
-`PlatformAdapter` interface migrated to `src/core/interfaces/` and its `id` property is now `readonly`.
36
+
- Background service worker replaces `window.matchMedia` (invalid in Service Workers) with `storage.getTheme()`.
37
+
- Overlay persistence watcher and controller split into separate modules (`overlay/persistence.ts`, `overlay/controller.ts`, `overlay/renderer.ts`).
38
+
39
+
### Fixed
40
+
41
+
-**Ghost overlay bug**: A stale blocking overlay left over from a previous installation or extension reload is now detected and removed on bootstrap.
42
+
- Custom select initialization timing in the popup - `chrome.tabs.query` is now properly awaited before the platform select is initialized.
43
+
- Time tracking no longer runs when a limit is set to zero.
44
+
- Live time limit changes are now applied immediately without requiring a page reload.
45
+
-`e.isTrusted` check removed from `custom-select.ts` to allow programmatic change events.
46
+
47
+
### Security
48
+
49
+
-`isCurrentlyBlocked()` is now the central gatekeeper: enforcement and punishment logic only executes after this check passes, ensuring AND/OR conditions are always respected.
50
+
- Smart session lock (`NEXT_RESET_KEY`) prevents time-travel bypass: the reset timestamp is frozen once a block is active, blocking attempts to shorten the penalty by manipulating the clock.
@@ -90,19 +90,29 @@ Configure your limits, tracking mode, theme, and behavior from a dedicated contr
90
90
## Why Limitra?
91
91
92
92
-**Hard limits that actually stop you**: playback is paused, muted, and blocked the moment you hit your limit.
93
-
-**Two dimensions of control**: track by watched Shorts count, session time, or both together.
94
-
-**Designed against easy workarounds**: Limitra watches for counter resets, suspicious wipes, and hidden overlays.
93
+
-**Two dimensions of control**: track by watched video count, session time, or both together.
94
+
-**Your rules, your conditions**: choose whether one limit or both limits must be reached before enforcement kicks in.
95
+
-**Designed against easy workarounds**: Limitra watches for counter resets, suspicious wipes, and hidden overlays - and locks settings during active blocks.
95
96
-**Built for practical daily use**: quick popup stats, clear settings, theme support, and multilingual UI.
96
97
97
98
## Features
98
99
99
100
### Enforcement Core
100
101
101
102
- Dual-limit system based on **video count** and **active session time**
103
+
-**Block Condition** setting: `Strict` (OR - either limit triggers a block) or `Flexible` (AND - both limits must be reached)
104
+
-**Customizable block duration**: choose how long a block lasts, from 15 minutes to 24 hours
102
105
- Fullscreen enforcement overlay triggered instantly on limit breach
103
-
-Clear enforcement reasons: count, time, or anti-bypass
106
+
-Dynamic enforcement reason display: `Count`, `Time`, `Time & Video Limits`, or `Bypass`
104
107
- Automatic pause and mute of active videos
105
108
- Disables playback-related keyboard shortcuts
109
+
- Settings are locked during an active block to prevent last-second changes
110
+
111
+
### Platform Support
112
+
113
+
-**YouTube Shorts**: tracks video count and session time with a 1.5-second watch threshold
114
+
-**YouTube Watch**: tracks regular video viewing with a 10-second watch threshold
115
+
-**Hot-swap detection**: automatically switches tracking context when navigating between Shorts and Watch without a page reload
106
116
107
117
### Tracking & Intelligence
108
118
@@ -116,13 +126,18 @@ Configure your limits, tracking mode, theme, and behavior from a dedicated contr
116
126
- Detects manual counter resets and storage manipulation
117
127
- Prevents overlay removal via DevTools or CSS tampering
118
128
- Identifies rapid storage wipe attempts
129
+
- Smart session lock: block duration is frozen at enforcement time to prevent clock manipulation
130
+
- Central `isCurrentlyBlocked()` gatekeeper enforced before any punishment executes
119
131
- Enforces immediate blocking when suspicious behavior is detected
120
132
121
133
### User Interface
122
134
123
135
- Live usage stats and progress bars in the popup
124
-
- Dedicated **Command Center** dashboard for managing limits, modes, themes, and behavior
125
-
- Motivational quote system with multiple tone styles
136
+
- Context-aware popup: auto-selects the active platform or shows a platform selector on unsupported pages
137
+
- Dedicated **Command Center** dashboard for managing limits, modes, block condition, block duration, themes, and behavior
138
+
- Motivational quote system with multiple tone styles: Random, Gentle, Harsh, Philosophical, Sarcastic, Stoic
139
+
- Brutalist tooltip components for inline option explanations
140
+
- Confirmation modal for destructive actions (e.g., global settings reset)
Copy file name to clipboardExpand all lines: docs/index.html
+6-6Lines changed: 6 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -29,7 +29,7 @@
29
29
/>
30
30
<meta
31
31
name="keywords"
32
-
content="limitra extension, block youtube shorts, stop infinite scrolling, focus browser extension, productivity chrome extension, limit screen time, digital discipline tool"
32
+
content="limitra extension, block youtube videos, stop infinite scrolling, focus browser extension, productivity chrome extension, limit screen time, digital discipline tool"
33
33
/>
34
34
<metaname="author" content="Limitra" />
35
35
<metaname="robots" content="index, follow" />
@@ -63,7 +63,7 @@
63
63
"@type": "SoftwareApplication",
64
64
"name": "Limitra",
65
65
"url": "https://limitra.xyz",
66
-
"description": "Limitra is a strict, local-first browser extension that blocks endless scrolling and enforces time or video limits on YouTube Shorts.",
66
+
"description": "Limitra is a strict, local-first browser extension that blocks endless scrolling and enforces time or video limits on YouTube Videos.",
0 commit comments