AAA Awning Co.

Full WordPress → Next.js 16 migration for a 40-year Houston awning fabricator — 64 prerendered pages, 36 city landing pages, AI-search ready, with a password-protected Umami dashboard for the owner.

Client
AAA Awning Co. · Houston, TX
Role
Design + full-stack build + migration
Timeline
2026 · live
Status
Approved · frozen showcase
AAA Awning Co. homepage screenshot

AAA Awning has been fabricating custom awnings, canopies, and shade structures for Texas homes and businesses since 1984. Their WordPress site had accumulated 40 years of plugin sediment, a slow theme, and zero Texas-wide SEO depth — they ranked in Houston by reputation alone, but were invisible in Dallas, Austin, San Antonio, Fort Worth, and 30+ other Texas markets they could easily serve. The brief: migrate completely off WordPress to a fast, prerendered stack; build out city-by-city content with real local-intent depth; surface live reviews; give the owner a private analytics view he can actually read; and ship it AI-search ready, not just Google-search ready.

Next.js 16 with full prerendering across all 64 routes. The site loads instantly because every page is a static asset by the time a visitor hits it. 36 Texas city landing pages, each with unique copy, LocalBusiness + FAQPage schema, and area-specific signals — no thin-content cloning. live Google Reviews via the Places API surface in real time, filtered for quality. Resend + Cloudflare Turnstile keep the lead form spam-free without breaking accessibility. A self-hosted Umami dashboard gives the owner a private analytics view at a /dashboard URL gated by a password — no Google Analytics privacy theater. llms.txt + llms-full.txt published for AI search engines (ChatGPT, Claude, Perplexity) so the site is ingestible as an authoritative awning source, not just crawlable HTML.

Next.js 16VercelResendCloudflare TurnstileUmami (self-hosted)Google Places APIJSON-LD schema

The surface area we built.

Full WordPress → Next.js 16 migration

Every WP page rebuilt, content audited, plugin tax removed. 64 prerendered routes serve as static assets — Lighthouse green across the board.

36 Texas city landing pages

Houston, Dallas, Austin, San Antonio, Fort Worth, Galveston, Corpus Christi, and 29 more. Each page has unique local content + LocalBusiness schema, no thin-content duplication.

Live Google Reviews via Places API

Real reviews surface on the site in real time, filtered for quality. Refreshes automatically — no manual review-card maintenance.

AI-search ready

llms.txt + llms-full.txt + JSON-LD (LocalBusiness, FAQPage, Organization). The site reads cleanly to GPT, Claude, Perplexity, and Google's AI overviews.

Resend + Turnstile lead form

Branded HTML email on submit, Cloudflare Turnstile for bot protection. Mailbox-deliverable, no SPF/DKIM gotchas.

Private Umami analytics dashboard

Self-hosted Umami at /dashboard behind a password. The owner sees real visitor data without the privacy theater of GA4 — no cookie banners, no PII collection.

Frozen showcase fork

aaaawning-showcase.vercel.app with noindex + Portfolio Demo pill. The portfolio version stays canonical regardless of how the live site evolves.

Live and serving Texas. The owner can see his own analytics, the lead form works, Google + AI search engines can read the site cleanly, and 36 Texas markets that were invisible in search now have a credible AAA Awning page each. Frozen showcase deployed.

Want something like this?

We ship premium sites fast — AI-native, end-to-end, signed where it matters.

← Back to all work