Skip to content
ZB
All projects

Mami Travel

Booking platform for a Tunisian travel agency

Catalog, dynamic pricing and bookings for transfers, excursions, tours and cruise port calls, sold through a public site in six languages.

Built at
MAMICAR
Role
Architect & lead developer
Period
2025 – Present
Status
In production · public
Visit site
Public site: search for tours, excursions and transfers

Context

Mami Travel sells very different products: airport transfers priced by distance, day trips priced by group size, multi-day tours with hotels, and shore excursions for cruise passengers. One NestJS API serves both the agents’ Angular back office and the public Next.js website, so a price is always computed by the same engine, whoever makes the booking.

What I built

  • Transfer pricing from real road distances (self-hosted OSRM routing), tiered per-km rates, empty-return surcharges and seasonal multipliers.
  • Group-size price ranges per age class for excursions, port calls and tours, with optional guide, lunch and entry-fee supplements.
  • Custom tour builder: customers assemble their own multi-day itinerary and hotels and get a live quote.
  • Every public booking is re-priced on the server; amounts sent by the browser are never trusted.
  • Public site in six languages and several currencies, with a sitemap and per-page SEO metadata.
  • Backend-for-frontend proxy keeps the internal API token out of the browser; short-lived access tokens with httpOnly refresh cookies.
  • PDF vouchers and itineraries, booking e-mails, online card payment integration (ClicToPay) and shareable payment links.

Screens

Back office: group-size price ranges per age class, departure point and option (demo data)
Back office: group-size price ranges per age class, departure point and option (demo data)
Custom tour builder with a live summary
Custom tour builder with a live summary
Back office dashboard: bookings by status and service (demo data)
Back office dashboard: bookings by status and service (demo data)
Transfer bookings managed by agents (demo data)
Transfer bookings managed by agents (demo data)
Port call page with the booking widget
Port call page with the booking widget