Skip to content

Refresh the app design system across core screens#127

Merged
Gamius00 merged 13 commits into
release-v-1.0.3from
codex/update-design-system
Jun 23, 2026
Merged

Refresh the app design system across core screens#127
Gamius00 merged 13 commits into
release-v-1.0.3from
codex/update-design-system

Conversation

@FleetAdmiralJakob

@FleetAdmiralJakob FleetAdmiralJakob commented Jun 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Rework the shared design system tokens, theme helpers, and Tailwind configuration
  • Update core app, auth, learning-plan, and settings screens to use the new UI primitives
  • Align documentation and shared components with the refreshed visual language

Testing

  • Not run (not requested)

Summary by CodeRabbit

  • Style

    • Comprehensive visual refresh with new semantic color palette, improved typography scale, and updated button/card/screen styling across the app.
    • UI consistency improvements: spacing/rhythm, theme-based backgrounds/text, and refined states for navigation, timelines, quizzes, notifications, and forms.
    • Standardized close controls and “neutral” UI tones for dialogs and badges.
  • Documentation

    • Updated design-system and styling guides, including light-mode-only implementation rules, token/typography hierarchy, and semantic text-role usage.
    • Added/clarified dark mode status as planned work.

@coderabbitai

coderabbitai Bot commented Jun 20, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: edd28ba1-bf8c-4a48-96f8-3a1c6eaf593e

📥 Commits

Reviewing files that changed from the base of the PR and between 6fa3c39 and 1eadee2.

📒 Files selected for processing (6)
  • docs/contexts/design-system/CONTEXT.md
  • src/app/learning-plans/[planId]/review.tsx
  • src/app/learning-plans/[planId]/sessions/[sessionId]/edit.tsx
  • src/app/learning-times/edit.tsx
  • src/global.css
  • src/lib/design-system.ts
✅ Files skipped from review due to trivial changes (3)
  • src/app/learning-plans/[planId]/sessions/[sessionId]/edit.tsx
  • docs/contexts/design-system/CONTEXT.md
  • src/app/learning-times/edit.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/global.css
  • src/app/learning-plans/[planId]/review.tsx
  • src/lib/design-system.ts

📝 Walkthrough

Walkthrough

