A Finnish studio, now CMS-driven
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.

The brief
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 throwing Configuration must contain projectId errors any time a query ran. She wanted to manage the portfolio herself, in her language, in real time.
What I built
- Stop the bleed
Gated the unprovisioned
/studioroute behind an env check and null-guarded the broken queries — production stopped throwing within the hour, no Sanity work yet.- Schemas and Studio in Finnish
Two new schemas (
project,discipline) plus a reference array on the existingserviceschema. Custom Studio desk in Finnish so Vippe edits in the language she works in, not English defaults.- Cross-link loop
/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.- Live revalidation
An HMAC-signed Sanity webhook hits an
/api/revalidateNext route on every publish event. Verified end to end: edit a project description in Studio, and the live page reflects the change in roughly eight seconds. No deploy needed.
The outcome
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.
Stack
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
Want the samefor your studio?