Rate Me met en relation, à Londres, des clients qui publient une demande de travaux avec des artisans situés dans leur rayon d'intervention. Les artisans candidatent en dépensant des crédits (8 crédits par offre, 3 offres maximum par demande). Le client compare les offres, discute avec chaque candidat dans un chat dédié, choisit son artisan puis laisse un avis.
Une seule API Laravel, protégée par Sanctum, sert à la fois la web app Vue.js et l'application mobile Flutter (iOS et Android). Les crédits s'achètent par Stripe sur le web et par achat intégré Apple / Google sur mobile, chaque achat étant vérifié côté serveur, avec remboursement automatique si la demande expire. Un back-office Filament gère les utilisateurs, la modération, le support et les remboursements. Tout le système fonctionne en anglais, français et russe.
De la problématique au résultat
1
Problématique
À Londres, trouver un artisan fiable et disponible près de chez soi prend du temps, et les artisans, eux, peinent à trouver des chantiers sérieux dans leur zone. Le client voulait une plateforme qui mette les deux en relation rapidement, avec des offres comparables et des avis vérifiés.
2
Solution
Une API Laravel unique sert la web app Vue.js et l'app Flutter. Un système de crédits contrôle les candidatures des experts et accepte trois moyens de paiement (Stripe, Apple, Google). Des tâches planifiées gèrent l'expiration des demandes avec remboursement des candidats, la purge des données expirées et l'anonymisation des comptes supprimés.
3
Résultats
Plus de 480 tests automatisés Pest, 99 routes d'API REST, 18 ressources et 8 widgets d'administration Filament, 3 langues (EN/FR/RU).
Fonctionnalités
01Publication de demandes de travaux avec photos, métier, ville et adresse géolocalisée
02Les experts voient seulement les demandes situées dans leur rayon d'intervention (calcul de distance haversine)
03Candidature par crédits : 8 crédits par offre, 3 offres maximum par demande
04Le client compare les offres reçues et choisit son expert
05Achat de crédits par Stripe Checkout (web) et achats intégrés Apple / Google (mobile)
06Gestion des remboursements, litiges Stripe et demandes de remboursement validées par l'admin
07Chat client / expert par demande, avec compteur de messages non lus
08Annuaire d'experts avec recherche, fiche détaillée, portfolio photo et avis
09Notifications push FCM et notifications in-app traduites en anglais, français et russe
10Connexion par email avec code de vérification, Google et Apple
11Support intégré par sessions de chat avec l'équipe d'administration
12Export des données personnelles, suppression du compte et anonymisation automatique après 12 mois
Stack par couche
Frontend
Vue.js 3
Tailwind CSS 4
Pinia
Vue Router
vue-i18n
Vite
Blade
Mobile
Flutter
Dart
Provider
Dio
Secure Storage
Deep links
ARB i18n
Back-office
Filament 3
Backend
Laravel 12
PHP 8.2
Laravel Sanctum
Intervention Image
Pest
Base de données
MySQL
Services externes
Stripe
Apple In-App Purchase
Google Play Billing
Firebase Cloud Messaging
Firebase Crashlytics
Google Maps Places
Google Sign-In
Sign in with Apple
Cloudflare R2
Infrastructure
VPS
Queues
Scheduler
Laravel Reverb
Architecture technique
API REST protégée par jetons Sanctum, avec limitation de débit (auth, OTP, signalements, connexion sociale)
Couche de services métier (commandes, crédits, avis, notifications, IAP)
Paiements : Stripe Checkout + webhooks, vérification des reçus Apple (chaîne x5c, ES256) et Google, webhooks des stores
Files d'attente (driver database) pour les notifications push et admin
Tâches planifiées : expiration des demandes, purge, anonymisation des comptes
Stockage des images compatible S3 / R2, redimensionnées côté serveur