# Tuniloc

> A Tunisian rental marketplace that connects property owners with people looking for a place to stay. Discovery, reservation requests, availability and dashboards in one platform.

- By: Yassine Charcheri, full-stack developer (https://yassinecharcheri.dev/)
- Status: In progress — Preview — in development
- Role: Work with teammates: product design and full-stack development.
- Type: Full-stack
- Stack: React, Laravel, MySQL, Docker, REST API
- Case study page: https://yassinecharcheri.dev/projects/tuniloc

## Case study

- Summary: A Tunisian rental marketplace that connects property owners with people looking for a place to stay. Discovery, reservation requests, availability and dashboards in one platform.
- The problem: In Tunisia, rentals (summer stays, student housing, long-term) are mostly found through Facebook groups, word of mouth and phone calls.
- For: Renters (families, students, visitors) and property owners.
- Pain points:
  - Listings are scattered across social media, with no structured search by city, price or dates.
  - Availability is unreliable: renters call only to learn the place is already taken.
  - Owners handle every request by phone and messages, by hand.
  - There is little trust: information, photos and prices are inconsistent.
- What I built:
  - Search & discovery: Filter properties by location, price and type, with geolocation on a map.
  - Reservation requests: Renters send a request for specific dates; owners accept or decline.
  - Availability workflow: Booked dates are blocked automatically, so there are no double bookings.
  - Owner dashboard: Manage listings, incoming requests and the calendar in one place.
  - Renter dashboard: Follow the status of every request.
- Stack and why:
  - React: The product is a search-heavy interface (filters, map, listing cards) that has to update instantly without page reloads. React's component model and ecosystem (maps, date pickers) fit that perfectly.
  - Laravel: The fastest way to build a secure REST API, with authentication, validation and clean data relations (users ↔ properties ↔ reservations) built in. That leaves the time for business rules.
  - MySQL: Reservations are relational data where integrity matters. Transactions and constraints make sure two bookings can never overlap.
  - Docker: PHP, MySQL and Node run in identical containers on every machine, so the project starts with one command and behaves the same in development and deployment.
  - REST API: Front end and back end are decoupled, so the same API can later power a mobile app.
- Challenges:
  - Preventing double bookings: Availability checks and reservation creation must be atomic, so two renters can't book the same dates at the same moment.
  - Two products in one: Owners and renters need different dashboards and permissions on top of the same data.
- Learnings:
  - Model the data first: a clean reservation model made every feature simpler.
  - Design the API contract before the screens, so front end and back end can move in parallel.
- Screens:
  - Tuniloc landing page: “Find your place anytime, anywhere”
  - Tuniloc listings: a search bar for destination, dates and guests above a grid of rentals with photos and prices in dinars
  - “Ready-to-Book Stays”: three featured rentals with photos and prices
  - “Confiance vérifiée” section: three illustrated trust badges
  - Tuniloc sign-in page: email and password form next to a photo of a hand holding keys
- Demo video: https://yassinecharcheri.dev/projects/tuniloc/tuniloc.mp4 (Tuniloc website on a laptop: the landing page, the trust section and a property page)

## Contact

- Email: yassine.charcheri@gmail.com
- Contact form: https://yassinecharcheri.dev/#contact
