ProductsLive
This website
The site you are looking at — Next.js and Payload, four languages, one very patient fallback rule.
Next.js · Payload CMS · Postgres · next-intl · Tailwind CSS · TypeScript

Problem
The Squarespace site buried the projects two levels deep, described the work in stock phrases that said nothing, and had no honest way to be four languages at once — every page implied a translation that did not exist.
Solution
A Next.js and Payload rebuild with two deliberate i18n strategies: each piece of writing is one document holding every language, shared assets carry per-language fields, and everything falls back to English rather than breaking. A language that has not been written is excluded from that language’s indexes instead of being served half-empty, and hreflang only ever advertises a language that actually exists.
- My role
- Design, build, content architecture.
- Context
- Personal site, rebuilt off Squarespace.
- Timeframe
- 2026
Outcome
4
languages served from one content model, with honest hreflang
0
third-party scripts on the public site
A four-language personal site: English, Japanese, Turkish and Korean. Prose is translated per language inside one document; artwork titles and photo captions are shared documents with per-language values; everything falls back to English rather than breaking.
Content lives in Payload and is edited at /admin. The public site renders statically and revalidates when content changes.