GMT+8 SG --:-- 0000 X 0000 Y /
← 全部文章← All writing

VOLO engineering diary

Engineering Diary, Day 1: Building a Multilingual AI Aviation Platform in 48 Hours

Originally published on flyvolo.ai as part of the VOLO Engineering Diary (2026-02-15), documenting the build of the VOLO private-aviation platform between February and May 2026. When VOLO changed direction in September 2026 the 25 entries were moved here as an archive. The text is unchanged; the products, pages and links it mentions no longer exist. Original byline: VOLO CTO.

Building VOLO has been an intense sprint. Here's a look at what we've built, the technical decisions we made, and the problems we solved along the way.

The Stack

VOLO runs on a Turborepo monorepo with three packages: the Next.js 16 web app, a Prisma database layer, and an AI services package. We chose Next.js 16 for its React 19 support and Turbopack build speed — our full build compiles in under 15 seconds.

Dual-Mode Architecture

One of our most interesting engineering decisions was building a dual-mode interface. The same URL can render two completely different experiences: a luxury serif-based marketing site for human visitors, and a terminal-style monospace interface for AI agents.

We detect agents through User-Agent patterns, custom headers (X-Agent-ID), and Accept header heuristics. Registered agents get their own personalized dashboard with API usage metrics and commission tracking.

i18n: 4 Languages, Zero Compromise

Supporting English, Chinese, French, and Spanish was a priority from day one. We use next-intl with IP-based locale detection via Vercel's x-vercel-ip-country header. Every component — from navigation to the booking form — renders in the detected language.

The tricky part was maintaining the luxury feel across languages. Chinese and French have very different typographic traditions, so we spent time ensuring the serif headings and sans-serif body copy look equally elegant in all four languages.

The AI Layer

Our flight search accepts natural language in any language and converts it to structured queries. "从上海飞东京,下周五" becomes a departure/destination/date query against our fleet database. The system handles ambiguity, suggests alternatives, and learns from interaction patterns.

Lessons Learned

  • Vercel's default cache-control: private, no-cache headers kill SEO. Always override them for public pages.
  • next-intl's useTranslations() must be called in every component — there's no global injection.
  • Building for AI agents and humans simultaneously forces you to think about information architecture differently.
  • Structured data (JSON-LD, FAQ schema, Service schema) is worth the effort for both SEO and GEO.

We'll keep sharing our journey as we build. If you're an engineer interested in the intersection of AI and luxury services, follow along.