Outil interne · 2026 · Un seul fichier HTML

Un devis propre,
en cinq minutes.

Gen-devis est un générateur de devis et de factures qui tient dans un fichier HTML. Pas de serveur, pas de compte, pas d'abonnement : on l'ouvre, on remplit, on imprime en PDF. Les données restent sur la machine.

Voir l'outil Pourquoi zéro dépendance
RôleSolo · Design + Dev
PériodeMars 2026
Format1 fichier · 0 dépendance
Statut● En usage
DEVIS-GENERATOR.HTML · FICHIER LOCAL
Le générateur de devis rempli : chapitres, lignes, totaux, signatures
Survole le document pour le faire défiler
Devis ↔ Facture◆Chapitres et lignes◆Remise · TVA · Acompte◆Sauvegarde JSON◆PDF par le navigateur◆Zéro dépendance◆ Devis ↔ Facture◆Chapitres et lignes◆Remise · TVA · Acompte◆Sauvegarde JSON◆PDF par le navigateur◆Zéro dépendance◆
01 · Le besoin

Le devis est la première chose que le client voit.

Un freelance envoie des devis toutes les semaines. Les outils en ligne demandent un compte et un abonnement pour ça. Le tableur casse les calculs et rend mal. Il fallait autre chose.

AVANT · 01

Les logiciels de facturation

Un abonnement mensuel, un compte, et les données des clients chez un tiers. Pour quelques devis par mois, c'est disproportionné.

AVANT · 02

Le tableur

Une formule cassée, une TVA oubliée, un rendu qui sent le tableur. Et chaque devis est une copie de plus à retrouver.

CIBLE

Cinq minutes, un beau PDF

Ouvrir un fichier, remplir, imprimer. Les totaux se calculent seuls, le devis se transforme en facture d'un clic, et il se conserve en JSON.

02 · L'outil

Tout ce qu'il faut, rien de plus.

Une page qui ressemble déjà au document final. On écrit directement dedans, et ce qu'on voit à l'écran est ce qui sort à l'impression.

DEVIS
# 2026-014
DevisFacture
1. CONCEPTION
Atelier de cadrage et arborescence450,00 €
Maquettes desktop et mobile1 350,00 €
2. DÉVELOPPEMENT
Intégration Next.js, 6 pages2 250,00 €
Espace client2 700,00 €
Remise 5 %-445,00 €
TVA 20 %1 691,00 €
Solde à payer7 146,00 €
Signature client
Signature prestataire
Structure

Chapitres, sous-chapitres, lignes

Un devis se lit par phases. Chaque ligne a ses jours et son prix unitaire, et se déplace d'un clic vers le haut ou le bas.

Calculs

Sous-total, remise, TVA, acompte, solde

Tout se recalcule à la frappe. Le montant déjà payé donne le solde à payer, en gros, là où le client regarde.

Bascule

Devis ↔ Facture

Le même document change de titre et de mentions. La facture reprend le devis signé sans rien ressaisir.

LIGNES
Tableau des chapitres et des lignes du devis
Les chapitres en bandeau, les lignes réordonnables, la ligne vide d'un clic
TOTAUX
Bloc des totaux : remise, TVA, total, montant payé, solde
Remarques et conditions à gauche, la colonne des totaux à droite
Logo par glisser-déposer
Le logo est encodé dans le fichier de sauvegarde, il voyage avec le devis.
Sauvegarde et reprise
Export JSON, rechargement, et une sauvegarde automatique dans le navigateur contre les fermetures malheureuses.
Impression PDF
Une feuille de style d'impression cache les boutons et les poignées. Le navigateur fait le PDF, sans bibliothèque.
03 · Décisions

Un fichier qui durera dix ans.

Le choix le plus important n'est pas une fonctionnalité, c'est ce qu'on a refusé d'ajouter.

CHOIX · 01

Zéro dépendance

Pas de framework, pas de bibliothèque PDF, pas de CDN. Le fichier s'ouvre hors ligne, sur n'importe quel navigateur, et n'aura jamais de mise à jour cassante.

CHOIX · 02

Les données restent chez toi

Un devis est un fichier JSON sur ton disque. Clients, montants, conditions : rien ne part sur un serveur. Rien à héberger, rien à sécuriser.

CHOIX · 03

Une version par client

Pour un client récurrent, une copie dédiée embarque son logo, ses mentions et ses conditions. Le devis suivant part en trois minutes.

devis-generator.html · l'essentiel du calcul
function calculate() { let subtotal = 0; document.querySelectorAll('#itemsBody tr').forEach(row => { if (row.dataset.type !== 'item') return; // les chapitres ne comptent pas const amount = qty(row) * price(row); row.querySelector('.item-amount').textContent = formatMoney(amount); subtotal += amount; }); const discount = subtotal * rate('#discountRate'); const tax = (subtotal - discount) * rate('#taxRate'); const total = subtotal - discount + tax; show('#balanceDue', total - paid()); // ce que le client voit en premier localStorage.setItem('devis_autosave', JSON.stringify(gatherData())); }
1fichier HTML, ouvert depuis le disque
0dépendance, serveur ou abonnement
2 joursde la première ligne au premier devis envoyé
5 minpour un devis complet, signé, en PDF
04 · Stack technique

Le web, sans rien autour.

Ce que le navigateur sait faire seul suffit largement pour un document d'une page.

FRONT
HTML · CSS · JavaScript
Vanilla, 778 lignes, un seul fichier
Champs éditables en place
Le formulaire est le document
DONNÉES
JSON local
Export et import par FileReader, logo inclus
localStorage
Sauvegarde automatique à chaque frappe
SORTIE
CSS @media print
Le rendu écran devient le PDF
window.print()
Aucune bibliothèque PDF embarquée