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>
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
Languages
Python
100%