Skip to content

feat: manual theme toggle and incrementing base versioning#7

Merged
daniel-rck merged 1 commit into
mainfrom
claude/dark-light-mode-support-QlR7v
May 31, 2026
Merged

feat: manual theme toggle and incrementing base versioning#7
daniel-rck merged 1 commit into
mainfrom
claude/dark-light-mode-support-QlR7v

Conversation

@daniel-rck
Copy link
Copy Markdown
Owner

Was & warum

Zwei zusammenhängende Anliegen:

  1. Manueller Theme-Toggle. Bisher gab es nur automatischen Dark Mode über
    prefers-color-scheme. Jetzt liegt ein manueller Umschalter (Hell/Dunkel/System)
    mit Persistenz darüber — Default bleibt System.
  2. Inkrementierende web-base-Version. web-base hat jetzt eine zentrale,
    hochzählende Version. Apps werden mit der zuletzt gezogenen Version gestempelt,
    sodass web-base update melden kann, ob eine App hinterherhinkt.

Layout-Template

  • ThemeToggle (cli/templates/layout/ThemeToggle.tsx) — Ghost-Button, der
    System → Hell → Dunkel zykliert (Monitor/Sun/Moon, deutsche Labels).
    Von AppShell automatisch im Header gemountet, vor dem InstallButton
    (immer sichtbares Control → kein Layout-Sprung).
  • useTheme (useTheme.ts) — { theme, resolvedTheme, setTheme },
    Persistenz in localStorage (Key theme) via data-theme am <html>,
    live-Tracking der System-Präferenz. SSR-sicher.
  • themeInitScript — Inline-Script gegen FOUC (im postInstall dokumentiert).
  • theme.css — Drei-Zustands-Dark-Mode als plain Custom-Property-Overrides
    (@theme geht nur Top-Level) + @custom-variant dark, damit Tailwinds
    dark:-Utilities der manuellen Wahl folgen statt nur der System-Pref.

Versionierung

  • cli/src/version.tsWEB_BASE_VERSION als Single Source of Truth +
    compareVersions. Drift-Guard-Test gegen package.json. Bump auf 0.2.0.
  • stampWebBaseVersion (pkg.ts) schreibt webBase.version in die
    App-package.json bei init/add/update --apply (additiv).
  • update meldet current / behind (X → Y) / ahead / unstamped.
  • CHANGELOG.md (Keep a Changelog).

Specs

04-layout-system.md, 02-cli.md, 00-overview.md und
skill/references/layout-system.md im selben PR aktualisiert (spec-driven).

Verifikation

  • bun run typecheck / lint / test grün (37 Tests, inkl. neuer
    version.test.ts + Stamping-Tests in pkg.test.ts).
  • bun run build && node cli/dist/index.js --version0.2.0.
  • Smoke-Test: init stempelt webBase.version; update auf ungestempelter App
    meldet unstamped, --apply stempelt, danach current; gesetztes 0.1.0
    meldet behind (0.1.0 → 0.2.0).

⚠️ Hinweis: theme.css/Template-Dateien werden hier nicht isoliert gebaut
(vom Linter ausgenommen, kein CSS-Build im Repo). Die @custom-variant dark-
Syntax sollte beim ersten Einspielen in eine konsumierende App gegen deren
echten Tailwind-4-Build verifiziert werden.

https://claude.ai/code/session_01S635TVHdM8Fwy2f6Nja8Nz


Generated by Claude Code

Add a manual light/dark/system theme toggle to the layout template on top
of the existing prefers-color-scheme support, and give web-base a single
incrementing version that apps can track.

Layout:
- ThemeToggle (auto-mounted in the header) + useTheme hook with localStorage
  persistence via data-theme on <html>, plus themeInitScript to avoid FOUC
- theme.css: three-state dark mode (system/forced) as plain custom-property
  overrides, and a @custom-variant dark so Tailwind dark: utilities follow
  the manual choice

Versioning:
- cli/src/version.ts as the single source of truth (WEB_BASE_VERSION), with
  a drift-guard test against package.json; bump to 0.2.0
- stampWebBaseVersion writes webBase.version into apps on init/add/update --apply
- update reports current/behind/ahead/unstamped
- add CHANGELOG.md

Specs (04-layout-system, 02-cli, 00-overview, skill reference) updated to match.

https://claude.ai/code/session_01S635TVHdM8Fwy2f6Nja8Nz
@daniel-rck daniel-rck marked this pull request as ready for review May 31, 2026 12:26
@daniel-rck daniel-rck merged commit ca6a0dc into main May 31, 2026
1 check passed
@daniel-rck daniel-rck deleted the claude/dark-light-mode-support-QlR7v branch May 31, 2026 12:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants