Case Study: A simple invoice tracker
A practical desktop app built to automate the tedious and error-prone parts of freelance financial admin.
This project started from a simple idea: when you have a point of friction in your own workflow, build a tool to fix it. I built this app for myself to turn a tedious, error-prone chore into a simple one-click process.
The problem
Like many freelancers, I found myself in a repetitive, manual loop every month: open a folder of PDF and Word invoices, copy the details (invoice number, amount, date), paste them into a spreadsheet, and then manually track payment status. It was a tedious, error-prone chore that was a poor use of my time.
The challenge
The main idea was to build a simple, private desktop application that could automate the entire process. The automation is a two-step process: first, I created a "patterns" feature to match an invoice's filename to a specific client, automatically filling in their details. Second, the app gets a bit "smart": it opens the PDF or DOCX file and searches for common keywords like "Invoice no.", "Amount due," or "Invoice date" to automatically find and extract the key data.
Key Features
Beyond the core automation, I added a few other key features to make the app genuinely useful for financial tracking:
- Payment tracking dashboard: A simple table shows all invoices, color-coded by status (red for overdue, yellow for due soon, green for paid), so you can see what is happening at a glance.
- Full invoice management: You're not locked into the automation. You can manually add, edit, or delete any invoice record, and mark invoices as "Paid" with a single click.
- Simple statistics: A separate stats tab gives a high-level overview of your finances, with stuff like charts showing total revenue, unpaid amounts, and top clients.
Crucially for me, the design essentially gamifies the process of getting paid. The act of adding a new invoice is no longer a chore; it's a satisfying feedback loop that lets you instantly see the results of your work on the dashboard and the statistics screen
Pragmatic trade-offs
This was a personal project, so I made some very conscious decisions to prioritize function over form and solve my own problem as efficiently as possible.
- A minimalist UI: The interface is built with the standard Python library Tkinter. It's not the prettiest app in the world, but it's functional, fast, and gets the job done without any unnecessary complexity.
- Personalized automation: The core "patterns" feature is designed for my specific workflow. While the app still works perfectly well with manual entry for other users, the main automation is a niche, personalized solution.
- Manual entry as a fallback: I knew the automation wouldn't be perfect. For invoices with unusual filenames or layouts, I made sure there was a simple manual entry form. If the parsing fails, you can always just type in the details yourself, so you're never stuck.
- Euro-centric for now: While you can select currencies for individual invoices, the main stats dashboard currently aggregates all currencies into a total displayed in Euros (€). This was the fastest solution for my own needs, but it's a limitation I should probably address in the future.
The outcome
In the end, what I have is a simple tool that turns a tedious monthly chore into a quick, automated, and even enjoyable process. It eliminates the kind of manual data entry that's prone to typos and headaches, and for me, it's a good reminder of how a small bit of automation can make a big difference.