25 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
267b624395 docs: fix README running instructions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:19:33 -05:00
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
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
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
f538cad6ae feat: cross-account transfer detection
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:56:53 -05:00
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
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
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
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
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
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
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
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
eb4bfda1db feat: project setup with dependencies
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:24:13 -05:00
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
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
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
78e18b98d1 Initial commit 2026-02-10 13:28:55 -05:00