Back to Projects
Spendly
CompletedPythonFlaskSQLite+5 more

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
Completed

Technology Stack

Python
Flask
SQLite
Jinja2
HTML5
CSS3
JavaScript
Werkzeug

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.

Connect

© 2026 Rishabh Dhawad. All rights reserved.