Automated PDF invoice generation and delivery for small businesses.
A fully deployed automation workflow that takes a web form submission and delivers a professional PDF invoice to the client's inbox — automatically, in seconds. No manual work, no templates to fill, no emails to write.
🔗 Live demo: demo.lutismart.de/invoice
- Client fills a bilingual (DE/EN) web form — selects services, enters client details
- Form submits to a webhook on a self-hosted n8n instance
- n8n passes the data to a Python microservice that generates a PDF invoice using WeasyPrint
- PDF is returned as base64, converted to binary in n8n
- Gmail sends the PDF as an email attachment to the client
- Google Sheets logs the invoice for financial tracking
[HTML Form] → [n8n Webhook]
↓
[JS Code Node]
(build invoice HTML)
↓
[HTTP Request]
→ python-runner/convertHTML2PDF.py
(WeasyPrint → base64 PDF)
↓
[Gmail Node]
(send PDF attachment via OAuth2)
↓
[Google Sheets]
(log invoice reference, client, total)
| Component | Technology |
|---|---|
| Automation | n8n (self-hosted) |
| PDF generation | Python · WeasyPrint |
| Email delivery | Gmail API · OAuth2 |
| Data logging | Google Sheets API |
| Frontend | Vanilla HTML · JS (bilingual DE/EN) |
| Infrastructure | Docker · Nginx · Hetzner VPS · SSL |
frontend/
index.html # Bilingual form (DE/EN, dark/light mode)
python-runner/
generatePdf.py # WeasyPrint PDF generation script
The n8n workflow is not published — it is part of the LütiSmart production system.
- Bilingual interface (🇩🇪 German default / 🇬🇧 English toggle)
- Dark and light mode (system preference)
- Service selection with live price summary
- Custom service input (name + price)
- Auto-reset after successful submission
- Toast notifications for validation and errors
The full stack runs on a Hetzner VPS:
- n8n self-hosted via Docker Compose
- python-runner microservice (FastAPI + WeasyPrint) in a separate container
- Nginx reverse proxy with SSL (Let's Encrypt)
- Frontend served as static files