Retour au portfolio
Prizely — SaaS de Génération de Leads Ludifié Multi-Tenant

Prizely — SaaS de Génération de Leads Ludifié Multi-Tenant

Nous avons conçu et développé Prizely, une plateforme SaaS multi-tenant en Laravel 12 qui transforme la collecte de leads en une expérience de jeu personnalisée. Les commerçants s'inscrivent, créent une ou plusieurs marques (chacune avec son propre slug, palette 2 couleurs, logo et jusqu'à 8 récompenses avec images), configurent les pourcentages de gain par récompense et activent les jeux Roue de la Fortune ou Jeu à Gratter. Chaque marque vit à une URL propre /{brand-slug} avec son identité visuelle — le joueur ne voit que cette marque. Avant de jouer, les leads remplissent un formulaire avec nom, email et téléphone (cases de consentement RGPD configurables par marque) ; la détection de doublons par email+téléphone empêche les abus. Les gagnants reçoivent un email de récompense automatisé avec codes d'échange optionnels. Les packs de crédits sont achetés via Stripe Checkout (facturation mesurée par partie), avec une page d'historique de facturation en libre-service. Le tableau de bord administrateur affiche des graphiques de parties par jour, les statistiques de distribution des récompenses, les taux de conversion et un tableau de leads filtrable et exportable (.xlsx). Un mode test bac à sable permet aux propriétaires de prévisualiser les jeux sans consommer de crédits ni enregistrer de leads. Pour les événements en personne, le mode borne verrouille l'appareil sur une marque avec un flux de déverrouillage réservé au propriétaire. La plateforme est bilingue (grec/anglais), conforme WCAG 2.2 AA, et inclut des animations GSAP au défilement, un SEO avec JSON-LD, des alternates hreflang par page et un fichier llms.txt pour la visibilité des crawlers IA.

Technologies

Laravel 12 PHP 8.5 Tailwind CSS GSAP Stripe MySQL Multilingual (el/en) JSON-LD / SEO WCAG 2.2 AA Responsive Design Kiosk Mode Email Automation

Défis

Concevoir une architecture multi-tenant où chaque marque conserve sa propre identité visuelle (couleurs, logo, récompenses) au sein d'une seule installation Laravel, construire deux moteurs de jeu distincts (roue vs. grattage) partageant un pipeline commun de jeu/récompense, et implémenter une facturation Stripe mesurée qui déduit les crédits par partie sans latence perceptible pour le joueur.

Solutions

Utilisé le routage tenant-agnostique de Laravel avec wildcards {brand} et des gates de propriété basés sur les policies — une seule base de code, des vitrines de marque infinies. Chaque jeu a été construit comme un composant Blade/Alpine autonome alimentant un PlayController partagé qui valide les crédits, prévient les doublons, résout les récompenses via sélection aléatoire pondérée et envoie des emails de confirmation en file d'attente. Les sessions Stripe Checkout transportent des métadonnées (pack_id, brand_id, user_id) traitées par webhook ; une colonne de cache de solde de crédits évite les écritures DB par partie. Le mode borne utilise un flag de session + flux de déverrouillage par PIN avec tentatives limitées. Le tableau de bord administrateur utilise Chart.js pour la distribution des parties/récompenses et une table de leads filtrable basée sur DataTables avec export .xlsx.