Recipes
Overview
Frontend rebuild for TINE Kjøkken (Sep–Dec 2024) — Next.js on Enonic XP with dynamic routing, ISR, and structured recipe data. One of Norway’s busiest food sites.
Editors publish in Enonic; the Next layer handles speed and templates. Live at tine.no/kjokken — unglamorous infrastructure a lot of people use every week.
TINE Kjøkken is where a lot of Norway looks up dinner — thousands of recipes, seasonal campaigns, and editorial pages with serious traffic. From September to December 2024 I rebuilt the frontend in Next.js while Enonic XP stayed the content backend.
The goal was not a greenfield recipe app. Editors already worked in Enonic; the new layer had to respect that workflow, ship on a fixed timeline, and feel faster and more maintainable than what it replaced — without breaking URLs people bookmark.
The brief
Replace the old presentation stack with a modern Next.js frontend that talks to Enonic as a headless CMS. Recipe detail pages, category hubs, campaign landings, and all the supporting content types had to render from Enonic data — with performance and SEO appropriate for one of Norway’s most visited food destinations.
What I built
- Dynamic routing — catch-all paths mapped to Enonic content types so editors can publish new sections without a deploy.
- ISR and caching — incremental static regeneration so popular recipes stay fast while content updates propagate on a sensible schedule.
- Structured recipe data — schema markup and typed content models so search engines and on-page UI get consistent ingredients, steps, and metadata.
- Template system — reusable layouts for recipes, articles, and campaign pages instead of one-off pages per launch.
Stack
Next.js on the frontend, Enonic XP as the headless CMS and API layer. My work sat in the glue between them: fetching, normalising, and rendering Enonic content — plus the routing and caching strategy that keeps thousands of pages from feeling heavy.
The hard part
Scale and editorial independence pull in opposite directions. Every shortcut that hard-coded a layout would come back as a support ticket when marketing launched something new. The win was a frontend flexible enough for editors to publish a soup without calling a developer — and fast enough that you never notice the machinery behind tine.no/kjokken.
What I took away
Four months, then it went live. Unglamorous work that a lot of people touch every week — and that is the point. Headless rebuilds are less about flashy components and more about routing, cache boundaries, and content contracts that survive the next campaign.
Live site: tine.no/kjokken