The problem
A travel agency isn't one app — it's two audiences and a full commerce stack between them. Customers need to discover packages, book for multiple travelers, pay, and manage their documents. The business needs to manage packages, schedules, flights, orders, payments, and promotions, and verify travel documents. The real challenge was shipping both sides as one coherent, type-safe system rather than a pile of disconnected tools.
What I built
A server-rendered consumer app (React Router 7 SSR) to browse, search, filter, and sort packages; day-by-day itineraries and inclusions; and a multi-traveler booking flow with real validation — passport / KTP numbers, age checks against hotel rules, and per-passenger visa logic.
A dual payment gateway (Midtrans + Doku) with full or down-payment options (percentage or fixed), payment countdowns, manual bank-transfer instructions across multiple accounts, and a visual paid / remaining schedule on every order. Unified order management for customers and admins.
Secure travel-document upload with an admin verification queue (approve or reject with a reason), plus email and SMS/WhatsApp notifications and scheduled reminders for trips and document expiry.
A TanStack Table/Query admin for packages, schedules, flight-vendor master data, promotions and coupons, categories, advertising banners, transaction reports, SEO metadata, and system settings — the surface that actually runs the agency.
How it ships
The API deploys to Fly.io in Singapore with health checks and autoscale-to-zero; the SSR frontend ships to Vercel, with assets on Cloudflare R2 and DNS on Cloudflare. Secrets are managed with Infisical, GitHub Actions handles per-branch deploys, and end-to-end coverage runs on Playwright with playwright-bdd against real, running services rather than mocks.
What's been done
The MVP shipped in phases, each tracked to completion: foundation and core infrastructure (auth, package display, admin CRUD), then the order flow and payment integration, then documents and notifications, then the admin panel and CMS, then deployment. All five are at 100%.
ClicknGo is now in pre-launch — wrapping up a round of customer feedback before going live, with a Q3 2026 phase of promotion and operational improvements already underway. Real usage metrics will follow once it's launched.