Full Stack
Invoicer
Self-hosted invoicing with client records, itemised invoices carrying tax and due dates, server-generated PDFs, and a dashboard for billed, collected and outstanding totals.

Overview
A full-stack invoice management application. It handles client records, itemised invoices with tax rates and due dates, preview across three themes, and PDF generation on save. A dashboard tracks total billed, collected and outstanding amounts.
Role
I built all of it: Next.js 14 with the App Router and server actions, Prisma over PostgreSQL, and the whole PDF generation and storage path.
The hard part
I generate the PDF on the server with Puppeteer when the invoice is saved, not in the browser, so the stored file is the invoice of record and looks the same for everyone. The catch is keeping a headless browser running reliably on a small VPS next to the app.
Architecture
Next.js 14 App Router with server actions, Prisma ORM over PostgreSQL, Google OAuth through NextAuth, and Cloudinary for PDF storage. Invoice PDFs are rendered server-side with Puppeteer and uploaded on save. Deployed to a VPS on a custom subdomain.
Stack
- Next.js
- TypeScript
- PostgreSQL
- Prisma
- NextAuth
- Tailwind CSS