An invoice generator app built using Next.js, Typescript, and Shadcn
An invoice generator app built using Next.js, Typescript, and Shadcn
Invoify is a free, web-based invoice generator built with Next.js, TypeScript, React and the shadcn/ui library. Fill in a form, pick a template, and get a real PDF. No account, no subscription, and nothing about your customers stored on a server.
A walkthrough of what each part does lives on the guide page.
Invoify has no accounts and no database. Everything you enter (the address book, the autosave draft and your saved invoices) is stored locally, and it is encrypted at rest with AES-GCM 256 under a key the browser generates as non-extractable, so the key cannot be copied out of the origin.
Two things worth being clear about:
The only time invoice data leaves your machine is when you generate a PDF or send one by email, and it is not retained afterwards.
Arabic, Azerbaijani, Catalan, Chinese (Simplified), English, French, German, Hebrew, Indonesian, Italian, Japanese, Norwegian (Bokmål), Norwegian (Nynorsk), Polish, Portuguese (Brazil), Serbian, Spanish and Turkish.
Right-to-left layouts are supported for Arabic and Hebrew. Some PDF translations are still incomplete and fall back to English.
[!NOTE] Issue #11 reports PDF generation problems in Mozilla Firefox and is still open. The automated tests run against Chromium only, so the current state in Firefox is untested.
Visit the live demo to see Invoify in action.
Follow these instructions to get Invoify up and running on your local machine.
Clone the repository:
git clone https://github.com/al1abb/invoify.git
cd invoify
Install dependencies
npm install
Create an .env.local file. See Environment variables below. You can skip this if you do not need the "send PDF by email" feature.
Start development server
npm run dev
Open your web browser and access the application at http://localhost:3000
All of these are optional; the app runs without them, minus the features they enable.
| Variable | Required for | Notes |
|---|---|---|
NODEMAILER_EMAIL |
Sending invoices by email | The Gmail address that sends the mail. |
NODEMAILER_PW |
Sending invoices by email | A Gmail App Password, not your account password. Requires 2-Step Verification. |
| Command | What it does |
|---|---|
npm run dev |
Development server. |
npm run build |
Production build. |
npm run start |
Serve the production build. |
npm run lint |
ESLint. |
npm run format |
Prettier, writing in place. |
npm run test:e2e |
Playwright end-to-end tests. |
npm run test:e2e:ui |
The same tests in Playwright's UI mode. |
npm run analyze |
Production build with the bundle analyzer. |
npx tsc --noEmit |
Typecheck. |
predev and prebuild run scripts/build-pdf-css.mjs, which compiles the stylesheet the PDF renderer inlines. It runs automatically, so you only need npm run build:pdf-css if you change PDF styling and want to rebuild it on its own.
npx playwright install --with-deps chromium
npm run test:e2e
The suite builds and serves the production bundle, then runs against it in a desktop and a mobile viewport. CI runs the same typecheck, lint and test steps on every push and pull request. See .github/workflows/ci.yml.
Distributed under the MIT License. See LICENSE for more information.
Join the Discord server here
No open issues yet, or sync has not completed.