Commit Graph

153 Commits

Author SHA1 Message Date
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
5659810918 docs(01): create phase plan 2026-03-16 12:08:45 +01:00
f8e94b0329 docs(phase-1): add validation strategy 2026-03-16 12:02:22 +01:00
952d250b38 docs(01): research phase domain — design foundation and primitives 2026-03-16 12:01:28 +01:00
4387795947 docs: create UI/UX overhaul roadmap with 4-phase structure
Map all 13 active requirements to a foundation-first delivery
sequence: design primitives, dashboard charts, collapsible
sections, then full-app consistency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 11:48:16 +01:00
b830d381db docs: complete project research 2026-03-16 11:45:14 +01:00
c960b1a504 chore: add project config 2026-03-16 11:31:45 +01:00
3fc9288c38 docs: initialize project 2026-03-16 11:30:39 +01:00
45e0f779a4 docs: map existing codebase 2026-03-16 11:19:29 +01:00
65d9842831 restart 2026-03-15 17:29:43 +01:00
d8668ed742 docs(phase-7): complete phase execution 2026-03-12 13:44:47 +01:00
8e70aa3678 docs(07-02): complete quick-add library frontend plan
- Created 07-02-SUMMARY.md documenting all changes and decisions
- Updated STATE.md: progress 100%, decisions, session info
- Updated ROADMAP.md: phase 07 marked Complete (2/2 summaries)
2026-03-12 13:40:53 +01:00
8238e07582 feat(07-02): add QuickAddPicker component and wire into DashboardPage
- Created QuickAddPicker component using DropdownMenu (no Popover available)
- Picker fetches quick-add library on mount and shows items with icon + name
- On item select: finds or creates matching category, then creates one_off budget item
- Empty state shows link to /quick-add management page
- Loading spinner on selected item while creating
- Wired QuickAddPicker into DashboardPage toolbar next to Create Budget button
2026-03-12 13:39:24 +01:00
411a986c14 feat(07-02): add QuickAdd API client, hook, management page, routing, and i18n
- Added QuickAddItem interface and quickAdd namespace to api.ts
- Created useQuickAdd hook with CRUD operations following useTemplate pattern
- Created QuickAddPage with amber/orange gradient header, add form, inline edit, and EmptyState
- Added /quick-add route to App.tsx with QuickAddPage import
- Added Zap nav item to AppLayout sidebar after template
- Added quickAdd i18n keys to en.json and de.json including picker keys
2026-03-12 13:38:20 +01:00
bf0dac9bca docs(07-01): complete quick-add library backend plan
- Add 07-01-SUMMARY.md documenting migration, model, queries, and handlers
- Update STATE.md: progress 94%, decisions, session record
- Update ROADMAP.md: phase 7 in-progress with 1/2 plans complete
- Mark requirements QADD-01 and QADD-03 complete
2026-03-12 13:35:53 +01:00
b42f7b13bb feat(07-01): add quick-add HTTP handlers and route registration
- Add ListQuickAddItems, CreateQuickAddItem, UpdateQuickAddItem, DeleteQuickAddItem handler methods
- Register GET/POST /api/quick-add and PUT/DELETE /api/quick-add/{itemId} in authenticated route group
- Validate name non-empty on create and update; return 404 on update when item not found
2026-03-12 13:34:19 +01:00
84d5b76a8a feat(07-01): add QuickAddItem migration, model, and query functions
- Create 003_quick_add_library.sql with quick_add_items table and user index
- Add QuickAddItem struct to models.go following Category pattern
- Add ListQuickAddItems, CreateQuickAddItem, UpdateQuickAddItem, DeleteQuickAddItem to queries.go
2026-03-12 13:33:53 +01:00
cccac351cf fix(07): revise plans based on checker feedback 2026-03-12 13:30:10 +01:00
c57311adb4 docs(07-quick-add-library): create phase plan 2026-03-12 13:24:58 +01:00
51c9aa39d0 docs(phase-6): complete phase execution 2026-03-12 13:14:02 +01:00
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