Selected work

The Dune

Overview

The public site for a proposed ocean spa on the Jæren coast, built to persuade and to survive scrutiny.

Details

At a glance

Project type
Project-development site, two languages
My role
Set the content doctrine, designed the site, wrote and structured the content, and built and deployed it.
Category
Web experiences
Status
Live2026

What I did

  • Wrote the doctrine the whole site is held to, starting with never faking missing information
  • Designed the site and its status and citation system
  • Wrote and structured the content in Norwegian and English
  • Built the application, the audit tooling and the production deployment

Built with

  • TypeScript: Application and content code
  • Next.js: Application framework, with every route prerendered
  • Tailwind CSS: Interface styling
  • Vercel: Hosting and deployment from the main branch

Open thedune.no(opens in a new tab)Discuss a project like this

Next project

Boligplass
The Dune homepage: an aerial view at dusk of a low circular building set into coastal dunes beside a long Atlantic beach, with the headline "Stillness shaped by the Atlantic"

The need

The Dune is a proposed ocean spa, hotel and public landscape at Borestranda on the Jæren coast: around a hundred rooms, open all year, put forward as a new architectural landmark for the region.

It is not a hotel you can book. It is a proposal, and the site had to serve two audiences who want opposite things from the same page. Investors and the public want to feel the place. A municipal planner, a landowner and a county officer want to know exactly what has been approved, what has not, and who says so.

Decision

Never fake missing information

Context
A project at this stage has almost nothing settled. No land control, no municipal approval, no appointed architect, no completed feasibility study. The easy site implies all four and is quietly fatal: one planner who spots one invented figure stops taking the project seriously, permanently.
What I decided
Nothing that does not exist is shown as existing. Every future deliverable appears as a placeholder saying what it will be, why it matters and where it stands. Five status labels run across the whole site, every claim can be traced to a register of fifteen named sources, and the words are constrained: proposed, under study, working assumption, subject to. Never approved, secured, guaranteed or backed.
Trade-off
The site cannot make the confident claims a promotional site would make, and writing it took far longer than writing marketing copy. In exchange it can be sent to a municipality without being checked first, which is the only thing it actually needs to do.
The Dune project status page: the heading "Pre-feasibility and stakeholder preparation" above a paragraph stating the project has no confirmed land control, municipal approval, appointed architect or completed feasibility study, marked with an Under study label

Feeling the place

The other half of the job is persuasion. The site opens on the coast at dusk and moves the way an arrival does, from inland shelter out to the open Atlantic, because that movement is the architectural idea rather than a decorative sequence.

The rules hold inside the pictures too. West is always the sea. The roof is a constructed walkable landscape drawn below the crest of the natural ridge, never the protected dune itself. The beach stays public in every image and every line of copy. And each illustration carries its own caption saying it is an early concept, not a final design.

The Dune architecture page: bathers in a dark infinity pool under a wide circular roof opening onto the sunset horizon, headed "Enter. Open. Rise.", captioned as an early concept illustration and not a final design
How it works
  • Norwegian gets real Norwegian addresses, so the vision page is /no/visjon and not /no/vision. Rather than keeping two route trees in step, every page in both languages is served by one catch-all route over a single table of slugs.
  • Every route is prerendered. There are 24 of them across the two languages, and they are static files by the time a visitor arrives.
  • No animation library. The movement is CSS driven by one shared observer, which lets every section stay a server component and ship no code of its own.
  • No content system yet, on purpose. The content is typed modules already shaped to the schema a system would need, so adding one later is an adapter rather than a rewrite.
  • Status labels and citations are components, not prose. A claim cannot be written without the label and the source that belongs to it.
  • An audit script walks every route at three widths and checks for overflow, heading order, missing alt text and console errors, and also renders each page with motion reduced and with JavaScript switched off. It reads its route list from the live sitemap, so a new page cannot slip past it.

Where it stands

The site is live on its own domain in both languages, and the audit passes clean across all 24 routes at every width, including with motion reduced and with JavaScript off.

Two things are open before it goes out widely. The Norwegian is written in bokmål rather than translated, but has not yet had a native professional pass. And the partner enquiry form validates correctly and then cannot send, because the mail host blocks the cloud addresses the site runs on. It tells the visitor plainly that nothing was sent, which is the right failure: a form that shows success for an enquiry that went nowhere would break the same rule the whole site is built on.