Skip to content

Khyber Pass GalleryLaguna Beach, CA — Remote

Khyber Pass Gallery — WordPress to Cloudflare, Plus the CRM Behind It

A slow WordPress store replaced by two fast sites and a CRM that alerts the team and acknowledges every new inquiry on its own

Web RebuildCloudflare Workers & PagesCustom CRMLead AutomationTechnical SEO
Khyber Pass Gallery
9.5s → 4.1s

Mobile load (LCP)homepage, Lighthouse mobile, old and new site measured the same day

4.9 MB → 769 KB

Page weighthomepage, everything the browser downloads

89/92 → 100/100

Accessibility · SEOLighthouse scores, old site vs new

Context

Khyber Pass Gallery is a family business, in Laguna Beach since 1980: Persian and Afghan rugs, tribal jewelry and antiques, plus a rug-care service for appraisal, cleaning, restoration and rentals. The old site ran WordPress and WooCommerce on an end-of-life version of PHP. It was slow on phones, and inquiries landed in an inbox with no system behind them.

Before and after: the old store first, then the rebuilt gallery.

The Challenge

  • Speed on phones. In Lighthouse's mobile test the old homepage took 9.5 seconds to show its main content, and it weighed 4.9 MB.
  • One-of-a-kind stock. Every piece is unique and many are priced on request. A generic cart-first store is the wrong shape for that; each piece needed a page that starts a conversation.
  • Two businesses, one front door. The gallery and the rug-care service serve different customers with different questions.
  • No follow-up system. There was no CRM. An inquiry was an email, and whether it got answered depended on who saw it first.

What I Built

The gallery site. Astro on Cloudflare Pages: an exhibit-style catalog with category rails, a page for every piece with an "Ask about this piece" inquiry, plus story, visit and special-order pages. The catalog came straight off the old store's public API, no admin access needed, with every original photo re-encoded and self-hosted as WebP.

The rug-care site. A separate five-page site for appraisal, cleaning, restoration and rentals, cross-linked with the gallery so each customer lands on the door meant for them.

Lead capture. Five forms across both sites post to one API on Cloudflare Workers, built with Hono. Every inquiry is written to an append-only log first and then passed on to wherever it needs to go, so a destination being down delays a lead instead of losing it. The API has 109 automated tests.

The CRM. One I built on Cloudflare (Workers, D1, KV, Browser Rendering for PDFs, Cron Triggers) with an Astro front end, shaped around the gallery's own documents: boards, contacts with full timelines, a shared inbox, work orders, invoices, appraisals, tasks and an activity log. Leads come in through a keyed API, and the rest sits on a typed JSON API under the interface.

Lead automation. When a new inquiry arrives, the team gets an alert and the customer gets an acknowledgement within one five-minute cycle. If nobody has moved it in 48 hours, a follow-up goes out. When the customer answers, the reply lands in the CRM thread and the sequence stops. Outbound mail runs through Resend; inbound runs through Cloudflare Email Routing into the Worker.

The lead flow: five forms post to one API, which logs the inquiry and passes it to the CRM; the CRM alerts the team, acknowledges the customer, follows up after 48 hours, and threads the customer's reply back in

SEO and tracking. Canonical URLs, sitemaps, structured data (Store, LocalBusiness and a Product entry for each priced piece), a real 404 page, per-site Open Graph images and favicons, and a Google tag that records a lead on all five forms.

Results

  • Largest Contentful Paint (mobile): 9.5 s on the old site, 4.1 s on the new one.
  • Lighthouse performance (mobile): 59 before; 78 for the gallery and 82 for rug care after.
  • Homepage weight: 4.9 MB down to 769 KB.
  • Accessibility: 89 to 100.
  • SEO: 92 to 100.

Homepage, Lighthouse mobile, both sites measured on October 17, 2026, with ad and analytics tags blocked on both.

Every new inquiry now gets an alert to the team and an acknowledgement to the customer within five minutes, with a 48-hour follow-up behind it. Before, it was an email in an inbox.

Timeline

  • August 19, 2026. Audit of the old site; first build live on Cloudflare Pages.
  • August 20. The rug-care site.
  • September 3. Full catalog migrated, with every photo self-hosted.
  • October 9. Lead tracking on all five forms.
  • October 14. Live on khyberpass.us.com.
  • October 15. CRM lead automation live.
  • October 2026. Ongoing. Booking and online payments are on the roadmap.

What I'd repeat

Log the lead before doing anything else with it. Writing every inquiry to an append-only log before any integration touches it means a failure downstream can be replayed from the log instead of costing a customer.

Shape the CRM around the business's real documents. An off-the-shelf CRM would have meant bending a rug gallery into a sales pipeline. Building around their work orders, appraisals and invoices shaped the system around how the shop already works.

Need a similar engagement?

Book a call →