From e1e546c50c2262a054ba0c46efdd4ae2ec4a256b Mon Sep 17 00:00:00 2001 From: Kyle Pope Date: Tue, 24 Feb 2026 04:01:59 +0800 Subject: [PATCH] Add future roadmap and key features to CLAUDE.md Document multi-user planning intent, reminder alerts pattern, useConfirmAction hook, and naive datetime contract. Co-Authored-By: Claude Opus 4.6 --- .claude/CLAUDE.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 9942493..02c2552 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -31,6 +31,19 @@ - When required: For backend work invoke the 'backend-engineer' subagent, for work on the front end, invoke the 'frontend-engineer' subagent. To review work use the 'senior-code-reviewer' subagent and for any research use the 'research-analyst' subagent. - For any frontend UI related work you MUST use the frontend design skill AND reference the [stylesheet](.claude/context/stylesheet.md) to ensure visual consistency. The stylesheet defines all colors, typography, spacing, component patterns, and design principles for UMBRA. Do not invent new patterns. +## Future Roadmap + +After the UI refresh is complete, the next major phases are: +- **Multi-user authentication** — replace single PIN auth with per-user accounts +- **Backend restructure** — add user_id foreign keys to all models, scope all queries per-user +- **Always build for scale.** Even though UMBRA is currently single-user, design features, indexes, validations, and state machines with multi-user in mind. Cutting corners now means rework later. + +## Key Features & Patterns + +- **Reminder alerts**: Real-time polling (30s) via `AlertsProvider` context. Dashboard shows `AlertBanner`, other pages get Sonner toasts (max 3 + summary). Snooze/dismiss with `client_now` for Docker UTC offset. +- **Two-click delete**: `useConfirmAction` hook in `hooks/useConfirmAction.ts` — first click shows "Sure?", auto-resets after 4s, second click executes. Used by TodoItem and ReminderItem. +- **Naive datetime contract**: All datetimes are naive (no timezone). Frontend sends `toLocalDatetime()` from `lib/date-utils.ts` when the backend needs "now". Docker container runs UTC; `client_now` bridges the gap. + ## Known Issues - **Git push auth flake.** The first `git push` to the Gitea remote will fail with an authentication error. Simply retry the same push command — the second attempt succeeds.