At the end of every month, I sit down for a couple of hours to create and send out invoices to my customers. Up until very recently, this involved opening up an invoice template in a word processor, entering the date and invoice number, adding up the hours worked, and calculating the total and any taxes. I’d then export each invoice as a PDF and email it out. As if that wasn’t bad enough, at the end of each accounting year, I had to review a directory full of PDF files to calculate how much I’d earned, if any invoices were unpaid, and how many projects I’d completed.

Sounds tedious? It was.

A few months ago, I decided I needed a better, less annoying approach. I decided to create a Web-based invoice generator, one that would need only the minimum necessary information from me and would take care of everything else (including generation, delivery and reporting). Since the plan was to eventually release it as an open source project for anyone to use and since every firm has its own invoice format, easy customization of the invoices was also a key design factor.

It didn’t take long to come up with a working prototype and go from there to the finished product. The final version of the application asks for basic invoice details (which customer, what was purchased, for how much) and then created a PDF invoice by merging this input with an HTML template. The template is fully customizable (so long as you know HTML, you can add your own logo, fonts, colours and layout) and the final invoice is saved online, sent to the customer via email and can be exported as a PDF file on demand. Oh, and it’s fully mobile-optimized too, so you can bill a customer with just a few keystrokes even if you’re travelling…

Here’s a sample invoice:

alt

To make reporting and management easier, I wrapped a couple of views around the information in the database:

alt

I used a bunch of different tools to create this application:

If you’re looking for a better way to do invoices, try the live demo or fork the code on Github and use it for your own business. If you’re interested in finding out how to deploy or customize the application, read my developerWorks article for the full details.