From 8cc2ef07327ea25b7966e0384a66af58fb0b4d38 Mon Sep 17 00:00:00 2001 From: ginnoir Date: Wed, 6 May 2026 02:50:05 -0500 Subject: [PATCH] Add theming infrastructure (task 08) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CSS-variable multi-theme system (default + warm) × {light, dark, system}; per-user theme/theme_mode columns; no-flash pre-paint script; useTheme hook + ThemePicker component on /settings. Co-Authored-By: Claude Sonnet 4.6 --- STATUS.md | 4 +- drizzle/0002_naive_starbolt.sql | 2 + src/app/globals.css | 71 +++++++++++ src/app/layout.tsx | 48 +++++++- src/app/settings/actions.ts | 25 ++++ src/app/settings/page.tsx | 34 ++++++ src/components/theme-picker.tsx | 70 +++++++++++ src/components/ui/label.tsx | 20 ++++ src/components/ui/select.tsx | 201 ++++++++++++++++++++++++++++++++ src/hooks/use-theme.ts | 50 ++++++++ src/modules/_core/schema.ts | 2 + src/modules/_core/themes.ts | 16 +++ 12 files changed, 540 insertions(+), 3 deletions(-) create mode 100644 drizzle/0002_naive_starbolt.sql create mode 100644 src/app/settings/actions.ts create mode 100644 src/app/settings/page.tsx create mode 100644 src/components/theme-picker.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/select.tsx create mode 100644 src/hooks/use-theme.ts create mode 100644 src/modules/_core/themes.ts diff --git a/STATUS.md b/STATUS.md index fd29df2..a1e7189 100644 --- a/STATUS.md +++ b/STATUS.md @@ -14,9 +14,11 @@ Living progress tracker. Update at the end of each task. The canonical brief is - **07 — Household seed**. `pnpm db:seed` inserts household "Home" idempotently (powered by `tsx`). `signIn` callback assigns `owner` to the first member of the household and `member` to all subsequent users. `getCurrentSession()` in `src/lib/session.ts` returns `{ user, household, role }` and throws if unauthenticated or unmembered. `/settings/household` renders member list for all roles and a rename form for owner only. `tsc --noEmit` and `pnpm lint` both clean. +- **08 — Theming infrastructure**. CSS-variable multi-theme system (`default` + `warm`) × `{light, dark, system}`. `users.theme` + `users.themeMode` columns in migration `0002_naive_starbolt.sql`. Theme registry in `src/modules/_core/themes.ts` (THEMES/THEME_MODES arrays — adding a third theme is one CSS block + one registry entry). Root layout reads session and sets `data-theme`/`dark` on `` server-side; inline pre-paint `