154 Commits

Author SHA1 Message Date
439d0e950d chore: archive v1.0 phase directories 2026-03-24 09:46:00 +01:00
3a771ba7cd chore: complete v1.0 UI/UX Overhaul milestone 2026-03-24 09:44:12 +01:00
1d5e019839 docs: sync roadmap and state — mark phases 02-04 complete 2026-03-24 09:39:50 +01:00
0410d90e02 docs(02-01): add missing summary for month navigation plan 2026-03-24 09:39:26 +01:00
a270deb2db docs(phase-04): complete phase execution 2026-03-17 16:29:35 +01:00
51516cd73d docs(04-03): add final commit hash and self-check to SUMMARY.md 2026-03-17 16:24:18 +01:00
1e61b88628 docs(04-03): complete budget pages design consistency plan
- BudgetListPage: PageShell, locale-aware months via Intl.DateTimeFormat, skeleton, i18n month/year/total labels
- BudgetDetailPage: semantic tokens, direction-aware diff, group headers, skeleton, PageShell, locale heading
- STATE.md: advance plan, record metrics, add decisions, update session
- ROADMAP.md: phase 04 marked 3/3 plans complete
2026-03-17 16:23:50 +01:00
24d071c1f3 feat(04-03): upgrade BudgetDetailPage with semantic tokens, direction-aware diff, PageShell, group headers, and skeleton
- Replace TierBadge and tier column with cleaner per-category grouping display
- Rewrite DifferenceCell with direction-aware diff logic (spending types: over when actual > budgeted; income/saving/investment: over when actual < budgeted)
- Replace text-green-600/text-red-600 with text-on-budget/text-over-budget semantic tokens
- Replace dot+h2 group headers with left-border accent headers matching dashboard style
- Fix headingLabel to use i18n.language via Intl.DateTimeFormat instead of hardcoded 'en'
- Wrap page in PageShell with locale-aware title and Add Item action button
- Add back-link as first child of PageShell with -mt-4 compensation
- Replace null loading state with PageShell + Skeleton groups
- Update group footer total label to use budgets.total i18n interpolation key
2026-03-17 16:21:37 +01:00
89dd3ded74 feat(04-03): upgrade BudgetListPage with PageShell, locale-aware months, skeleton, and i18n labels
- Replace hardcoded MONTHS array with Intl.DateTimeFormat locale-aware monthItems useMemo
- Update budgetLabel helper to accept locale parameter and use Intl.DateTimeFormat
- Replace null loading state with PageShell + Skeleton rows
- Replace manual header with PageShell title and action prop
- Replace hardcoded 'Month'/'Year' Labels with t('budgets.month')/t('budgets.year')
- Add month/year/total keys to en.json and de.json budgets namespace
2026-03-17 16:20:02 +01:00
f166f1ac5e docs(04-02): complete CRUD pages design consistency plan
- 04-02-SUMMARY.md: documents PageShell adoption, skeleton loading, group headers
- STATE.md: position advanced to 04-02 complete, decisions recorded
- ROADMAP.md: phase 4 progress updated (2 of 3 plans complete)
2026-03-17 16:18:11 +01:00
ba19c30f07 feat(04-02): upgrade QuickAddPage and SettingsPage with PageShell and skeletons
- QuickAddPage: adopt PageShell for header with title and Add button
- QuickAddPage: replace return null with skeleton loading state (5-row table skeleton)
- SettingsPage: adopt PageShell for header with title
- SettingsPage: remove duplicate h1 heading (was shown alongside CardTitle)
- SettingsPage: remove CardHeader and CardTitle (PageShell provides page-level title)
- SettingsPage: replace return null with skeleton loading state
- SettingsPage: clean up imports — remove CardHeader/CardTitle
2026-03-17 16:16:23 +01:00
e9497e42a7 feat(04-02): upgrade CategoriesPage and TemplatePage with PageShell, skeletons, and group headers
- CategoriesPage: adopt PageShell for header with title and Add Category button
- CategoriesPage: replace return null with skeleton loading state
- CategoriesPage: upgrade dot group headers to left-border accent style
- TemplatePage: mirror PageShell layout (flex-col gap-6) for inline-editable header
- TemplatePage: replace return null with skeleton loading state
- TemplatePage: upgrade dot group headers to left-border accent style
- TemplateName h1: add tracking-tight to match PageShell h1 style
2026-03-17 16:15:04 +01:00
b15a14dea0 docs(04-01): complete auth page redesign plan
- LoginPage and RegisterPage redesigned with muted bg, card accent, logo, subtitle
- Google and GitHub SVG provider icons added to OAuth buttons
- auth.loginSubtitle and auth.registerSubtitle keys in en.json and de.json
- STATE.md updated with position, decisions, metrics
- ROADMAP.md updated with Phase 4 progress (1/3 plans complete)
2026-03-17 16:12:33 +01:00
0ff9939789 feat(04-01): redesign RegisterPage to match LoginPage visual treatment
- Change background from bg-background to bg-muted/60
- Add border-t-4 border-t-primary shadow-lg card accent
- Add favicon.svg logo above CardTitle
- Add auth.registerSubtitle below title
- Add pb-4 to CardHeader for consistent spacing with LoginPage
2026-03-17 16:10:19 +01:00
36d068e0ba feat(04-01): redesign LoginPage with brand presence and OAuth icons
- Change background from bg-background to bg-muted/60
- Add border-t-4 border-t-primary shadow-lg card accent
- Add favicon.svg logo above CardTitle
- Add auth.loginSubtitle below title
- Add Google SVG icon and GitHub SVG icon to OAuth buttons
- Add gap-2 to OAuth button className for icon/text spacing
- Add auth.loginSubtitle and auth.registerSubtitle to en.json and de.json
2026-03-17 16:09:23 +01:00
fbe01b7372 docs(04): create phase plan — 3 plans for full-app design consistency 2026-03-17 16:04:04 +01:00
c16f3302c8 docs(phase-4): add validation strategy 2026-03-17 15:57:41 +01:00
b6a4d3e83d docs(04): research phase domain 2026-03-17 15:56:22 +01:00
c960d80af0 docs(state): record phase 4 context session 2026-03-17 15:50:39 +01:00
b6e34d991e docs(04): capture phase context 2026-03-17 15:50:20 +01:00
748c7edc65 docs(phase-03): complete phase execution
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 15:20:03 +01:00
80929e1865 docs(03-02): complete collapsible sections integration plan
- 03-02-SUMMARY.md: documents CollapsibleSections wired into dashboard
- STATE.md: records key-prop reset decision, phase 3 completion, updated session
- ROADMAP.md: phase 3 plans (2/2) marked complete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 15:15:17 +01: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
7d08da20ce docs(03-01): complete collapsible sections foundations plan 2026-03-17 15:10:12 +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
1a4035bea1 docs(03): create phase plan 2026-03-17 15:01:41 +01:00
76f7299976 docs(phase-03): add validation strategy 2026-03-17 14:55:00 +01:00
20a314f2a7 docs(03): research collapsible dashboard sections phase 2026-03-17 14:53:53 +01:00
d29c0cd482 docs(transition): evolve PROJECT.md and STATE.md after Phase 2 completion 2026-03-16 14:31:42 +01:00
1ad52b9e63 docs(phase-02): complete phase execution 2026-03-16 14:29:37 +01:00
fb27659f5c docs(02-03): complete dashboard integration plan 2026-03-16 14:24:52 +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
01674e18fb feat(02-03): refactor DashboardPage with month navigation and 3-column chart grid
- Replace hardcoded current month with useMonthParam (URL search params)
- Add MonthNavigator in PageShell action slot
- Replace old recharts pie + progress bars with ExpenseDonutChart, IncomeBarChart, SpendBarChart
- Add empty-month prompt with create/generate buttons
- Memoize all derived data with useMemo
- Move QuickAddPicker below chart grid per plan
2026-03-16 14:21:55 +01:00
ddcddbef56 docs(state): save progress — wave 1 complete, paused before wave 2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:06:53 +01:00
643ba47fda docs(02-02): complete dashboard chart components plan
- SUMMARY.md with task commits, deviations, and self-check
- STATE.md updated with phase 2 position and decisions
- ROADMAP.md updated with plan progress

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:05:31 +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
42bf1f9431 feat(02-01): add chart and month navigation i18n keys
- Add 10 new dashboard keys to en.json (monthNav, noData, charts, etc.)
- Add matching German translations to de.json
- ChartEmptyState component already exists from Phase 1
2026-03-16 13:03:06 +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
dca5b04494 docs(02): create phase plan — 3 plans across 2 waves for dashboard charts and layout 2026-03-16 12:57:33 +01:00
e0b3194211 docs(phase-02): add validation strategy 2026-03-16 12:51:20 +01:00
7346a6a125 docs(02): research phase domain 2026-03-16 12:50:24 +01:00
f548e7bbb7 docs(state): record phase 2 context session 2026-03-16 12:43:08 +01:00
882a609c57 docs(02): capture phase context 2026-03-16 12:43:01 +01:00
2102968c2f docs(phase-1): complete phase execution 2026-03-16 12:27:24 +01:00
8768e9ae4a docs(01-02): complete dashboard shared components plan
- SUMMARY.md with task commits, decisions, and self-check
- STATE.md updated: Phase 1 complete, progress 100%
- ROADMAP.md updated: Phase 1 marked complete (2/2 plans)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:23:28 +01:00
a533e06f8c feat(01-02): integrate PageShell, SummaryStrip, and DashboardSkeleton into DashboardPage
- Replace inline SummaryCard with SummaryStrip component (responsive 3-card grid)
- Replace inline h1 header with PageShell wrapper
- Replace loading null returns with DashboardSkeleton pulse animation
- Replace hardcoded green/red color classes with semantic tokens (text-on-budget, text-over-budget, bg-on-budget, bg-over-budget)
- Derive budgetedIncome/budgetedExpenses for variance display

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:20:21 +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
b756540339 docs(01-01): complete design primitives plan
- Add 01-01-SUMMARY.md with execution results and self-check
- Update STATE.md with position, decisions, and metrics
- Update ROADMAP.md with plan progress
- Log pre-existing lint errors to deferred-items.md

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