Scroll down
Discuss your project with me
Back to cases

Wright Group Event Services

Wright Group Event Services — event rental site moved from WordPress to Cloudflare in 7 days

A Denver event-rental company's 37-page, 112-article WordPress site rebuilt on Astro and Cloudflare Workers in 7 days: new design, 2026 prices, a lead admin with analytics, every old URL redirected, Lighthouse 100.

WordPress → Cloudflare Workers · 7 days to launch
Year
2026
Duration
October 2026 · 7 days
Industry
Event rental & production
Country
United States (Denver, Colorado)
Services
Web Design, Web Development, SEO
Wright Group Event Services — desktop homepage
Desktop · 1440 px
Wright Group Event Services — mobile homepage
Mobile · iPhone

Before and after

Wright Group Event Services — homepage, previous website
Before
Wright Group Event Services — homepage, redesigned website
After

The results

  • 7 days

    From the first export of the old site to the live domain

  • 2,005

    Old URLs that still answer, each redirect landing on a working page

  • 100

    Lighthouse on desktop: performance, accessibility, best practices and SEO

  • 113

    End-to-end tests in Chrome, Firefox, Safari's engine and an iPhone screen

Project overview

Wright Group Event Services rents tents, stages, tables, chairs, linens, lighting and AV for weddings, corporate events, festivals and private parties across Colorado. The company has served the state since 1996 from its base near Denver, and its site had grown with it: 37 pages, 112 articles, 1,981 URLs counting the media, and almost 400 MB of photos and video, all on WordPress with a page builder.

The brief was to move the whole thing onto a fast, modern site without losing anything: not a page, not an article, not a single address Google had indexed. On the way I found what years of edits leave behind: duplicate “-2” URLs, four phone numbers and three addresses on different pages, the company’s age stated four different ways, and analytics counting every view twice. The new site had to fix that and give the owner something WordPress never did: a place where every quote request lands, with the source it came from.

My role in the project

I personally led the project from the first export of the old site to the live domain, seven days later. The areas I owned and delivered directly:

  • Discovery: a full export of the old site, an inventory of every URL with its live status, and a register of 2,058 statements the old pages make about the company, each verified word for word and sent to the client for a fact check
  • The new design, built 1:1 from the approved layout: 11 page designs and 12 components
  • Content migration: 112 articles, 14 rental pages, 8 event types and 10 pages, with a word-count report proving nothing was lost
  • Lead capture, first-party analytics and an admin panel on Cloudflare’s database
  • SEO: the redirect layer, structured data, sitemaps, the files for AI crawlers and a performance budget
  • The launch on the client’s own Cloudflare account, with a rollback plan and the old host kept warm

What I built: the site

  • A home page, 14 rental pages and 8 event-type pages with the migrated content laid out into the new design’s sections, FAQ, reviews and awards
  • Nine new category pages (tents, tables, chairs, linens, lighting and AV, heaters and generators, dance floors, barricades, lounge furniture, pipe and drape) and four area pages (Colorado Springs, Fort Collins, Boulder and the mountain towns), each with what’s delivered there and the 2026 starting prices
  • The 2026 price list imported from the client’s QuickBooks export into price blocks on every rental page, with a check at build time that no item is left out
  • A wedding tent guide with a size calculator: guest count, layout and extras turn into a tent size, a price and a starter list
  • News with 110 articles and an archive, a site search, About, Contact, legal pages with a privacy opt-out form, and a 404 page that searches
  • Real Google reviews from an export, each linking to the original, and 144 photos that had no alt text described one by one
  • 11 videos re-encoded from 31.5 MB to 7.4 MB, served from Cloudflare’s storage along with every old upload at its old address

What I built: leads and the admin

  • Quote forms that work without JavaScript: Turnstile loads on the first touch of a form, a hidden honeypot, a rate limit and a duplicate check keep spam out, and every request is saved with its source, campaign and ad click IDs before an e-mail goes to the office
  • First-party analytics: visitors, sessions, page views, scroll depth, phone, e-mail and CTA clicks, video and gallery use, summed into daily statistics every night
  • Events for GA4 and the Meta Pixel through one Google Tag Manager import, so calls and quote requests count as conversions
  • An admin panel of its own: a dashboard that compares any period with the one before, leads with statuses, notes, search, filters and CSV export, each lead’s visit history, analytics by page, source and visitor, a 404 log that writes the redirect line for you, and settings with users. It runs within the free Workers plan

What I built: SEO and launch

  • Every one of the old site’s 2,005 URLs answers: 375 exact redirects, 149 for addresses without a slash, 10 dynamic ones, and a Worker that handles different casing, encodings and the old ?p= links; missing pages return a real 404
  • Structured data on every page: the business, its services, articles, breadcrumbs, FAQ and reviews, with zero errors in Google’s and schema.org’s validators; share images, sitemaps with images, RSS, a KML file and IndexNow
  • robots.txt that names 19 AI crawlers, plus llms.txt and a full-text version for AI assistants, built from the content; a check in the build fails if any removed claim sneaks back into them
  • Security headers, a cookie notice and a privacy opt-out page
  • A performance budget enforced by Lighthouse in CI, and an audit of every image on every page in the build
  • The launch: a Cloudflare zone on the client’s account, the database and media storage near Denver, a 34-point launch check, and the WordPress host kept for rollback

Stack and performance

Astro 7 with TypeScript and Tailwind CSS 4, deployed as static files with server routes on Cloudflare Workers; D1 for leads, analytics and the admin, R2 for media; Turnstile for spam protection, Resend for e-mail, Pagefind for search. 113 Playwright tests run in Chrome, Firefox, WebKit and an iPhone screen on every push, and axe finds zero WCAG 2.1 AA violations. On the live site, Lighthouse gives 100 across the board on desktop and 96–97 for performance on mobile, with zero layout shift and 5–10 KB of JavaScript per page.

Key screens

Wright Group Event Services — The Our Rentals mega menu: Colorado and Denver rental pages, nine categories and four areas, with the full catalog one click away.
The Our Rentals mega menu: Colorado and Denver rental pages, nine categories and four areas, with the full catalog one click away.
Wright Group Event Services — 2026 prices on the table rental page, imported straight from the client's QuickBooks price list; a free quote confirms availability and delivery.
2026 prices on the table rental page, imported straight from the client's QuickBooks price list; a free quote confirms availability and delivery.
Wright Group Event Services — The wedding tent size calculator: guest count, layout and extras turn into a tent from the price list, its 2026 price and a starter rental list.
The wedding tent size calculator: guest count, layout and extras turn into a tent from the price list, its 2026 price and a starter rental list.
Wright Group Event Services — A city page: every category delivered to Colorado Springs with its starting price, plus delivery terms, planning tips and FAQ.
A city page: every category delivered to Colorado Springs with its starting price, plus delivery terms, planning tips and FAQ.
Wright Group Event Services — The admin on demo data: a dashboard that compares periods, and the lead list with statuses, sources and CSV export.
The admin on demo data: a dashboard that compares periods, and the lead list with statuses, sources and CSV export.

Full homepage, desktop

Wright Group Event Services — full-page website screenshot

Tech stack

  • Astro 7
  • TypeScript
  • Tailwind CSS 4
  • Cloudflare Workers
  • D1 + R2
  • Cloudflare Turnstile
  • Resend
  • Pagefind
  • Playwright
  • GitHub Actions

Want a similar project done?

Tell me about the task. I will personally look at your project and suggest the right way to deliver it.

Discuss your project with me