Commit Graph

133 Commits

Author SHA1 Message Date
1e579db6af docs(06-02): complete template workflow replacement plan
- Create 06-02-SUMMARY.md documenting month-picker generation workflow
- Update STATE.md: progress 100%, decisions, session info
- Update ROADMAP.md: Phase 06 marked Complete (2/2 summaries)
- Mark TMPL-03 and TMPL-06 complete in REQUIREMENTS.md
2026-03-12 13:11:09 +01:00
234a7d913a feat(06-02): display item_tier badge in tracker table rows
- Add Badge import to BillsTracker, VariableExpenses, DebtTracker
- Render outline Badge after category name showing tier (Fixed/Variable/One-off)
- Use i18n keys template.fixed, template.variable, template.oneOff
- Badge is purely informational with variant="outline" for subtle appearance
2026-03-12 13:09:27 +01:00
7dfd04f31b feat(06-02): replace BudgetSetup with template-based month picker
- Rewrite BudgetSetup to use month picker + currency + Generate button
- Remove manual form fields (name, dates, carryover, copy-from select)
- Handle 409 conflict gracefully by calling onCreated() to refresh list
- Remove copyFrom method from budgets API (TMPL-06)
- Update BudgetSetup test to reflect new month-picker UI
- Remove copyFrom from DashboardPage test mock
- Add budget.generate, budget.month, budget.generating i18n keys (EN/DE)
- Remove budget.copyFrom and budget.setup i18n keys
2026-03-12 13:08:46 +01:00
14075850c3 docs(06-01): complete template frontend page plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 13:06:18 +01:00
924e01c983 feat(06-01): add TemplatePage, routing, sidebar nav, and i18n translations
- Create TemplatePage with add form (category/tier/amount), items table, and empty state
- Add /template route to App.tsx with TemplatePage component
- Add Template nav item to sidebar (between Categories and Settings)
- Add template and nav.template i18n keys for EN and DE
- Fix unused import in useTemplate hook
2026-03-12 13:04:52 +01:00
0af9431435 feat(06-01): add template API client functions and useTemplate hook
- Add ItemTier type and TemplateItem/TemplateDetail interfaces to api.ts
- Add item_tier field to BudgetItem interface
- Add template API object with get/updateName/addItem/updateItem/deleteItem/reorder
- Add generate function to budgets API object
- Create useTemplate hook with CRUD operations and reorder logic
2026-03-12 13:03:23 +01:00
fd171edaf0 fix(06): revise 06-02 plan based on checker feedback 2026-03-12 13:00:01 +01:00
791341d0a6 docs(06): create phase plan for template frontend and workflow replacement 2026-03-12 12:56:33 +01:00
4a8e3a3c5c docs(phase-5): complete phase execution 2026-03-12 12:15:30 +01:00
c8fc17c43c docs(05-02): complete template API handlers plan 2026-03-12 12:11:38 +01:00
387507b468 feat(05-02): wire template routes and budget generate endpoint in router
- Add /api/template route group: GET, PUT /, POST/PUT/DELETE items, PUT items/reorder
- Add POST /api/budgets/generate before /{id} routes to avoid chi treating 'generate' as an id param
- /items/reorder registered before /items/{itemId} for correct static-before-param routing
2026-03-12 12:10:37 +01:00
ceca2fc71f feat(05-02): add template handlers and budget generation endpoint
- Add GetTemplate, UpdateTemplateName, CreateTemplateItem, UpdateTemplateItem, DeleteTemplateItem, ReorderTemplateItems handlers
- Add GenerateBudget handler with 409 BudgetExistsError response including budget_id
- Handler-level validation: one_off items rejected for template routes, fixed items require budgeted_amount
- Month format validated via time.Parse before calling query layer
2026-03-12 12:10:21 +01:00
eec8f4a9df docs(05-01): complete template data model and API plan
- Create 05-01-SUMMARY.md documenting migration, models, and query functions
- Update STATE.md with decisions, metrics, and progress bar (92%)
- Update ROADMAP.md phase 5 progress (1/2 plans complete)
- Mark requirements TMPL-01, TMPL-02, TMPL-04 complete in REQUIREMENTS.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 12:08:11 +01:00
f9dd40984c feat(05-01): template query functions and updated budget item queries with item_tier
- Add BudgetExistsError struct and ErrBudgetExists sentinel
- Update GetBudgetWithItems, CopyBudgetItems to include item_tier
- Update CreateBudgetItem/UpdateBudgetItem signatures to accept itemTier (default one_off)
- Add GetTemplate, UpdateTemplateName, CreateTemplateItem, UpdateTemplateItem, DeleteTemplateItem
- Add ReorderTemplateItems with transaction
- Add GenerateBudgetFromTemplate with duplicate-month detection and locale-aware naming
- Update handlers to pass ItemTier from request body (Rule 3 fix - blocking compile)
2026-03-12 12:06:43 +01:00
b3082ca14f feat(05-01): migration SQL and Go model types for template system
- Create 002_templates.sql: item_tier enum, ALTER budget_items, templates and template_items tables with CHECK constraint
- Add ItemTier type with fixed/variable/one_off constants to models.go
- Add ItemTier field to BudgetItem struct
- Add Template, TemplateItem, TemplateDetail structs
2026-03-12 12:05:01 +01:00
31a62a247f docs(05): create phase plan 2026-03-12 12:00:51 +01:00
f89d184e46 docs(state): record phase 5 context session 2026-03-12 11:54:51 +01:00
6b66ec6ca7 docs(05): capture phase context 2026-03-12 11:54:44 +01:00
808ecfae3d docs: create milestone v1.1 roadmap (4 phases)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:41:44 +01:00
fa970d307a docs: define milestone v1.1 requirements
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:28:43 +01:00
c47df80b81 docs: start milestone v1.1 Usability and Templates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:03:34 +01:00
cf2d734712 docs(phase-04): complete phase execution
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 09:30:59 +01:00
bd84a80ac4 docs(04-02): complete chart tooltip currency formatting plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 09:28:20 +01:00
5a70899cf8 feat(04-02): thread user locale from useAuth through DashboardPage to chart components
- Import useAuth in DashboardPage and derive userLocale with fallback to 'en'
- Pass locale={userLocale} to AvailableBalance and ExpenseBreakdown
- Add useAuth mock to DashboardPage test to avoid i18n initReactI18next import error
2026-03-12 09:27:09 +01:00
f141c4ff73 feat(04-02): add locale prop and custom currency tooltips to chart components
- Add locale?: string prop to ExpenseBreakdown and AvailableBalance
- Replace bare <Tooltip /> in ExpenseBreakdown with custom content renderer
- Add Tooltip import and custom content renderer to AvailableBalance
- Pass locale to formatCurrency in AvailableBalance center text
- Tooltip styled with shadcn design tokens (bg-background, border-border/50, shadow-xl)
2026-03-12 09:26:13 +01:00
1412aacf92 docs(04-01): complete locale-aware formatCurrency plan 2026-03-12 09:24:54 +01:00
eb1bb8aeec feat(04-01): add locale parameter to formatCurrency, default 'en'
- Replace hardcoded 'de-DE' with optional locale parameter defaulting to 'en'
- Defensive locale || 'en' guard prevents RangeError on empty string
- All existing call sites get English formatting (FIX-01)
- Third arg enables locale-aware chart tooltips in follow-on plans
2026-03-12 09:23:46 +01:00
6ffce76de8 test(04-01): add failing tests for locale-aware formatCurrency
- Test English default locale uses comma grouping (1,234.56)
- Test explicit 'en' locale formatting
- Test 'de' locale uses period grouping and comma decimal (1.234,56)
- Test USD with dollar sign
- Test zero and negative amounts
- Test empty string locale fallback (no RangeError)
- Test default arg does NOT produce German formatting
2026-03-12 09:23:33 +01:00
444baa5187 docs(04): create phase plan 2026-03-12 09:20:33 +01:00
e19d0b8ff7 docs(phase-04): add validation strategy 2026-03-12 09:16:57 +01:00
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