← All projects

Software engineering capstone project

GlobalTrotter

A full-stack travel and itinerary planner with interactive maps, real-time chat, and a microservices backend.

Summary

GlobalTrotter helps travelers discover destinations, plan itineraries, and navigate with interactive maps, starting with a focus on Yaoundé, Cameroon. It began as a monolith and was fully decomposed into microservices behind an API gateway, then deployed to a production server with Docker, Nginx, and HTTPS. Development continued after deployment with social and real-time features.

Role

Sole developer: product design, frontend, backend, architecture, DevOps, and deployment.

Context

Software engineering capstone project.

Key features

  • Destination discovery with tag-based filtering
  • Itinerary creation and editing
  • Interactive maps with routing for walking, driving, motorbike, and bicycle
  • Custom starting point chosen by address search
  • Optional “nearby services” layer, off by default to control paid API usage
  • Real-time chat with voice notes and photo, video, and file attachments
  • Friends system with a request / accept flow
  • In-app notification system
  • Fully bilingual interface (English / French)
  • User accounts with JWT authentication, including admin users

Screenshots

Destination discovery with category and budget filters.
Destination page with tags, budget, opening hours, favourites, and “add to trip”.
Map view with the route to the next stop and the transport mode selector.
Itinerary list, including trips shared by other users.
Discussions: general, group, and private conversations.
Profile with the EN/FR switch, friends, favourites, and the admin dashboard entry.

Demo

Screen recording of the GlobalTrotter web app.

Architecture

  • Frontend: React single-page application.
  • Backend: five Flask services — api-gateway, user-service, itinerary-service, destination-service, chat-service.
  • The frontend sends HTTP requests through the API gateway, which routes them to the right service.
  • The chat service is exposed alongside the gateway (not behind it) so it can handle WebSocket connections directly.
  • Every service runs in its own Docker container, with separate docker-compose configs for development and production.
  • Nginx acts as reverse proxy with a Let's Encrypt TLS certificate on an Ubuntu VPS.
GlobalTrotter architecture: React SPA behind Nginx, routing HTTP through the API gateway to four Flask services, with WebSocket traffic going directly to the chat service. Docker containers (docker-compose: dev / prod) React SPA browser Nginx reverse proxy HTTPS · Let's Encrypt · Ubuntu VPS api-gateway Flask user-service JWT auth itinerary-service itineraries destination-service destinations chat-service Flask-SocketIO HTTP / WebSocket HTTP WebSocket (direct) External API: Geoapify — geocoding, routing, nearby places
Request flow: the React SPA reaches Nginx over HTTPS; REST traffic is routed by the API gateway to the user, itinerary, and destination services, while chat WebSocket connections reach the chat service directly.

Tech stack

Frontend

  • React 19
  • Vite
  • React Router
  • MapLibre GL
  • Jest
  • ESLint

Backend

  • Python
  • Flask
  • Flask-SocketIO
  • Flask-JWT-Extended

Maps & routing

  • Geoapify geocoding
  • Geoapify routing
  • Geoapify nearby places

Infrastructure

  • Docker
  • docker-compose
  • Nginx
  • Let's Encrypt / Certbot
  • Ubuntu VPS

Links