Nocly.fr
Retour aux projets

Tessera — QR codes dynamiques privacy-first

Rediriger un QR après impression, mesurer sans pister, et tout self-héberger

Client
Open-source
Période
2026
Stack technique
Symfony 7API Platform 4AngularPostgreSQLRedisDocker

Contexte

Un QR code imprimé est figé à vie — sauf s'il est dynamique. Tessera fait passer chaque code par un lien court que l'on contrôle, pour changer la destination à tout moment sans réimprimer. Le projet est pensé dès le départ comme open-source, self-hostable et respectueux de la vie privée.

Le défi

Offrir des redirections dynamiques à faible latence et des analytics réellement utiles, sans jamais trahir la promesse de confidentialité ni enfermer l'utilisateur : ses codes doivent continuer à fonctionner même s'il quitte le service, et ses scans ne doivent laisser aucune trace identifiante.

Avant

Les solutions de QR dynamiques du marché enferment l'utilisateur : si l'abonnement s'arrête, les codes pointent vers une page marketing (ou meurent), et chaque scan alimente un pisteur tiers.

Après

Des codes qui résolvent toujours vers un fallback choisi par leur propriétaire, des analytics au pays sans aucun stockage d'IP, et une stack entièrement self-hostable sous licence MIT.

L'approche

Backend Symfony 7 / API Platform 4, mais l'endpoint de redirection est un contrôleur nu (hors API Platform) pour la latence, adossé à un cache de slug Redis. Les redirections sont toujours en 302 — la destination est mutable, un 301 mis en cache casserait le produit. Le logging des scans est asynchrone via Symfony Messenger pour ne jamais bloquer la redirection. La géolocalisation se limite au pays via une base GeoLite2 locale : l'IP sert à dériver le pays puis est jetée, jamais stockée. Front Angular avec i18n à l'exécution (5 langues : EN/FR/ES/IT/DE) via Transloco. Déploiement en une seule commande Docker Compose.

Aperçus

Dashboard de compte avec la liste des codes et leurs analytics
Détail d'un code : scans dans le temps, pays, device, referrer
Générateur et export du QR (PNG / SVG)

Résultats

Version 1.0.0 livrée et fonctionnelle de bout en bout, self-hostable en une commande, avec une démo guidée publique (données isolées par session). Projet open-source structuré comme un vrai produit communautaire : licence MIT, intégration continue et analyse CodeQL, guide de contribution et politique de sécurité. La couche de facturation (domaine personnalisé, branding, équipes) est conçue mais désactivée derrière un flag — le self-host reste l'offre gratuite.

Chiffres clés

5
langues d'interface, switchables à chaud
302
redirections toujours mutables, jamais 301
0
adresse IP stockée
MIT
licence open-source
Open-sourcePrivacy-firstSelf-host