Work2026
Wayta Perú
A bilingual travel operator site where the marketing page, the blog, and the studio the client edits in are one deployment.
- Role
- Design and build, end to end
- Year
- 2026
- Live
- Visit the site
- Next.js 15
- React 19
- Sanity
- next-intl
- Tailwind v4

Wayta Perú runs guided trips through the Sacred Valley. They needed a site that reads as a serious operator in two languages, and they needed to change the copy themselves without opening a pull request or waiting on me for a typo.
The problem underneath the brief
Small operators usually end up with two half solutions. Either the site is a static build that looks right and cannot be edited, or it is a page builder that can be edited and never quite looks right. Both fail in the same place: the second language. Translation gets bolted on as a duplicate page tree, the two copies drift apart within a season, and the English side quietly becomes the stale one.
2
Locales
Spanish is the default, English is a first class peer rather than a translation layer.
1
Deployment
Marketing pages, blog, and the editing studio all ship together.
0
Duplicated page trees
One route definition, two locales resolved from it.
How it is built
Next.js 15 App Router, with next-intl owning the locale segment. The routes are declared once
and both locales resolve through the same tree, so a section added in Spanish exists in English
the moment its copy lands. Sanity holds every editable string and the blog, and the studio is
embedded at /studio in the same deployment, which means the client has one URL to remember and
one login to lose.

The interesting constraint was the language switch. Moving between locales has to keep the reader where they were. Someone halfway down the itineraries section who taps English and lands back at the top of the home page has been punished for wanting to read it in their own language.
Playable
Locale switch that keeps your place
Ported from Wayta Perú
Experiencias
Rutas guiadas por el Valle Sagrado con salidas en grupos reducidos y guías locales que viven en la zona.
The switch is labelled in the language it will take you to, not the one you are already reading. That single rule removes most of the confusion around language toggles.
The rest of the site



What I would keep
The one deployment decision paid for itself immediately. The client edits in the same place they visit, there is no separate CMS host to renew, and preview builds show real content because there is only ever one source of it.