4.6 KiB
title: Invoicerr created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, accounting, facturation, freelance, typescript, nestjs] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=Accounting, https://github.com/n0xgg04/invoicerr]
Invoicerr 📨
Facturation simple et moderne pour freelances et auto-entrepreneurs, écrite en TypeScript (backend NestJS, frontend Next.js) — focus sur la clarté et l'export PDF rapide.
| Métadonnée | Valeur |
|---|---|
| Site web | https://github.com/n0xgg04/invoicerr |
| GitHub | https://github.com/n0xgg04/invoicerr |
| License | MIT |
| Langage | TypeScript (NestJS + Next.js) + PostgreSQL/Prisma |
| Étoiles | ⭐49 |
| Dernière MAJ | 2024-07 |
| Catégorie | cat-accounting |
Description
Invoicerr est une application de facturation open source écrite en TypeScript avec une architecture moderne séparant un backend NestJS (API REST documentée, ORM Prisma) et un frontend Next.js (React, Tailwind). Le projet cible explicitement les freelances et auto-entrepreneurs qui veulent un outil plus simple que app-invoice-ninja mais plus moderne que app-invoiceplane, avec une UX 2024.
Les fonctionnalités couvrent le cycle de facturation essentiel : gestion de clients, émission de factures et devis, calcul automatique TVA / HT / TTC, multi-devises, personnalisation des mentions (logo, SIRET, conditions de paiement), génération PDF côté serveur, et historique consultable par client. Le code suit les bonnes pratiques TypeScript (types stricts, validation Zod, tests unitaires), ce qui en fait une bonne base de fork pour des besoins métier spécifiques.
L'auto-hébergement est facilité par la présence d'un docker-compose.yml clé-en-main (app + PostgreSQL) sur le dépôt. L'API REST documentée (Swagger) ouvre la porte à des intégrations avec des scripts de relance, des tableurs ou un pipeline de reporting. Inconvénient : le projet reste jeune, la communauté est restreinte, et il n'y a pas (encore) de passerelle de paiement ni de facture récurrente avancée.
Installation
Via Docker (placeholder à adapter)
# docker-compose.yml
services:
invoicerr:
image: ghcr.io/n0xgg04/invoicerr:latest
container_name: invoicerr
restart: unless-stopped
ports:
- "3020:3000"
environment:
DATABASE_URL: postgresql://invoicerr:secret@db:5432/invoicerr
JWT_SECRET: changez-moi-32-caracteres
NEXT_PUBLIC_API_URL: http://localhost:3020
depends_on:
- db
db:
image: postgres:16-alpine
container_name: invoicerr-db
restart: unless-stopped
environment:
POSTGRES_DB: invoicerr
POSTGRES_USER: invoicerr
POSTGRES_PASSWORD: secret
volumes:
- ./pgdata:/var/lib/postgresql/data
Manuelle (Node ≥ 20)
git clone https://github.com/n0xgg04/invoicerr.git
cd invoicerr
# Backend
cd apps/api && npm install && npm run build && npm run start:prod
# Frontend (autre terminal)
cd ../web && npm install && npm run build && npm run start
Configuration
Variables d'environnement principales côté backend : DATABASE_URL (PostgreSQL via Prisma), JWT_SECRET (signature des tokens d'auth), SMTP_* (envoi de factures par email). Côté frontend : NEXT_PUBLIC_API_URL (URL du backend). Le fichier prisma/schema.prisma permet d'ajuster les modèles ; un prisma migrate deploy est requis au premier démarrage.
Alternatives
- Open Source : app-rachoon (Svelte, mature), app-invoice-ninja (Laravel, très complet), app-crater (Node, plus ancien), app-akaunting (comptabilité intégrée)
- Propriétaire : Indy (freelance FR), Henrri, Stripe Invoicing, Square Invoices
Sécurité
- JWT_SECRET : chaîne aléatoire ≥ 32 caractères, jamais partagée
- Activer HTTPS via reverse-proxy (Traefik, Caddy) — voir recettes-docker-compose
- PostgreSQL : ne pas exposer le port 5432 sur l'hôte
- Sauvegardes :
pg_dumpquotidien + rotation (rclone vers S3/Backblaze) - Lancer
npm auditrégulièrement et activer Dependabot/Renovate - En production multi-utilisateurs, activer un rate-limiting (ex. via Traefik middlewares)
Ressources
- Code source : https://github.com/n0xgg04/invoicerr
- Documentation NestJS : https://docs.nestjs.com
- Documentation Prisma : https://www.prisma.io/docs