Case study · Headless WordPress

Content architecture for Las Vegas's premier luxury community

ClientAscaya, via Wicked+Agency partner of 8+ years
RoleDesign engineerField architecture, headless build, motion, content implementation, CRM integration
StackWordPress (ACF) · Next.js · Vercel · GSAP · Gravity Forms API · WordPress API
Timeline6 weeks of build, QA, content, and launchSpring 2026
Liveascaya.com

Ascaya is a guard-gated luxury residential community in Henderson, Nevada. Desert-modern homes and homesites overlook the Las Vegas valley, with listings that reach into the tens of millions. When Wicked+ won the redesign bid, I owned the technical side end-to-end: translating a Figma desktop design into a component system, architecting the CMS, building the headless frontend, implementing the content, and wiring the forms into the client's CRM.

One designer, one project manager, and me. I led the kickoff with the designer where we walked through each page and I confirmed interaction expectations, caught inconsistencies while they were still cheap to fix, and defined the systems that the build required. Questions happened asynchronously in Slack, with occasional one-off calls to answer complicated functionality.

I had 6 weeks to turn 20 designed pages into a live site that a content team could run without me.

Defining a System

The first problem:Reading the design

Before any code, the real work is deciphering the Figma. I analyze each artboard and decide which sections across the 20 designed pages are actually the same component wearing different content, and which only look similar.

Abstract too little and the CMS becomes a junk drawer of one-off blocks. Abstract too much and every component sprouts a dozen conditional fields nobody understands.

Every component is named, priced, and mapped before the build

  • Annotate the full design, mapping every section to a named component with its ACF fields defined on the spot
  • Classify each component by build cost, low (1 to 2 hrs) vs. high (4 to 8 hrs), so the agency can see where the budget lives and make scope tradeoffs before the build starts
  • Draw a component tree for every page, from page to flexible component to sub-component

Ascaya landed at 25 flexible components for the main site, plus a blog-specific set and header, footer, and modal systems. The site shipped with 31 pages, but only 20 were ever designed. The other 11 I composed directly from the component system: some from rough scratchpad wireframes the CEO handed me mid-project, others (policy pages and the like) from existing templates. No new design, no new components, no change orders.

That's the test of the abstraction: a system is right when new pages can be built from it by arrangement alone.

A visual component tree that defines the pages, components, and subcomponents

Content Modeling

6 additional post types,built around the content team

Real estate sites live or die by their listings model. Ascaya has 4 distinct inventory types (112 homesites, 6 Desert Design Study homes, 6 Canyon Residences, 11 amenities) plus 127 blog posts, 22 press items, and a FAQ system, each with different display needs: tables, grids, floor plan viewers, an interactive homesite map.

The tempting shortcut is one catch-all post type. I split each listing type into its own custom post type instead, for 3 reasons.

  • Easy to find, easy to edit

    Each listing type gets its own tab in the WordPress sidebar. Editors never sift through 112 homesites to bulk-edit a residence, and no template displays fields that don't belong to it.

  • URLs that build themselves

    Post types slot into the site's URL structure natively. The link GraphQL returns already matches the frontend, so nothing is hardcoded before the slug. Less static copy in code, more freedom to restructure later.

  • Parsed apart, kept together

    Splitting types makes the CMS easier to parse, while the query still holds everything under one component. Conditional fields show only what applies. Editors see their template while the code keeps one component.

For every templated post type I enter a complete example myself so the team has a reference to duplicate. Every non-templated page I implement personally.
I optimize for the person in the CMS6 months from now.

Mobile

Desktop gets designed.Mobile gets decided.

Like most agency projects, the Figma was desktop-only. Filling that gap is part of my role.

Problem Example

Multi-column tables were illegible on smaller screens and horizontal scroll wasn’t intuitive.

My solution

Below the breakpoint, the table transforms into a full-width card grid, each listing stacking its data vertically with the plan link promoted to a visible action.

I make calls like this throughout every build and flag the notable ones back to the designer with suggestions.

MOTION + PERFORMANCE

Finishing touches take a sitefrom fine to intentional

Ascaya's motion is intentionally restrained to match the brand, so most of the work in this phase went into performance and production details.

  • Motion that stays composed

    Motion is deliberately restrained: a global hero and header entrance built with GSAP, and slide-out panels for the listing filters. Nothing competes with the homes.

  • An interactive map without the lag

    The map component plots 100+ lots with live availability. When a late addition to the map introduced performance issues, I had Claude Code review the code and apply fixes, which resolved every error before launch.

  • Production-ready by default

    Every build ships with the unglamorous layer that makes marketing sites work: structured data and SEO schema per template, accessibility as a requirement, cookie consent, marketing scripts, and Gravity Forms wired via API into the client's CRM.

AI WORKFLOW

Reducing tediousimplementation with AI

Ascaya was my first build using Claude Code as a schema partner, and it changed my throughput. Once I'd decided a component's fields during design annotation, I'd screenshot the section to Claude, workshop the component name, specify the fields, and have it generate both the ACF JSON blob for upload and the matching GraphQL schema entry.

Hand-writing ACF JSON and keeping it in sync with GraphQL was always the most tedious part of my job, and the most error-prone. Delegating the transcription, while keeping every architectural decision mine, meant fewer missed edge cases and 36 hours cut from the build.

IMPACT

Shipped on schedule,and the agency came back

The first internal reveal is always the moment. The Wicked+ CEO saw the build and couldn't wait to put it in front of the client and launch. The site shipped on schedule that spring, the content team took over day-to-day updates with a model built for their confidence, and the audit numbers held: 100 accessibility, 100 SEO.

The quieter impact is the eight-year pattern this project continues: an agency that hands me a Figma and a deadline, trusts the architecture sight-unseen until first review, and comes back for the next one.

Flexible components25+ blog set, header/footer/modals
Pages3120 designed, 11 composed from the system
Custom post typesHomesites (112) · Design Study homes (6) · Canyon Residences (6) · Amenities (11)
Time Estimate 136 hrs
Time Tracked100 hrs
Post-launch audit100 accessibility · 100 SEO (Lighthouse)

REFLECTION

  1. The component abstraction question ("are these two sections the same component?") never has a formula. Every answer trades editor flexibility against system complexity, and the right answer depends on who maintains the site after you leave. That costs me hours during the build and saves everyone else hours forever.

  2. The Figma file didn't include components, variables, or layouts. If it had, could I cut build time further by handing Claude a structured file? Worth trying on my own projects.

  3. In the next headless build, I want to push AI further by sharing all artboards at once to see if it can decipher which sections are reusable on its own. This would eliminate the first two steps to my system and radically speed up my time estimates.

Next case study

Palette Town

An ecommerce business I design, build, and run

Learn about my side hustle