Multi-country intercity bus booking platform with Adyen payments across Europe.
- Role
- Senior Full Stack Engineer
- Timeline
- Nov 2024 – 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 — 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 slower supporting services.
- Event-driven confirmation via RabbitMQ — Adyen settlement is decoupled from seat-locking, so checkout stays responsive and survives payment-provider latency and retries.
- One shared TypeScript contract across Next.js web and React Native — booking models have a single source of truth, killing a whole class of web/mobile integration bugs.
- RAG + LangGraph agents (OpenAI and Claude, pgvector retrieval over routes and policies) — multilingual support and itinerary generation without hand-writing copy per market.
- Everything as code — Kubernetes (EKS) + Terraform + Ansible with GitHub Actions — 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 — 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.
