Logo
Live
2025Tourism · PWA

Egypt Tour Guide

Bilingual PWA tourism platform. Next.js 15 App Router, Node.js REST API, Redis caching, GSAP animations, i18next. LCP under 2s. Lighthouse 100% SEO, 98% Accessibility.

Next.js 15TypeScriptExpressPostgreSQLDrizzle ORMRedisGSAPi18next

Screens

Egypt Tour Guide screenshot 1
Egypt Tour Guide screenshot 2
Egypt Tour Guide screenshot 3
Egypt Tour Guide screenshot 4

The Business Problem

ET GCO Tours needed a bilingual (DE/EN) tourism booking platform that could compete on organic search, load instantly on mobile, and replace manual phone/email booking coordination with a structured, trackable workflow — without sacrificing design polish.

My Responsibilities

Sole full-stack developer: architected and built both the Next.js frontend and the Express/PostgreSQL API from scratch, owned the database schema, caching strategy, i18n, and the production deployment end-to-end.

Main Workflows

  1. 1Visitor browses destinations and tours, reads details, pricing, and reviews
  2. 2Visitor submits a booking request — a unique booking code is generated and inventory is updated in real time — or submits a contact form
  3. 3Backend validates and stores the request, then serves cached responses for repeated public reads (5–10 min TTL) to keep the catalog fast under load
  4. 4SSR/SSG renders content-heavy pages for SEO while TanStack Query keeps the client in sync without excessive refetching

Tech Stack & Architecture

System Architecture

Click the diagram to open it full size

Decoupled Next.js 15 frontend and Express/TypeScript API, connected over a typed REST layer
PostgreSQL + Drizzle ORM as the canonical data store (tours, destinations, categories, reviews, bookings), with Redis in front of hot read paths
Layered backend — routes → services → models — with a singleton Redis client and centralized env config; no formal DI container, kept intentionally lightweight
PWA layer (next-pwa) plus TanStack Query on the client for offline-friendly, low-refetch browsing

Security & Deployment

Helmet, CORS allowlisting, express-rate-limit, and request sanitization on every API route
Reverse-proxy-ready with SSL termination, static asset caching, and abuse protection at the edge
Deployed front-end on Vercel, back-end on a DigitalOcean Droplet (migrated off Oracle Cloud) with custom domains and strict SSL/TLS

Results

Lighthouse scores of 100% SEO / 81% Performance / 98% Accessibility, with LCP held under 2.5s.