Freelance invoices manager

python django

I've started this project because I needed a tool to autogenerate and email invoices to my clients and also to keep control of which one I've sent, which one is not paid, an so on. So, after using a really simple and ugly version of the app in my server I decided to give it a nice look. It is not a complex app at all, it just has what I personally need, so if in a future I need some new feature it will be updated.

Download and installation in github.


The project is done with django and it uses the django auth system. Also it is designed to deal with a unique user.


After the installation you need to set up your settings: email settings to send the pdf version of the invoices, information to be displayed in the invoices and daily rate and tax to do the maths.



Before saving invoices you'll need to set up you client list. The client email is the one the invoice will be sent to.

mt-freelance-invoices__05 mt-freelance-invoices__04


Every invoice created will be saved as a draft. It is not necessary to fill up anything but an invoice name. When the invoice is saved just the status will be editable (saved, sent, paid).

mt-freelance-invoices__07 mt-freelance-invoices__08

Once the invoice is saved you can email it directly to the client in pdf. Remark each time you want to send an invoice, your email password will be asked to you, since this will never be stored.


Although it is possible to create an invoice directly from a pdf file, the best way to do it is from the selected days in your calendar.


From a calendar you can select the days you have worked and create an invoice with one click. The invice will be createed as a draft and if you remove this drafts the selected days will be still selected, thus, it's possible to remove a draft, add select more days and recreate a new invoice with the total days.

mt-freelance-invoices__03 mt-freelance-invoices__10


To translate the app to another language different than English, you may follow this guide.


The implementation of the invoicing system was done with daily-based invoices in mind. More complex configurations would require a huge change in the data modelling, and both backend and frontend code.

To implement a multiuser version, the data modelling would be modified, since there's no relationships between invoices or clients and users.

Creating new templates for the invoices would require a double work, since the html and pdf templates are different, due to the differences in the rendering for each case.