Skip to content

justinschubeck/finance-tools

Repository files navigation

Finance Tracker GUI

A clean, modern personal finance tracking application built with Python and Tkinter. Designed for easy transaction entry and data analysis.

Features

  • Simple Transaction Entry: Clean interface for logging income and expenses
  • Calculator-Style Amount Entry: Type digits naturally, no need for "$" or decimal points
  • Always-Visible Calendar: Quick date selection
  • Vendor Autocomplete: Suggests vendors from your transaction history
  • Customizable Categories: Easy-to-edit YAML configuration
  • Excel Storage: All data stored in Excel format for easy analysis
  • Duplicate Detection: Warns when similar transactions exist
  • Keyboard Shortcuts: Fast data entry with Enter, Ctrl+N, Ctrl+Q

Installation

Prerequisites

  • Python 3.11+
  • pip

Setup

  1. Clone the repository:

    git clone https://github.com/justinschubeck/finance-tools.git
    cd finance-tools
  2. Create and activate virtual environment:

    python3.11 -m venv venv
    
    # On Windows:
    venv\Scripts\activate
    
    # On Mac/Linux:
    source venv/bin/activate
  3. Install dependencies:

    pip install -r requirements.txt

Usage

Running the Application

Basic usage (creates/uses default file: 2025.xlsx):

python main.py

Command-line options for file selection:

# Use current year file (e.g., 2025.xlsx if running in 2025)
python main.py --year

# Use current month file (e.g., 2025_11.xlsx if running in November 2025)
python main.py --month

# Use a custom file name (auto-adds .xlsx if not provided)
python main.py --file Name
python main.py --file test.xlsx

# Show help and all options
python main.py --help

Adding a Transaction

  1. Select Type (Income or Expense)
  2. Click a Category button
  3. Pick the Date from the calendar
  4. Enter Vendor name
  5. Type Amount (calculator-style: just digits)
  6. Select Payment Medium
  7. Add optional Note
  8. Press Enter or click "Add Transaction"

Keyboard Shortcuts

  • Enter - Add transaction
  • Ctrl+N - Clear fields
  • Ctrl+Q - Quit

Loan Payment Calculator (Bonus Tool)

A standalone utility for optimizing loan payments across multiple loans:

python loan_payment_calculator_gui.py

This tool distributes payments among 6 loans to equalize daily interest across all loans, helping you optimize your debt payoff strategy. It uses symbolic mathematics to solve the optimization problem.

Customization

Adding/Removing Categories

Edit config/categories.yaml:

expense:
  - "Restaurants"
  - "Gas & Fuel"
  - "Your New Category"  # Just add it to the list!

income:
  - "Salary"
  - "Side Hustle"

Adding Payment Methods

Edit the medium section in config/categories.yaml:

medium:
  - "Cash"
  - "Credit Card"
  - "Your Payment Method"

Data Storage

Transactions are saved to Excel files in the entries/ directory:

  • Yearly files: YYYY.xlsx (e.g., 2024.xlsx, 2025.xlsx)
  • Monthly files: YYYY_MM.xlsx (e.g., 2025_11.xlsx for November 2025)
  • Custom files: Any name you specify (e.g., Justin.xlsx, test.xlsx)
  • Files are created automatically if they don't exist
  • Columns: Type, Category, Date, Vendor, Medium, Amount, Note

Project Structure

finance-tools/
├── main.py                       # Application entry point
├── loan_payment_calculator_gui.py # Standalone loan payment optimizer
├── config/
│   └── categories.yaml           # Category configuration
├── models/
│   ├── category.py               # Category management
│   └── transaction.py            # Transaction data model
├── data/
│   └── repository.py             # Excel I/O operations
├── gui/
│   ├── main_window.py            # Main application window
│   └── widgets/                  # Reusable GUI components
└── entries/
    └── *.xlsx                    # Transaction data files

Analysis & Visualization

Quick Analysis

Run quick financial summary:

python analyze.py --year

Generate All Visualizations

Create 30+ charts and plots:

python analyze.py --year --all

Generate Comprehensive Report

Create detailed HTML report with all insights:

python analyze.py --year --report

Interactive Dashboard

Launch Streamlit dashboard for interactive analysis:

python analyze.py --dashboard
# Or directly:
streamlit run analysis/dashboard.py

Available Visualizations (30+)

Time-Based Analysis:

  • Monthly cash flow (income vs expenses with net)
  • Daily spending heatmap calendar
  • Cumulative spending by category
  • Transaction frequency timeline
  • Seasonal patterns by quarter
  • Moving averages (30-day and 90-day trends)

Category Analysis:

  • Category spending pie chart
  • Category treemap (hierarchical)
  • Category trends over time
  • Transaction amount box plots
  • Category correlation matrix
  • Need vs want comparison

Vendor Analysis:

  • Top vendors bar chart
  • Vendor frequency vs amount scatter
  • Vendor spending timeline
  • Recurring transaction detection

Payment Method Analysis:

  • Payment medium breakdown
  • Medium vs category heatmap
  • Card utilization timeline
  • Cash vs credit comparison

Comparative Analysis:

  • Income vs expense waterfall
  • Month-over-month comparison
  • Weekday vs weekend patterns
  • Year-over-year trends

Advanced Analytics:

  • Sankey cash flow diagram
  • Transaction distribution histograms
  • Multi-dimensional bubble charts
  • Radar charts (monthly profiles)
  • Anomaly detection
  • Savings rate gauge
  • Spending forecast

CLI Examples

# List all available plot types
python analyze.py --list-plots

# Generate specific plot
python analyze.py --year --plot monthly_cash_flow

# Generate report for specific file
python analyze.py --file 2024.xlsx --report

# Generate plots with date filter
python analyze.py --year --all --date-range 2025-01-01 2025-06-30

# Quick summary
python analyze.py --month --quick-summary

Dependencies

Core Dependencies

  • pandas - Data manipulation
  • openpyxl - Excel file handling
  • PyYAML - Configuration management
  • tkcalendar - Calendar widget
  • numpy - Numerical operations
  • sympy - Symbolic mathematics (for loan calculator)
  • tkinter - GUI framework (included with Python)

Analysis Dependencies

  • plotly - Interactive visualizations
  • streamlit - Interactive dashboard
  • seaborn - Statistical plotting
  • scikit-learn - Forecasting and analytics
  • kaleido - Static image export

License

This project is for personal use.

Author

Justin Schubeck

Majority Claude Code

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published