Migrated a hardcoded 26-project portfolio into Sanity CMS so the founder can publish, restructure, and revalidate without me in the loop. Bilingual EN/FI, ~8 second update window from edit to live.
Aariviiva is a Finnish creative studio led by Virpi (Vippe) Loukamaa — graphic, identity, and interior work spanning two decades. The site she had was a static showcase: 26 projects compiled by hand into a TypeScript array, edits only possible by re-deploying. Sanity Studio was scaffolded but never provisioned, and production was throwingConfiguration must contain projectIderrors any time a query ran. She wanted to manage the portfolio herself in her language, in real time.
Gated the unprovisioned /studio route behind an env check, null-guarded the broken queries — production stopped throwing within the hour, no Sanity work yet.
Two new schemas (project, discipline) plus a reference array on the existing service schema. Custom Studio desk in Finnish so Vippe edits in the language she works in, not English defaults.
/portfolio/[slug] detail pages with hero, gallery, and sidebar metadata. /palvelut/[slug] aggregating every project in that discipline. A logo project links to the logo-design service page that lists the other 11 logo projects — circular, on purpose.
HMAC-signed Sanity webhook hits an /api/revalidate Next route on every publish event. Verified end-to-end: edit a project description in Studio → live page reflects the change in roughly eight seconds. No deploy needed.
Migration shipped end-to-end across four commits. 7 disciplines, 5 services, and 26 projects seeded from a deterministic batch (_seedBatch="2026-05-init") so any of it can be rolled back cleanly. All 54 portfolio images uploaded to Sanity's asset CDN with real aspect ratios and LQIP placeholders served at the edge. Vippe is now Editor in Studio, curating the site at her own pace. Hardcoded fallbacks deleted — Sanity is the single source of truth.
Next.js 16 App Router · Sanity CMS (Free tier, project 02pkukop) · next-intl 4.x for EN/FI · GROQ queries with asset metadata · presentationTool for live preview · HMAC webhook revalidation · Tailwind v4 · Vercel auto-deploy on push
