Skip to content

Expense Tracker (Work in Progress) 🛠️

This is not a finished project.

This is something I am actively building to improve how I think about systems, structure, and real-world application design.

Repo: Link will be provided when i complete my learning

GitHub Repo


What this is

This project is my attempt to move beyond small scripts and start building something that evolves over time.

Instead of jumping between different ideas, I chose one problem — an expense tracker — and started rebuilding it multiple times with better structure and better decisions.

Right now, the repo contains multiple stages: - A basic single-file script - A modular CLI version - An argparse-based CLI - An early FastAPI backend

Each stage represents how my thinking changed, not just how the code changed.


What I am trying to learn

Right now, the focus is not features — it’s structure.

  • How to break a program into responsibilities
  • How to move from scripts → tools → systems
  • How to design something that can grow without becoming messy
  • How real applications are structured (not just how they run)

The shift I’m working on is:

from writing code that works → to designing systems that make sense


Current state

  • CLI versions are functional and usable
  • Argparse version feels closer to a real tool (but no one will use it, who uses a cli expense tracker)
  • FastAPI version is still early and incomplete

The API stage is where things are starting to feel different — exposing logic through endpoints instead of directly running functions forced me to rethink how everything is structured.


What I’ve realized so far

  • Writing working code is easy compared to organizing it properly
  • Most complexity comes from managing state and structure, not features
  • Rebuilding the same project teaches more than starting new ones
  • My earlier versions worked, but didn’t scale or feel clean

What I’m focusing on next

  • Improving the FastAPI layer
  • Separating business logic from API routes
  • Introducing proper data handling (moving beyond simple JSON)
  • Preparing for a database-backed version

What this project is NOT (yet)

  • Not production-ready
  • No authentication
  • No database design
  • No deployment

That will come later — right now I’m building the foundation.


Why I’m doing this

I realized that jumping between projects made me feel like I was progressing, but my thinking wasn’t improving enough.

So I changed the approach:

One idea. Multiple implementations. Increasing depth.


Final note

This project is intentionally unfinished.

It exists to show how my thinking is changing, not just what I’ve built.