Your biggest asset in an RFP, your website

Your biggest asset in an RFP, your website. I've spent most of my career in B2B, and at Made by ON I spend my weeks talking to leaders of the world's most exciting B2B businesses. Lately those conversations keep circling one question, which I put to our strategists and UX team: what happens when...

Studio
5h ago
Cache Components: the right content at the right time

Cache Components: the right content at the right time

Cast your mind back to the earlier days of the world wide web. A website was essentially a digital document, the web a library, and the internet the mechanism of delivery. Updating a document meant editing HTML on your computer and uploading it to a server by hand, usually over FTP. In 1995 PHP...

Engineering
8d ago
We build by leaving things out

We build by leaving things out

Most of what makes a WordPress site good is what we choose to leave out of it. WordPress runs a large part of the web on a big promise: whatever you need, there’s a plugin for it. That promise is one of its greatest appeals, and its most costly trap. Almost everything that harms a WordPress site...

Engineering
22d ago
Letting type move

Letting type move

We treat type as something that sits still — fixed in place, headings always the biggest thing, motion bolted on at the end. For one Creative Spark we dropped those rules and asked what type could do once it started moving. Creative Spark is our in-house R&D session: ninety minutes, a single theme,...

Engineering
1mo ago
The cache that doubled as a coordinator

The cache that doubled as a coordinator

The rendering engine is what visitors see. The data layer feeds it, and keeping it stable under load was the less glamorous half of the build. This is the second post in the ON Labs series. The first covered the WebGL engine: shaders, draw calls, the GPU-level stuff. This one is about what happens...

Engineering
2mo ago
The testbed nobody will see

The testbed nobody will see

