Skip to content

Doom 64 design-token system with light/dark theme#132

Merged
CuriouslyCory merged 5 commits into
mainfrom
feat/doom-64-theme
Jun 5, 2026
Merged

Doom 64 design-token system with light/dark theme#132
CuriouslyCory merged 5 commits into
mainfrom
feat/doom-64-theme

Conversation

@CuriouslyCory

@CuriouslyCory CuriouslyCory commented Jun 5, 2026

Copy link
Copy Markdown
Owner

Adopts the Doom 64 design system (from the linked v0 design) across the app as a centralized, theme-switchable design-token layer — replacing ~46 files of hardcoded inline colors. See ADR-0045.

What changed

  • Token layer (src/styles/globals.css): semantic CSS variables (background/foreground, card, popover, primary, secondary, accent, muted, destructive, border, ring, charts, sidebar) + two app-specific tokens --edit/--portal, mapped into Tailwind v4 via @theme inline so a class swap re-cascades at runtime. The palette is desaturated gunmetal grays with a blood-red primary, muted-green secondary, steel-blue accent, orange destructive.
  • Light + dark, dark default. :root carries the dark values (no-flash default); :root.light overrides. Toggle is a small in-house mechanism (no next-themes): a server-rendered init script applies the theme class before first paint (no FOUC, no React-19 inline-<script> warning), and useTheme reads it via useSyncExternalStore.
  • Full sweep of ~46 component files to semantic utilities (incl. Base UI primitives, the ReactFlow canvas nodes/edges/detail panel).
  • Retro treatment: Oxanium display font on headings, heavier node/dialog borders, a faint scanline overlay, themed ReactFlow grid.
  • Canvas: connections + node connection-dots render in Doom red for contrast; grid lines softened.

Verification

  • pnpm check (eslint + tsc) green.
  • Verified in-browser (dev-browser) in both themes: no FOUC (dark from first paint), live toggle re-themes every surface (canvas, nodes, edges, dialogs, command palette, tooltip, detail panel), red edges/dots + faint grid, 0 console errors, canvas interactions intact.
  • Docs travel with the code: ADR-0045 + CONTEXT.md theming section.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Theme toggle (light/dark) with persisted initialization added to the header
  • Style

    • Whole-app restyle to a Doom 64–inspired semantic design-token system
    • Unified token-based colors across UI, React Flow/editor visuals, and a subtle retro overlay
  • Documentation

    • Added ADR and glossary entries documenting the design-token/theme system
  • Chores

    • Example env updated with GitHub auth placeholders

CuriouslyCory and others added 3 commits June 5, 2026 14:11
Introduce the app's first semantic design-token layer and render the v0
"Doom 64" palette across the whole UI, replacing ~46 files of hardcoded
inline colors.

- globals.css: :root (light) + .dark (dark) oklch tokens, mapped via
  `@theme inline` so a class swap re-cascades at runtime; `--edit`/`--portal`
  app-specific tokens; themed `--xy-*` React Flow vars (scoped to
  [data-canvas-scope]); a pointer-events:none retro scanline overlay.
- next-themes light/dark toggle (class strategy, dark default, no FOUC via
  suppressHydrationWarning + pre-paint script); ThemeProvider shim + ThemeToggle.
- Oxanium display font for headings (font-display); Geist stays body.
- Sweep every surface to semantic utilities (bg-card/bg-popover/bg-muted,
  text-foreground/text-muted-foreground, bg-primary [blood red],
  text-destructive [orange], border-edit, border-portal); border-2 + lines
  grid for the retro panel look.
- Docs: ADR-0045 + CONTEXT.md theming section.

Verified: pnpm check + 508 vitest tests green; dark/light verified in-browser
(no FOUC), zoom/select interactions intact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address review feedback on the Doom 64 theme:

