Skip to content

Releases: mtskf/Snooooze

v0.3.1

06 Jan 11:58
8c02fe7

Choose a tag to compare

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 base path 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_SHORTCUTS constant.

v0.3.0 - 2026-01-04

Added

  • Message Passing Contracts: New src/messages.js centralizes message actions, request validation, handler registry, and sendMessage() helper for typed UI/background communication.
  • Chrome API Wrapper: New src/utils/ChromeApi.js provides promise-based wrappers for storage, tabs, windows, notifications, alarms, runtime, and commands with Firefox fallbacks.
  • Schema Versioning: V2 schema versioning with SCHEMA_MIGRATIONS and ensureValidStorage() 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.js with annotations across logic files.

Changed

  • Chrome API Adoption: Background/UI logic now uses ChromeApi wrappers for most chrome.* 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 StorageService and 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 parseTimeString using DEFAULT_SETTINGS.

Fixed

  • Settings Fallback: getTime() falls back to DEFAULT_SETTINGS when getSettings() fails.
  • Defensive Storage Access: getStorageV2() always returns safe items/schedule objects.
  • Schema Detection: detectSchemaVersion() rejects arrays to avoid false V1 detection.
  • Version Preservation: Sanitization/repair writes preserve the V2 version field.

v0.2.8

Added

  • Safety Tests: Added snoozeLogic.safety.test.js covering 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: popCheck now 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, enhanced og:image/twitter:image meta 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 openInNewWindow setting. 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 (items map + schedule index).
    • 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" in manifest.json to correctly support split chunks (e.g., shared validation logic) in the background service worker, preventing potential loading failures.
  • Restoration Race: Fixed race condition in restoreTabs by properly chaining storage cleanup to the mutex storageLock.
  • 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-begin key in default settings.
  • Critical: Storage Null Checks: addSnoozedTab, removeSnoozedTabWrapper, restoreWindowGroup, and removeWindowGroup now safely handle missing or corrupted storage.
  • Search Filter: Added Array.isArray check 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.js for data integrity checks.

v0.2.5

Fixed

  • Service Worker: Inlined DEFAULT_SETTINGS to 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_SETTINGS to constants.js (shared by snoozeLogic.js and timeUtils.js).
  • Code Quality: Replaced all var with const/let in snoozeLogic.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 async from removeSnoozedTab() (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 with serviceWorker.js).
  • Tests: Added storageHelpers.test.js with 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 (calendarScope state).
  • Package Manager: Migrated from npm to pnpm.
  • Timezone: Automates timezone detection using Intl.DateTimeFormat, removed manual selection UI.
  • Default Times: Changed default start-day to 8:00 AM (was 9:00 AM) and end-day to 5:00 PM (was 6:00 PM).
  • Pick Date: Now defaults to start-day time instead of hardcoded 9:00 AM.
  • This Weekend: Now uses start-day time instead of separate start-weekend time.

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) from timeUtils.js.
  • Debug Code: Removed console.log statements and duplicate setBadgeBackgroundColor call.
  • 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.jsx into 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-tz for accurate Daylight Saving Time calculations and display.
  • Dynamic Offsets: Timezone list now maps current GMT offsets (e.g., (GMT +9:00)).
  • Export/Import:...
Read more

v0.2.7

03 Jan 07:35
929ba55

Choose a tag to compare

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

28 Dec 02:39
5dce6d0

Choose a tag to compare

Fixed

  • Service Worker: Fixed 'Cannot use import statement outside a module' error caused by Vite code-splitting.

v0.2.4

27 Dec 12:42
6c3c4d5

Choose a tag to compare

  • Fix: Updated default settings to 8:00 AM / 5:00 PM for all users (removed 9:00 AM / 6:00 PM logic).
  • Fix: Removed unused 'Later Today' time setting to prevent confusion.
  • Docs: Updated documentation to reflect accurate default times.

v0.2.3

27 Dec 10:39

Choose a tag to compare

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

19 Dec 00:00

Choose a tag to compare

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

18 Dec 12:49

Choose a tag to compare

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

18 Dec 06:26

Choose a tag to compare

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