Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112) - #213

Merged
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1
Jun 12, 2026
Merged

Wave 2 Phase 1 — design-system consolidation (#104, #102, #103, #106, #112)#213
Jose-Gael-Cruz-Lopez merged 6 commits into
mainfrom
design/wave2-phase1

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented Jun 12, 2026

Copy link
Copy Markdown
Member

Wave 2 — Phase 1: design-system consolidation

Six scoped, single-issue commits removing AI-tell / off-system patterns from the frontend. Each was implemented sequentially (no parallel edits on shared files), verified by a fresh-context scope check, and builds green (tsc + eslint suppressions baseline + vitest 37/37).

Commits (in order)

Scope notes

  • Graph cluster-palette #3B82F6 is intentional data-viz color and left as-is.
  • The ~64 raw inline #fff literals (modals / placeholders) are intentionally left white; the systemic panel tint is via the two driving tokens.

Verification

Per-commit: scoped diff confirmed, dangling-ref greps clean, tsc/eslint/vitest green. CI gates this merge.

Summary by CodeRabbit

  • Style

    • Standardized brand colors across the app for visual consistency.
    • Replaced frosted glass effects with solid, clean surfaces throughout the interface.
    • Refined styling in modals, toasts, and forms for improved visual clarity.
  • Bug Fixes

    • Enhanced error visibility in flashcard uploads with clearer visual indicators.

…ate-* (#104)
Add canonical --brand-forest (#1B6C42) to :root and migrate all 55 raw
literals across globals.css, page.tsx, HowItWorks.tsx, OnboardingFlow.tsx
and SignInModal.tsx. CSS / DOM-style / SVG-attribute sinks use
var(--brand-forest); two non-CSS sinks (framer-motion fill interpolation,
hex-alpha string concat) use the value-identical BRAND_FOREST constant in
lib/brand.ts.
Promote --state-mastery/-progress/-struggle/-neutral and replace the three
identical inline status-color copies in Dashboard, Tree and the notetaker
page. Add --alert-warn/--alert-err for the two Dashboard alert one-offs
(kept distinct from the differently-valued --warn/--err).
Pure value-preserving refactor: every replacement maps a literal to a token
of identical value, so the rendered output is pixel-identical. The duplicate
.landing-page --brand-* block and the conflicting rarity declarations are
intentionally left for the later visual commits.
…aces (#102)
.impeccable.md bans glassmorphism (no blur, no frosted panels), but the app
shipped a LIQUID GLASS SYSTEM on the public hero and onboarding. Replace it with
solid surfaces: the .liquid-glass / .glass-panel / .glass-input classes now use
opaque --bg-panel/--bg-input + --shadow-* (class names kept so component markup
is unchanged), the specular/radial ::after shimmers and all backdrop-filter are
removed, and the OnboardingFlow inline frosted panels become opaque #fff (the
dark step-indicator scrim keeps its translucency, minus the blur). Radial
atmospheric washes are untouched.
Replace the bg-clip-text gradient on the four landing headings (hero
h1, Sapling wordmark, the "your study" em, the "Growing" span) with
solid var(--brand-forest) text, and remove the now-unused
landing-animate-gradient class plus landing-gradient-shift keyframes
(both the base and .landing-page-scoped copies).
The standalone #2D8F5C CTA button and HowItWorks leaf fill are not
headings and are left untouched for scope discipline. The opt-in
gradient username cosmetic in Settings.tsx is out of scope and kept.
Remove the two frosted hero stat tiles carrying fabricated dashboard
numbers: the "CS 101 / 55% mastered" card and the "Total nodes 2,413 /
Mastered 68% / On track 24%" card. Both hero-surface #3B82F6 neon-blue
accents lived in the first card and are deleted with it, so no neon-blue
remains on the hero card surfaces.
The graph color legend and the Quick Quiz / Study Room action chips are
not stat tiles and are kept. The #3B82F6 in the cluster/graph palette
arrays and the landing-intro orbit-node dot are not hero card surfaces
and are left out of scope.
…ter (#112)
Four off-system cleanups from the frontend audit:
- Colored side-stripe borders (top AI tell): the achievement toast's
3px rarity stripe becomes a leading rarity dot beside its existing
uppercase rarity label; the Social reply-quote's 2px --accent stripe
drops to a 1px neutral --border structural divider (reply state is
already carried by the leading arrow + name); the ParsedCardsTable
error row swaps its 3px --err stripe for an --err-soft tinted row
plus a visible "!" marker, so error reads by shape, not color alone.
- Panels/inputs: --bg-panel and --bg-input move from pure #ffffff to a
hair-warm #fdfcf9 so app surfaces feel like paper. The ~64 raw inline
#fff literals are deliberately left for a separate per-instance pass —
many are modals / image placeholders that should stay white.
- Easing: the two .landing-icon-container hover transitions drop the
overshoot cubic-bezier(0.175,0.885,0.32,1.275) for the project's --ease.
- Inter: removed the next/font Inter import and all 'Inter' literals;
--font-inter now maps to var(--font-sans) (DM Sans). DM Sans is loaded
as a variable font and covers the 300/400 weights the Inter text used.
…bright (#103)
Replace the remaining raw #2D8F5C green literals — the primary CTA
button fill and the How-It-Works "growth" leaf — plus the button's
#236F48 hover, with --brand-forest-bright / --brand-forest-bright-hover.
No raw brand-green hex remains in render paths; the new tokens are
byte-identical to the literals they replace, so the result is
pixel-identical. The graph cluster-palette #3B82F6 is intentionally left
as a data-viz color.
Completes the "#2D8F5C literals removed" item that #103 deferred for the
non-heading sites, using the #104 tokenization pattern.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend5761c18Commit Preview URL

Branch Preview URL
Jun 12 2026, 07:16 AM

@coderabbitai

coderabbitaiBot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR consolidates hardcoded colors and glass-based UI styling into a centralized design token system using CSS variables and supporting TypeScript constants, updating over 70 files across the landing page, onboarding flow, feature components, and dashboard to use the new themeable palette.

Changes

Design Token and Theming System

Layer / File(s)Summary
Brand and state token definitions
frontend/src/lib/brand.ts, frontend/src/app/globals.css
Introduces BRAND_FOREST constant (#1B6C42) for non-CSS sinks (framer-motion), and establishes centralized CSS custom properties for brand colors (--brand-forest, --brand-forest-bright, --brand-forest-bright-hover), state colors (--state-mastery, --state-progress, --state-struggle, --state-neutral), and alert colors (--alert-warn, --alert-err, --fallback-muted).
Typography and surface system overhaul
frontend/src/app/layout.tsx, frontend/src/app/globals.css
Removes Inter font import and variable from layout; updates --font-inter token and font helpers to use var(--font-sans) without 'Inter' fallback. Replaces global "liquid glass" system (.liquid-glass, .glass-panel, .glass-input) and landing-scoped variants from frosted/blur/backdrop-filter styling to solid --bg-panel/--bg-input surfaces with tokenized borders and shadows. Removes landing gradient-shift animation keyframes and updates transitions to use var(--ease).
Landing page theming
frontend/src/app/page.tsx
Updates landing page root fontFamily, hero title, and feature sections to use BRAND_FOREST constant and var(--brand-forest) / var(--brand-forest-bright) variables. Removes gradient text styling and hardcoded hex values from hero, CTA buttons, feature titles, beta modal accents, and newsletter form controls.
Onboarding flow and sign-in modal theming
frontend/src/components/OnboardingFlow.tsx, frontend/src/components/SignInModal.tsx
Shifts OnboardingFlow input/card backgrounds from translucent blurred to solid white; updates step indicator, progress bar, class-year selection, and learning-style buttons to use var(--brand-forest). Updates navigation buttons from blur styling to solid backgrounds. Changes SignInModal highlighted text, button border, and links to use var(--brand-forest).
Feature components theming
frontend/src/components/HowItWorks.tsx
Updates SproutSVG stem/leaf colors, Step 1 checkmark, Step 2 progress ring/graph nodes/edges, and Step 3 mastery visualization/node labels to use var(--brand-forest) and BRAND_FOREST. Updates StepIndicator active dot and progress segments, quiz selected option color, and step label to use brand variables.
Dashboard and tree status colors
frontend/src/components/screens/Dashboard.tsx, frontend/src/components/screens/Tree.tsx
Changes Dashboard "done" streak shield and "today" circle fills to use var(--alert-warn) and var(--alert-err). Updates graph-panel legend and Tree tier metadata color mappings to use state CSS variables (--state-mastery, --state-progress, --state-struggle, --state-neutral) instead of hardcoded hex.
Remaining component updates
frontend/src/app/(shell)/notetaker/page.tsx, frontend/src/components/AchievementUnlockToast.tsx, frontend/src/components/flashcards/ParsedCardsTable.tsx, frontend/src/components/screens/Social.tsx
Updates notetaker MASTERY_COLOR and unknown course color to use theme variables; removes backdropFilter: "blur(2px)" from modals. Adjusts AchievementUnlockToast layout and adds decorative dot. Enhances ParsedCardsTable error row highlighting with inline "!" marker. Simplifies Social reply-to border to 1px var(--border).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🌲 Brand forest grows, consistent hue,

From glass to solid, surfaces true,

Variables dance where hex colors stayed,

A theme once fragmented, now unified, swayed! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 14.29% 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 nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main objective: a multi-phase design-system consolidation effort with specific issue references.
Description check✅ PassedThe description is comprehensive and well-structured, covering changes made, related issues, verification approach, and scope notes.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 design/wave2-phase1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 50bb633 into mainJun 12, 2026
5 of 6 checks passed
@AndresL230
AndresL230 deleted the design/wave2-phase1 branch June 27, 2026 04:21
Sign up for freeto 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

@Jose-Gael-Cruz-Lopez