Back

Client: Woodlands Dairy

First Choice

Full site build for First Choice Dairy. Migrating from WordPress to a headless Next.js and Sanity CMS platform with an advanced recipe system, dynamic product pages, and evolving email integrations.

Web DevelopmentNext JSFigmaSanity - CMSTailwind CSS
First Choice

Context

First Choice is one of South Africa's most recognised dairy brands, producing a wide range of milk, cheese, and dairy products. The existing WordPress site was functional but limiting, difficult to maintain, slow to update, and not built to handle the kind of content depth the brand needed to grow into.

This was built during my time at Impact Digital Agency, working alongside their in-house designer. I handled the full development and contributed to parts of the design, translating the brand into a headless architecture for the first time.

The Problem

The WordPress setup was creating ongoing friction; plugin dependencies, security concerns, and a backend that wasn't intuitive for the client's team to manage regularly. The brand also needed a more capable content platform, particularly around recipes, which were central to how First Choice connects with its audience but were underserving users on the old site.

The new site needed to be faster, more secure, easier to manage, and built around content that actually served the people visiting it.

Project Description

Migrating from WordPress to a Next.js and Sanity CMS stack was the foundational decision that shaped everything else. Sanity's decoupled architecture gave the client a clean, manageable backend without the bloat and vulnerability surface area of a plugin-heavy WordPress setup. Pages load faster, content is served instantly, and day to day updates are significantly less painful than what WordPress required.

This was my first production Sanity build for a client of this scale. The experience established the patterns and architecture I've carried into every headless project since.

Sanity Headless CMS
Sanity Headless CMS

Recipes are central to how First Choice engages its audience, so getting this right was the most involved part of the project. The brief pointed toward a more capable recipe experience. The structure, search logic, and filtering system were developed collaboratively, translating what the client needed into something that actually worked for users.

The result was a fully searchable recipe library with featured and latest recipe surfacing, category browsing, and — within each category — additional filters for dietary requirements, difficulty, cooking style, and time. It turns a flat list of recipes into something users can actually navigate based on what they're looking for.

Recipe Page
Recipe Page

Product pages were built as structured Sanity documents, giving the client full control over product content without touching code. The schema was designed to be flexible enough to handle First Choice's broad product range while remaining consistent enough to maintain visual coherence across the site.

Product & Nav Menu Pages
Product & Nav Menu Pages

The newsletter integration went through three iterations over the life of the project, originally built for Mailchimp, then migrated to Klaviyo, and later to Everlytic, a South African email marketing platform. Each migration required reworking the integration while keeping the frontend experience consistent for users.

A dynamic contact form was later added collaboratively with the client. A simpler version of the multi-form approach I'd go on to develop more fully for the High Protein site, allowing different enquiry types to be handled through a single, clean interface.

The relationship with First Choice extended beyond the initial launch. Through ongoing freelance work with Impact Digital Agency I continued supporting the site, building out campaign and competition pages as needed, keeping the platform evolving with the brand's marketing activity.

Outcomes & Reflection

The First Choice site established the headless CMS foundation that the broader Woodlands Dairy group would build on going forward. It's a project that grew beyond its original scope, which is usually a sign that the early architecture decisions were solid.

The recipe system was the most technically satisfying part of the build. The filtering logic required some careful thought about how users actually browse for recipes versus how clients naturally think about categorising content. Getting that balance right early made everything else easier to build on.

It was also my first production Sanity build at this scale, and a lot of what I learned here shaped how I approach headless projects today.