Application complète de gestion de factures et devis pour freelance / petite agence, optimisée pour Vercel.
- Next.js 14 (App Router) + TypeScript + Tailwind CSS
- Supabase (PostgreSQL + Auth + Storage)
- PDF client-side:
@react-pdf/renderer - Assistant IA: Mammouth API (OpenAI-compatible) via package
openai - Toasts:
sonner - Thème sombre:
next-themes
- Factures et devis (
FAC-YYYY-XXXX,DEV-YYYY-XXXX) - Numérotation atomique par type + année
- Conversion devis → facture
- Suivi de statut + paiement + détection retard
- Clients + autofill dans les documents
- Prévisualisation document + génération PDF immédiate
- Assistant IA pour patch JSON de formulaire
- Import d'une ancienne facture PDF dans l'assistant IA (pré-remplissage auto)
- OCR notes de frais (image/PDF → formulaire pré-rempli)
- Sync Qonto (transactions, rapprochement, export justificatif)
- Lien de paiement Stripe par facture + webhook de confirmation
- Paramètres vendeur (SIRET, TVA, IBAN, logo, préfixes)
- Installer les dépendances:
npm install- Créer le fichier d'environnement:
cp .env.example .env.local- Renseigner les variables dans
.env.local:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYMAMMOUTH_API_KEYSERPER_API_KEY(optionnel, pour recherche web d'infos entreprise via l'IA)STRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETQONTO_LOGINQONTO_SECRET_KEYAPP_URL(URL publique de l'app, ex:https://votre-app.vercel.app)NEXT_PUBLIC_APP_URL(même valeur queAPP_URL)MAMMOUTH_PDF_MODEL(optionnel, défaut:mistral-small-3.2-24b-instruct)MAMMOUTH_OCR_MODEL(optionnel, défaut:gpt-4o)MAMMOUTH_OCR_MAX_PAGES(optionnel, défaut:2, max4)MAMMOUTH_OCR_TEXT_THRESHOLD(optionnel, défaut:500)
- Créer le schéma Supabase:
- Ouvrir Supabase SQL Editor
- Exécuter le contenu de
supabase/migrations/001_init.sql - Si la base est déjà initialisée, exécuter aussi
supabase/migrations/002_micro_entrepreneur_legal_mention.sql - Exécuter ensuite
supabase/migrations/003_expenses_qonto.sql - Exécuter ensuite
supabase/migrations/004_stripe_payment_links.sql - Créer un bucket public
logos(Storage) pour l'upload logo - Auth > URL Configuration:
- Ajouter
http://localhost:3001/auth/callbackdans les Redirect URLs - Ajouter aussi votre URL Vercel en production, ex:
https://votre-app.vercel.app/auth/callback
- Ajouter
- Lancer en local:
npm run dev- Push sur votre dépôt Git
- Importer le projet dans Vercel
- Configurer les variables d'environnement identiques à
.env.local - Déployer
Aucun Docker ni process long-running requis.
POST /api/documents/number→ génération atomique du numéroPOST /api/ai/fill-invoice→ assistant IA Mammouth- supporte la recherche web d'entreprise (SIREN/SIRET) si
SERPER_API_KEYest configurée
- supporte la recherche web d'entreprise (SIREN/SIRET) si
POST /api/ai/extract-from-pdf→ extraction d'une facture PDF puis patch JSONPOST /api/expenses/ocr→ OCR reçu (image/PDF) + JSON structuréGET /api/qonto/transactions→ transactions Qonto 30 jours (debit)POST /api/qonto/match→ associer une dépense à une transaction QontoPOST /api/qonto/attach→ exporter le justificatif d'une dépense vers QontoPOST /api/invoices/[id]/payment-link→ créer un lien de paiement StripePOST /api/webhooks/stripe→ webhook Stripe signé (paiement facture)POST /api/documents/mark-overdue→ passage auto enoverdueGET /auth/callback→ finalise la session Supabase après Magic Link
Le client OpenAI est configuré avec:
baseURL: "https://api.mammouth.ai/v1"- modèle
mistral-small-3.2-24b-instruct
L'API attend l'état courant du document + message utilisateur et renvoie un JSON patch.
Pour l'import PDF V2:
- extraction texte native du PDF
- fallback OCR vision (Mammouth) si le PDF est scanné / pauvre en texte
- fusion des deux pour remplir la nouvelle facture