Skip to content
All projects

Egypt Tour Guide

Bilingual PWA tourism platform. Next.js 15 App Router, Node.js REST API, Redis caching, GSAP animations, i18next. LCP under 2.5s, Lighthouse SEO 100 and Accessibility 98. Online payment is being added to the booking flow.

Production · TypeScript · Tourism · PWA · 2025

Next.js 15, TypeScript, Express, PostgreSQL, Drizzle ORM, Redis, GSAP, i18next

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

The 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 role

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. Currently building online payment into the booking flow.

Main workflows

  1. 1.Visitor browses destinations and tours, reads details, pricing, and reviews
  2. 2.Visitor submits a booking request — a unique booking code is generated and inventory is updated in real time — or submits a contact form
  3. 3.Backend 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. 4.SSR/SSG renders content-heavy pages for SEO while TanStack Query keeps the client in sync without excessive refetching

Architecture

System Architecture

Select 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 and deployment

  • Helmet, CORS allowlisting, express-rate-limit, CSRF protection, SQL-injection prevention 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 SEO 100 and Accessibility 98, with LCP held under 2.5s using Redis caching, SSR/SSG and Gzip.

Performance

Lighthouse · egypt-tour-guide.com

Accessibility
98
SEO
100
Largest Contentful Paint
under 2.5 s

Achieved with Redis caching, SSR/SSG and Gzip.