All case studies

// XO (RAD Media Group)

XO: a Gen-Z culture title, taken from site-section to standalone brand

A hyper-feminine culture publication on its own domain, with a procedural sticker system and a reading experience that stays fast under all the fun. Built on Astro, Payload CMS and Cloudflare.

Visit the live site

// summary

XO began life as a section I built inside culted.com. It's now a standalone publication at itsxo.com ("no e-girl left behind"), rebuilt from scratch on Astro, Payload CMS and Cloudflare Workers, with ad infrastructure ready to switch on and a personality most news sites wouldn't dare ship.

itsxo.com, scrolled from the top

visit itsxo.com ↗

What the site is

XO is RAD Media’s hyper-feminine culture title: fashion, beauty, music and art “through a taste-led lens”, written for women and non-cis-het-male Gen-Z readers, with a monthly reach of 25 million. It started as CultedXO, a section I built inside culted.com with custom permalink and sticker plugins on WordPress. It has since become a fully standalone brand on its own domain, and I built that too.

The challenge

Take a publication with a deliberately playful identity (scattered stickers, script typefaces, a scrapbook energy) and ship it as a serious, fast, accessible news platform. The fun had to survive contact with performance budgets, screen readers and a strict Content-Security-Policy.

What I built

The full platform. Astro front end on Cloudflare Workers, Payload CMS headless on its own subdomain backed by Cloudflare D1 and R2, 30-day edge caching with stale-while-revalidate, and Cloudflare Image Resizing serving responsive srcsets at five breakpoints. No client-side framework anywhere on the public site. The entire CultedXO archive came across from culted.com with its text, images, SEO fields and custom metadata intact.

The sticker engine. A procedural decoration system that scatters the brand’s stickers across every page: density computed from page height and breakpoint, weighted scale distributions, collision-avoidance so stickers never sit on text, positions persisted between visits. And because decoration should be a choice: an accessible on/off switch, with the whole layer hidden from screen readers.

The XO homepage hero, its script logo and headline ringed by scattered pink stickers of a flip phone, games controllers, candles and cherries, none of them sitting on the words, with a Stickers on-off switch in the bottom right corner.

Every sticker here was placed by code, not by hand, and the switch in the corner turns the whole layer off.

A brand-first reading experience. The XO logo morphs between pages with native CSS view transitions, articles get a rose reading-progress bar, editor’s picks sit in a fade-masked carousel, and share uses the phone’s native share sheet. All vanilla JavaScript, all under the CSP.

Publisher infrastructure. Ad slots at IAB sizes with reserved dimensions (zero layout shift), built ready for Google Ad Manager (the integration is planned but not yet live, so house creative fills the slots for now), plus a commerce module with click-tracking through a custom Payload endpoint, newsletter capture on a first-party API, Google Consent Mode v2 with denied-by-default, full NewsArticle structured data, RSS, author archives and server-side search.

XO’s Indulge section on a pink background: shoppable cards for Moncler x Rick Owens at 665 pounds, Gucci at 375 pounds and Stone Island at 610 pounds, with scroll arrows and a line saying some links are affiliates.

The shopping shelf. Clicks are counted by XO’s own endpoint rather than a third-party tracker.

Why it matters

Most “fun” websites are slow, and most fast websites are boring. XO is the proof you don’t have to pick: a site with script fonts and scattered stickers that still ships zero framework JavaScript, serves from the edge as cached HTML, and passes the accessibility checks most sober corporate sites fail. Personality is an engineering problem too.

// next step

Got a project? Let's talk.

A free chat about what you need and whether I can help. If it isn't a fit, that's the end of it: no sales follow-up.