Projet

QR Dynamics

Premier SaaS mis en ligne : générateur de QR codes dynamiques dont la cible se change à tout moment, sans réimprimer le code, avec personnalisation, analytics de scans et facturation

Technologies utilisées

Next.jsTypeScriptDrizzlePostgresSupabaseStripeTailwind CSS

Détails du projet

À propos du projet

Un QR code imprimé est définitif : une fois sur un flyer, une affiche ou un packaging, la seule façon de changer la destination est de tout réimprimer. QR Dynamics règle ça avec une indirection : le QR encode une URL courte (/r/<slug>) qui redirige vers une cible modifiable à tout moment.

Le QR ne contient jamais l'URL finale, seulement le slug. La cible vit en base.

C'est mon premier SaaS mis en ligne, développé et exploité de bout en bout : produit, design, code, base de données, paiement, hébergement et exploitation.

Ce qui est en ligne

  • Redirection dynamique : changement de cible instantané, sans réimpression
  • Personnalisation du rendu : couleurs, formes des modules, logo central, brand kit réutilisable, aperçu en temps réel
  • Export PNG, SVG et PDF prêt à imprimer
  • Analytics de scans : volume, appareil, pays, dernier scan, log non bloquant
  • Redirection conditionnelle et pages multi-liens (/p/<slug>)
  • Comptes et facturation : authentification Supabase, abonnements Stripe avec webhooks
  • Anti-abus : vérification des URL cibles via Safe Browsing, signalement, coupure d'un QR abusif en une commande

Architecture

QR imprimé ──> /r/<slug> ──> Route Handler ──> 302 ──> URL cible
                                  │
                                  └─ log du scan en asynchrone

Le log de scan passe par after() : il ne rallonge jamais la redirection. Le cloisonnement des données se fait à la fois en code et par les politiques RLS de Postgres.

Stack technique

Couche Technologie
Front + API Next.js 16 (App Router), TypeScript
Base de données Postgres via Drizzle ORM, migrations versionnées
Auth & stockage Supabase
Paiement Stripe (abonnements + webhooks)
Rendu QR qr-code-styling
Styles Tailwind CSS 4

Ce que j'en retiens

Livrer un SaaS, ce n'est pas livrer une application. La partie visible a été la plus courte : ce qui prend le temps, c'est la facturation, les pages légales, la procédure quand un QR sert à du phishing, la purge des données, la reprise d'un webhook manqué. J'ai écrit le manuel d'exploitation en même temps que le code, et c'est ce document qui a le plus servi.

Expérience : Code Spot - micro-entreprise