Commit Graph

25 Commits

Author SHA1 Message Date
andy b04d6d90fa feat: add Sankey "Money Flow" chart to analysis tab
Three-column Sankey diagram (Income → Categories → Tags) rendered with
custom matplotlib bezier paths. Features gradient-fill bands that
interpolate color from source to destination nodes, neon glow effects
on nodes and bands, and a surplus node when income exceeds expenses.

Also fixes QFont::setPointSize warning by switching dark.qss font-size
units from px to pt, preventing Qt delegate code from receiving -1
point sizes during inline cell editing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 22:44:43 -05:00
andy 41e1d452e2 docs: update CLAUDE.md with accurate project context
CLAUDE.md was outdated — claimed no build system, dependencies, or tests
when all three exist. Rewrote with commands, architecture, conventions,
gotchas, and dependency info.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 21:42:32 -05:00
andy 3038fca8fa fix: improve recurring detection with fuzzy grouping and wider bands
Use fuzzy description grouping (strip digits/symbols) so transactions
like "FREEDOM MTG PYMTS 1234" and "FREEDOM MTG PYMTS 5678" are detected
together. Switch to median for amounts and intervals for outlier
resilience. Widen frequency bands to eliminate gaps (biweekly 10-18,
monthly 19-45) and add semi-annual detection. Raise default amount
tolerance to 15% and allow 25% outlier payments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 17:02:24 -05:00
andy 06f79c1c68 feat: add run-on-uncategorized and audit buttons to rules tab
Run on Uncategorized applies the selected rule to all matching
uncategorized transactions. Audit finds rules with similar patterns
across the same category and proposes merging them into broader rules,
with an editable proposed pattern and checkbox selection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:54:01 -05:00
andy 9214a83ec2 feat: single-click inline editing for category, tag, and person columns
Make all three columns editable via single-click dropdowns with auto-popup.
Add bulk rule application to existing uncategorized transactions after
creating a new rule. Fix column widths for better readability. Add explicit
font-size to QSS child-widget selectors to fix QFont point size warning.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:36:14 -05:00
andy dfe62f442a feat: cyberpunk "Matrix 2026" UI redesign
Replace Catppuccin theme with single dark cyberpunk palette featuring
neon green accents, monospace fonts, and void-dark backgrounds. Remove
light theme toggle entirely. Fix hardcoded inline colors across all
views to use centralized palette constants. Fix table column widths
in transactions, recurring, settings, and CSV mappings views. Add
design system documentation for future development.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:10:29 -05:00
andy c80df54eb9 fix: make recurring tab buttons readable and properly sized in table
Reduced vertical padding for buttons inside tables and set fixed column
widths so Confirm/Dismiss buttons fit cleanly within their cells.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:43:30 -05:00
andy 267b624395 docs: fix README running instructions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:19:33 -05:00
andy db6ba2cedc docs: update README with setup, usage, and project structure
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:16:43 -05:00
andy cadb24fed7 fix: refresh settings data when navigating to settings view
Extract data loading into a refresh() method on SettingsView and call it
on view switch so categories, rules, and household data stay current.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:14:13 -05:00
andy db06108d2b feat: complete v1 implementation - all services, UI views, and tests
Adds remaining files from parallel development:
- Services: analysis, csv_reader, forecasting, normalizer, recurring
- UI: recurring_view, settings_view, sidebar, themes (dark/light)
- Tests: analysis, csv_reader, forecasting, import_categorize,
  normalizer, recurring, integration
- App entry point (main.py) and CLAUDE.md

52 tests passing across all modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:57:46 -05:00
andy f538cad6ae feat: cross-account transfer detection
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:56:53 -05:00
andy a3fae3fa95 feat: analysis view with spending trends, breakdowns, and forecasting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:53:04 -05:00
andy cfde077055 feat: import wizard view with column mapping and file drop
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:52:33 -05:00
andy 112d3aa99d feat: transactions view with filtering and inline categorization
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:51:40 -05:00
andy acb2702d3e fix: track new transactions explicitly for post-import categorization
session.new is emptied by auto-flush during duplicate detection queries,
so we track new Transaction objects in a list instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:49:08 -05:00
andy 49a32aa72f feat: default categorization rules from known patterns
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:48:13 -05:00
andy 1e12e563a7 feat: add ImportService for CSV import with duplicate detection
Orchestrates CSV reading, description normalization, and transaction
storage. Uses count-based duplicate detection so legitimate repeated
transactions (same date/amount/description) in a single file are all
imported, while re-importing the same file correctly identifies every
row as a duplicate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:44:58 -05:00
andy b7746ece4f feat: add rule-based categorization engine with protocol interface
Implement Categorizer protocol and RuleBasedCategorizer service that
matches transactions against pipe-separated patterns ordered by priority,
with support for tag overrides and household member attribution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:44:16 -05:00
andy 8360de71ef feat: add SQLAlchemy database models and tests
Add the data layer for the spending analysis app including models for
household members, accounts, categories, transactions, categorization
rules, and CSV import mappings. All models use SQLAlchemy 2.0 mapped
columns with proper foreign key relationships. Includes db.py with
Base class, engine/session factories, and 6 passing tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:38:35 -05:00
andy eb4bfda1db feat: project setup with dependencies
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:24:13 -05:00
andy 3f8b1d9056 Add implementation plan with 21 tasks across 6 phases
Covers: project setup, database models, CSV import pipeline with
description normalization, rule-based categorization engine, spending
analysis/recurring detection/forecasting services, PySide6 desktop UI
with import wizard/transactions/analysis/recurring/settings views,
dark/light theming, and integration testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:17:03 -05:00
andy 0e1013c673 Update design with real CSV format analysis and household details
Adds known source formats (Chase credit card with headers, Wells Fargo
checking headerless), description normalization strategy, cross-account
transfer detection, source category hints, household income sources,
and sample categorization rules based on real transaction data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:05:51 -05:00
andy a1d550d1e0 Add spending analysis app design document
Captures the full v1 design: CSV import with auto-mapping, rule-based
categorization (extensible for AI), household member attribution,
spending trends, category breakdowns, recurring charge detection,
and forecasting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:02:55 -05:00
andy 78e18b98d1 Initial commit 2026-02-10 13:28:55 -05:00