Every case study was a standalone Astro page with its own layout, its own component imports and its own way of breaking on mobile. Twenty-two of them. Each one built at a different time by a different combination of people, with whatever patterns felt right that week. Changing shared behavior (a...

Engineering
2mo ago
From static frames to a creative operating system

From static frames to a creative operating system

Looking beyond the flashy generative UI, shader effects and animation features at Figma Config signaled a deeper, more structural shift: the transition from a static repository of files and rules into a behavioural operating system. I left San Francisco with a camera roll of screenshots and pages...

Design
Engineering
15d ago

Standardise the foundations, not the brand experience

Detailed work at scale comes down to one judgement: which parts of a project are worth building fresh for every brand, and which should be solved once and reused everywhere. Shared functionality on one side, brand expression on the other Engineering teams have plenty of frameworks and platforms to...

Engineering
29d ago
Putting video back where it belongs

Putting video back where it belongs

The problem with putting video in a git repo. The repo kept getting heavier, sprint after sprint. We were committing big MP4s next to the code, builds were slowing down, and deploys with them. Case studies lead with video, so every new client made it worse. We needed the media to live somewhere...

Engineering
1mo ago
Twenty-four modules, one wrapper

Twenty-four modules, one wrapper

Every case study was its own Astro page. That was the first problem. Each page had its own layout logic, its own spacing decisions, its own way of handling full-bleed sections versus contained text. Some used inline styles. Some used one-off SCSS files. None of them agreed on what "default spacing"...

Design
2mo ago

Cache Components: the right content at the right time

Michael GunnerMichael Gunner Engineering
16 July 2026
4 min
Cache Components: the right content at the right time

Cast your mind back to the earlier days of the world wide web.

A website was essentially a digital document, the web a library, and the internet the mechanism of delivery. Updating a document meant editing HTML on your computer and uploading it to a server by hand, usually over FTP. In 1995 PHP arrived and changed that, generating the HTML on the server from content held in a database. Paired with MySQL it became the standard way to build a site, and still underpins WordPress, a popular CMS.

As the web grew into more than a delivery system for documents, the technologies evolved with it. React and Next.js let us build static sites in JavaScript and lift them with rich interaction and animation. But fresh content and the performance of a static build pulled in opposite directions.

Pulling content from a CMS like Storyblok, Next.js does much the same job as PHP, combining it with HTML and CSS and delivering a page to the browser. Run dynamically, this happens on every request, so a CMS edit is live the moment it’s made. The cost is latency, heavy API usage and a larger bill for the client. Run statically, the work happens in the background on a regeneration schedule. Performance improves, costs and latency fall, but content lags behind.

The fast-versus-fresh trade-off A two-by-two matrix. Performance runs fast (top) to slow (bottom); freshness runs stale (left) to fresh (right). Static sits top-left (fast but stale), Dynamic bottom-right (fresh but slow). The fast-and-fresh corner, top-right, holds a unicorn — the mythical ideal. The slow-and-stale corner, bottom-left, holds a skull.
Every approach traded one for the other. Fast and fresh at once was the unicorn — the corner nothing could reach.

It’s now 2026, and Next.js 16 has cracked it. What if we could have the best of both, heavy caching for performance with content updates that still land instantly? Better still, what if different parts of a page could refresh at different speeds, depending on what they are for?

Cache Components is the new Next.js caching model that does exactly this. Caching becomes something a developer declares in a single line, around one piece of data or an entire component. Every part of a site carries its own strategy, regenerating from fresh content precisely when it needs to.

Every part of GFSmith’s page carries its own cache tag: commerce revalidates on price and stock (Saleor), editorial on publish (Storyblok). Learn more about our work with GFSmith.

As part of our relationship with GFSmith, we’ve been tasked with building out their e-commerce presence to reflect the exciting new brand. The intersection of editorial content and e-commerce is the perfect use case for these behaviours. Data updates to the catalog within the Saleor platform trigger a flush of the cache of the relevant pages of the site: consequently, a pricing update will show almost instantly. The editorial elements of these pages are left untouched, updating independently.

Anything we do leave uncached doesn’t hold up the page. Next.js sends the cached shell straight away, with a placeholder where the live part will sit, then streams it in behind. The visitor gets the page immediately, and the live data is accurate to the second. The approach is called partial prerendering. The framework gives us the mechanism; the judgement is in what we choose to cache.

Partial prerendering: a cached shell sent instantly while dynamic parts stream in On the left, a browser sends a cached shell immediately, with dashed placeholders where dynamic content will load. On the right, dynamic content cards stream in, shown by arrows pointing into the placeholders.
Partial prerendering: the cached shell arrives immediately with placeholders where the live data will sit, then the dynamic parts stream in behind them.

The cached areas still need to update when someone edits them, so we add a webhook to the CMS. Cached content carries tags, and an edit in a CMS like Storyblok expires only the tags it affects. The change surfaces almost at once, and nothing untouched is rebuilt.

Granular caching of this kind isn’t unique to Next.js, and other platforms arrive there by their own routes. What has changed is the arithmetic. When we reach for React and Next.js it is for the fluidity they give users, through considered animation, richer state and frictionless movement between pages. This used to result in trade-offs over efficiency & performance. Now we’re able to more confidently deliver these features as part of highly performant and efficient builds which always deliver content fresh.

June 2026

William Badcock, A Touch-stone for Gold and Silver Wares (1677)

Hallmark

The word hallmark comes from an actual hall, Goldsmiths’ Hall in London, where since 1300 silver has been tested against the sterling standard and struck with the hall’s mark, so you could trust it without knowing the maker.

May 2026

Alan Kay: His Sketches, Piano, and Computer

Notes

A note can be a written record, a struck key, or the act of noticing, and each sharpens how we understand the world. A piano is an instrument, but also a technology built on the notes it makes possible.

April 2026

Photographs of a red cloth bound travel handbook from 1894. The book is open to show pages with maps and illustrations.

Change

A red cloth spine caught my eye in a Tokyo bookshop last week. A handbook for travellers in Japan, fourth edition, 1894. I was 132 years late, yet most of what it describes still stands.

Mar 2026

Screenshots from the development process of the new ON release notes page

Taking the temperature

You walk into a room and you can feel it. Whether there is energy or not. We describe someone as warm. We talk about things cooling down. Temperature is something we sense before we have words for it.

Feb 2026

Pixelised image of a horse running

Rethinking video, prototyping faster, and encoding brand logic

In Japanese, the character for hand is 手. Joined with the character for craft, it becomes 手仕事 (teshigoto), or handwork.

Jan 2026

Illustration showing the laying of undersea Atlantic telegraph cables

Transmission

The first dispatch of a new year, and I’m thinking about transmission: the message, the vessel that carries it, and what happens when they finally meet their destination.

Want to know more?

On the last Sunday of every month, we share insights on creative thinking, emerging tools, technology.