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
2026-02-10 13:28:55 -05:00

SpendingAnalysis

Desktop app to intake data from various sources and analyze spending habits. Built with Python, PySide6 (Qt), and SQLite.

Features

  • CSV Import — drag-and-drop import wizard with configurable column mappings and duplicate detection
  • Transaction Management — browse, filter, and categorize transactions inline
  • Spending Analysis — trends, breakdowns, and forecasting charts
  • Recurring Detection — identify recurring charges across accounts
  • Cross-Account Transfers — automatic detection of transfers between accounts
  • Rule-Based Categorization — auto-categorize transactions using custom rules
  • Household Tracking — manage household members and shared expenses
  • Dark / Light Themes — toggle between themes from the sidebar

Requirements

  • Python 3.12+

Setup

# Clone the repo
git clone https://gitea.conlon.fun/andy/SpendingAnalysis.git
cd SpendingAnalysis

# Create a virtual environment and install
python -m venv .venv
.venv\Scripts\activate      # Windows
# source .venv/bin/activate  # macOS / Linux

pip install -e .

Running

With the virtual environment activated:

python -m src.main

The app stores its SQLite database at ~/.spending_analysis/spending.db. Default categories are seeded on first launch.

Running Tests

pip install -e ".[dev]"
pytest

Project Structure

src/
├── main.py              # Application entry point
├── db.py                # SQLAlchemy engine / session setup
├── seed.py              # Default category seeding
├── models/              # SQLAlchemy models (account, category, transaction, rule, etc.)
├── services/            # Business logic (import, categorization, analysis, forecasting)
└── ui/                  # PySide6 views and themes
    ├── main_window.py
    ├── sidebar.py
    ├── import_view.py
    ├── transactions_view.py
    ├── analysis_view.py
    ├── recurring_view.py
    ├── settings_view.py
    └── themes/
tests/                   # pytest test suite
Description
vibe coded app to intake data from various sources to help analyze my spending habits
Readme 197 KiB
Languages
Python 100%