Multi-country intercity bus booking platform with Adyen payments across Europe.
- Role
- Senior Full Stack Engineer
- Timeline
- Nov 2024 to Mar 2026 · 16 months
The brief
Gipsyy sells intercity bus travel across Portugal, Spain and Italy, three markets with different languages, tax rules and payment habits, on top of a checkout that has to price and lock seats in real time. The brief was to rebuild the booking platform so it could scale to new countries without a rewrite each time: multi-leg itineraries, per-market payments, and a checkout fast enough that travelers don't abandon it, all while a small team kept shipping on web and mobile at once.
Architecture
I split the system by domain instead of by surface. A polyglot service layer (.NET 7 for the booking, inventory and pricing core, Ruby on Rails for supporting domains) sits behind one API contract, consumed by a Next.js web app and a React Native mobile app that share TypeScript types. Payments and confirmation are event-driven, so a slow payment provider never blocks the seat-locking path. On top sits an AI layer, RAG retrieval and LangGraph agents, that automates multilingual support and generates itinerary content.
System
- Domain-split microservices behind a gateway: the booking hot path (search, seat inventory, pricing) scales independently from the slower supporting services.
- Confirmation runs on events through RabbitMQ, so Adyen settlement is decoupled from seat-locking. Checkout stays responsive even when the payment provider is slow or retrying.
- Next.js web and React Native share one TypeScript contract. Booking models have a single source of truth, which kills a whole class of web/mobile integration bugs.
- RAG plus LangGraph agents (OpenAI and Claude, pgvector retrieval over routes and policies) handle multilingual support and itinerary generation without hand-writing copy for every market.
- Everything is code: Kubernetes on EKS, Terraform, and Ansible, wired through GitHub Actions for reproducible deploys across environments and markets.
What shipped
- Multi-leg journey search and a seat-selection checkout with Adyen, live across Portugal, Spain and Italy.
- Full internationalization across 6 languages, both interface and generated content.
- Web and mobile from one codebase: a Next.js app and a React Native app sharing types and API contracts.
- An AI support and content layer: RAG pipelines and LangGraph agents for internal workflows, plus LLM itinerary generation and summarization.
- CI/CD and infrastructure-as-code: Terraform-provisioned EKS with GitHub Actions pipelines.
Results & impact
- Rebuilt the seat-selection checkout and lifted conversion by 15%.
- Scaled from the launch markets to 6 countries and 210 routes with no platform rewrite.
- Agent automation cut internal support handling time by 80%.
- Brought checkout p95 latency under 400 ms, roughly half its previous time.
