Releases: mtskf/Snooooze
Releases · mtskf/Snooooze
v0.3.1
Changelog
All notable changes to this project will be documented in this file.
v0.3.1 - 2026-01-06
Fixed
- Vite Build Warnings: Resolved mixed static/dynamic imports in
snoozeLogic.ts. - Production Assets: Fixed asset loading in production builds by configuring correct
basepath in Vite and updating Tailwind content paths. - Skipped Tests: Documented test skipping reasons in
Popup.test.tsx.
Removed
- Dead Code: Removed unused UI components (
command.tsx,popover.tsx) and dependencies (@radix-ui/react-popover,cmdk). - Unused Constants: Removed
OTHER_SHORTCUTSconstant.
v0.3.0 - 2026-01-04
Added
- Message Passing Contracts: New
src/messages.jscentralizes message actions, request validation, handler registry, andsendMessage()helper for typed UI/background communication. - Chrome API Wrapper: New
src/utils/ChromeApi.jsprovides promise-based wrappers for storage, tabs, windows, notifications, alarms, runtime, and commands with Firefox fallbacks. - Schema Versioning: V2 schema versioning with
SCHEMA_MIGRATIONSandensureValidStorage()for validation, migration, and repair. - StorageService: Centralized import/export parsing, validation, sanitization, and merge via
src/utils/StorageService.js, with tests. - JSDoc Types: Core data structures and message contracts documented in
src/types.jswith annotations across logic files.
Changed
- Chrome API Adoption: Background/UI logic now uses
ChromeApiwrappers for mostchrome.*calls; event listeners remain direct. - Settings/Tab Fetching: Popup and Options fetch settings and snoozed tabs via background messaging.
- Import/Export Flow: Options delegates import/export to
StorageServiceand merges against current background data. - Startup Recovery: Invalid V2 storage triggers backup recovery and queues a recovery notification.
- Time Parsing: Unified time parsing/fallbacks via
parseTimeStringusingDEFAULT_SETTINGS.
Fixed
- Settings Fallback:
getTime()falls back toDEFAULT_SETTINGSwhengetSettings()fails. - Defensive Storage Access:
getStorageV2()always returns safeitems/scheduleobjects. - Schema Detection:
detectSchemaVersion()rejects arrays to avoid false V1 detection. - Version Preservation: Sanitization/repair writes preserve the V2
versionfield.
v0.2.8
Added
- Safety Tests: Added
snoozeLogic.safety.test.jscovering storage persistence order, failure recovery, and restoration safety. - Import Repair: Added ability to "Sanitize & Import" partially valid backup files (e.g., mismatched tab counts).
- UUIDs: Implemented UUID-based tab identification for robust restoration and deduplication.
Changed
- Safe Snooze: Changed operations order to save to storage before closing tabs. Ensures no data loss if storage write fails.
- Restoration Safety:
popChecknow tracks success per-tab. Only successfully restored tabs are removed from storage; failed tabs (e.g., invalid URLs) are preserved. - Documentation: Comprehensive updates to ADRs, Architecture, and Specs.
- Landing Page SEO: Added
rel="noopener noreferrer"to all external links, enhancedog:image/twitter:imagemeta tags, and added canonical link.
Removed
- Badge Feature: Completely removed the experimental badge count (
updateBadge) to simplify architecture and avoid unnecessary background wake-ups. - Open in New Tab: Removed the
openInNewWindowsetting. Restoration behavior is now strictly determined by the Snooze Scope (Selected Tabs vs. Window).
Refactored
- Storage V2: Completely overhauled storage architecture from time-based arrays to a normalized relational model (
itemsmap +scheduleindex).- Use of UUIDs for all tabs allows robust deduplication and ID-based operations.
- Automatic migration from legacy schema on startup.
- Includes backward-compatibility adapter for UI components.
- Significantly improved data integrity and safety.
Fixed
- Bundle Loading: Configured
"type": "module"inmanifest.jsonto correctly support split chunks (e.g., shared validation logic) in the background service worker, preventing potential loading failures. - Restoration Race: Fixed race condition in
restoreTabsby properly chaining storage cleanup to the mutexstorageLock. - Storage Lock: Fixed critical bug where a storage write failure could leave the mutex lock (
storageLock) in a rejected state, blocking all future operations. - Config: Fixed duplicate
weekend-beginkey in default settings. - Critical: Storage Null Checks:
addSnoozedTab,removeSnoozedTabWrapper,restoreWindowGroup, andremoveWindowGroupnow safely handle missing or corrupted storage. - Search Filter: Added
Array.isArraycheck in Options page search filter to prevent crashes from malformed storage data. - Calendar Keyboard: Global shortcuts are now correctly disabled when the calendar picker is open.
v0.2.7
Added
- Storage Size Warning: Warn users when storage usage approaches the 10MB limit.
- Notification at 80% usage with 24-hour throttle
- Hysteresis (80%/70%) to prevent repeated warnings
- In-app Alert banner in Options page
- Click notification to open Options
- Firefox graceful fallback (feature disabled silently)
v0.2.6
Added
- Auto Backup Fallback: Automatic backup and recovery for snoozed tabs storage.
- 3-generation rotating backups with 2-second debounce
- Validates data on read and recovers from backup if corrupted
- Migration creates initial backup for existing users
- Recovery notification with 5-minute deduplication
- Validation Utility: New
src/utils/validation.jsfor data integrity checks.
v0.2.5
Fixed
- Service Worker: Inlined
DEFAULT_SETTINGSto prevent Vite code-splitting, which caused "Cannot use import statement outside a module" error.
v0.2.4
Changed
- Default Settings: Updated to 8:00 AM / 5:00 PM (previously 9:00 AM / 6:00 PM).
- Centralized Config: Moved
DEFAULT_SETTINGStoconstants.js(shared bysnoozeLogic.jsandtimeUtils.js). - Code Quality: Replaced all
varwithconst/letinsnoozeLogic.js.
Removed
- Unused Setting: Removed vestigial "Later Today" time setting key (was unused, defaulted to +1 hour).
Refactored
- Helper Function: Extracted
getTabsByGroupId()to reduce code duplication. - Synchronous Fix: Removed incorrect
asyncfromremoveSnoozedTab()(it was synchronous). - Comments: Fixed duplicate comment numbering and added clarifying comments for mutex pattern.
v0.2.3 - 2025-12-27
Added
- Refactoring: Consolidated storage helper functions in
snoozeLogic.js(exported and shared withserviceWorker.js). - Tests: Added
storageHelpers.test.jswith 5 new tests for storage functions. - Dynamic Labels: "Tomorrow" becomes "This morning" (early hours) and "This weekend" becomes "Next weekend" (during weekend).
Changed
- DatePicker: Calendar now starts on Monday (
weekStartsOn=1). - Scope Preservation: Shift+P now correctly preserves window scope when snoozing via DatePicker (
calendarScopestate). - Package Manager: Migrated from
npmtopnpm. - Timezone: Automates timezone detection using
Intl.DateTimeFormat, removed manual selection UI. - Default Times: Changed default
start-dayto 8:00 AM (was 9:00 AM) andend-dayto 5:00 PM (was 6:00 PM). - Pick Date: Now defaults to
start-daytime instead of hardcoded 9:00 AM. - This Weekend: Now uses
start-daytime instead of separatestart-weekendtime.
Removed
- Unused Code: Removed
storage.js(dead code). - Unused Time Keys: Removed internal time options (
next-week,next-month,day-after-tomorrow,2-days-morning,2-days-evening,someday) fromtimeUtils.js. - Debug Code: Removed
console.logstatements and duplicatesetBadgeBackgroundColorcall. - Delete Confirmation: Removed confirmation dialog for single window group deletion.
- Tomorrow Evening: Removed "Tomorrow Evening" option to simplify choices.
v0.2.2 - 2025-12-22
Added
- Appearance Settings: Visual theme selection (Default, Vivid, Warm Heatmap).
- Dynamic Theming: UI colors now reflect the selected theme.
- Global Shortcut UI: View/configure global extension shortcut in Options.
- Refactoring: Split
Options.jsxinto smaller components.
Changed
- Options Layout: Fixed panel width to prevent layout shifts.
v0.1.0 - 2025-12-16
Added
- Landing Page: New "How to Use" section, mobile optimizations, and Intercom integration.
- Website Link: Added link to official GitHub Pages site in README and Options.
- Mobile Optimization: Improved Hero section layout for small screens (<480px).
- Direct Restoration: Tabs now restore automatically without notifications.
- Manual Check (Dev): Added (and later removed) debug tools for restoration testing.
- Snoozed Search: Added real-time search filtering for snoozed tabs with space/comma-delimited multi-keyword support.
- Pick Date Shortcut: Added "Pick Date" to configurable keyboard shortcuts in Settings.
- Snoozed Button: Added "Snoozed" button to Popup header with count badge (displays 999+ for large counts).
- Shift+Shortcut: Hold Shift while pressing shortcuts to snooze entire window instead of selected tabs.
Changed
- Version: Bumped to v0.1.0 Beta for Chrome Web Store release.
- Footer: Refined copyright text size on landing page.
- Timezone Combobox: Replaced dropdown with searchable city selection (e.g., "New York", "Tokyo").
- DST Support: Integrated
date-fns-tzfor accurate Daylight Saving Time calculations and display. - Dynamic Offsets: Timezone list now maps current GMT offsets (e.g.,
(GMT +9:00)). - Export/Import:...
v0.2.7
What's Changed
- Fix: Remove release zip from repo root by @mtskf in #68
- feat(docs): Add bilingual support (EN/JA) to landing page by @mtskf in #69
- feat: Add auto backup fallback for snoozed tabs by @mtskf in #70
- feat: Add storage size warning when approaching 10MB limit by @mtskf in #71
- chore: Release v0.2.7 by @mtskf in #72
Full Changelog: v0.2.5...v0.2.7
v0.2.5
v0.2.4
v0.2.3
What's Changed
- test: add comprehensive unit and component tests by @mtskf in #51
- feat: add support for Firefox and Edge by @mtskf in #52
- docs: add Chrome Web Store link by @mtskf in #53
- fix: preserve Shift scope when opening DatePicker by @mtskf in #54
- fix: remove confirmation dialog for window group deletion by @mtskf in #55
- chore: remove unused code and update documentation by @mtskf in #56
- refactor: consolidate storage helpers and add tests by @mtskf in #57
Full Changelog: v0.2.2...v0.2.3
v0.2.2
What's Changed
- feat: Add hidden jjj command for 1-minute snooze by @mtskf in #44
- fix: Preserve tab order when snoozing/restoring window groups by @mtskf in #45
- feat: Add loading spinner overlay during snooze operations by @mtskf in #46
- chore: Remove unused updateTabCount function and optimize popup init by @mtskf in #47
- feat: Add duplicate hotkey prevention with warning toast by @mtskf in #48
- fix: parallelize tab restoration and fix race condition by @mtskf in #49
- fix: date overflow and race condition by @mtskf in #50
Full Changelog: v0.2.1...v0.2.2
v0.2.1
What's Changed
- Docs: Add Chrome Web Store Link by @mtskf in #33
- UI: Improve Delete Button Hover by @mtskf in #34
- Fix: Prevent Empty Tab on Window Restore by @mtskf in #36
- Fix: Popup Close Race Condition by @mtskf in #37
- Docs: Add MIT License by @mtskf in #38
- feat: Allow 4:00 AM start day selection by @mtskf in #39
- feat: Show Today/Tomorrow in Snoozed List by @mtskf in #40
- feat: Improve import error handling with schema validation by @mtskf in #41
- fix: Unified and time-based sorting for Snoozed List by @mtskf in #42
- fix: Refresh items on restore and cleanup on click by @mtskf in #43
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
- feat: Automate Timezone Detection & Docs Update by @mtskf in #5
- docs: Update README by @mtskf in #6
- feat: enhance options search and calendar ui by @mtskf in #7
- feat: simplify hotkeys, enhance calendar modal, add pick-date shortcut by @mtskf in #8
- feat: add extension shortcut info and refine options layout by @mtskf in #9
- feat: add extension shortcut info and refine options layout by @mtskf in #10
- style: narrow options container width by @mtskf in #11
- chore: stop tracking dist folder by @mtskf in #12
- feat(options): refine global shortcut UI & refactor components by @mtskf in #13
- feat(options): refactor components & update global shortcut UI by @mtskf in #14
- docs: add TECH_STACK.md by @mtskf in #15
- Refine Snooze Timing UI by @mtskf in #16
- Separate Developer Docs from GitHub Pages by @mtskf in #17
- Implement Window Grouping by @mtskf in #18
- Refine Window Group Style & Add Delete Action by @mtskf in #20
- Enforce Strict Restore Behavior by @mtskf in #19
- UI: Badge overlay at bottom-right of button by @mtskf in #21
- UI: Update delete button color to modern rose red by @mtskf in #23
- Fix: Enter/Space key confirmation for focused option by @mtskf in #22
- UI: Darken card background for Neo Carbon by @mtskf in #24
- UI: Add hover underline to Window Group label by @mtskf in #25
- feat: Add Appearance Themes (Vivid, Warm Heatmap) & UI Refinements by @mtskf in #26
- feat: Add Appearance Themes (Vivid, Warm Heatmap) & UI Refinements by @mtskf in #27
- Refactor: Improve Code Structure & Maintainability by @mtskf in #28
- Fix: Delete All Persistence Issue by @mtskf in #29
- Docs: Remove Personalized Themes Card by @mtskf in #30
- Docs: Restore GitHub Link by @mtskf in #31
- mod: docs > footer-links icons updated by @mtskf in #32
Full Changelog: https://github.com/mtskf/Snooooze/commits/v0.2.0