Factura
- Année
- 2025
- Rôle
- SaaS · Design & dev
- Stack
- Next.js, TypeScript, TailwindCSS, Stripe, Drizzle ORM, Turso, Shadcn/UI, Better-Auth
Application de facturation et de comptabilité : factures, devis, clients, prestations, modèles de documents, paiements Stripe, plan comptable, écritures, rapports, rôles et permissions. Refonte complète en 2026 : direction artistique « registre comptable » (papier ivoire, vert comptable, montants en mono tabulaire), nouveau logo, landing animée, mode sombre, et correction de requêtes qui mélangeaient les données de plusieurs entreprises.
Le contexte
Les petites entreprises jonglent entre factures, devis et comptabilité dans des outils séparés. Factura réunit clients, documents PDF, paiements et comptabilité, pour plusieurs entreprises à la fois.
Mon rôle
Seul, du schéma de base de données aux paiements Stripe et à l'interface, refondue en 2026.
Défis techniques
- 01
Isolation entre entreprises
Chaque requête comptable et statistique est filtrée par entreprise, et tout identifiant venu du navigateur est vérifié avant d'être rattaché à un document.
- 02
Invitations et rôles
Une invitation permettait de devenir propriétaire de n'importe quelle entreprise : elle passe maintenant par un jeton à usage unique, haché en base.
- 03
Des PDF et des écritures fiables
Rendu PDF durci, écritures comptables refusées si un compte appartient à une autre entreprise, période d'abonnement Stripe lue là où l'API la place désormais.
Extrait de code
/** Chaque compte d'une écriture doit être au plan comptable de l'entreprise (sinon on déplace les soldes d'une autre) */export async function assertAccountsOwned(accountIds: string[], companyId: string) { const ids = [...new Set(accountIds)]; if (!ids.length) return; const rows = await db.select({ id: chartOfAccounts.id }).from(chartOfAccounts).where(and(inArray(chartOfAccounts.id, ids), eq(chartOfAccounts.companyId, companyId))); if (rows.length !== ids.length) throw new ActionError("Compte introuvable");}Résultat
En ligne sur factura-v2.vercel.app, code public sur GitHub.








