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

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






