En cours
TuniLoc
Plateforme de location de biens et de services, pour clients, partenaires et administrateurs.

- Rôle
- Full-stack · infra et qualité
- Équipe
- Équipe de 2avec Yassine Charcheri
- Technologies
- 26 technologies
Le projet
TuniLoc est une plateforme full-stack de location de biens et de services, réalisée avec Laravel et React par Majd Ben Slimene et Yassine Charcheri, en équipe de deux et en vue d'un vrai lancement. Elle sert trois types d'utilisateurs : clients, partenaires et administrateurs. Le front-end utilise React et Vite ; le back-end, Laravel avec MySQL, Redis et Laravel Horizon.
Problème résolu
En Tunisie, louer un bien passe souvent par un intermédiaire et se fait hors ligne. TuniLoc met directement en relation les locataires avec les propriétaires et les partenaires de services, avec des annonces, des réservations et une messagerie en ligne.
Mon rôle
- Full-stack, avec un accent sur l'infrastructure et la qualité
- Environnement Docker (PHP-FPM + Nginx)
- Redis pour le cache, les sessions et les files d'attente
- Tests de charge k6 avec authentification multi-utilisateurs
- CI sur GitHub Actions avec analyse de sécurité (Semgrep, Gitleaks, Trivy)
- Tests front-end (Vitest, React Testing Library, Playwright)
- Pages d'interface (réinitialisation du mot de passe, contact)
Fonctionnalités clés
Trois rôles (client, partenaire, administrateur) avec accès par rôle
Annonces de biens et de services
Réservations et favoris
Messagerie et notifications
Demandes de partenariat et vérification KYC
Connexion avec Google ou Facebook, réinitialisation du mot de passe
Difficultés
Tests de charge avec un jeton partagé
Pendant les tests de charge, les utilisateurs virtuels k6 partageaient le même jeton d'authentification.
Solution
J'ai isolé un jeton par utilisateur et étiqueté chaque requête pour lire correctement les résultats.
Doubles réservations
Solution
Pour éviter les doubles réservations quand deux utilisateurs réservent en même temps, la création d'une réservation s'exécute dans une transaction de base de données avec verrouillage de ligne.
Envois de fichiers sûrs
Solution
Les fichiers envoyés sont analysés par un antivirus avant d'arriver sur Cloudinary, et les documents KYC restent privés, accessibles uniquement par des URL signées.
Ce que j'ai appris
- Conteneuriser une stack Laravel + React avec Docker
- Gérer les médias avec Cloudinary : images publiques et documents privés derrière des URL signées
- Concevoir le cache et les files d'attente avec Redis
- Tester la charge d'une API authentifiée avec k6
- Ajouter l'analyse de sécurité et des tests automatisés à un pipeline CI






