SaaS Devis & Factures · Digistylze
Mission confiée pendant mon stage obligatoire B1 chez Digistylze à Genève : développer de zéro un SaaS de gestion de devis et factures pour les besoins internes de l'entreprise. React + TypeScript, Supabase pour la base et l'auth, Gemini pour la saisie assistée par IA (OCR + extraction structurée). Solo sur le projet.
La mission
Stage obligatoire de fin d'année B1, chez Digistylze à Genève. L'entreprise voulait son propre outil de gestion de devis et factures, avec un cahier des charges précis : tableau de bord avec KPIs, CRUD clients et produits, devis multi-sections, factures liées, export PDF fidèle à leur modèle papier, et une saisie rapide assistée par IA pour éviter de tout retaper à la main. Mon rôle : tout porter. Analyse, design, dev front, intégration Supabase, edge functions, tests.
La feature la plus intéressante : la saisie rapide IA
Un commercial peut soit taper son devis dans un formulaire classique, soit balancer une photo d'un devis papier ou d'un plan, soit dicter en vocal (Web Speech API). Dans les deux derniers cas, ça part dans une Edge Function Supabase qui fait quatre choses : OCR via Gemini 2.5 Flash, extraction structurée des postes (désignation / quantité / unité / prix), matching avec le référentiel produits existant, et enrichissement des descriptions techniques. Le résultat revient sous forme de cartes de révision : le commercial valide ou modifie chaque poste avant que ça parte dans le devis final. L'IA propose, l'humain dispose.
La pile technique
React 18 + TypeScript + Vite + Tailwind + shadcn/ui pour le front. Recharts pour les graphiques du dashboard. Supabase pour l'auth, la base et les Edge Functions IA. Tesseract.js en complément pour l'OCR local sur certains formats. Côté tests : Playwright pour l'E2E, Vitest pour l'unitaire. Sécurité : middleware d'auth, rate limit, error handler centralisé. Export PDF via html2canvas + jsPDF, fidèle au modèle papier de l'entreprise. Thème clair/sombre. Pas de lien public dans le portfolio. C'est un outil interne propriété de Digistylze, je ne montre que des captures.