Guideline offers 401(k) plans and IRAs to US businesses. Its marketing website is where employers learn about the plans, and where internal teams publish pages and articles through a Strapi CMS.
My work
On the growth team, I worked on the Next.js site and the CMS behind it, for both visitors and the people who publish content.
Most of my work was on how pages get built and published: the blocks content teams use, the CMS upgrade, the checks before a page goes live, and the experiments the growth team ran.
From CMS block to page
Strapi blocksPicked by editors
ComponentsAtomic Design · Storybook
Published pageNext.js
Schematic view
Pages the content team can build
Non-technical teams needed to publish and update pages without an engineer building each one. I extended the Strapi and GraphQL content model and the Atomic Design component library, documented in Storybook.
Content teams could put pages together from production components.
How a block becomes a page
Each CMS block maps to a React component. I added blocks such as video, form fields and app resources.
A new pattern needs a model change and a component, not one-off markup, so pages stay consistent.
Two sides, one contract
Strapi v5CMS · TypeScript
↔
Next.js siteGraphQL client
Generated typesBuild-time errors
Schematic view
Moving the CMS and site to Strapi v5
The CMS and the site both had to move to Strapi v5. I added TypeScript to the Strapi project and migrated both the CMS and the Next.js client.
Both sides run on v5 through a typed contract.
How I kept them in sync
Generated GraphQL types make a query that no longer matches the content model fail at build time, not in production.
Before a page goes live
DraftIn Strapi
PreviewEditor review
ChecksBuild stops on errors
Schematic view
Previewing and checking before publishing
Editors needed to see drafts before publishing, and a misconfigured page shouldn't go live. I built draft preview, Strapi buttons that open the preview and the published page, and checks that run before release.
Broken pages stopped the build instead of going live.
What the checks catch
The build stops on a failed content fetch, a rendered error page, or a missing disclosure. Release checks cover the main pages.
With static generation, failing the build is safer than publishing a degraded page.
One page, two versions
ControlCurrent page
⇄
VariantSet in the CMS
Real visitors onlyChecked at build
Schematic view, no results shown
Experiments on CMS pages
The growth team wanted to test page variants without an engineer hard-coding each test. I built the experiment integration and experiment controls on CMS components.
The growth team could run A/B tests on pages the CMS manages.
How I kept tests reliable
Experiment settings are checked at build time, a preview-only flag lets editors try a variant first, and bots are excluded so a test only reaches real visitors.
I also fixed variant flicker when visitors move between pages.