Facturo — Logiciel de facturation pour PME tunisiennes
Une plateforme de facturation multi-tenant gérant devis, factures, stocks et paiements avec TVA tunisienne et timbre fiscal intégrés.
Pas encore ouvert au public — cette page précède le lancement.

Le projet
Small Tunisian businesses invoice from spreadsheets. A spreadsheet does the arithmetic and nothing else: it will not number a document, break VAT down by rate, remember which invoice is still unpaid, or keep stock in step with what left the warehouse. The software that does exist is priced for larger companies and rarely speaks Arabic properly. Facturo is my answer to that — an invoicing platform built for how a Tunisian SME actually works.
One document becomes the next
The heart of the product is the sales chain: an accepted quote becomes a delivery note, which becomes an invoice, which becomes a payment. Lines, prices and discounts follow along, so nothing is ever retyped. The purchasing side mirrors it — supplier orders, goods receipts, purchase invoices and credit notes.
Prices are frozen when a document is issued. Changing an item's price tomorrow must never rewrite an invoice a customer already holds, and that rule is enforced in the data model rather than trusted to a convention.
The Tunisian details
- VAT at 19%, 13%, 7% and 0%, broken down per rate on the document.
- The fiscal stamp and FODEC applied where they belong.
- Amounts to the millime — money is a decimal on the server from end to end, never a floating-point number.
- Sequential numbering per document type and per year, with the legal mentions and the tax ID.
Three languages, one of them right-to-left
The interface and the generated PDFs exist in French, English and Arabic, and Arabic is a genuine right-to-left layout rather than translated text in a left-to-right shell. Each account chooses its own language.
Under the hood
One full-stack Next.js 16 application: pages are Server Components reading Prisma directly, and every mutation is a Server Action validated with Zod. There is no separate API service and no internal HTTP hop — an earlier NestJS backend was deleted once it became clear it only added a boundary to keep in sync.
Multi-tenancy is a single PostgreSQL database isolated by tenant. The tenant is resolved server-side from the session and never accepted from the client, so a missing filter cannot become a cross-tenant leak. Money values are computed as decimals on the server and reach the screen as strings, which is the only way to keep a total to the millime.
Where it stands
The product is complete through its first version and is running on a preview deployment while it is tested with real documents. It is not open for sign-ups yet.