Retirement benefits

Guideline

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.

How the site works

Guideline's 401(k) dashboard showing plan assets, participation and compliance, from guideline.com
Strapi CMSContent teams
Next.js siteComponents · Preview · Checks
VisitorsEmployers comparing plans

Technology stack

Pick a technology to see what I used it for.

What I worked on

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.

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.

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.

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.

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.