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




