Commit Graph

15 Commits

Author SHA1 Message Date
bbcb07ff38 feat(07-01): add useWizardState hook, i18n keys, and shadcn checkbox
- Create useWizardState hook with localStorage persistence keyed by userId
- Add all setup wizard i18n keys to en.json and de.json
- Install shadcn checkbox component for step 2 item selection
2026-04-20 21:04:34 +02:00
441d201837 chore: merge executor worktree (worktree-agent-a29c13e1) 2026-04-20 17:12:56 +02:00
e7282fa3d6 feat(05-02): remove hardcoded rounded-* from CategorySection, ChartEmptyState, QuickAddPicker
- CategorySection: remove rounded-md from collapsible trigger button
- ChartEmptyState: remove rounded-lg from empty state border container
- QuickAddPicker: remove rounded-sm from picker item buttons
- QuickAddPicker: remove rounded-full from category dot indicator
2026-04-20 17:12:03 +02:00
4c74deced7 feat(05-01): update chart Bar radius to 0 and remove rounded-full legend dot
- 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
2026-04-20 17:11:48 +02:00
e8f13c91c6 feat(05-02): upgrade PageShell spacing to gap-8 and remove rounded-* from DashboardSkeleton
- PageShell: gap-6 → gap-8 for header-to-content spacing on all pages
- DashboardSkeleton: gap-6 → gap-8 (outer flex), gap-4 → gap-6 (summary cards), gap-6 → gap-8 (chart grid)
- DashboardSkeleton: remove rounded-md from 3 chart skeleton placeholders
- DashboardSkeleton: remove rounded-md from collapsible section row divs
- DashboardSkeleton: remove rounded-full from 2 badge skeleton placeholders
2026-04-20 17:11:20 +02:00
039fa0bc80 sum 2026-04-02 14:29:36 +02:00
9a8d13fcfb feat(03-02): wire collapsible sections into DashboardContent
- Add CATEGORY_TYPES_ALL constant and isOverBudget direction-aware helper
- Derive groupedSections via useMemo (filters empty groups, computes totals)
- Initialize openSections state with smart defaults (over-budget expanded)
- State resets on month navigation via key={budgetId} on DashboardContent
- Insert CollapsibleSections between chart grid and QuickAdd
- Add skeleton placeholders for collapsible sections area in DashboardSkeleton

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 15:13:41 +01:00
f30b846f04 feat(03-01): build CategorySection and CollapsibleSections components
- CategorySection: presentational collapsible with left border accent, chevron, badges, 4-column table
- Direction-aware difference logic: spending types (actual > budget = over), income/saving/investment (actual < budget = over)
- Per-item and footer totals with color-coded difference column
- CollapsibleSections: thin container rendering ordered CategorySection list with controlled open state
- Both components accept t() as prop (presentational pattern)
2026-03-17 15:07:56 +01:00
21ce6d8230 feat(03-01): add CSS animation tokens, i18n keys, and carryover display
- Add collapsible-open/close keyframes and CSS animation tokens to index.css
- Add dashboard.sections and dashboard.carryoverIncludes keys to en.json and de.json
- Add optional subtitle/subtitleClassName props to StatCard
- Extend SummaryStrip balance prop with carryoverSubtitle/carryoverIsNegative
- Compute and pass carryover subtitle from DashboardContent to SummaryStrip
2026-03-17 15:07:08 +01:00
243cacf862 feat(02-03): update DashboardSkeleton for 3-column chart layout
- Replace 2-column chart skeleton with 3-column grid (md:grid-cols-2 lg:grid-cols-3)
- Add third skeleton chart card matching real donut/bar/bar layout
- Update skeleton height to 250px to match chart component heights
2026-03-16 14:22:24 +01:00
bb12d01aae feat(02-02): create IncomeBarChart and SpendBarChart components
- IncomeBarChart: vertical grouped bars (budgeted muted, actual vivid)
- SpendBarChart: horizontal bars via layout="vertical" with swapped axes
- Both use per-cell conditional fill for over-budget red accent
- Both use ChartContainer + ChartConfig for CSS variable theming
- Both handle empty data with ChartEmptyState placeholder
- ChartLegend and ChartTooltip with formatted currency values
2026-03-16 13:03:23 +01:00
971c5c7cbe feat(02-02): create ExpenseDonutChart with center label and active hover
- Donut chart with innerRadius/outerRadius, center total label via formatCurrency
- Active sector expansion on hover via activeShape + Sector
- Custom legend below chart with color dots and formatted amounts
- CSS variable fills via ChartConfig (no hardcoded hex values)
- Empty state: ChartEmptyState placeholder when no data
- Zero-amount state: neutral muted ring with $0 center label
- ChartEmptyState shared component created (Rule 3: blocking dependency from Plan 01)
2026-03-16 13:02:30 +01:00
448195016f feat(02-01): create useMonthParam hook and MonthNavigator component
- useMonthParam reads/writes month URL search param with YYYY-MM fallback
- navigateMonth handles year rollover via Date constructor
- MonthNavigator renders prev/next arrows with Select dropdown
- Dropdown lists available budget months with locale-aware formatting
2026-03-16 13:02:29 +01:00
ffc5c5f824 feat(01-02): create PageShell, StatCard, SummaryStrip, and DashboardSkeleton components
- PageShell: reusable page header with title, description, and action slot
- StatCard: KPI card with formatted value, semantic color, and optional variance badge
- SummaryStrip: responsive 3-card grid composing StatCards for income/expenses/balance
- DashboardSkeleton: pulse-animated loading placeholder mirroring real dashboard layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:18:55 +01:00
d89d70f3c7 feat(01-01): install shadcn chart and collapsible primitives
- Add chart.tsx with ChartContainer, ChartTooltip, ChartTooltipContent wrappers
- Apply Recharts v3 initialDimension patch (shadcn-ui/ui#9892)
- Add collapsible.tsx with Collapsible, CollapsibleTrigger, CollapsibleContent

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:13:10 +01:00