Replaces all hardcoded hex colors (#3A7BFF#00BAFF, #DDE7FF#EAF8FF, etc.) and numeric font-size classes (text-16, text-12, etc.) app-wide with a new semantic token layer: updated DAYOVA_DESIGN_SYSTEM, CSS custom properties (global.css), Tailwind config (converted to TypeScript/ESM with new color palettes and heading-*/body-* font scales), and a single light-only NAV_THEME. Adds a new CloseButton shared component and propagates all tokens through UI primitives, shared components, auth/onboarding, and every app screen.

Changes

Design System Token Migration

Layer / File(s) Summary
Token definitions: design-system, CSS vars, Tailwind config, theme & utils
src/lib/design-system.ts, src/global.css, tailwind.config.ts, src/lib/theme.ts, src/lib/utils.ts, biome.jsonc, components.json, README.md
Replaces colors palette in DAYOVA_DESIGN_SYSTEM with #00BAFF-based primary and path1–7/light1–3/semantic status tokens. Updates global.css to color-scheme: light with new HSL variables, --button-radius: 44px, and --input-radius: 32px. Converts tailwind.config.js to TypeScript ESM, adds success/wrong/warning/info/system/theorie/ueben/praxis palettes and heading-*/body-* fontSize tuples with explicit line-height and letter-spacing. Collapses NAV_THEME from light/dark record to a single DefaultTheme override. Updates twMerge text-merge list to heading-*/body-* tokens. Config file references updated to .ts. README documents light-mode-only status.
Documentation: design-system context and styling guide
docs/contexts/design-system/CONTEXT.md, docs/styling.md
CONTEXT.md adds a Styling Tokens section (light-mode assumption, Figma palette source of truth, Poppins hierarchy with Regular vs SemiBold, pill button variants with gradient/black, corner-radius rules, CloseButton styling). docs/styling.md updates fontSize examples to semantic tokens, adjusts the twMerge example to include heading-*/body-*, and expands style-prop exception rules with 4px spacing grid, light-mode guidance, typography source-of-truth, cn() usage, and explicit exception comment requirement.
Core UI primitives: Text, Surface, Field, Button, CloseButton, Input, Textarea, Screen
src/components/ui/text.tsx, src/components/ui/surface.tsx, src/components/ui/field.tsx, src/components/ui/button.tsx, src/components/ui/close-button.tsx, src/components/ui/input.tsx, src/components/ui/textarea.tsx, src/components/ui/screen.tsx, src/components/ui/text-field.tsx
Text gains androidTextResetStyle and style prop forwarding. textVariants switches to heading-*/body-* with updated web scroll margin behavior. Surface replaces elevation-based ViewStyle mapping with static surfaceClassByVariant class map. Field components remove DAYOVA_DESIGN_SYSTEM-derived fieldSurfaceStyle/fieldInvalidStyle arrays and adopt class-based invalid/disabled states. Button adds LinearGradient fill for default variant, explicit style prop forwarding to Pressable, children-as-function support; BackButton drops resolvedStyle computation and forwards style directly, updates to bg-card, changes ArrowLeft to use design-system text color. New CloseButton component wraps TouchableOpacity with accessibility defaults (label, opacity, hitSlop) and renders X icon with design-system color. Input/Textarea add Platform.select Android font-padding constants and update placeholder color alpha. Screen applies bg-background via cn. InsetTextField updates sizing classes from min-h-[64px] to min-h-16 and text-16 to text-body-2.
Shared components: SelectSheet, SectionHeader, ListRow, ActionModal, DateTimePicker, Switch, BottomNav, ScreenHeader, NotificationButton, Mascot
src/components/ui/select-sheet.tsx, src/components/ui/section-header.tsx, src/components/ui/list-row.tsx, src/components/ui/action-modal.tsx, src/components/ui/date-time-picker-sheet.tsx, src/components/ui/switch.android.tsx, src/components/bottom-nav.tsx, src/components/screen-header.tsx, src/components/notification-button.tsx, src/components/Mascot.tsx
SelectSheet replaces hardcoded BottomSheet chrome colors with DAYOVA_DESIGN_SYSTEM tokens and cn-based classes; updates option row styling from inline style objects to conditional className with token-based border/background. SectionHeader removes hardcoded color plus inline style font sizing/line-height, uses class-based cn composition. ListRow updates icon wrapper to bg-muted, label/description to text-body-2/text-body-4. ActionModal changes card to bg-card, icon circle to bg-success-subtle, typography to text-body-1/text-body-3. DateTimePicker bottom-sheet moves to className-based styling with bg-card, done button to text-body-2. Android Switch introduces DAYOVA_PRIMARY and updates switchColors from hardcoded DAYOVA_BLUE palette. BottomNav adds design-system import, updates icon colors to DAYOVA_DESIGN_SYSTEM.colors.primary/text, bar container to bg-card, indicator colors to design-system variants. ScreenHeader title switches from font-bold text-16 to font-semibold text-body-2. NotificationButton container background bg-whitebg-card, badge bg-[#FF4D67]bg-destructive. Mascot SVG colors updated: celebrating circle #3A7BFF#00BAFF, thinking/curious stroke #3A7BFF#00BAFF, body hoodie ellipse #DDE7FF#EAF8FF, head/props conditional strokes #DDE7FF#EAF8FF.
Auth & onboarding screens re-themed
src/app/_layout.tsx, src/app/(auth)/index.tsx, src/components/AuthScreen.tsx, src/app/(auth)/onboarding.tsx
Root layout removes StyleSheet usage and per-color-scheme useColorScheme theme derivation; introduces gestureRootStyle and passes NAV_THEME directly (instead of theme keyed record) to ThemeProvider. Auth choice screen (src/app/(auth)/index.tsx) updates top-level container, scroll sizing, section divider, and typography to new className tokens. AuthScreen component: ModeButton switches label styling from inline font/lineHeight to className-based typography; OtpCodeInput changes cell background bg-whitebg-card, digit text to text-heading-1; VerificationFeedbackPill updates neutral palette colors and message styling to text-body-4 with runtime color; verification screen header and card typography updated to text-heading-1/text-body-3; footer resend link to text-primary; main auth header title to text-heading-1 text-white; tab indicator background bg-whitebg-card; register back button restyled with bg-muted, padding, new font styling; register identity alert container bg-[#F7F8FA]bg-muted, text to text-body-3 text-text/62; password input selectionColor #3A7BFF#00BAFF; age field display text-16text-body-2; bottom helper text text-12text-body-4 text-text/46. Onboarding screen: imports ViewStyle for typed keyboardScrollContentStyle, updates root background to bg-background, padding to px-6, intro progress dots and title/description to themed colors with font-poppins and text-* classes, questionnaire progress track to bg-primary/20, header spacing/typography, option row styling with #00BAFF palette for selected state, InsetTextField controlClassName bg-whitebg-card and inputClassName text-16text-body-2, birth-date trigger background to bg-card with font-poppins text-body-2 and conditional text-text opacity.
App screens re-themed: home, plans, notifications, settings, profile, entries, learning-times
src/app/(app)/_layout.tsx, src/app/(app)/home.tsx, src/app/(app)/learning-plans.tsx, src/app/(app)/plans.tsx, src/app/notifications.tsx, src/app/notification-settings.tsx, src/app/(app)/settings.tsx, src/app/profile.tsx, src/app/entry/[id].tsx, src/app/entry/new.tsx, src/app/learning-times/index.tsx, src/app/learning-times/edit.tsx
App layout removes sceneStyle backgroundColor. Home screen: imports CloseButton, updates background bg-background, hero card to bg-card, icon circle to bg-accent, typography to themed foreground/muted text with runtime-scaled sizing; day-strip styling changes to themed text-white/text-foreground and bg-muted for unselected days; timeline styling switches to themed text-foreground and bg-accent tint with updated lineHeight; empty-state message to text-muted-foreground; create modal replaces inline close TouchableOpacity+grey background+X icon with CloseButton component. Plans screen: adds DAYOVA_DESIGN_SYSTEM import, updates ProgressRing to DAYOVA_DESIGN_SYSTEM.colors.primary, percentage label to text-body-4 text-foreground, LearningPlanCard icon container and title to utility classes and text-body-1 text-foreground, header "Deine Lernpläne" title styling updated, notification bell button includes accessibility props and navigates to /notifications with updated bg-card styling. Learning-plans screen: imports DAYOVA_DESIGN_SYSTEM, updates ProgressRing colors, LearningPlanCard to utility classes with bg-card and text-body-*, header and empty-state typography to token classes. Notifications screen: imports DAYOVA_DESIGN_SYSTEM, updates NotificationIcon to use primary color, WarningBanner to bg-warning-subtle/text-warning-foreground, category tabs bar to bg-card, notification card swipe delete background to bg-card/20, card content restructured to utility classes with relative-time badge using bg-muted/text-muted-foreground, loading UI when inbox is null with design-system ActivityIndicator. Notification-settings screen: updates card styling to bg-card, spacing to gap-* classes, typography to token classes, time picker rows to themed styling, ActivityIndicator color to #00BAFF, Timer icon colors updated. Settings screen: updates icon color #202127#1A1A1A, row spacing from rowGap style to gap-5. Profile screen: feedback message uses text-body-4 and #00BAFF color, button shadowColor to #00BAFF. Entry detail screen: DetailTile background to bg-card, label to font-poppins uppercase, NotesCard background to bg-card, icon color to #00BAFF, header typography to new classes; summary/task rows updated to class-based styling; title/kind text restyled with font-poppins classes, detail tile icons to #00BAFF. Entry new screen: updates all text components to font-poppins text-body-2, replaces icon colors with #697586 and #1A1A1A, placeholder colors to rgba, success checkmark to #34C759 (from #28C76F), error message text-12text-body-4, exam action row to gap-3. Learning-times index: imports DAYOVA_DESIGN_SYSTEM, updates LearningTimeRow from inline styles/hex values to class-based tokens with DAYOVA_DESIGN_SYSTEM.colors.text, overview header/loading/empty-state to token-based styling. Learning-times edit: imports DAYOVA_DESIGN_SYSTEM, TimeControl to bg-card with themed Timer icon, CalendarDays icon colors updated, header typography to themed classes, feedback text to text-body-4 text-primary, action bar to gap-3 with DAYOVA_DESIGN_SYSTEM.colors.buttonNeutralForeground for trash icon.
Learning-plan screens & features re-themed
src/app/learning-plans/[planId]/index.tsx, src/app/learning-plans/[planId]/analysis.tsx, src/app/learning-plans/[planId]/generating.tsx, src/app/learning-plans/[planId]/quiz/[questionIndex].tsx, src/app/learning-plans/[planId]/review.tsx, src/app/learning-plans/[planId]/sessions/[sessionId]/edit.tsx, src/app/learning-plans/new.tsx, src/features/learning-plans/learning-plan-ui.tsx, src/features/learning-plans/quiz-step.tsx
All learning-plan screens: background migrated from bg-[#F5F3F6] to bg-background. Analysis/generating/quiz screens: instruction/error text updated to text-heading-2/text-body-4 from inline sizing and older text classes. Index screen: introduces ViewStyle for sessionsScrollContentStyle, SessionOverviewCard refactored to utility class styling, completion control from inline TouchableOpacity to Button with variant based on session.completed, header icon container and title to theme/design-system classes, planning hint restyled to bg-card with DAYOVA_DESIGN_SYSTEM.colors.warning for alert icon and text-warning-foreground, empty-state to bg-card/text-foreground. Review screen: adds imports for useSafeAreaInsets and DAYOVA_DESIGN_SYSTEM, background to bg-background, planning hint banner restyled with theme colors and alert icon from design system, error message text-12text-body-4, button loading indicator to DAYOVA_DESIGN_SYSTEM.colors.buttonNeutralForeground, button label typography text-15text-body-3, floating button shadow to #00BAFF, success checkmark #28C76F#34C759. Session edit screen: both loaded and loading root backgrounds to bg-background, error message text-12text-body-4, delete modal button row to gap-3 with button label text-texttext-button-neutral-foreground, loading ActivityIndicator color to #00BAFF. New plan screen: imports CloseButton, updates UploadSheetOption container bg-whitebg-card, icon circle bg-[#EAF3FF]bg-accent, title/description to font-poppins with runtime scaling and text-muted-foreground; "Materialien" action styling updated to #00BAFF, error message text-12text-body-4, button shadow to #00BAFF, upload modal background to bg-background, modal header typography to font-poppins with runtime scaling, replaces close button with CloseButton, updates upload option icons to #00BAFF. Learning-plan-ui features: SectionTitle title/description to text-body-1/text-body-3; MaterialCard attachment icon color updated, material name/size to text-body-*; SessionCard date badge styling updated, title/timestamp to text-body-*; SessionEditPill value to text-body-2; SessionEditForm header/helper text to text-body-*, icon colors updated, date/time row to gap-3, phase option row border/background to themed values with bg-card, option text to text-body-*. QuizStep: progress indicator color to #00BAFF, question number to text-heading-2, "Frage...von" label to text-body-4, prompt to text-body-1, error message text-12text-body-4.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • Dayova/dayova-mvp#89: Both PRs modify src/app/learning-plans/[planId]/review.tsx's planning-hint banner styling — this PR re-styles it with DAYOVA_DESIGN_SYSTEM.colors.warning tokens and theme background.
  • Dayova/dayova-mvp#107: Both PRs modify src/components/notification-button.tsx styling — this PR adjusts the container background to bg-card and badge color to bg-destructive.
  • Dayova/dayova-mvp#112: Both PRs modify src/app/(app)/home.tsx day-strip and timeline rendering — this PR applies theme colors and typography updates to the visual elements.

🐰 Hex codes were scattered like carrots astray,
#3A7BFF hopped to #00BAFF today!
With tokens and Tailwind, the palette aligned,
text-body-* classes now perfectly rhymed.
One light theme to rule them all, darkness declined —
The rabbit declares: the design system's refined! 🎨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: a refresh of the app's design system across core screens, which is reflected across most files in the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/update-design-system

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed: private package registry requires authentication. Disable ESLint in CodeRabbit settings or use public packages.


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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (7)
src/app/learning-plans/[planId]/sessions/[sessionId]/edit.tsx (1)

304-304: ⚡ Quick win

Use DAYOVA_DESIGN_SYSTEM for ActivityIndicator color.

Line 304 hardcodes #00BAFF instead of referencing DAYOVA_DESIGN_SYSTEM.colors.primary. For consistency with the token migration, color values should be sourced from the design system.

♻️ Proposed fix to use design system constant
+import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system";

 // ... around line 304:
-<ActivityIndicator color="`#00BAFF`" />
+<ActivityIndicator color={DAYOVA_DESIGN_SYSTEM.colors.primary} />
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/learning-plans/`[planId]/sessions/[sessionId]/edit.tsx at line 304,
The ActivityIndicator component on line 304 uses a hardcoded color value of
`#00BAFF` instead of referencing the design system. Replace the hardcoded color
prop value with DAYOVA_DESIGN_SYSTEM.colors.primary to maintain consistency with
the design token migration and ensure all colors come from a centralized source.
src/app/learning-plans/new.tsx (1)

460-461: ⚡ Quick win

Import DAYOVA_DESIGN_SYSTEM and use constants for primary color references.

Lines 460–461, 503, 595–599, and 617–621 hardcode #00BAFF (the primary color) instead of referencing DAYOVA_DESIGN_SYSTEM.colors.primary. This breaks the token abstraction goal and makes future theme changes harder to propagate. Import the design system and use the constant consistently across shadow colors, icon colors, and activity indicators.

♻️ Proposed fix to use DAYOVA_DESIGN_SYSTEM constant
+import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system";

 // ... around lines 454–461 (icon container in ActionSurface):
 <View
   className="items-center justify-center"
   style={{
     width: 48,
     height: 48,
     borderRadius: 24,
-    backgroundColor: "`#00BAFF`",
-    shadowColor: "`#00BAFF`",
+    backgroundColor: DAYOVA_DESIGN_SYSTEM.colors.primary,
+    shadowColor: DAYOVA_DESIGN_SYSTEM.colors.primary,
     shadowOpacity: 0.24,
     shadowRadius: 12,
     shadowOffset: { width: 0, height: 4 },
     elevation: 3,
   }}
 >

 // ... around line 503 (Button shadow):
 style={{
-  shadowColor: "`#00BAFF`",
+  shadowColor: DAYOVA_DESIGN_SYSTEM.colors.primary,
   shadowOpacity: 0.3,
   shadowRadius: 14,
   shadowOffset: { width: 0, height: 7 },
   elevation: 5,
 }}

 // ... around lines 595–599 and 617–621 (ActivityIndicator and icon colors):
 icon={
   isBusy ? (
-    <ActivityIndicator color="`#00BAFF`" />
+    <ActivityIndicator color={DAYOVA_DESIGN_SYSTEM.colors.primary} />
   ) : (
     <ScanImage
       size={24 * modalScale}
-      color="`#00BAFF`"
+      color={DAYOVA_DESIGN_SYSTEM.colors.primary}
       strokeWidth={1.8}
     />
   )
 }

 // ... similar for the Attachment icon:
 icon={
   isBusy ? (
-    <ActivityIndicator color="`#00BAFF`" />
+    <ActivityIndicator color={DAYOVA_DESIGN_SYSTEM.colors.primary} />
   ) : (
     <Attachment
       size={24 * modalScale}
-      color="`#00BAFF`"
+      color={DAYOVA_DESIGN_SYSTEM.colors.primary}
       strokeWidth={1.8}
     />
   )
 }

Also applies to: 503-503, 595-599, 617-621

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

In `@src/app/learning-plans/new.tsx` around lines 460 - 461, Import
DAYOVA_DESIGN_SYSTEM at the top of the file, then replace all hardcoded color
references to `#00BAFF` with DAYOVA_DESIGN_SYSTEM.colors.primary. Specifically,
update the backgroundColor and shadowColor properties around lines 460-461, the
color reference at line 503, and the icon color and activity indicator color
properties around lines 595-599 and 617-621 respectively. This ensures
consistent use of the design system tokens for the primary color and makes
future theme changes easier to propagate.
src/features/learning-plans/learning-plan-ui.tsx (1)

106-106: ⚡ Quick win

Import DAYOVA_DESIGN_SYSTEM and replace hardcoded icon colors and border colors with semantic constants.

This file hardcodes multiple icon and border colors (#00BAFF, #697586, #1A1A1A) instead of using DAYOVA_DESIGN_SYSTEM constants. Specifically:

  • Line 106: Attachment icon color
  • Lines 257, 265, 274: CalendarDays/Clock icon colors
  • Line 286: ChevronDown icon color
  • Line 306: Phase option border color

This breaks the design token abstraction and makes the file inconsistent with review.tsx, which correctly imports and uses DAYOVA_DESIGN_SYSTEM.colors.warning. All hardcoded hex values should be sourced from the design system for maintainability and future theme support.

♻️ Proposed fix to use DAYOVA_DESIGN_SYSTEM constants
+import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system";

 export function MaterialCard({
   name,
   size,
   onRemove,
 }: {
   name: string;
   size: number;
   onRemove: () => void;
 }) {
   return (
     <Surface
       className="mb-3 flex-row items-center rounded-[24px] px-4 py-4"
       variant="soft"
     >
       <View className="h-11 w-11 items-center justify-center rounded-full bg-primary/12">
-        <Attachment size={21} color="`#00BAFF`" strokeWidth={2.2} />
+        <Attachment size={21} color={DAYOVA_DESIGN_SYSTEM.colors.primary} strokeWidth={2.2} />
       </View>

 // ... in SessionEditForm, around line 257:
-icon={<CalendarDays size={20} color="`#697586`" strokeWidth={2.1} />}
+icon={<CalendarDays size={20} color={DAYOVA_DESIGN_SYSTEM.colors.path4} strokeWidth={2.1} />}

 // ... around lines 265 and 274:
-icon={<Clock3 size={19} color="`#697586`" strokeWidth={2.1} />}
+icon={<Clock3 size={19} color={DAYOVA_DESIGN_SYSTEM.colors.path4} strokeWidth={2.1} />}

 // ... around line 286:
-icon={<ChevronDown size={20} color="`#1A1A1A`" strokeWidth={2.1} />}
+icon={<ChevronDown size={20} color={DAYOVA_DESIGN_SYSTEM.colors.text} strokeWidth={2.1} />}

 // ... around line 306 (phase option border):
 className="h-12 justify-center rounded-[24px] bg-card px-5"
 style={{
   borderWidth: phase === editPhase ? 1.5 : 1,
   borderColor:
-    phase === editPhase ? "`#00BAFF`" : "rgba(17,24,39,0.04)",
+    phase === editPhase ? DAYOVA_DESIGN_SYSTEM.colors.primary : "rgba(17,24,39,0.04)",
 }}

Also applies to: 257-257, 265-265, 274-274, 286-286, 306-306

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

In `@src/features/learning-plans/learning-plan-ui.tsx` at line 106, The file uses
hardcoded hexadecimal color values instead of semantic design tokens, which
breaks design abstraction and prevents future theme support. Import
DAYOVA_DESIGN_SYSTEM at the top of the file and replace all hardcoded color
values throughout the component with appropriate design system constants:
replace the color prop `#00BAFF` in the Attachment icon component, the colors in
the CalendarDays and Clock icon components at the referenced lines, the color in
the ChevronDown icon component, and the border color in the Phase option
element. Use the design system color constants that match the semantic purpose
of each color (e.g., warning, secondary, etc.) to maintain consistency with the
design system pattern already implemented in review.tsx.
src/app/learning-plans/[planId]/review.tsx (1)

204-204: ⚡ Quick win

Use DAYOVA_DESIGN_SYSTEM constants for shadow and icon colors.

Line 141 correctly uses DAYOVA_DESIGN_SYSTEM.colors.warning for semantic consistency. However, lines 204 and 220 hardcode hex values (#00BAFF and #34C759) that should reference design system constants instead, maintaining abstraction and enabling future theme changes.

♻️ Proposed fix to use DAYOVA_DESIGN_SYSTEM constants
+import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system";

 // ... in the TouchableOpacity styling around line 204:
 style={{
-  shadowColor: "`#00BAFF`",
+  shadowColor: DAYOVA_DESIGN_SYSTEM.colors.primary,
   shadowOpacity: 0.32,
   shadowRadius: 16,
   shadowOffset: { width: 0, height: 7 },
   elevation: 5,
   opacity: isBusy || !snapshot?.sessions.length ? 0.55 : 1,
 }}

 // ... in the ActionModal icon around line 220:
-icon={<Check size={48} color="`#34C759`" strokeWidth={1.2} />}
+icon={<Check size={48} color={DAYOVA_DESIGN_SYSTEM.colors.success} strokeWidth={1.2} />}

Also applies to: 220-220

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

In `@src/app/learning-plans/`[planId]/review.tsx at line 204, The shadowColor
property and icon color assignments in the review component use hardcoded hex
values (`#00BAFF` and `#34C759`) instead of referencing DAYOVA_DESIGN_SYSTEM
constants for semantic consistency. Replace these hardcoded hex color values
with the appropriate DAYOVA_DESIGN_SYSTEM color constants (following the pattern
of DAYOVA_DESIGN_SYSTEM.colors.warning used elsewhere in the file) to maintain
design system abstraction and enable future theme changes without code
modifications.
src/app/learning-plans/[planId]/index.tsx (1)

93-97: ⚡ Quick win

Replace hardcoded CTA icon/text colors with semantic tokens.

This segment still hardcodes #1A1A1A/#FFFFFF, which breaks the token-only styling contract introduced in this PR.

Proposed tokenized update
 				<Check
 					size={16}
-					color={session.completed ? "`#1A1A1A`" : "`#FFFFFF`"}
+					color={
+						session.completed
+							? DAYOVA_DESIGN_SYSTEM.colors.foreground
+							: DAYOVA_DESIGN_SYSTEM.colors.background
+					}
 					strokeWidth={2.2}
 				/>
 				<Text
-					className={`font-poppins font-semibold text-body-4 ${session.completed ? "text-foreground" : "text-white"}`}
+					className={`font-poppins font-semibold text-body-4 ${session.completed ? "text-foreground" : "text-background"}`}
 				>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/learning-plans/`[planId]/index.tsx around lines 93 - 97, Replace the
hardcoded color values `#1A1A1A` and `#FFFFFF` in the icon and text styling with
semantic tokens to maintain consistency with the PR's token-only styling
contract. In the section where the icon stroke color is set to `#1A1A1A` when
session.completed is true and `#FFFFFF` when false, replace these hex values with
appropriate semantic tokens. Similarly, ensure the text color styling in the
className uses semantic tokens instead of hardcoded colors. Refer to the
existing semantic token definitions in your design system to determine the
correct token names for foreground and background colors.
src/features/learning-plans/quiz-step.tsx (1)

105-112: ⚡ Quick win

Use the design-system primary token for SVG fills instead of hardcoded hex.

#00BAFF is duplicated inline here; switching to the shared token keeps color updates centralized.

Proposed tokenized update
+import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system";
...
-								<Path d={questionProgressPath} fill="`#00BAFF`" />
+								<Path
+									d={questionProgressPath}
+									fill={DAYOVA_DESIGN_SYSTEM.colors.primary}
+								/>
...
-									fill="`#00BAFF`"
+									fill={DAYOVA_DESIGN_SYSTEM.colors.primary}
 								/>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/learning-plans/quiz-step.tsx` around lines 105 - 112, Replace
the hardcoded hex color value `#00BAFF` with the design-system primary token in
the SVG fill attributes. Update the fill property for both the Path component
and the Circle component in this block to use the appropriate primary color
token from your design system instead of the inline hex value. This ensures
color consistency and allows centralized color updates across the codebase.
tailwind.config.js (1)

169-176: ⚡ Quick win

Use CSS radius tokens consistently in Tailwind borderRadius mapping.

Line 173–176 hardcode pixel values even though matching CSS variables already exist, which weakens token single-source-of-truth and can drift on future palette/shape updates.

♻️ Proposed refactor
 			borderRadius: {
 				lg: "var(--radius)",
 				md: "var(--radius-md)",
 				sm: "var(--radius-sm)",
-				card: "32px",
-				button: "32px",
-				input: "28px",
-				tab: "28px",
+				card: "var(--card-radius)",
+				button: "var(--button-radius)",
+				input: "var(--input-radius)",
+				tab: "var(--input-radius)",
 			},
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tailwind.config.js` around lines 169 - 176, The borderRadius configuration in
tailwind.config.js has inconsistent token usage where properties like card,
button, input, and tab are using hardcoded pixel values (32px and 28px) instead
of CSS variables, while other properties like lg, md, and sm correctly reference
var(--radius-*) tokens. Replace the hardcoded pixel values for card, button,
input, and tab properties with their corresponding CSS variable references
(var(--radius-card), var(--radius-button), var(--radius-input),
var(--radius-tab)) to maintain consistency with the token-based design system
and ensure single source of truth for these values.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/styling.md`:
- Around line 83-90: The example in the "Prefer pairing size and color
explicitly on Text components" bullet point uses the non-semantic class text-14,
which contradicts the earlier established guidance that semantic classes like
text-body-1 through text-body-5 should be the preferred default for typography.
Replace the text-14 example in the line demonstrating pairing size and color on
Text components with a semantic typography class such as text-body-3 to maintain
consistent guidance throughout the styling documentation.

In `@src/app/`(app)/plans.tsx:
- Around line 101-107: The TouchableOpacity component wrapping the Bell icon
lacks an onPress handler, making it non-interactive despite appearing clickable.
Add an onPress prop to the TouchableOpacity element that handles the navigation
action (likely to a notifications screen or similar) that was previously
implemented. Ensure the handler is properly connected to your navigation logic
and that it performs the intended action when the bell is pressed.

---

Nitpick comments:
In `@src/app/learning-plans/`[planId]/index.tsx:
- Around line 93-97: Replace the hardcoded color values `#1A1A1A` and `#FFFFFF` in
the icon and text styling with semantic tokens to maintain consistency with the
PR's token-only styling contract. In the section where the icon stroke color is
set to `#1A1A1A` when session.completed is true and `#FFFFFF` when false, replace
these hex values with appropriate semantic tokens. Similarly, ensure the text
color styling in the className uses semantic tokens instead of hardcoded colors.
Refer to the existing semantic token definitions in your design system to
determine the correct token names for foreground and background colors.

In `@src/app/learning-plans/`[planId]/review.tsx:
- Line 204: The shadowColor property and icon color assignments in the review
component use hardcoded hex values (`#00BAFF` and `#34C759`) instead of referencing
DAYOVA_DESIGN_SYSTEM constants for semantic consistency. Replace these hardcoded
hex color values with the appropriate DAYOVA_DESIGN_SYSTEM color constants
(following the pattern of DAYOVA_DESIGN_SYSTEM.colors.warning used elsewhere in
the file) to maintain design system abstraction and enable future theme changes
without code modifications.

In `@src/app/learning-plans/`[planId]/sessions/[sessionId]/edit.tsx:
- Line 304: The ActivityIndicator component on line 304 uses a hardcoded color
value of `#00BAFF` instead of referencing the design system. Replace the hardcoded
color prop value with DAYOVA_DESIGN_SYSTEM.colors.primary to maintain
consistency with the design token migration and ensure all colors come from a
centralized source.

In `@src/app/learning-plans/new.tsx`:
- Around line 460-461: Import DAYOVA_DESIGN_SYSTEM at the top of the file, then
replace all hardcoded color references to `#00BAFF` with
DAYOVA_DESIGN_SYSTEM.colors.primary. Specifically, update the backgroundColor
and shadowColor properties around lines 460-461, the color reference at line
503, and the icon color and activity indicator color properties around lines
595-599 and 617-621 respectively. This ensures consistent use of the design
system tokens for the primary color and makes future theme changes easier to
propagate.

In `@src/features/learning-plans/learning-plan-ui.tsx`:
- Line 106: The file uses hardcoded hexadecimal color values instead of semantic
design tokens, which breaks design abstraction and prevents future theme
support. Import DAYOVA_DESIGN_SYSTEM at the top of the file and replace all
hardcoded color values throughout the component with appropriate design system
constants: replace the color prop `#00BAFF` in the Attachment icon component,
the colors in the CalendarDays and Clock icon components at the referenced
lines, the color in the ChevronDown icon component, and the border color in the
Phase option element. Use the design system color constants that match the
semantic purpose of each color (e.g., warning, secondary, etc.) to maintain
consistency with the design system pattern already implemented in review.tsx.

In `@src/features/learning-plans/quiz-step.tsx`:
- Around line 105-112: Replace the hardcoded hex color value `#00BAFF` with the
design-system primary token in the SVG fill attributes. Update the fill property
for both the Path component and the Circle component in this block to use the
appropriate primary color token from your design system instead of the inline
hex value. This ensures color consistency and allows centralized color updates
across the codebase.

In `@tailwind.config.js`:
- Around line 169-176: The borderRadius configuration in tailwind.config.js has
inconsistent token usage where properties like card, button, input, and tab are
using hardcoded pixel values (32px and 28px) instead of CSS variables, while
other properties like lg, md, and sm correctly reference var(--radius-*) tokens.
Replace the hardcoded pixel values for card, button, input, and tab properties
with their corresponding CSS variable references (var(--radius-card),
var(--radius-button), var(--radius-input), var(--radius-tab)) to maintain
consistency with the token-based design system and ensure single source of truth
for these values.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 25e1a220-2956-40f6-9f11-e49d250ebb05

📥 Commits

Reviewing files that changed from the base of the PR and between cc6f077 and c58ead9.

📒 Files selected for processing (50)
  • docs/contexts/design-system/CONTEXT.md
  • docs/styling.md
  • src/app/(app)/_layout.tsx
  • src/app/(app)/home.tsx
  • src/app/(app)/learning-plans.tsx
  • src/app/(app)/plans.tsx
  • src/app/(app)/settings.tsx
  • src/app/(auth)/index.tsx
  • src/app/(auth)/onboarding.tsx
  • src/app/_layout.tsx
  • src/app/entry/[id].tsx
  • src/app/entry/new.tsx
  • src/app/learning-plans/[planId]/analysis.tsx
  • src/app/learning-plans/[planId]/generating.tsx
  • src/app/learning-plans/[planId]/index.tsx
  • src/app/learning-plans/[planId]/quiz/[questionIndex].tsx
  • src/app/learning-plans/[planId]/review.tsx
  • src/app/learning-plans/[planId]/sessions/[sessionId]/edit.tsx
  • src/app/learning-plans/new.tsx
  • src/app/learning-times/edit.tsx
  • src/app/learning-times/index.tsx
  • src/app/notification-settings.tsx
  • src/app/notifications.tsx
  • src/app/profile.tsx
  • src/components/AuthScreen.tsx
  • src/components/Mascot.tsx
  • src/components/bottom-nav.tsx
  • src/components/notification-button.tsx
  • src/components/screen-header.tsx
  • src/components/ui/action-modal.tsx
  • src/components/ui/button.tsx
  • src/components/ui/date-time-picker-sheet.tsx
  • src/components/ui/field.tsx
  • src/components/ui/input.tsx
  • src/components/ui/list-row.tsx
  • src/components/ui/screen.tsx
  • src/components/ui/section-header.tsx
  • src/components/ui/select-sheet.tsx
  • src/components/ui/surface.tsx
  • src/components/ui/switch.android.tsx
  • src/components/ui/text-field.tsx
  • src/components/ui/text.tsx
  • src/components/ui/textarea.tsx
  • src/features/learning-plans/learning-plan-ui.tsx
  • src/features/learning-plans/quiz-step.tsx
  • src/global.css
  • src/lib/design-system.ts
  • src/lib/theme.ts
  • src/lib/utils.ts
  • tailwind.config.js
💤 Files with no reviewable changes (1)
  • src/app/(app)/_layout.tsx

Comment thread docs/styling.md
Comment thread src/app/(app)/plans.tsx
@Gamius00

Copy link
Copy Markdown
Member

Please also add the new gradient from figma
image

@Gamius00

Gamius00 commented Jun 21, 2026

Copy link
Copy Markdown
Member

please center the icon image

@Gamius00

Copy link
Copy Markdown
Member
IMG_7462

This is the state from the main branch

@Gamius00
Gamius00 self-requested a review June 21, 2026 13:37
@Gamius00
Gamius00 marked this pull request as draft June 21, 2026 13:37
@FleetAdmiralJakob
FleetAdmiralJakob marked this pull request as ready for review June 22, 2026 16:42

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6fa3c3978c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/global.css
--button-neutral: 0 0% 88.6%;
--button-neutral-foreground: 0 0% 10.2%;
--secondary: 316.1 100% 64.9%;
--button-neutral: 0 0% 10.2%;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep neutral button foregrounds in sync

With --button-neutral now resolving to black, neutral buttons are no longer compatible with existing callers that still force black content: src/app/learning-plans/[planId]/review.tsx:186-188 uses #1A1A1A/text-text, src/app/learning-plans/[planId]/sessions/[sessionId]/edit.tsx:221 uses text-text, and src/app/learning-times/edit.tsx:320 hard-codes a black trash icon. In those paths the label, spinner, or icon becomes black on a black neutral button, making core actions appear blank; update those callers to use the neutral foreground or keep this token light.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tailwind.config.ts (1)

121-129: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Define a safe value for path.7 to avoid unresolved color tokens.

Line 128 maps path.7 to hsl(var(--path-7)), but the provided src/global.css token snippet only defines --path-1--path-6. Any bg-path-7/text-path-7 usage will resolve to an invalid color until --path-7 exists.

Suggested patch
 				path: {
-					7: "hsl(var(--path-7))",
+					7: "hsl(var(--path-7, var(--path-6)))",
 				},
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tailwind.config.ts` around lines 121 - 129, The path object in
tailwind.config.ts currently maps path.7 to hsl(var(--path-7)), but this CSS
variable is not defined in the provided global.css token definitions (which only
include --path-1 through --path-6). Either remove the path.7 entry from the path
object if it is unused, or replace the hsl(var(--path-7)) value with a safe
fallback color value that will resolve to a valid color even when the CSS
variable is unavailable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/ui/button.tsx`:
- Around line 33-37: The destructive button variant is using neutral button
styling (bg-button-neutral and text-button-neutral-foreground) instead of
destructive styling, making destructive actions visually indistinguishable from
neutral actions. In the destructive variant definition around lines 33-37,
replace the neutral background and foreground classes with appropriate
destructive color classes that clearly indicate a destructive action. Apply the
same fix to the other occurrence of destructive styling around lines 81-82.
Ensure that destructive buttons use destructive-specific colors for both
background and text to maintain proper visual semantics.

---

Outside diff comments:
In `@tailwind.config.ts`:
- Around line 121-129: The path object in tailwind.config.ts currently maps
path.7 to hsl(var(--path-7)), but this CSS variable is not defined in the
provided global.css token definitions (which only include --path-1 through
--path-6). Either remove the path.7 entry from the path object if it is unused,
or replace the hsl(var(--path-7)) value with a safe fallback color value that
will resolve to a valid color even when the CSS variable is unavailable.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: af7f1eae-78b6-4e63-8cbd-3872c9c567ba

📥 Commits

Reviewing files that changed from the base of the PR and between c58ead9 and 6fa3c39.

📒 Files selected for processing (21)
  • README.md
  • biome.jsonc
  • components.json
  • docs/contexts/design-system/CONTEXT.md
  • docs/styling.md
  • src/app/(app)/home.tsx
  • src/app/(app)/learning-plans.tsx
  • src/app/(app)/plans.tsx
  • src/app/learning-plans/[planId]/index.tsx
  • src/app/learning-plans/new.tsx
  • src/app/notifications.tsx
  • src/components/Mascot.tsx
  • src/components/bottom-nav.tsx
  • src/components/ui/button.tsx
  • src/components/ui/close-button.tsx
  • src/features/learning-plans/learning-plan-ui.tsx
  • src/features/learning-plans/quiz-step.tsx
  • src/global.css
  • src/lib/design-system.ts
  • src/lib/utils.ts
  • tailwind.config.ts
✅ Files skipped from review due to trivial changes (3)
  • README.md
  • src/components/Mascot.tsx
  • docs/contexts/design-system/CONTEXT.md
🚧 Files skipped from review as they are similar to previous changes (13)
  • src/global.css
  • src/lib/utils.ts
  • src/features/learning-plans/quiz-step.tsx
  • src/app/(app)/learning-plans.tsx
  • src/app/learning-plans/[planId]/index.tsx
  • src/features/learning-plans/learning-plan-ui.tsx
  • src/app/(app)/plans.tsx
  • src/lib/design-system.ts
  • docs/styling.md
  • src/app/notifications.tsx
  • src/components/bottom-nav.tsx
  • src/app/learning-plans/new.tsx
  • src/app/(app)/home.tsx

Comment on lines 33 to 37
destructive: cn(
"bg-destructive shadow-black/5 shadow-sm active:bg-destructive/90 dark:bg-destructive/60",
"border-border border-hairline bg-button-neutral shadow-black/5 shadow-sm active:bg-button-neutral/90",
Platform.select({
web: "hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
web: "hover:bg-button-neutral/90 focus-visible:ring-destructive/20",
}),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Restore destructive button semantics.

Line 34 and Lines 81-82 style destructive as neutral (bg-button-neutral + text-button-neutral-foreground), making destructive actions visually indistinguishable from neutral actions.

Suggested patch
 				destructive: cn(
-					"border-border border-hairline bg-button-neutral shadow-black/5 shadow-sm active:bg-button-neutral/90",
+					"border-destructive/20 border-hairline bg-destructive shadow-destructive/20 shadow-sm active:bg-destructive/90",
 					Platform.select({
-						web: "hover:bg-button-neutral/90 focus-visible:ring-destructive/20",
+						web: "hover:bg-destructive/90 focus-visible:ring-destructive/20",
 					}),
 				),
@@
-				destructive: "text-button-neutral-foreground",
+				destructive: "text-destructive-foreground",

Also applies to: 81-82

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

In `@src/components/ui/button.tsx` around lines 33 - 37, The destructive button
variant is using neutral button styling (bg-button-neutral and
text-button-neutral-foreground) instead of destructive styling, making
destructive actions visually indistinguishable from neutral actions. In the
destructive variant definition around lines 33-37, replace the neutral
background and foreground classes with appropriate destructive color classes
that clearly indicate a destructive action. Apply the same fix to the other
occurrence of destructive styling around lines 81-82. Ensure that destructive
buttons use destructive-specific colors for both background and text to maintain
proper visual semantics.

@Gamius00
Gamius00 changed the base branch from main to realease-v-1.0.3 June 23, 2026 09:04
@Gamius00
Gamius00 merged commit 4645c15 into release-v-1.0.3 Jun 23, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants