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
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[1.3.0] — 2026-05-09
Added
JSON Import — file picker with merge-or-replace dialog. Sanitises against malicious URLs (javascript:, data:, file:, etc.) and reports skipped entries. Caps long fields on import.
Bulk select — toggle "Select" mode in the items list to multi-select. Bulk Move (with stack picker) and Delete actions.
Renewal date tracking — optional date field on paid items, auto-rolls forward when past, banner appears for renewals in the next 7 days, inline indicator for further-out renewals.
Welcome page — opens automatically on first install (reason === 'install'). Three-step orientation, four feature cards, privacy callout, full disclaimer in expandable section.
First-run launcher coach mark — one-time tooltip showing keyboard shortcuts. Dismissed on click or first keystroke.
Settings + About modal — gear icon in header. Currency picker, expandable disclaimer, version, author credit.
Footer credit — persistent line below actions bar with author name and version.
Fixed
Silenced chrome.runtime.lastError: The message port closed before a response was received warnings when tabs close mid-prompt. All tabs.sendMessage and runtime.sendMessage calls wrapped in safe helpers.
HTML5 hidden attribute being overridden by explicit display: flex/block on bulk bar and renewal banner. Added global [hidden] override.
Changed
All storage writes routed through guarded safeSet / safeStorageSet helpers.
Content script's onMessage listener now explicitly returns false to close the response channel cleanly.