BluePort Transfers

blueport.com
BluePort hero
Year
2026
Client
BluePort Transfers · Athens · est. 1995
Role
Web Design · Front-end · i18n
Sector
Travel
Stack
React 18 · Vite · TypeScript · shadcn/ui · Tailwind · Supabase · i18next
Status
Live

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.

note from a 2026 standup

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.

[ 05 / let’s talk ]

got something
to build?

hello@athan.design
Next project →

TenderCopilot

TenderCopilot · Greek public-sector tenders
View case study →