En cours

TuniLoc

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

Capture d'écran de la page d'accueil de TuniLoc
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

  1. 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.

  2. 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.

  3. 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

Captures

1 / 7

  • Page d'accueil de TuniLoc : la photo d'une maison sous le titre « Find your place Anytime, anywhere »
  • « Ready-to-Book Stays » de TuniLoc : trois annonces avec photo, lieu et prix par nuit
  • Section « Confiance vérifiée » de TuniLoc : client vérifié, confirmation bilatérale, partenaire vérifié
  • Page de connexion de TuniLoc : e-mail et mot de passe, ou connexion par réseau social
  • Espace client de TuniLoc : annonces de villas, appartements et maisons avec prix et filtres par type
  • Page d'une annonce TuniLoc : description, hôte et carte de réservation avec date, durée et total
  • Tableau de bord administrateur de TuniLoc : annonces, clients, partenaires, réservations et graphiques
Retour aux portes