Jan 2024 — Apr 2024
Expense Tracker
A full-stack expense tracking platform with real-time graphical insights, categorized reporting, and optimized raw SQL behind the scenes.
- Python
- Flask
- MySQL
- JavaScript
Problem & context
Tracking day-to-day spending across categories is tedious enough that most people abandon it after a few days — the tooling needed to show visible insight quickly enough to be worth keeping up.
A full-stack personal finance project built to explore authentication, state management, and query optimization in a Flask + MySQL app end to end.
Constraints
- User data needed to be properly authenticated and isolated per account
- Reporting views needed to stay fast as transaction history grew
- Kept the frontend framework-free (HTML/CSS/JS) to focus on the backend
Trade-offs
- Wrote raw SQL for CRUD operations instead of an ORM, trading some development speed for tighter control over query performance.
- Chose server-rendered pages over a SPA framework, which was simpler to secure and reason about for an app of this size.
How it fits together
A Flask backend handles authentication and exposes categorized transaction data to server-rendered views, with MySQL as the data store and hand-written SQL for the CRUD paths that needed to stay fast as history grew.
Screenshots
Add screenshots of the dashboard and reporting views here.
Results
- Real-time graphical insights and categorized spending reports
- Robust authentication and per-user state management
- Reduced query latency through optimized raw SQL CRUD operations
Lessons learned
Optimizing the SQL directly — indexing the right columns, avoiding unnecessary joins — made a bigger difference to perceived speed than any frontend change would have.