Estepona Golf: a trilingual course website with a real handicap calculator
A new website for an 18-hole course on the Costa del Sol, built from scratch in Spanish, English and French, with its own Supabase backend, a news manager the club controls and a WHS course handicap calculator fed with official federation data.

- 536/536
- translation keys present in each of the three languages
- 251 KB
- hero image weight, down from 1.3 MB
- 3
- languages with their own URLs, slugs, hreflang and sitemap
- 18
- holes described by the club, on a scorecard with 4 tees
- 0
- TypeScript errors after two adversarial audit rounds
- ~10 USD
- monthly cost of the club's own backend on Supabase
The problem
Estepona Golf sells tee times, events and a restaurant to players who arrive from Spain, the United Kingdom and France. Its old site ran on Azure Static Web Apps, without a content manager for news, without lead capture and without separate URLs per language, so search engines and AI assistants saw one site where three were needed. The course itself, the 18-holes, the seasonal rates and the official slope ratings, lived in PDFs and printed cards that nobody could read before travelling.
What we built
Polargate built a new trilingual site from scratch on its canonical stack: Vite, React, TypeScript and Tailwind with shadcn/ui on the front, an own Supabase project (Postgres, Auth, Storage and row level security) as backend, and Vercel with GitHub deploys on merge. Each language has its own routes and slugs, hreflang, canonical, og:locale and sitemap. The club got an admin panel with roles and a news manager, lead capture forms, an interactive 18-hole scorecard with four tees and a WHS course handicap calculator built on official RFEG data.
The outcome
The build ships with 536 of 536 translation keys in each of the three languages, a hero image cut from 1.3 MB to 251 KB, and zero TypeScript errors after two adversarial audit passes in which 63 findings were reviewed and the 7 confirmed ones fixed. The backend belongs to the club and costs about 10 dollars a month on Supabase. The site runs on Vercel while the domain move is prepared, so Polargate publishes no traffic or booking figures for it yet.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- Supabase
- PostgreSQL
- Vercel
- GitHub
- Google Maps
A course that sells in three languages
Estepona Golf is an 18-hole course on the Costa del Sol, with a clubhouse, a restaurant, a pro shop and an events business. Its players arrive from Spain, the United Kingdom and France, and they decide before they travel. The previous site ran on Azure Static Web Apps, with no content manager for news and no lead capture.
What we found
- No URLs of its own per language, so search engines and assistants saw one site where three were needed.
- Content the club did not control: the course, the holes, the rates and the menu lived in PDFs and on paper.
- Heavy imagery: the hero alone weighed 1.3 MB before anything else loaded.
- Scorecard and official slope ratings on paper only, so a player could not work out a course handicap before booking.
What we built
A new site from scratch in Spanish, English and French: home, the course, hole by hole, rates with a season toggle, the clubhouse hub, shop, restaurant with a 130 dish menu, events, news, contact and legal pages. Stack: Vite, React and TypeScript, Tailwind with shadcn/ui, an own Supabase project (Postgres, Auth, Storage and row level security) as backend, and Vercel with GitHub deploys on merge.
Three pieces mattered more than the rest:
- Localised routes and slugs per language (el-campo, the-course, le-parcours) with hreflang including x-default, per locale canonical and og:locale, and JSON-LD carrying the club's real opening hours and phone number.
- A WHS course handicap calculator using the official RFEG slope and course rating data for the rated tee sets, with WHS rounding, the Spanish decimal comma, plus handicaps, error states and results announced through aria-live.
- An admin panel with Supabase Auth, admin and editor roles and a news manager, so the club publishes without us.
How it runs now
Translations are complete, 536 of 536 keys in each language, so no page falls back to Spanish halfway down. The hero weighs 251 KB instead of 1.3 MB. Before merging the last batch of client material we ran two adversarial audit passes: 37 findings, then 26, of which 7 survived scrutiny and were fixed, ending with zero TypeScript errors and a green production build.
The backend is the club's own Supabase project in eu-west-1, at about 10 dollars a month, with news, leads and roles behind row level security: the public reads published news only, staff write, and contact and event forms accept anonymous inserts that only admins can read. The site is built and running on Vercel while the domain move is prepared, and we mapped the DNS zone first so the cutover leaves the club's existing mail untouched. Once it is live, Polargate keeps it under a monthly Care retainer.
Questions about this project
How long does a trilingual website like this take to build?
Can you do this with our existing booking engine?
Who updates the news and content after launch?
Is the French version a real site or an automatic translation?
What does a site like this cost to run once it is live?
Start the engine
Tell us what you are building in a few short questions. A senior engineer answers in writing within 48 business hours, with a first take on scope, timeline and price.