A polished PySide6 desktop application for Australian household budgeting. Import bank transactions, classify them with AI, track spending against budgets, and visualise your finances.
- Dashboard — Monthly spending summary with stat cards and category breakdown charts
- Transactions — Searchable, sortable transaction list with inline category editing
- Reports — Visual spending reports with matplotlib charts (category, trend, monthly comparison)
- Budgets — Set monthly budgets per category with progress tracking and alerts
- Settings — Classification engine configuration, data import, model training, and data coverage overview
- Anthropic Claude API — Cloud-based classification using
claude-sonnet-4-20250514with batch processing - Local DistilBERT Model — Train your own model from corrected data for free, offline classification
- Smart Fallback — If the selected engine is unavailable, automatically falls back to the other
- Toggle between engines from Settings with a single click
- Keyring Integration — API keys stored in Windows Credential Manager (or macOS Keychain / Linux Secret Service), never in config files
- Safe to share the app without exposing API credits
| Group | Categories |
|---|---|
| Housing | Mortgage/Rent, Utilities, Home Maintenance |
| Transport | Fuel, Car Maintenance, Public Transport, Parking & Tolls |
| Food | Groceries, Dining Out |
| Personal | Clothing, Health & Medical, Personal Care |
| Financial | Insurance, Bank Fees & Interest |
| Lifestyle | Entertainment, Subscriptions |
| Family | Childcare & Education, Pets |
| Other | Other |
| — | Uncategorised |
- Transaction Search — Seamlessly search by description, date (
2026-02for all Feb transactions), or category - Excel Export — Export currently displayed transactions to styled
.xlsxwith one click orCtrl+E - Keyboard Shortcuts —
Ctrl+1throughCtrl+5for instant tab navigation - Help System —
(?)buttons on every view and card, rendering a built-in markdown help file - Persistent Layout — Window size and position remembered between launches
- Python 3.10+
- pip
git clone https://github.com/rdapaz/BudgetBuddy.git
cd BudgetBuddy
pip install -e .PySide6— Qt GUI frameworkanthropic— Claude API clienttorch+transformers— Local DistilBERT modelmatplotlib— Charts and reportsopenpyxl— Excel exportkeyring— Secure API key storagescikit-learn— Model training utilities
python budgetbuddy.py- Import — Paste bank transactions from clipboard via Settings → Import
- Classify with Claude API — Use the Anthropic engine to bulk-classify transactions
- Review & Correct — Manually verify and fix any misclassifications in the Transactions tab
- Train Local Model — Once you have enough corrected data, train DistilBERT from Settings
- Use Either Engine — For future imports, use whichever engine you prefer
The original command-line tools are still available:
# Import from clipboard
python statement_manager.py -d expenses.db -a
# Classify with Go (concurrent)
go run classifier.go -d expenses.db -c config.json -w 10
# Export to Excel
python statement_manager.py -d expenses.db -e expenses.xlsx
# Train local model
python expense_classifier_trainer.py -i expenses.xlsx
# Predict with local model
python expense_classifier_predictor.py -d expenses.db -m modelsBudgetBuddy/
├── budgetbuddy.py # App entry point
├── gui/
│ ├── main_window.py # Main window with sidebar navigation
│ ├── categories.py # 19 budget categories definition
│ ├── theme.py # Colours, fonts, shared styles
│ ├── help.md # Built-in help documentation
│ ├── models/
│ │ ├── database.py # SQLite data access layer
│ │ └── api_key.py # Keyring-based API key management
│ ├── views/
│ │ ├── dashboard.py # Monthly spending overview
│ │ ├── transactions.py # Transaction list with search/export
│ │ ├── reports.py # Charts and visual reports
│ │ ├── budgets.py # Budget tracking per category
│ │ └── settings.py # Engine config, import, training
│ ├── widgets/
│ │ ├── chart_canvas.py # Matplotlib canvas widget
│ │ ├── stat_card.py # Dashboard stat card widget
│ │ └── help_window.py # Help dialog with HTML rendering
│ └── workers/
│ ├── classify_worker.py # API + Local classification threads
│ └── train_worker.py # DistilBERT training thread
├── statement_manager.py # Legacy CLI import/export
├── classifier.go # Legacy Go concurrent classifier
├── expense_classifier_trainer.py # Legacy CLI trainer
├── expense_classifier_predictor.py # Legacy CLI predictor
└── pyproject.toml
- API Key: Stored securely via
keyring— configure in Settings → Classification Engine - Engine Preference: Saved in SQLite
app_settingstable - Window Geometry: Saved via Qt's
QSettings(Windows Registry) - No config files needed — all settings managed through the GUI
MIT