In progress

TuniLoc

Rental platform for properties and services, with clients, partners and administrators.

Screenshot of the TuniLoc home page
Role
Full-stack · infra & quality
Team
Team of 2with Yassine Charcheri
Tech stack
26 technologies

What it is

TuniLoc is a full-stack rental platform for properties and services, built with Laravel and React by Majd Ben Slimene and Yassine Charcheri, as a team project with a planned real launch. It serves three kinds of users: clients, partners and administrators. The front end uses React and Vite; the back end uses Laravel with MySQL, Redis and Laravel Horizon.

Problem solved

Renting a property in Tunisia often goes through an intermediary and happens offline. TuniLoc connects renters directly with property owners and service partners, with online listings, reservations and messaging.

My role

  • Full-stack, with a focus on infrastructure and quality
  • Docker environment (PHP-FPM + Nginx)
  • Redis for cache, sessions and queues
  • k6 load tests with multi-user authentication
  • CI on GitHub Actions with security scanning (Semgrep, Gitleaks, Trivy)
  • Front-end tests (Vitest, React Testing Library, Playwright)
  • UI pages (password reset, contact)

Key features

  • Three roles (client, partner, administrator) with role-based access

  • Property and service listings

  • Reservations and favourites

  • Messaging and notifications

  • Partnership requests and KYC verification

  • Sign-in with Google or Facebook, password reset

Challenges

  1. Load tests with shared tokens

    During load testing, k6 virtual users were sharing the same authentication token.

    Solution

    I isolated one token per user and tagged each request to read the results correctly.

  2. Double bookings

    Solution

    To prevent double bookings when two users reserve at the same time, reservation creation runs inside a database transaction with row locking.

  3. Safe uploads

    Solution

    Uploaded files are scanned by an antivirus before reaching Cloudinary, and KYC documents stay private, accessible only through signed URLs.

What I learned

  • Containerising a Laravel + React stack with Docker
  • Managing media with Cloudinary: public images vs private documents behind signed URLs
  • Caching and queue design with Redis
  • Load testing an authenticated API with k6
  • Adding security scanning and automated tests to a CI pipeline

Screenshots

1 / 7

  • TuniLoc home page: a house photo under the headline “Find your place Anytime, anywhere”
  • TuniLoc “Ready-to-Book Stays”: three listings with photo, location and price per night
  • TuniLoc “Confiance vérifiée” section: verified client, two-sided confirmation, verified partner
  • TuniLoc sign-in page: email and password, or social sign-in
  • TuniLoc client area: villa, apartment and house listings with prices and type filters
  • TuniLoc listing page: description, host and a booking card with date, duration and total
  • TuniLoc admin dashboard: listings, clients, partners, bookings and charts
Back to the doors