Home
Softono

Invoicerr

Open source TypeScript
694
Stars
49
Forks
45
Issues
2
Watchers
3 months
Last Commit

 About Invoicerr

Invoicerr is a freelance-focused invoicing app that lets you create quotes, generate invoices, track payments, and collect secure signatures.

Platforms

Web Self-hosted

Languages

TypeScript

Links

Need Help Installing Invoicerr?

We provide expert installation service for this software. Our team will install, configure, and secure Invoicerr on your server. plans start at just $30.

Invoicerr

Invoicerr Banner

Invoicerr is a simple, open-source invoicing application designed to help freelancers manage their quotes and invoices efficiently. It provides a clean interface for creating, sending, and tracking quotes and invoices — so you get paid faster, with less hassle.


📢 Maintainer availability

I no longer have enough personal time to work on Invoicerr full-time (studies + job).

The project is still open, and I can continue to review and manage community pull requests, but development speed from my side will be slower.


Dashboard Page

✨ Features

  • Create and manage invoices
  • Create and manage quotes (convertible to invoices)
  • Manage clients and their contact details
  • Track status of quotes and invoices (signed, paid, unread, etc.)
  • Built-in quote signing system with secure tokens
  • Generate and send quote/invoice emails directly from the app
  • Generate clean PDF documents (quotes, invoices, receipts, and more)
  • Custom brand identity: logo, company name, VAT, and more
  • Authentication via JWT or OIDC (stored in cookies)
  • International-friendly: Default English UI, customizable currencies
  • SQLite database for quick local setup
  • Docker & docker-compose ready for self-hosting
  • Built with modern stack: React, NestJS, Prisma, SQLite/PostgreSQL
  • REST API backend, ready for future integrations (mobile & desktop apps)
  • Plugin system for community-made features

🌍 Translation

Invoicerr uses weblate to easily manage the translations

Translation status

Translation status


🐳 Docker Installation (Recommended)

Supported Architectures

The images are built for the following architectures:

  • linux/amd64 (x86_64)
  • linux/arm64/v8 (ARMv8)

Why not linux/arm/v7?

The linux/arm/v7 architecture is not supported due to the use of prisma, which does not provide prebuilt binaries for this architecture. This means that the application will not run on 32-bit ARM devices.

The fastest way to run Invoicerr is using Docker Compose. A prebuilt image is available at ghcr.io/invoicerr-app/invoicerr.

🚀 Quick Start

  1. Clone the repository:

    git clone https://github.com/invoicerr-app/invoicerr.git
    cd invoicerr
    
  2. Edit the docker-compose.yml to set your environment variables.

  3. Run the app:

    docker compose up -d
    
  4. Open your browser at:

    http://localhost
    

🔧 Environment Variables

These environment variables are defined in docker-compose.yml under the invoicerr service:

  • DATABASE_URL
    PostgreSQL connection string. Example:
    postgresql://invoicerr:invoicerr@invoicerr_db:5432/invoicerr_db

  • APP_URL
    Full public URL of the frontend (e.g., https://invoicerr.example.com).
    This is required for email templates and links.

  • SMTP_HOST, SMTP_USER, SMTP_PASSWORD
    Credentials and server used for sending emails (quotes, invoices, etc.)

  • SMTP_FROM
    Optional — address used as the sender for emails. If omitted, defaults to SMTP_USER.

  • JWT_SECRET
    Optional but recommended for JWT authentication. Can be any random string.
    If not set, a default secret will be used. But it can have issues with docker deployments.

Make sure port 80 is available on your host machine, or change the mapping.


💻 Manual Installation (Local Development)

Prerequisites

  • Node.js v20+
  • SQLite (or configure another DATABASE_URL)
  • PNPM or NPM

Steps

  1. Clone the project:

    git clone https://github.com/invoicerr-app/invoicerr.git
    cd invoicerr
    
  2. Backend setup:

    cd backend
    npm install
    npx prisma generate
    npm run start
    
  3. Frontend setup (in a new terminal):

    cd frontend
    npm install
    npm run start
    
  4. Open in your browser:

    • Frontend: http://localhost:5173
    • API: http://localhost:3000

🧪 Lancer les tests end-to-end (Cypress)

Pour lancer les tests e2e localement ou en CI :

  1. Démarrer le backend et le frontend avec les variables de test :

    cd backend && npm run start:test &
    cd frontend && npm run start:test &
    

    (Assurez-vous d'avoir un .env.test dans chaque dossier)

  2. Dans un autre terminal, lancer Cypress :

    cd e2e
    npm install
    npm run e2e:open # ou npm run e2e:run
    

En CI, le workflow GitHub Actions fait ces étapes automatiquement.


📸 Screenshots

Dashboard

Dashboard Page

Quotes

Quotes Page

Invoices

Invoices Page

Clients

Clients Page

Settings

Settings Page

🧰 Technologies

⚖️ License

This project is dual-licensed:

Contact me for commercial use.