← Back to work
/ work

Costa Wave Web

Year 2024–heden
Role Owner / developer
Next.jsSanityTypeScriptnext-intl
View live project →
Costa Wave Web

My own web design agency on the Costa Blanca, for expats and Dutch businesses active in Spain. CWW runs on Next.js 16 and Sanity v5. For clients I also build with Astro.js: static, deployable on any hosting provider, with the client owning the code.

I build websites for clients, but my own site had to be properly built too. Two audiences: expats and businesses on the Costa Blanca, and Dutch companies with activities in or around Spain. They search in different languages, on different terms.

The site needed to handle that. Two languages, two URL structures, two sets of SEO signals, all from one system. And I needed to maintain it myself once it was live: new blog post, updated service page, redirect after renaming something. All without touching code.

This is also an ongoing project alongside my freelance work. I build and improve the site continuously, using it as a testing ground for techniques I later apply to client projects.

Next.js 16 App Router with React 19 and TypeScript 6. Sanity v5 as the CMS, with over 50 block types in Studio: heroes, CTAs, testimonials, service sections, FAQ blocks, forms. Every page is assembled from blocks; I edit content in Studio with no code changes needed.

Next-intl handles multilingual routing. Dutch lives at /nl/ with Dutch slugs (/nl/over, /nl/diensten). English lives at /en/ with English slugs (/en/about, /en/services). Slugs are auto-generated from the translated page title in Sanity.

Every page automatically gets a canonical URL, hreflang alternates, Open Graph tags and robots settings from Sanity. Schema.org is automated at page level: a FAQ block generates FAQPage schema, the about page gets Person schema, service pages get ServiceSchema, blog posts get BlogPosting schema.

Redirects are managed from Sanity Studio without any code change. IndexNow notifies search engines immediately when content is published. Analytics (GTM and GA) only load in production. Newsletter subscriptions go to Supabase via Resend. Forms are protected with reCAPTCHA v3 and a custom spam filter.

For clients who want to host their own site or own the code outright, I build with Astro.js instead. Astro generates static HTML that runs on any hosting provider, including shared hosting, without needing Node.js. I've built a dedicated Astro starter on the same Sanity foundation for exactly this use case.

The site pulls organic traffic from both the Netherlands and Spain. Dutch people searching for 'website Costa Blanca' land on the right page. Expats searching in English do too.

Blog posts, pages, redirects: all managed via Studio. No deployment needed for content changes.

The site is a demonstration of how I work. Prospective clients can see the architecture behind the result.