nullish comes with a clean default template in English, German, French and Italian. When you want invoices that look like you, design your own: the whole page is yours, not just a logo and a line of text.
Templates are made with the nullish templates project. It shows a live preview of your invoice with sample data, so you see every change right away. You can let an AI do the work or edit the template yourself.
Get the project
Section titled “Get the project”Fork usenullish/templates on GitHub if you want to keep your templates in your own repository, then clone it:
Terminal window git clone https://github.com/usenullish/templates.gitcd templatesnpm installStart the preview and open localhost:4321:
Terminal window npm run dev
Design it with an AI
Section titled “Design it with an AI”Open the project in a coding assistant such as Claude Code, Cursor or Copilot, and describe what you want:
- "Use my logo from
logo.svgin the top left corner and our brand color#1d4ed8for the headings." - "Put our address in the footer and the bank details next to the totals."
- "Make it look more like this PDF" (with an old invoice attached).
The project describes every piece of invoice data, so the assistant knows what it can use. Keep the preview open next to it and ask for adjustments until it looks right.
Or edit it yourself
Section titled “Or edit it yourself”The invoice template lives in src/templates/invoices/:
Invoice.astrois the layout: what appears on the page, and where.i18n.jsonholds the texts in English, French, German and Italian.
Style it with plain CSS or Tailwind classes. Sizes are in millimeters, like on paper. The project's README lists all the invoice data and the template syntax.
Upload it to nullish
Section titled “Upload it to nullish”Build the template:
Terminal window npm run buildYou get one file per language in
templates/invoices/:en.html,fr.html,de.htmlandit.html.In nullish, go to Settings → Billing → Document templates and create a template. Give it a Name.
Choose Add content for each language you invoice in: pick the Language and upload the matching file, e.g.
fr.htmlfor French.
When you generate an invoice PDF, pick your template under Document template. You can keep several, for example one per brand.