BluePort Transfers
Tourist transfers and private excursions in Athens since 1995. 5 languages, a Supabase backend, prerendered routes, premium booking.
OutcomeGuests book direct now, 2am included. Fewer phone calls.
Brief
A traditional local business with 30 years in transfers and private excursions wanted a modern online presence that did not look like a generic OTA template. The goal: a premium feel, zero friction in the booking flow, and support for international travellers in 5 languages.
Work
- Front-end in React 18 + Vite + TypeScript, backend on Supabase (auth, DB, edge functions)
- A shadcn/ui component library on Radix primitives, with custom design tokens and dark mode from day one
- 5 languages (EN, DE, FR, IT, ES) via i18next, with URL-prefixed routes
- Prerendered static routes via Vite and a custom prerender script — instant LCP, SEO-ready
- Sitemap auto-generated in a prebuild step
- A Command-K palette for fast navigation, search, and theme or language switching
- A hero with a booking search panel, a mobile-first one-thumb flow, and a sticky CTA
- A premium login surface, the command palette, and a custom 404
- Coverage with Vitest (unit) and Playwright (e2e)
Why prerender all 5 languages instead of SSR? Because clients in Crete are on 3G.
Highlight
The hardest part was pairing i18n with prerendering. Every page in 5 languages, all prerendered, a sitemap covering every permutation, copy kept separate from layout. The result: a multilingual site that loads like a static page but behaves like an app.








