// ship

Billing

daily driver

Your invoicing system - it reads your git commits and turns them into a client-ready invoice.

Billing is a tool I built to handle the paperwork side of freelance work. It reads your git commit history, drafts a reviewable work log from them (suggesting hours you can adjust) and assembles a professional invoice PDF that's ready to send to a client.

  • Python
  • Django
  • ReportLab
  • PostgreSQL
  • Bootstrap 5
Most billing tools make you enter time manually. This one reads the actual work (the git commits) and builds the invoice from that. You review and adjust the entries in a web interface, then export a clean PDF. Because it's a reusable library, any Django web project can drop it in and get the same workflow.

What it does

Billing is a reusable Django library that you plug into your web projects to handle all the invoicing bookkeeping. It connects to git repositories, pulls in the commit history for a given month, and organizes those commits into work entries, each with hours, a category, and a description. You can review everything in a clean web interface, adjust anything that needs tweaking, and then generate a professional PDF invoice and work report to send to your client. The app tracks clients, contracts, rates, and recurring costs, so once it's set up, each month's billing is mostly just review and approve. It also has a handy status command that gives a quick read-out of what's ready to bill and what still needs attention.

Why it's neat

Work logs get a head start

It pulls in the code history so you're editing a draft with suggested hours, not starting from a blank page.

Review before you send

A staff web interface lets you check every entry, adjust hours or descriptions, and see the invoice total before anything goes out.

Professional PDFs in one command

One command exports a polished invoice and a detailed work report as PDFs, ready to attach to an email.

How it works

1. Import from git

The app reads commits from configured repos for the billing month and turns each group of related commits into a draft work entry with suggested hours you can adjust.

2. Review and refine

You open the web interface to review entries, adjust hours or descriptions, and assign work to the right project or feature.

3. Create the invoice

One command assembles a draft invoice with all the work entries and any recurring contract costs included.

4. Export and send

Another command exports the invoice and a full work report as PDFs, ready to send to the client.