Skip to content

ProductsLive

This website

My personal site, moved off Squarespace and rebuilt as a Next.js app on the same domain, in four languages.

Next.js · TypeScript · Payload CMS · Postgres · next-intl · Tailwind CSS · Vercel

Source code

The old Squarespace homepage: a black name panel, a bracketed tagline and four purple buttons
The current homepage: a comic-panel hero with the name in black and red, beside Projects and Art panels

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 app with Payload as the CMS and Postgres underneath, deployed on Vercel. Each piece of writing is one document that holds all four languages, and anything not yet translated falls back to English instead of breaking. Pages are rendered ahead of time and refreshed when I publish, so the site stays fast with no third-party scripts on it.

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

The old site was a Squarespace template: quick to set up, hard to grow. Projects sat two clicks deep, everything was in one language, and every change happened inside someone else’s editor.

The new one is written in TypeScript with Next.js and React Server Components, and styled with Tailwind CSS. Posts, art, photos, videos and projects live in Payload CMS on Postgres, so I can edit any of them from a phone. next-intl serves every page in English, Japanese, Turkish and Korean.

It runs on Vercel and kept its address, muratodesu.com, so links to the old pages still land somewhere. The motion is mostly CSS, and it stays still for anyone who has asked their device for less of it.