Shane Bogue Projects

Exterior Remodelers of America

A lead-focused contractor site, rebuilt on the Payload CMS platform

The Exterior Remodelers of America logo in teal, orange and near-black.
The logo rebuilt as a vector from the original artwork, on a branch not yet merged. Fig. 1 2026–present
  • Work
  • In progress
Year
2026–present
Role
Designer and developer
Org
Exterior Remodelers of America
Stack
Next.js 16, React 19, Tailwind CSS 4, TypeScript, Payload CMS (headless, via @cms/sdk) and 2 more

A site for a Phoenix home-exterior remodeling contractor: siding, soffit and fascia, patio covers, stucco and more. I built it first as a fork of the platform template, then rebuilt it as a headless Next.js app that reads everything from the Payload CMS, so that once it launches the owner can edit pages, navigation and legal details without a deploy. It is not public yet; the company's current site is still WordPress.

Problem

The company's current site is WordPress with a heavy slider plugin. They needed a faster site built around getting leads, one their staff can edit themselves.

A simple placeholder icon.
Before: the placeholder icon used with a text name. Fig. 2

Approach

The homepage hero is built around one tap-to-call button, three proof points and a scrolling services ticker that respects reduced-motion settings, sized so the lead form clears the fold at 1280x720. I cut warranty, performance and resale claims nobody could back up. The v2 port has 13 block renderers, server-action forms with a honeypot and a minimum fill time, legal pages, a sitemap and robots file, and revalidate and preview handlers. An importer rebuilt the live content from the git history of the old seed scripts without connecting to any database. Then I replaced the AI-generated house used in every hero with real job photos, metadata stripped and house numbers cropped. On a branch not yet merged, the logo is a vector exported from the original Illustrator file.

Process

5 dated steps, from the project’s history

  1. 01

    Client fork

    Set up the client preset, the Vercel deploy config and the migration helpers on the platform template.

  2. 02

    Hero redesign

    A service-forward eyebrow, a one-line headline, three proof points, a single tap-to-call button and an auto-scrolling services ticker, rendered on the server.

  3. 03

    Launch hardening

    Closed the admin escalation and data-wipe paths found in the platform audit, accepted anonymous leads with a honeypot, served robots and sitemap from the app, and removed template branding. Three days later the fork launch was cancelled in favor of v2.

  4. 04

    Headless port and content import

    The site moved to apps/era on the SDK, and an importer turned the old seed scripts into CMS pages. Images got much lighter once PNG files saved with a .jpg name were re-encoded as real JPEGs.

    An AI-generated desert house at sunset.
    Before: one AI-generated house, reused in every hero and feature section. Fig. 3
  5. 05

    Real photos and the real logo

    Job photos of siding, soffit and fascia, patio covers, stucco and kitchens replaced the AI and stock images, and 11 stock files were deleted, including one that showed another company's van. On a branch not yet merged, the logo is a vector in its original teal and orange, and the admin uses those colors. See Fig. 1, above.

Results

Runs locally against the CMS with 23 pages imported. It moves straight to the new platform at cutover; the fork launch was cancelled.

Lesson

Next 16 throws if headers() is called inside unstable_cache, so the tenant has to be resolved without request headers. And client content belongs in tenant data, not in environment variables or shared code.