Facturar.do invoicing platform — invoicing system for small businesses built with Python Django
Case study Python · Django · PostgreSQL SaaS · Invoicing 2025 – 2026

Facturar.do — Invoicing system for small businesses

A web invoicing platform built with Python Django and PostgreSQL. It lets small businesses create clients, generate PDF invoices, record payments, and keep visibility into their account status — no spreadsheets required.

View live demo
PDF
Invoices generated instantly
Multi
Clients and account statements
Dark
Persistent light / dark theme
Auth
Secure session-based authentication
REST
Internal Django ORM API
0 dep
Frontend with no heavy frameworks

The problem: manual, disorganized invoicing

Most Dominican small businesses manage their invoicing over WhatsApp, voice notes, or an unshared spreadsheet. When a client asks what they owe, there's no immediate answer. Facturar.do solves exactly that.

⚠ Without Facturar.do
  • Invoices in Word or Excel sent over WhatsApp
  • No payment history per client
  • Hard to know which invoices are outstanding
  • Inconsistent numbering, manual errors
  • No visibility into monthly revenue
✓ With Facturar.do
  • PDF invoice generated and sendable in seconds
  • Always up-to-date account statement per client
  • Dashboard of pending and collected invoices
  • Automatic, sequential numbering
  • Real-time financial summary for the period

Screenshots of the system

facturado-mpze.onrender.com / login
Facturar.do sign-in with Google or email

Sign-in — access with Google OAuth or email/password

facturado-mpze.onrender.com / dashboard
Facturar.do dashboard with monthly sales, net cash flow, accounts receivable, and DGII withholdings

Main dashboard — monthly sales, net cash flow, accounts receivable, and VAT/DGII withholdings

facturado-mpze.onrender.com / facturas / [id]
Invoice detail in Facturar.do with e-CF issuance, payment recording, and WhatsApp sending

Invoice detail — e-CF issuance, payment recording, email/WhatsApp sending, and credit notes

facturado-mpze.onrender.com / productos
Product and service catalog in Facturar.do with base price and VAT

Product and service catalog — base price, VAT, and bulk import from Excel

facturado-mpze.onrender.com / configuracion / empresa
Company and NCF settings in Facturar.do — tax profile and receipt sequences

Company and NCF settings — tax profile, logo, receipt sequences, and payment terms

System architecture

Facturar.do follows Django's MVT architecture with a clear separation of domain models (Client, Invoice, Item, Payment). PostgreSQL in production (Render.com) guarantees transactional integrity for payment operations.

Presentation layer
Browser · Vanilla JS
Light/dark theme via localStorage
Application layer — Django MVT
Views · Forms · Templates (Jinja)
Django ORM
Auth middleware
CSRF protection
Domain models
Client
Invoice
InvoiceItem
Payment
Company (config)
Data and generation layer
PostgreSQL (Render)
ReportLab · PDF
WhiteNoise · Static files

Main modules

👥
Client management
Client directory with tax ID, invoice history, and account statement updated in real time.
🧾
Invoice issuance
Creation with multiple line items, discounts, VAT, and automatic sequential numbering. PDF generated on save.
💳
Payment recording
Marks invoices as fully or partially paid. Payment history and outstanding balance per invoice.
📊
Financial dashboard
Revenue summary, pending and collected invoices. Filters by period and client for quick reports.
📄
PDF generation
PDF invoice with logo, company details, line items, totals, and VAT. Ready to send by email or WhatsApp.
🔐
Secure authentication
Session-based Django login, CSRF protection, and per-user access control. Multi-company ready.

Tech stack

Backend

Python 3 Django 4 Django ORM PostgreSQL Django Auth WhiteNoise

Document generation

ReportLab (PDF) Django Templates

Frontend and infrastructure

JavaScript (ES6) CSS Variables · Light/dark theme localStorage Render.com (deploy) gunicorn

How it was built

  1. 1
    Domain modeling first Before creating views, I defined the Django models: Client, Invoice, InvoiceItem, and Payment. Correct database relationships are the foundation — a poorly designed ORM forces patches later.
  2. 2
    Clean CRUD before adding business logic I first built basic CRUD views using Django's class-based views (ListView, CreateView, UpdateView). Then I added the logic for total calculations and PDF generation on top of a solid foundation.
  3. 3
    PDF generation with ReportLab PDF document generation was the most complex module. ReportLab allows pixel-perfect control of the layout, needed for the invoice to have the correct presentation with logo, item table, and totals.
  4. 4
    Deployment on Render with managed PostgreSQL I migrated from SQLite (development) to PostgreSQL in production using Render.com. Render's managed database simplifies backups and scaling without managing infrastructure.

What I learned

Django is the right framework for structured data management systems. Django's admin, ORM, migrations, and authentication system eliminate weeks of boilerplate work — you can focus on business logic from day one.

The main lesson: design the data model with the queries you'll need in mind. The "account statement per client" view required an efficient query that summed invoices and subtracted payments. That query was easy because the models were well related from the start.

Need a management system for your business?

I build custom web platforms with Python Django and PostgreSQL for businesses in the Dominican Republic. Invoicing, CRM, inventory, or whatever your operation needs — we start with process analysis.