Commit Graph

103 Commits

Author SHA1 Message Date
dd098d723e docs(phase-04): research chart polish and bug fixes 2026-03-12 09:16:09 +01:00
be22fcc808 docs(phase-03): complete phase execution 2026-03-11 22:41:48 +01:00
57c4963a75 docs(03-03): complete row flash and tinted skeleton plan
- Add 03-03-SUMMARY.md for row flash feedback and pastel-tinted skeleton plan
- Update STATE.md: progress 100%, new decisions, session record
- Update ROADMAP.md: Phase 03 marked Complete (4/4 plans with summaries)
2026-03-11 22:37:58 +01:00
c60a865797 feat(03-03): add pastel-tinted loading skeletons to DashboardPage
- Import palette from @/lib/palette
- Replace generic skeleton block with tinted versions using palette.*.light colors
- Grid layout mirrors dashboard structure: saving overview, bill/variable_expense row, debt/investment row
2026-03-11 22:36:38 +01:00
4ef10dae46 feat(03-03): wire row flash feedback into all three tracker components
- Add flashRowId/errorRowId state and triggerFlash helper to BillsTracker, VariableExpenses, DebtTracker
- Apply inline color-mix style to data rows for green/red 600ms flash on save success/error
- Wire onSaveSuccess/onSaveError callbacks to InlineEditCell in all three components
- Add tinted skeleton placeholder (palette.*.light) when no items exist for the section
2026-03-11 22:36:01 +01:00
f22eef837f docs(03-02): complete delete confirmation and empty states plan
- Create 03-02-SUMMARY.md documenting EmptyState component and delete confirmation dialog
- Update STATE.md with progress (88%), decisions, and session info
- Update ROADMAP.md with Phase 3 plan progress (3/4 summaries)
2026-03-11 22:33:50 +01:00
37630dea87 docs(03-01): complete inline edit affordance and form spinners plan
- SUMMARY.md created with TDD execution record
- STATE.md: progress 75%, decisions added, session updated
- ROADMAP.md: phase 03 progress updated (3/4 plans complete)
- REQUIREMENTS.md: IXTN-01, IXTN-02, IXTN-03 marked complete
2026-03-11 22:33:30 +01:00
7c657c1004 docs(03-00): complete Wave 0 test stubs plan 2026-03-11 22:33:30 +01:00
4fc63893b8 feat(03-02): add EmptyState component and wire into Dashboard and Categories pages
- Create shared EmptyState component with icon, heading, subtext, and optional CTA button
- DashboardPage: show EmptyState when no budgets exist with Create CTA; replace plain Card fallback with EmptyState for no-current-budget case
- CategoriesPage: add loading state to prevent empty-state flash on initial load; show EmptyState when no categories exist
2026-03-11 22:32:34 +01:00
30ec2d5780 feat(03-01): add loading spinners to Login, Register, and BudgetSetup submit buttons
- LoginPage: Spinner replaces button text during loading, min-w-[120px] prevents layout shift
- RegisterPage: Spinner replaces button text during loading, min-w-[120px] prevents layout shift
- BudgetSetup: Spinner replaces create button text during saving, min-w-[120px] prevents layout shift
- All buttons remain disabled during loading/saving to prevent double-submit
2026-03-11 22:32:30 +01:00
c95c7f248e test(03-00): add Wave 0 test stub files for 4 components
- BudgetSetup.test.tsx: smoke test + 2 it.skip for IXTN-01 spinner/disable
- CategoriesPage.test.tsx: smoke test + 4 it.skip for IXTN-05 and STATE-02
- DashboardPage.test.tsx: smoke test + 2 it.skip for STATE-01 and STATE-03
- BillsTracker.test.tsx: smoke test + 3 it.skip for STATE-03 and IXTN-03
2026-03-11 22:32:07 +01:00
d9e60fa90c feat(03-01): enhance InlineEditCell with pencil icon hover affordance and save/error callbacks
- Add Pencil icon in display mode (opacity-0, group-hover:opacity-100)
- Add onSaveSuccess optional callback fired after successful save
- Add onSaveError optional callback fired + value reverted on save failure
- Wrap onSave in try/catch in handleBlur
2026-03-11 22:31:20 +01:00
58bb57b1cc test(03-01): add failing tests for pencil icon, onSaveSuccess, and onSaveError callbacks 2026-03-11 22:31:02 +01:00
72fb62635d fix(03): revise plans based on checker feedback 2026-03-11 22:27:07 +01:00
0d40043615 docs(03-interaction-quality-and-completeness): create phase plan 2026-03-11 22:18:00 +01:00
c4ab29cb66 docs(phase-3): add validation strategy 2026-03-11 22:13:43 +01:00
ead79e0eb2 docs(03): research phase interaction quality and completeness 2026-03-11 22:12:45 +01:00
2ca809592d docs(state): record phase 3 context session 2026-03-11 22:07:57 +01:00
cdd87923b9 docs(03): capture phase context 2026-03-11 22:07:52 +01:00
91331a3c15 docs(phase-02): complete phase execution 2026-03-11 21:53:44 +01:00
71d7d34c10 docs(02-02): complete sidebar branding plan — wordmark, active indicator, collapse trigger
- SUMMARY.md: 2 tasks, 2 files, 4 NAV requirements fulfilled
- STATE.md: progress updated to 100%, decisions recorded, session logged
- ROADMAP.md: Phase 02 marked complete (2/2 summaries)
- REQUIREMENTS.md: NAV-01 through NAV-04 marked complete
2026-03-11 21:50:38 +01:00
fa8c402ac7 docs(02-01): complete auth page branding plan
- SUMMARY.md: auth pages branded with gradient bg, wordmark, Alert errors
- STATE.md: advanced progress, added decisions, updated session
- ROADMAP.md: phase 02 plan progress updated (1/2 summaries)
- REQUIREMENTS.md: AUTH-01 through AUTH-04 marked complete
2026-03-11 21:50:16 +01:00
79a0f9bc3d feat(02-02): brand sidebar with wordmark, active indicator, and collapse trigger
- Add SidebarTrigger import (NAV-04)
- Replace plain h2 with gradient span wordmark using oklch 260-300 purple sweep (NAV-02)
- Override SidebarMenuButton active state with sidebar-primary for high contrast (NAV-03)
- Add header bar with SidebarTrigger inside SidebarInset (NAV-04)
- Add p-4 padding to main content area
- NAV-01 satisfied by existing bg-sidebar token on sidebar element
2026-03-11 21:49:29 +01:00
381a06008b feat(02-01): brand auth pages with gradient bg, wordmark, and Alert errors
- LoginPage: pastel gradient background (saving/bill/investment light shades)
- LoginPage: gradient text wordmark with data-testid='wordmark'
- LoginPage: shadcn Alert destructive with AlertCircle icon for error display
- RegisterPage: mirrors LoginPage branding treatment exactly
- Both pages: Card shadow-lg for visual lift against gradient
- All 6 AUTH tests pass (AUTH-01 through AUTH-04)
2026-03-11 21:49:16 +01:00
9b57a1a4be test(02-02): add AppLayout test scaffold for NAV-01 through NAV-04
- Mock ResizeObserver and matchMedia for SidebarProvider compatibility
- NAV-01: verify sidebar data-sidebar element renders
- NAV-02: verify data-testid=sidebar-wordmark gradient element
- NAV-03: verify active nav item has data-active=true
- NAV-04: verify SidebarTrigger Toggle Sidebar button renders
2026-03-11 21:48:15 +01:00
dfd88de03e test(02-01): add failing tests for AUTH-01 through AUTH-04 and install shadcn Alert
- Install shadcn Alert component (alert.tsx)
- LoginPage.test.tsx: 4 test cases for gradient bg, wordmark, Alert error, SVG icon
- RegisterPage.test.tsx: 2 test cases for gradient bg, wordmark
- All tests fail as expected (features not yet implemented)
2026-03-11 21:47:57 +01:00
c6db87d4b8 docs(02-layout-and-brand-identity): create phase plan 2026-03-11 21:43:15 +01:00
a5b35343eb docs(phase-2): add validation strategy 2026-03-11 21:39:02 +01:00
74e5787f78 docs(phase-02): research layout and brand identity phase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 21:38:05 +01:00
f2cce8073a docs(phase-01): complete phase execution 2026-03-11 21:28:20 +01:00
fddd8d1ea8 docs(01-02): complete palette wiring plan — all 6 dashboard components use design tokens
- Created 01-02-SUMMARY.md documenting InlineEditCell extraction and palette integration
- Updated STATE.md: progress bar 100%, decisions logged, session recorded
- Updated ROADMAP.md: Phase 1 marked Complete (2/2 plans)
- Marked requirements DSGN-03, DSGN-04, FIX-02 complete in REQUIREMENTS.md
2026-03-11 21:20:19 +01:00
90a15c20ce fix(01-02): resolve TypeScript build errors for production build
- Fix palette.test.ts: use type-only import for CategoryType (verbatimModuleSyntax)
- Fix vite.config.ts: import defineConfig from vitest/config for test property support
- Fix tsconfig.node.json: add vitest/globals to types array
- Fix AvailableBalance.tsx: split typed array and filter to preserve CategoryType literal
2026-03-11 21:00:24 +01:00
07041aed34 feat(01-02): wire palette.ts into all 6 dashboard components
- BillsTracker: headerGradient('bill'), InlineEditCell, amountColorClass
- VariableExpenses: headerGradient('variable_expense'), InlineEditCell, amountColorClass, palette bar chart colors
- DebtTracker: headerGradient('debt'), InlineEditCell, amountColorClass
- AvailableBalance: headerGradient('saving'), palette Cell fills, text-3xl center, text-success/text-destructive
- ExpenseBreakdown: headerGradient('variable_expense'), palette Cell fills
- FinancialOverview: overviewHeaderGradient(), hero typography (text-2xl px-6 py-5), palette row tints, amountColorClass
- Remove all PASTEL_COLORS arrays and InlineEditRow private functions
2026-03-11 20:57:53 +01:00
689c88fc3e feat(01-02): implement InlineEditCell shared component
- Shared TableCell with display/edit mode toggle
- Calls onSave(number) on blur or Enter key
- Skips save when value unchanged or NaN
- Accepts className for amount coloring
2026-03-11 20:56:19 +01:00
bb36aeb272 test(01-02): add failing tests for InlineEditCell
- renders formatted currency in display mode
- enters edit mode on click
- calls onSave with parsed number on blur/Enter
- does not call onSave when value unchanged
2026-03-11 20:56:04 +01:00
d9cb292ef1 docs(01-01): complete design token foundation plan
- Add 01-01-SUMMARY.md with full task record and decisions
- Update STATE.md with progress, decisions, and session info (50% phase complete)
- Update ROADMAP.md plan progress (phase 1: 1/2 plans done)
- Mark DSGN-01, DSGN-02, DSGN-05 requirements complete
2026-03-11 20:54:30 +01:00
6859b30347 feat(01-01): implement palette.ts as single source of truth for category colors
- Export CategoryType union type with 7 category strings
- Export CategoryShades interface with light/medium/base fields
- Export palette Record with oklch values matching --chart-* CSS tokens
- Export headerGradient() returning CSSProperties with linear-gradient
- Export overviewHeaderGradient() with multi-stop sky/lavender/green gradient
- Export amountColorClass() for text-success/text-warning/text-destructive
- All 20 unit tests pass
2026-03-11 20:52:41 +01:00
d5fc10de46 test(01-01): add failing tests for palette module
- Tests cover all 7 CategoryType values with 3 shades each
- Tests for headerGradient returning valid CSSProperties with linear-gradient
- Tests for overviewHeaderGradient multi-stop gradient
- Tests for amountColorClass: income, available, and expense paths
2026-03-11 20:52:06 +01:00
3f97d07f4e feat(01-01): replace CSS tokens with pastel oklch values
- Update all :root tokens with lavender-tinted pastel oklch values
- Map --chart-1 through --chart-5 to category base colors (bill, variable_expense, debt, saving, investment)
- Add --success and --warning semantic tokens with foreground pairs
- Register --color-success and --color-warning in @theme inline for Tailwind utility access
- Preserve --card and --popover as pure white (intentional locked decision)
- Leave .dark block unchanged (out of scope)
2026-03-11 20:51:26 +01:00
cbf355273a chore(01-01): install vitest test infrastructure
- Add vitest, @testing-library/react, @testing-library/jest-dom, @testing-library/user-event, jsdom
- Configure vite.config.ts with jsdom test environment and globals
- Add test-setup.ts importing jest-dom matchers
2026-03-11 20:50:30 +01:00
d9e65a43c2 docs(01): create phase plan 2026-03-11 19:26:25 +01:00
5aa64ab178 docs(01): add research and validation strategy 2026-03-11 19:20:19 +01:00
e54acc9827 docs(01): research phase design token foundation 2026-03-11 19:19:17 +01:00
d0b1b9291e docs(state): record phase 1 context session 2026-03-11 19:13:08 +01:00
f217c0bfe9 docs(01): capture phase context 2026-03-11 19:13:00 +01:00
b90ff15843 docs: create roadmap (4 phases) 2026-03-11 19:00:10 +01:00
32dd5421b3 docs: define v1 requirements 2026-03-11 18:56:19 +01:00
30424adfb3 docs: complete project research 2026-03-11 18:51:09 +01:00
fd3be097b7 chore: add project config 2026-03-11 18:39:52 +01:00
e8e97cffc0 docs: initialize project 2026-03-11 18:37:24 +01:00