Next.js · TypeScript · Tailwind CSS · SQLite · Puppeteer · pdf-lib
- 100%vector PDF output
- 4invoice states
- 5built-in tools
- Challenge
- Companies that bill international clients often rebuild each invoice by hand in a word processor. Numbering, layout, bank details and signatures drift from one document to the next, and official letters are produced the same slow way.
- Solution
- A local-first studio that keeps everything in one place: an invoice editor with a live preview, an authorization-letter builder, a visual PDF editor, client and payment directories and a backup tool, all backed by a fast local database. The demo runs on a fictional company, so it is safe to show openly.
What I built
- Invoice editor with live preview. Edit on the left and watch the document update on the right. Multiple line items with quantity, unit and rate, tax and discount, a service period, a consultant and role, and a status that moves from draft to saved, sent and paid.
- Print-quality PDFs. Headless Chromium turns each template into a sharp vector PDF, with company logo, brand colours, watermark, signature and stamp, so documents look the same on screen and on paper.
- Authorization letters. Official representative letters with editable purpose, duties and validity text, plus switches to show or hide the signature and stamp for physical printing or digital sharing.
- Visual PDF editor. Open a blank page or an uploaded PDF and add text, images, signatures, rectangles and lines, with control over font, colour, opacity and rotation before exporting.
- Clients and payment profiles. A full directory of clients and reusable bank profiles (account details, routing, wire routing, SWIFT, reference instructions) that can be picked per invoice.
- Data you can trust. A local SQLite database in write-ahead mode, versioned JSON backups, restore by replacing or merging, and an activity log of every create, edit and export.
- A dashboard that answers the first question. Invoiced volume, number of clients and letters, and the most recent invoices on one screen.