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.
1.2 KiB
1.2 KiB
12 — Notes module
Goal
Lightweight shared notes with optional reminders.
Depends on
- 04, 07
Scope
- Schema:
notes(id,household_id,author_id,title,bodymarkdown,pinnedbool,remind_attimestamptz nullable,created_at,updated_at). /notesindex: pinned first, then by updated_at desc./notes/[id]editor — minimal markdown (use@uiw/react-md-editoror similar; live preview optional).remind_atwrites a row toreminders(table comes from_core; reminder firing comes from task 41).- Manifest:
- Entity
notes.note— shareable, remindable, searchable (title + body). - Widget (uniform contract per task 04):
notes.filtered—config: { filter: "pinned" | "all"; limit?: number }. Default{ filter: "pinned", limit: 10 }.resolveConfigOptionsreturns nothing yet (placeholder for future tag filtering).
- Entity
Out of scope
- Rich text / WYSIWYG.
- Attachments (separate later module).
- Collaborative editing.
Acceptance criteria
- Create / edit / pin / delete works.
- Setting
remind_atcreates aremindersrow scoped to entitynotes.note. - Markdown renders safely (no raw HTML injection).