Mohamed Elmujtaba Elwasila Logo Image
Mohamed Elmujtaba Elwasila

Payslips

A self-hosted tool built to automate my self-assessment tax return. It fetches Deliveroo invoice PDFs from Gmail, parses and stores earnings in PostgreSQL, and includes a Streamlit dashboard to visualise income, expenses, and profit by tax year.

Payslips Streamlit earnings dashboard

Project Overview

Built to automate my self-assessment tax return, which previously took days of manually collecting and calculating invoice data. The tool parses Deliveroo self-billing invoice PDFs, extracts earnings data, and stores everything in a PostgreSQL database. It can automatically fetch new invoices from Gmail using the Gmail API, removing the need to download them manually.

The project includes a Streamlit dashboard for viewing income, expenses, and profit breakdowns by calendar year or UK tax year. Invoices can be uploaded directly through the dashboard sidebar, and expense receipts are tracked alongside earnings. The whole system runs on a home server with automated weekly fetching via systemd timers. While building it, I also set up a small Docker-based homelab with tools like Portainer and Uptime Kuma, and used Nginx as a reverse proxy for domain access.

Tools Used

Python
SQLAlchemy
PostgreSQL
Streamlit
Docker