
Spendly
A modern expense tracking web application that helps users manage personal finances through secure authentication, intuitive expense management, and insightful spending analytics.
Timeline
1 Week
Role
Full Stack Developer
Team
Solo
Status
CompletedTechnology Stack
Key Challenges
- Designing a secure user authentication system
- Implementing complete expense CRUD with ownership validation
- Creating an intuitive dashboard with responsive UI
Key Learnings
- Flask application architecture
- Session-based authentication
- SQLite database design
- Responsive UI development
- Backend CRUD operations
Overview
Spendly is a clean and user-friendly personal finance management application built to simplify daily expense tracking. The application enables users to securely manage their expenses, monitor spending habits, and organize financial records through a modern web interface.
Built with Flask and SQLite, Spendly provides complete expense management functionality including secure authentication, categorized expense tracking, smart filtering, and a dashboard that summarizes spending statistics. The project focuses on combining simplicity, performance, and an elegant user experience.
Key Features
Core Features
- Secure User Authentication — Register and log in securely using password hashing and session management.
- Interactive Dashboard — View total expenses, spending statistics, and monthly financial summaries at a glance.
- Expense Management — Add, edit, update, and delete expenses with categories, dates, and descriptions.
- Advanced Filtering — Search and filter expenses by category and custom date ranges.
- Responsive User Interface — Mobile-friendly design with clean typography and intuitive navigation.
- Data Security — User-specific expense isolation ensures users can only access their own financial records.
Tech Stack
Frontend
- HTML5
- CSS3
- JavaScript
- Jinja2 Templates
Backend
- Python
- Flask
Database
- SQLite
Authentication & Security
- Werkzeug Password Hashing
- Flask Sessions
Deployment
- Local Development
- Python Virtual Environment
Architecture
The application follows a traditional MVC-inspired Flask architecture, separating presentation, business logic, and database operations for better maintainability.
Client (Browser)
│
▼
Flask Routes (app.py)
│
▼
Authentication & Business Logic
│
▼
Database Layer (SQLite)
│
▼
Jinja2 Templates
│
▼
Responsive User Interface
Major Challenges
Building Secure Authentication
Managing user authentication required securely storing passwords while maintaining a seamless login experience.
Solution
Implemented password hashing using Werkzeug's generate_password_hash() and check_password_hash(), combined with Flask session management to securely authenticate users without exposing sensitive credentials.
User-specific Expense Management
Since multiple users can register, each user should only be able to access and modify their own financial records.
Solution
Designed ownership validation for every expense operation and used parameterized SQL queries to prevent unauthorized access and SQL injection attacks.
Creating an Intuitive Financial Dashboard
Displaying financial information in a meaningful yet minimal interface required balancing usability with simplicity.
Solution
Developed a responsive dashboard summarizing total expenses, expense count, and monthly spending insights while maintaining a clean visual hierarchy.
Performance Optimizations
- Lightweight SQLite database for fast local data retrieval.
- Parameterized SQL queries for efficient and secure database operations.
- Modular Flask routes for improved maintainability.
- Reusable Jinja2 templates to reduce code duplication.
- Optimized CSS structure for faster page rendering.
Security
- Password hashing using Werkzeug.
- Session-based authentication.
- SQL Injection prevention through parameterized queries.
- User ownership verification for every expense operation.
- Secure session handling using Flask.
- Environment-ready architecture for CSRF protection.
Future Improvements
- Interactive charts and expense visualizations.
- Budget planning and monthly spending limits.
- Export expenses to CSV and PDF.
- Recurring expense management.
- Multi-currency support.
- Cloud database integration (PostgreSQL/MySQL).
- REST API for mobile application support.
- Dockerized deployment with CI/CD pipeline.
What I Learned
- Designing complete CRUD applications using Flask.
- Implementing secure authentication and session management.
- Structuring scalable Flask applications with modular architecture.
- Managing relational data using SQLite.
- Building responsive web interfaces with Jinja2 templates.
- Applying secure coding practices including password hashing and SQL injection prevention.
- Creating user-centric dashboards that balance functionality with clean UI design.