Context
Continued building the URL Vault personal bookmarking system. Added Google OAuth login, restyled everything to the ink/sand/moss design system, added one-click auto-save with undo, Alt+S save-and-close hotkey, and bulk URL management with multi-select, domain filtering, and bulk actions.
What Was Built
- Google OAuth: Passport.js with shared OAuth client, session-based auth for dashboard, API key bearer for extension/CLI. Created lib/users.js for email-to-API-key mapping.
- Design System Restyle: Dashboard + extension popup + options page restyled to Fraunces/IBM Plex Sans fonts, ink/sand/moss/ember/sky colors, frosted glass cards, pill buttons.
- Auto-Save on Click: Extension icon click immediately saves page (default ON, configurable). Popup shows result with category + undo button.
- Alt+S Hotkey: Save current page and close tab via background service worker. Configurable at chrome://extensions/shortcuts.
- Bulk Management: Multi-select with checkboxes, shift-click range, Ctrl+A. Sticky bulk actions bar with category reassignment and bulk delete. Domain filter input for URL hostname matching.
- Bulk API: PATCH/DELETE /api/urls/bulk endpoints with bulkUpdate/bulkRemove storage methods.
Key Decisions
- Used shared Google OAuth client to reduce credential management overhead
- Dual auth middleware: session cookies (dashboard) OR API key (extension/CLI)
- Auto-save default ON since user wanted one click save as primary interaction
- Alt+S as 2-key hotkey, does not conflict with common browser shortcuts
- Client-side domain filtering (instant with limit=500, avoids another API parameter)
- Bulk routes registered before :id routes in Express to avoid parameter matching
Repos Touched
- url-vault – Main work
- privateContext – OAuth reference update, closeout document
Open Items
- OAuth flow should be tested end-to-end in browser
- Extension needs reload at chrome://extensions for new manifest