← Selected work
Case study · Travel & ticketing

A travel & ticketing platform built as a Turborepo monorepo

ClicknGo (Liburans) is a B2C travel platform for Indonesian travelers to discover, book, and manage pre-built tour packages — paired with an admin backoffice that runs the operation behind it. I built it end to end as a Turborepo monorepo.

Role
Engineering
Timeline
Jan 2026 – present · phased MVP
Stack
TypeScript · NestJS · React Router 7 · PostgreSQL · Turborepo
Status
Pre-launch
cover — ClicknGo platform

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.

i
Target market: Indonesian travelers (domestic and outbound), priced in IDR, with Bahasa Indonesia as the primary language. Pre-built fixed packages, commission-based revenue.

What I built

01Package discovery & booking

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.

02Payments & orders

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.

03Documents & notifications

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.

04An admin backoffice & CMS

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.

i
Underneath: a Turborepo monorepo — a NestJS API on Prisma over Supabase Postgres, the React Router 7 SSR consumer app, the backoffice, and a shared design system. A 70% coverage gate, a consistent { data, error } service pattern, and one-command local startup via Docker.
screenshot — booking flow

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.

Have something like this?

I'm open for projects from July 2026, two slots. Tell me what you're trying to build and I'll reply within two working days.

Start a project →