Replaces the 8-line placeholder with a complete README covering all four
modules, platform capabilities, quick start, dev setup, configuration
reference, and deployment links. Badges use dynamic shields.io URLs so
version/CI status update automatically on each release.
Wires README review into the release pipeline via a release-it
before:git:release hook and a new item in the pre-deploy checklist.
- pnpm dev:local/dev:reset: orchestrate DB container, migrations, seed, and Next.js dev server in one command; Caddy snippet + docs for HTTPS via dev.ginnoir.com
- Fix dev login on HTTPS: set both authjs.session-token and __Secure-authjs.session-token so Auth.js finds the session regardless of cookie name resolution
- Suppress hydration mismatch on <html> caused by pre-paint script changing data-nav before React hydrates
- VAPID startup warning if keys not configured; remove dead NEXT_PUBLIC_VAPID_PUBLIC_KEY var
- PushOptIn: hydrate subscription state on mount; reuse existing subscription on iOS to avoid redundant prompts
- sendPushToEndpoint: new function to send to a single device endpoint
- sendTestNotification: scoped to the calling device's endpoint (ownership-verified) instead of all user subscriptions
- Add url field to QuickAddAction; make action optional
- Add getQuickAdds() + SerializedQuickAddItem to registry so quick-add
data can cross the server→client RSC boundary without serializing fns
- Update calendar/lists/notes manifests with navigation URLs
- QuickAddProvider wraps root layout: holds sheet/palette open state and
global cmd/ctrl+k shortcut
- QuickAddSheet: bottom drawer on mobile, right-side popover on desktop,
actions grouped by module
- CommandPalette: cmdk-powered modal with fuzzy filter and full keyboard
nav (arrows + enter + esc)
- QuickAddFab: client button replacing the plain + stub in the dashboard
- Add .claude/** to ESLint ignores to prevent stale worktree artifacts
from failing lint
All 4 E2E specs pass; typecheck, lint, and build clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Architecture refinements before module work begins:
- Calendars become first-class entities (mirror of lists). Each
calendar has its own visibility (private | household) and is
independently shareable. Updated CLAUDE.md data model and task 10.
- Drop the singleton/parameterized split for dashboard widgets. Every
widget declares a configSchema + defaultConfig + resolveConfigOptions
and every placement is an independent instance — same widgetId can
appear multiple times on one dashboard pointed at different things.
Updated task 04 contract; tasks 11/12 widget sections aligned.
- Add tasks 25 (multiple dashboards per user) and 26 (customizable
layout + widget configuration). Replaces the previously-considered
three-task plan with a cleaner two-task split that the uniform
contract enables. Phase 3 index updated; STATUS records the rationale.
- Task 20 reframed as a single-dashboard MVP that exercises the new
contract end-to-end before the customization layer lands.
Multi-theme × {light, dark} per-user theming, switchable on the fly.
Slots into phase 1 before modules start so the token system is the
foundation rather than a retrofit. Update STATUS to point at task 03
correctly and reflect 08 in the phase 1 roadmap.