03/Travel and booking
GoPaddi

Problem
Travel booking is a coordination problem: inventory, payments, reservations, and people in motion. The system has to stay transactional when the interface feels immediate.
What I owned
- REST and GraphQL APIs for flights, hotels, restaurants, experiences
- SQL transactional booking models
- WebSocket-driven in-app communication
- Real-time audio and video
- LLM-powered search
- OAuth / JWT across booking flows
Engineering challenge
Keep booking, payments, and live communication consistent across web and mobile without letting realtime features weaken transactional guarantees.
Architecture
How the system connects.
01 →
Clients
Web · React Native
02 →
API layer
REST · GraphQL · NestJS
03
Booking
SQL transactions · payments
04
Realtime
WebSockets · A/V
05
Search
LLM-assisted retrieval
06 →
Auth
OAuth · JWT
Context
GoPaddi is Voyatek’s production travel platform. The same engineering period also covered DiscovaTrips, a membership travel product. Both needed APIs that could hold booking state and still feel live.
What I owned
I designed and consumed APIs covering flights, hotels, restaurants, and experiences. Booking sits on SQL transactional models. In-app communication and audio/video run over WebSockets. Search is LLM-assisted. Auth is OAuth / JWT.
Why it matters
This is the kind of system that fails quietly: a reservation that is not a transaction, a chat that is not tied to a booking, a search that cannot be trusted. The work was to keep those surfaces honest.
Outcome
A production booking system where search, reservation, payment, and in-app communication share one API and identity model - used across GoPaddi and the wider Voyatek travel stack.
- Booking surfaces
- Flights · Hotels
- WebSocket comms
- Realtime
- Search
- LLM
Technology
React · Next.js · React Native · Node.js · NestJS · GraphQL · REST · PostgreSQL · WebSockets