- No-FOUC default: :root now carries the DARK palette (the app's default), with
  `:root.light` overriding for light mode (higher specificity so it wins
  regardless of source order). next-themes gets an explicit value map so it ADDS
  the `.light` class. The classless first paint can no longer flash a wrong palette.
- Fix the actual flash source: the canvas island's dynamic-import loading fallback
  (index.tsx) still hardcoded bg-[#1b1c33] (indigo). Now bg-background.
- connection-edge.tsx was entirely unconverted — grep skips NUL-containing files as
  binary (it uses a NUL cuid-joiner), so the sweep missed it. Converted to tokens.
- Connections + node connection-dots now render in Doom red (--primary), matching
  the v0 chart, for contrast against the grid; selected edges brighten to foreground.
- Soften canvas grid lines to ~28% border alpha (low contrast).
- color-scheme set per theme so native controls/scrollbars match.

Verified in-browser: no indigo FOUC (dark from first paint), light mode applies the
light palette, red edges/dots + faint grid in both themes; pnpm check green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…cript warning)

next-themes renders its no-FOUC <script> from a client component, and React 19
warns on every client-rendered inline <script> ("Scripts inside React components are
never executed when rendering on the client"). The app only needs class-based
light/dark with a dark default + localStorage, so replace the dependency with ~40
lines:

- src/lib/theme.ts (plain module): `themeInitScript`, a literal string the SERVER
  root layout inlines as a <script> at the top of <body>. Runs before first paint,
  applies the stored/default theme class + color-scheme to <html> — no FOUC, and
  server-rendered so React never client-renders a <script> (no warning).
- theme-toggle.tsx: `useTheme` via useSyncExternalStore (MutationObserver on the
  <html> class) — no setState-in-effect, no hydration error when the server snapshot
  ("dark") differs from the client's actual theme. setTheme swaps class + writes
  localStorage.
- Remove next-themes + the client provider shim.

Docs (ADR-0045, CONTEXT.md, globals.css comment) updated to the in-house mechanism
and to the dark-default `:root` / `:root.light` token structure.

Verified in-browser: 0 console errors, no FOUC (dark from first paint), toggle works
both ways with the palette flipping; pnpm check green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
infinite-docs Ready Ready Preview, Comment Jun 5, 2026 11:27pm

Request Review

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown

Too much diff to scan? Review this PR in Change Stack to start with the highest-impact changes.

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 99739a22-0d94-43f9-8521-4c48da14d807

📥 Commits

Reviewing files that changed from the base of the PR and between 88f23d6 and faf90e8.

📒 Files selected for processing (1)
  • src/app/p/[slug]/_canvas/copy-markdown.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/app/p/[slug]/_canvas/copy-markdown.tsx

📝 Walkthrough

Walkthrough

This PR adds a Doom 64 semantic design-token system, injects a server-side theme init script and client ThemeToggle, updates RootLayout and fonts, and migrates UI components (canvas, trace, dialogs, panels, primitives) from hardcoded colors to tokenized Tailwind classes.

Changes

Design-Token System Migration

Layer / File(s) Summary
Theme token system definition and documentation
src/styles/globals.css, docs/adr/0045-design-token-system-doom-64-theme.md, CONTEXT.md
CSS variables define Doom 64 semantic tokens with :root.light and :root, .dark palettes; Tailwind v4 @theme inline maps tokens to utilities; .plate-doc markdown styling updated.
Theme bootstrap and runtime module
src/lib/theme.ts
Exports THEME_STORAGE_KEY, Theme type, and themeInitScript that reads persisted theme, sets <html> classes and color-scheme before hydration.
Client-side theme toggle and synchronization
src/app/_components/theme-toggle.tsx, src/lib/theme.ts
ThemeToggle uses useSyncExternalStore + MutationObserver to reflect <html> class changes and toggles light/dark, updating color-scheme and best-effort persisting to localStorage.
Root layout updates and wiring
src/app/layout.tsx
RootLayout imports Oxanium font, injects themeInitScript via inline <script>, adds bg-background text-foreground font-sans antialiased to <body>, and renders a decorative retro-overlay.
Shared UI primitives retheme
src/components/ui/command.tsx, src/components/ui/dialog.tsx, src/components/ui/tooltip.tsx, src/app/_components/copy-button.tsx
Command, Dialog, Tooltip, and CopyButton now use token classes (bg-popover, text-popover-foreground, border-border, bg-card, text-card-foreground, text-muted-foreground, bg-muted).
Page and route container retheme
src/app/page.tsx, src/app/connect/page.tsx, src/app/i/[token]/_components/invalid-invite.tsx, src/app/p/[slug]/page.tsx, src/app/p/[slug]/not-found.tsx, src/app/p/[slug]/n/[nodeId]/page.tsx, src/app/p/[slug]/n/[nodeId]/error.tsx, src/app/p/[slug]/trace/page.tsx, src/app/p/[slug]/trace/[traceId]/page.tsx
Top-level <main> containers, signed-in/out states, error and not-found pages use bg-background text-foreground and text-muted-foreground for secondary text.
Canvas core and nodes retheme
src/app/p/[slug]/_canvas/canvas.tsx, src/app/p/[slug]/_canvas/component-node.tsx, src/app/p/[slug]/_canvas/boundary-proxy.tsx, src/app/p/[slug]/_canvas/breadcrumbs.tsx, src/app/p/[slug]/_canvas/add-component.tsx, src/app/p/[slug]/_canvas/attach-spec-section.tsx
React Flow background switched to BackgroundVariant.Lines; component nodes, handles, badges, portal pills, embedded banners, and attach/add controls use token classes including edit/portal.
Canvas panels, palettes, and tools
src/app/p/[slug]/_canvas/component-detail-panel.tsx, src/app/p/[slug]/_canvas/component-docs-editor.tsx, src/app/p/[slug]/_canvas/connect-to-palette.tsx, src/app/p/[slug]/_canvas/kind-palette.tsx, src/app/p/[slug]/_canvas/embed-project.tsx, src/app/p/[slug]/_canvas/copy-markdown.tsx, src/app/p/[slug]/_canvas/spec-conflict-modal.tsx
Detail panels, docs editor, connect/kind palettes, embed menus, copy toolbar, and the spec conflict modal updated to tokenized borders, backgrounds, text, and button states.
Trace experience retheme
src/app/p/[slug]/_trace/trace-node.tsx, src/app/p/[slug]/_trace/trace-flow.tsx, src/app/p/[slug]/_trace/trace-edge.tsx, src/app/p/[slug]/trace/_trace-view.tsx, src/app/p/[slug]/trace/trace-island.tsx
Trace nodes (container/leaf), edges, flow warnings/links, saved-trace panels and rows, and trace controls now use semantic tokens.
Access, sharing, and form surfaces
src/app/p/[slug]/_components/project-header.tsx, src/app/p/[slug]/_components/share-menu.tsx, src/app/p/[slug]/_components/manage-access-dialog.tsx, src/app/p/[slug]/_components/member-add.tsx, src/app/p/[slug]/_components/invite-create.tsx, src/app/_components/delete-project-dialog.tsx, src/app/_components/connect-agent.tsx
Project header adds ThemeToggle; ShareMenu, manage-access, member/invite forms, delete dialog, and connect-agent token UI updated to border/background/text tokens and primary/destructive token usage.
Miscellaneous component rethemes
src/app/_components/mcp-instructions.tsx, src/app/_components/post.tsx, src/app/_components/project-dashboard.tsx, src/app/_components/copy-button.tsx, src/app/p/[slug]/_components/view-only-badge.tsx
Various small components updated from hardcoded color classes to bg-muted, text-muted-foreground, text-primary, text-destructive, and related token classes.

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly Related PRs

Poem

🐰 I hopped through hex and hsl tonight,
Swapped rigid hues for tokens bright,
Doom red, muted gray — now all align,
Light and dark in tidy line,
A rabbit cheer for themes that light the site.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.31% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Doom 64 design-token system with light/dark theme' directly describes the main change: introducing a centralized design-token system with theme switching capabilities, which is the primary focus of the entire 46-file refactor.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/doom-64-theme

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/adr/0045-design-token-system-doom-64-theme.md`:
- Around line 41-42: Update the ADR sentence that currently reads "Tailwind v4
wraps any color in `color-mix`. oklch + `color-mix` need Safari 16.2+/Chrome
111+ — a modern-browser baseline we accept." to reference Tailwind v4's
documented minimums by changing "Safari 16.2+" to "Safari 16.4+" so the
statement matches Tailwind's compatibility guidance (retain the rest of the text
including `color-mix`, oklch, and Chrome 111+).

In `@src/app/_components/connect-agent.tsx`:
- Around line 170-171: The code block rendering revealedToken currently uses a
hardcoded background class ("bg-black/40") which can break contrast in light
mode; update the className on the <code> element that renders revealedToken to
use semantic surface and text tokens (the component/file is connect-agent.tsx
and the element is the <code> with className containing "flex-1 ...
text-foreground") — replace the hardcoded bg with the appropriate semantic
background token (e.g., a surface token) and pair it with the matching semantic
foreground/text token so contrast is stable across themes while preserving the
existing layout classes (flex-1, overflow-x-auto, rounded-lg, px-3, py-2,
font-mono, text-sm).

In `@src/app/_components/mcp-instructions.tsx`:
- Around line 68-69: The pre block uses a hardcoded dark backdrop (bg-black/40)
which can reduce contrast in light themes; in the <pre> element that renders
{snippet} inside mcp-instructions.tsx, replace the literal bg-black/40 with a
semantic background token (for example BG tokens like bg-muted, bg-surface or
bg-secondary with an opacity variant such as bg-muted/40) so the background
adapts to theme, keep existing text token (text-foreground) and other classes
(overflow-x-auto rounded-lg px-3 py-2 font-mono text-sm whitespace-pre)
unchanged.

In `@src/app/p/`[slug]/_canvas/copy-markdown.tsx:
- Line 52: Replace the hardcoded focus ring color token
"focus-visible:ring-white/40" in the class string (the "flex items-center ..."
literal in copy-markdown.tsx) with a semantic ring token so focus is visible in
both light and dark themes (for example "focus-visible:ring-ring/40" or the
project's semantic equivalent); update every occurrence (also the one referenced
at lines 90-90) so all focus-visible classes use the semantic token instead of
"white/40".

In `@src/app/p/`[slug]/_components/invite-create.tsx:
- Around line 177-178: The code block uses a hardcoded class "bg-black/40" which
can produce low contrast in light theme; update the code element in the
invite-create component (the <code> element that renders inviteUrl) to use
semantic token classes (e.g., replace "bg-black/40" with a token like "bg-muted"
or "bg-card" and ensure the foreground token aligns such as
"text-muted-foreground" or "text-foreground" so both light and dark themes keep
proper contrast), keeping the rest of the utilities (flex-1 overflow-x-auto
rounded px-2 py-1.5 font-mono text-xs) intact.

In `@src/app/p/`[slug]/_components/share-menu.tsx:
- Line 59: In the ShareMenu component's button/menu item className (the long
Tailwind string containing "focus-visible:ring-white/40"), replace the hardcoded
white alpha token with a semantic ring token (for example
"focus-visible:ring-ring" or "focus-visible:ring-primary/40") so the focus ring
uses the theme-aware token; update the className in _components/share-menu.tsx
where the string includes "focus-visible:ring-white/40" to the chosen semantic
token to ensure consistent focus contrast across themes.

In `@src/styles/globals.css`:
- Line 67: The CSS defines --radius only inside :root.light so when the default
:root (dark/initial) is used those derived variables (--radius-sm, --radius-md,
--radius-lg, --radius-xl) resolve from an undefined base; fix by declaring a
fallback/base --radius in the global :root (or in :root.dark) before the theme
blocks so the derived vars have a defined value on first paint—update the
declaration near :root (or add a matching --radius inside :root.dark) and ensure
--radius-sm/md/lg/xl continue to compute from that base.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fbcd3cde-9d3e-440f-bb3f-02842e6e037f

📥 Commits

Reviewing files that changed from the base of the PR and between 8a612ba and 95fe0a7.

📒 Files selected for processing (50)
  • CONTEXT.md
  • docs/adr/0045-design-token-system-doom-64-theme.md
  • src/app/_components/connect-agent.tsx
  • src/app/_components/copy-button.tsx
  • src/app/_components/delete-project-dialog.tsx
  • src/app/_components/mcp-instructions.tsx
  • src/app/_components/post.tsx
  • src/app/_components/project-dashboard.tsx
  • src/app/_components/theme-toggle.tsx
  • src/app/connect/page.tsx
  • src/app/i/[token]/_components/invalid-invite.tsx
  • src/app/layout.tsx
  • src/app/p/[slug]/_canvas/add-component.tsx
  • src/app/p/[slug]/_canvas/attach-spec-section.tsx
  • src/app/p/[slug]/_canvas/boundary-proxy.tsx
  • src/app/p/[slug]/_canvas/breadcrumbs.tsx
  • src/app/p/[slug]/_canvas/canvas.tsx
  • src/app/p/[slug]/_canvas/component-detail-panel.tsx
  • src/app/p/[slug]/_canvas/component-docs-editor.tsx
  • src/app/p/[slug]/_canvas/component-node.tsx
  • src/app/p/[slug]/_canvas/connect-to-palette.tsx
  • src/app/p/[slug]/_canvas/connection-edge.tsx
  • src/app/p/[slug]/_canvas/copy-markdown.tsx
  • src/app/p/[slug]/_canvas/embed-project.tsx
  • src/app/p/[slug]/_canvas/index.tsx
  • src/app/p/[slug]/_canvas/kind-palette.tsx
  • src/app/p/[slug]/_canvas/spec-conflict-modal.tsx
  • src/app/p/[slug]/_components/invite-create.tsx
  • src/app/p/[slug]/_components/manage-access-dialog.tsx
  • src/app/p/[slug]/_components/member-add.tsx
  • src/app/p/[slug]/_components/project-header.tsx
  • src/app/p/[slug]/_components/share-menu.tsx
  • src/app/p/[slug]/_components/view-only-badge.tsx
  • src/app/p/[slug]/_trace/trace-edge.tsx
  • src/app/p/[slug]/_trace/trace-flow.tsx
  • src/app/p/[slug]/_trace/trace-node.tsx
  • src/app/p/[slug]/n/[nodeId]/error.tsx
  • src/app/p/[slug]/n/[nodeId]/page.tsx
  • src/app/p/[slug]/not-found.tsx
  • src/app/p/[slug]/page.tsx
  • src/app/p/[slug]/trace/[traceId]/page.tsx
  • src/app/p/[slug]/trace/_trace-view.tsx
  • src/app/p/[slug]/trace/page.tsx
  • src/app/p/[slug]/trace/trace-island.tsx
  • src/app/page.tsx
  • src/components/ui/command.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/tooltip.tsx
  • src/lib/theme.ts
  • src/styles/globals.css

Comment thread docs/adr/0045-design-token-system-doom-64-theme.md Outdated
Comment thread src/app/_components/connect-agent.tsx Outdated
Comment thread src/app/_components/mcp-instructions.tsx Outdated
Comment thread src/app/p/[slug]/_canvas/copy-markdown.tsx Outdated
Comment thread src/app/p/[slug]/_components/invite-create.tsx Outdated
Comment thread src/app/p/[slug]/_components/share-menu.tsx Outdated
Comment thread src/styles/globals.css Outdated
- globals.css: --radius was only defined in :root.light, leaving it undefined on
  the dark/default path (and --radius-sm/md/lg/xl derived from it). Moved to the
  :root/.dark default block (theme-independent).
- Tokenize hardcoded dark code/token blocks (bg-black/40 -> bg-muted) in
  connect-agent, mcp-instructions, invite-create so they stay readable in light mode.
- Tokenize hardcoded focus rings (ring-white/40 -> ring-ring) in copy-markdown and
  share-menu so keyboard focus stays visible in light mode.
- ADR-0045: correct the browser baseline to Tailwind v4's documented floor
  (Safari 16.4+/Chrome 111+/Firefox 128+).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@CuriouslyCory

Copy link
Copy Markdown
Owner Author

Fixes Applied Successfully

Applied 7 CodeRabbit feedback items across 7 files.

Files modified:

  • src/styles/globals.css — moved --radius to the :root/dark default path (it was only defined under :root.light, leaving it undefined in dark — the default — so --radius-sm/md/lg/xl derived from an undefined base)
  • src/app/_components/connect-agent.tsxbg-black/40bg-muted (token-reveal block)
  • src/app/_components/mcp-instructions.tsxbg-black/40bg-muted (snippet + skeleton)
  • src/app/p/[slug]/_components/invite-create.tsxbg-black/40bg-muted (invite-link block)
  • src/app/p/[slug]/_canvas/copy-markdown.tsxring-white/40ring-ring (focus rings)
  • src/app/p/[slug]/_components/share-menu.tsxring-white/40ring-ring (both the Share trigger and the access-level segmented control)
  • docs/adr/0045-design-token-system-doom-64-theme.md — corrected the browser baseline to Tailwind v4's documented floor (Safari 16.4+ / Chrome 111+ / Firefox 128+)

Commit: 88f23d6

pnpm check (eslint + tsc) passes. The latest autofix changes are on the feat/doom-64-theme branch.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.env.example:
- Around line 21-22: The .env.example exposes AUTH_GITHUB_ID and
AUTH_GITHUB_SECRET but the auth config never wires a GitHub provider, so either
register GitHub in the auth providers or mark the env vars as
optional/unimplemented; specifically, add the GitHub provider to the providers
array in the auth config (the "providers" export in src/server/auth/config.ts)
using the same env vars (AUTH_GITHUB_ID, AUTH_GITHUB_SECRET) or update
.env.example to comment/annotate those keys as "not wired" to make intent clear.
Ensure the provider name and env var names match exactly so the runtime config
picks them up.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e7777a80-75dc-4d47-b3b5-8f0222e2750f

📥 Commits

Reviewing files that changed from the base of the PR and between 95fe0a7 and 88f23d6.

📒 Files selected for processing (8)
  • .env.example
  • docs/adr/0045-design-token-system-doom-64-theme.md
  • src/app/_components/connect-agent.tsx
  • src/app/_components/mcp-instructions.tsx
  • src/app/p/[slug]/_canvas/copy-markdown.tsx
  • src/app/p/[slug]/_components/invite-create.tsx
  • src/app/p/[slug]/_components/share-menu.tsx
  • src/styles/globals.css
✅ Files skipped from review due to trivial changes (5)
  • src/app/p/[slug]/_components/invite-create.tsx
  • src/app/p/[slug]/_canvas/copy-markdown.tsx
  • src/app/_components/connect-agent.tsx
  • docs/adr/0045-design-token-system-doom-64-theme.md
  • src/app/p/[slug]/_components/share-menu.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/app/_components/mcp-instructions.tsx
  • src/styles/globals.css

Comment thread .env.example
Comment on lines +21 to +22
AUTH_GITHUB_ID=""
AUTH_GITHUB_SECRET=""

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

GitHub env vars are documented but not wired into auth providers.

Line 21 and Line 22 add GitHub credentials, but current auth config only registers Discord (src/server/auth/config.ts: providers). This can mislead setup and docs expectations unless GitHub provider wiring is included (or these vars are clearly marked as planned/not yet active).

🧰 Tools
🪛 dotenv-linter (4.0.0)

[warning] 21-21: [QuoteCharacter] The value has quote characters (', ")

(QuoteCharacter)


[warning] 22-22: [QuoteCharacter] The value has quote characters (', ")

(QuoteCharacter)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.env.example around lines 21 - 22, The .env.example exposes AUTH_GITHUB_ID
and AUTH_GITHUB_SECRET but the auth config never wires a GitHub provider, so
either register GitHub in the auth providers or mark the env vars as
optional/unimplemented; specifically, add the GitHub provider to the providers
array in the auth config (the "providers" export in src/server/auth/config.ts)
using the same env vars (AUTH_GITHUB_ID, AUTH_GITHUB_SECRET) or update
.env.example to comment/annotate those keys as "not wired" to make intent clear.
Ensure the provider name and env var names match exactly so the runtime config
picks them up.

copy-markdown's toolbar container still used bg-black/40 while every sibling canvas
toolbar (add-component, embed-project, edge chips) is tokenized — it read as a dark
bar in light mode. Switch to bg-card/80 + border-border to match.

The dialog bg-black/60 (modal scrim) and the native <select> <option> text-black
(OS-rendered popups) are intentionally left.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@CuriouslyCory CuriouslyCory merged commit 66c3e2e into main Jun 5, 2026
3 checks passed
CuriouslyCory added a commit that referenced this pull request Jun 6, 2026
…#138)

Group the Add palette (#129) and Copy menu (#130) triggers into a single
floating top-left toolbar shell with one design language, resolving the
three competing radius/background systems the free-standing controls
carried.

- Shell: the top-left Panel becomes a `bg-card/85 backdrop-blur` token
  surface (theme-aware, flips light/dark) with one nested radius scale —
  shell rounded-xl → triggers rounded-lg → menu rows rounded-md.
- Add trigger: the bg-primary (Doom red) PRIMARY fill; Copy trigger: the
  bg-muted SECONDARY ghost. Each shows a pressed-while-open state via Base
  UI's data-popup-open. The Add palette panel is aligned to the header
  Share-menu surface (rounded-xl + shadow-xl).
- Viewer (no edit): the shell is unconditional and Copy is ungated, so a
  viewer sees a clean Copy-only toolbar.

Note: #131 predated the #132 Doom-64 token system (ADR-0045), which
retired purple (→ primary red) and bans hardcoded color literals. Per the
maintainer, the shell uses the bg-card/85 token surface rather than the
issue's literal bg-black/40, and "purple" is read as primary/red — both
already the codebase's reality.

- CONTEXT.md: new `### Canvas toolbar` glossary entry tying the Add
  palette + Copy menu + shell together; cross-links on both entries; a
  scoped primary-fill note in the Theming section. Cross-refs ADR-0045.

The breadcrumb Copy mount stays outside the shell (compact). No backend /
tRPC / schema change.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.

1 participant