---
title: "Estepona Golf: a trilingual course website · Polargate"
description: "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…"
url: https://polargate.ai/work/estepona-golf
locale: en
publisher: POLARGATE S.L.
---
Golf and leisure, Costa del Sol tourism

# 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.
[Visit the live site](https://estepona-golf.vercel.app)

estepona-golf.vercel.app

In short
Polargate rebuilt Estepona Golf, a golf club on the Costa del Sol, as a trilingual website in Spanish, English and French, each language with its own URLs, hreflang and structured data. The site runs on Vite, React and Supabase, with a news admin panel the club controls, an interactive 18-hole scorecard and a WHS course handicap calculator fed with official federation slope ratings.
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
[estepona-golf.vercel.app](https://estepona-golf.vercel.app)

## 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.

[Build →](https://polargate.ai/services/build) · [Care →](https://polargate.ai/services/care) · [Golf and leisure →](https://polargate.ai/for/leisure)

FAQ

## Questions about this project

How long does a trilingual website like this take to build? The first complete build of Estepona Golf was ready about six weeks after the brief: discovery in April 2026, build finished on 26 May 2026. The French version, the localised slugs and the move to our own Supabase and Vercel landed in June, and the club's own material, hole descriptions, official slope ratings and federation logos, arrived in later rounds over the summer. A site of this size is weeks, not months, once content is ready.
Can you do this with our existing booking engine? Yes, and we treat the booking engine as a fixed point rather than something to replace. At Estepona Golf the scope was the trilingual site, the news CMS, lead capture and the handicap calculator, so tee time booking was not part of it. When a club wants a deeper connection, Polargate links to the engine per language, keeps analytics across the handover and adds a database backed form for the groups and events the engine does not cover.
Who updates the news and content after launch? The club does. We built an admin panel with Supabase Auth, admin and editor roles and a news manager, so the team writes, edits and publishes posts with images without asking us. Row level security means the public reads published news only and just signed in staff can write. Structural work, new sections, a fourth language, new page types, is what the Care retainer covers.
Is the French version a real site or an automatic translation? It is a real site in each language. All 536 translation keys exist in Spanish, English and French, so nothing falls back mid page, and every language has its own slugs (el-campo, the-course, le-parcours), its own canonical URL, hreflang with x-default and its own entries in the sitemap. The 18-hole descriptions came from the club's own material in three languages, not from a machine pass over the Spanish.
What does a site like this cost to run once it is live? The platform cost is small: the club's own Supabase project (Postgres, Auth and Storage) runs at about 10 dollars a month, and hosting sits on Vercel. Everything belongs to the client, the repository, the database and the domain, so there is no lock-in to a page builder. Separate from that is Polargate's Care retainer for maintenance, security updates and evolution, quoted independently of the build.

INITIATE

## 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.
[Start your project](https://polargate.ai/start) · [Talk to us](https://polargate.ai/start#static-brief-heading)
