- /setup route as protected standalone page (outside AppLayout)
- DashboardPage redirects first-run users to /setup via useFirstRunState
- All hooks called before conditional returns (React rules of hooks)
- WizardStepper: horizontal 1-2-3 stepper with clickable completed steps
- IncomeStep: number input with currency suffix and validation
- AllocationBar: sticky remaining balance with live polite announcements
- CategoryGroupHeader: colored dot section divider per category type
- PresetItemRow: checkbox + name + badge + editable amount input
- RecurringItemsStep: groups 19 PRESETS by type with allocation calculation
- SetupPage: page orchestrator with step navigation and state persistence
Collapse 3 font weights (400/500/600) to 2 (400/600) per checker
requirement. Labels now use semibold (600) instead of medium (500).
Also improves CTA labels and adds focal point declaration.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Derives first-run state from cached useCategories + useTemplate queries
- Returns { isFirstRun, loading } with no additional network calls
- isFirstRun true when categories or template items array is empty
- Loading guard prevents spurious redirects during fetch
- ALTER TABLE profiles ADD COLUMN setup_completed boolean NOT NULL DEFAULT false
- Backfill existing users with categories OR template items to true
- UNION covers edge case users with template items but no categories
- Add top-level presets key with presets.{type}.{slug} structure
- 19 English translations covering all 6 category types
- 19 German translations covering all 6 category types
- Both JSON files remain valid after edits
Tailwind v4 does not derive --radius-xs through --radius-3xl from --radius.
The named scale is independent, so Cards (rounded-xl), Buttons (rounded-md),
etc. retained non-zero border-radius despite --radius: 0. Adding all scale
tokens as 0 ensures complete sharp-corner cascade.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DashboardPage: space-y-6->space-y-8, gap-6->gap-8 in chart grid
- BudgetListPage: remove rounded-md from template toggle row
- BudgetDetailPage: remove rounded-sm/md from skeleton and group headings, rounded-md from summary box, rounded-full from category dot
- TemplatePage: remove rounded-sm/full/md from skeleton and group headings and category dot; gap-6->gap-8, space-y-6->space-y-8
- CategoriesPage: remove rounded-sm/full/md from skeleton and group headings; space-y-6->space-y-8
- QuickAddPage: remove rounded-full/md from skeleton items
- SettingsPage: space-y-4->space-y-6 in CardContent (skeleton and live)
- SpendBarChart: set radius={0} on both Bar elements (was radius={4})
- IncomeBarChart: set radius={0} on both Bar elements (was radius={[4,4,0,0]})
- ExpenseDonutChart: remove rounded-full from legend color dot className
- Set --radius: 0 for sharp-cornered design system cascade
- Warm background chroma from 0.005 to 0.01
- Delete --color-chart-1 through --color-chart-5 (redundant with fill vars)
- Raise fill chroma to 0.22+ for vibrant pastel category colors
- Add .recharts-rectangle and [data-sonner-toast] radius overrides