The Problem (Before)
The owner came to me with a website that looked fine and a business that wasn't. He put it like this on Day 1:
"I have a website but I don't have a sales department. Inventory updates take four hours. I have no idea where my leads come from. My customers call me to ask about their order status because there's nowhere else to look. I'm losing deals because I can't follow up fast enough — and I can't even tell which deals I'm losing."
— Anchor-build ownership, Day 1 of engagement
The technical reality matched:
- WordPress on PHP 7.4 — frequent timeouts under normal traffic
- 745-second listing page loads (yes, twelve minutes — the worst pages literally couldn't render before the connection dropped)
- One contact form on the contact page; no source attribution; no follow-up automation
- Inventory updated by hand across four marketplaces — typically a 2-week lag from photo to listing
- Customer database in 3 places: a CRM nobody loved, a spreadsheet, and the owner's head
- Email deliverability ~22% — most messages going to spam
- No customer portal — every order-status question came in by phone
- No reporting — close rate by source, by rep, by product? Not knowable.
If any of that sounds like your business right now, you're the reason I built this.
The Build (25 Development Phases)
The platform shipped over 25 discrete development phases from foundation to v13.5.0. Each phase had a tight scope, a milestone, and a deployment. Here's the architecture, system by system:
Homepage of the live anchor build: Apple glassmorphism design system, custom brand palette, custom display font for header, lead-capture above the fold, premium demographic targeting. Same architecture, different category, gets re-skinned for your business.
Foundation Layer
- Migrated PHP 7.4 → 8.2 (4x throughput improvement before any code changes)
- Cloudways managed hosting on DigitalOcean (138.197.208.98, app slug `nqnwsnagax`)
- Cloudflare Pro: CDN, WAF, DDoS, Argo, image optimization
- Custom WordPress theme — no off-the-shelf parent theme, no page builders, no plugin bloat
- Wordfence + manual security review on every release
- UptimeRobot monitoring with 1-minute checks, alerts to phone
Inventory Layer (the catalog operating system)
The custom inventory plugin — currently at v13.5.0 — runs the whole inventory side. Key architectural decisions:
- Custom post type with 38 custom fields backing every unit (year, make, model, dimensions, hours, price, MSRP, condition, location, fuel, capacity, status, sort-priority, etc.)
- Bound Google Apps Script on a Master Inventory Sheet — the team updates listings in a Sheet they already know how to use, the site updates in real time. Custom in-Sheet menu with checkbox bulk operations, status-driven auto-archive, category-grouped insertion
- Image pipeline: bulk upload → auto-watermark via PHP GD library → multiple resizes → CDN. Google Drive is the source of truth, daily cron syncs to WP media
- Sort priority logic using a SQL CASE expression so featured listings naturally rise without breaking pagination
- Listing render via custom theme template — inline critical CSS, lazy-loaded everything else. 745s → 0.4s, a 1,800× improvement
Lead Engine
The lead engine is where most small-dealership sites fail invisibly — they look fine but they're not actually capturing or routing. The build:
- Multi-touch capture: financing, test-drive/demo, contact, callback, trade-in — five surfaces, each tuned to a different stage of intent
- Source attribution on every lead (UTM, referrer, page, ad-set), stored as JSON
- Throttle gates: 5/wk limit per email/IP combo with opt-out — prevents single visitor flooding the inbox
- Routing logic: leads → sales@ with CC paths; rules engine routes by territory or product
- Custom CRM schema: 3-table design with proper foreign keys, JSON activity timeline column, full audit trail
- 8 query helper functions (by status, by source, activity, recent, by-email, by-owner, count-by-period, pipeline-value) — clean abstraction so admin views don't need raw SQL
- Credit application auto-fill from prior visits — visitor comes back, financing form pre-populates from their last lead record
Email Engine
- Brevo dedicated SMTP on a verified sender domain (DKIM + SPF + DMARC = 9.7/10 mail-tester score)
- Seven internal modules: graph-api, email-inbound, email-responder, email-approval, email-search, sales-intelligence, sales-insights-query
- Sequence module: multi-step nurture with conditional branching (if opened email 3, send X; if not, send Y)
- Inbound listener: replies route into the lead's record automatically — no human triage
- Approval workflow: outbound campaigns require admin sign-off before sending
- Search: full-text across every email ever sent or received in the system
- Result: deliverability went from ~22% to 95%+. Most replies hit inbox same-minute, not next-day.
Customer Portal
- /my-account/ route → custom PHP shortcode
[bbi_my_account] in buyer-portal.php
- OAuth: Google, Apple, Microsoft (post-cutover 2026-04-23 — production fix shipped same day)
- 8 tabs: saved listings, applications, documents, communications, orders, sellers, profile, settings
- Seller portal (for consignors): 3-binding architecture (lead row + owned-units row + user-meta) — the only safe way to give a seller access to their own unit without breaking buyer queries
- Document exchange: signed agreements, financing approvals, ID verification — all logged, all timestamped
Marketplace Syndication
- 6 automated feed integrations as the starting point — wired to the marketplaces that matter for the category (we re-wire to yours)
- Encrypted credentials: per-marketplace creds AES encrypted at rest
- Scheduled push: nightly off-peak with morning summary email
- Failed-push alerts route to admin (so the marketplace doesn't show a stale listing before we know)
- Two-way: marketplace inquiries flow back into the unified lead inbox
- Quality control: never publish a listing missing required fields — dry-run validation before push
AI Layer (with hard cost discipline)
- Anthropic Claude via a central API wrapper — 75+ call sites across the codebase, each with backward-compatible nullable params
- 144 AI-generated catalog descriptions in the brand's specific voice (style-guide-enforced: warm, factual, no hype, locally relevant)
- Cost controls: Haiku for chat (cheap), prompt caching (90% reduction on repeat content), 200 calls/day cap, $0.50–$2/day target — actual spend has stayed in band
- 24 modules disabled at launch to optimize cost; can flip back on per-module as ROI proves out
- Sales-intelligence: natural-language queries across the lead base ("show every cold lead from out-of-state in the last 30 days that asked about financing")
Conversion Tools
- Priority Listing tiers ($500/$1K/$2K) — revenue layer for marketplace-style clients, state-machine driven (free → priority → premium → expired), with seller-verification gate
- Financing calculator tuned to your category (e.g., "cost-per-day-owned" framing) — converts traffic to financing leads at meaningfully higher rates than a standard payment calculator
- Test-drive / demo / showing modal site-wide via footer injection — one component, every page
- 8-section inventory pages: hero, trust, browse, grid, financing, consignment, FAQ, footer — each tested independently for conversion lift
- Watermark: GD-library admin backfill, drive-sync daily, brand consistency at scale
SMS Engine
- Kenect integration — sole text surface (post-pivot 2026-04-25, sms: CTAs deprecated to consolidate inbox)
- Two-way texting from the same shared inbox as email
- Compliance: opt-in capture, opt-out honored, quiet hours respected
- Templated quick-replies for common scenarios
Mobile / PWA
- Progressive Web App for the team — installs on iOS / Android home screens
- Push notifications for new leads, hot signals
- Offline-capable for showroom use (no signal at the dock)
- Same admin features as desktop, touch-optimized
The Phases (How It Got Built)
Phase 0–4Foundation
Hosting, PHP 8.2 migration, custom theme, design system, security baseline.
Phase 5–9Inventory plugin
Custom inventory plugin v1, custom post type, 38 fields, image pipeline, watermark.
Phase 10–13Lead engine
3-table CRM schema, capture forms, source attribution, routing rules.
Phase 14–17Email infrastructure
Brevo SMTP, 7 modules, sequences, inbound listener, sales intelligence.
Phase 18–20Customer portal
/my-account/, OAuth, 8 tabs, seller portal, document exchange.
Phase 21–23Marketplaces & AI
6 feed integrations, AI catalog descriptions, sales-intel query layer.
Phase 24–25Polish & PWA
Conversion tools, mobile PWA, cost controls, production hardening.
Post-Launchv13.5.0 ongoing
SMS pivot, lead-throttle, leads-page rewrite, OAuth fix, post-cutover hardening.
The Stack (Every Component)
CMSWordPress 6.9.4
BackendPHP 8.2, custom plugin
HostingCloudways (DigitalOcean)
CDN / WAFCloudflare Pro
Email SMTPBrevo (dedicated)
SMSKenect
AIAnthropic Claude
Sheet integrationGoogle Apps Script (bound)
AuthOAuth: Google / Apple / Microsoft
MonitoringUptimeRobot + Wordfence
AnalyticsPlausible (privacy-first)
BackupsDaily + off-site, monthly verified
DatabaseMySQL 8 with custom schema
Design systemApple-glass, Hobo display, Inter body
MobilePWA (no app-store gatekeeping)
Marketplace feeds6 automated, encrypted
The Numbers (After)
Listing page load time
745 sec
0.4 sec
Email deliverability rate
~22%
95%+
Marketplaces syndicated
0 (manual)
6 (automated)
AI-generated descriptions
0
144
Customer database location
3 places
1 unified
Lead source attribution
None
Every lead, every field
Customer portal
None
8-tab self-service + OAuth
Inventory update cycle
~4 hours
~4 minutes
Daily AI compute spend
N/A
$0.50 – $2.00 (capped)
Hot-lead routing latency
Manual (hours)
<60 seconds
What This Means in Plain Language
Inventory updates that used to take 4 hours now take 4 minutes. The owner can see every active lead, every closed deal, every in-progress sale from one screen. Leads route to the right rep within 60 seconds of submission. Customers self-serve order status, document exchange, and saved searches — phone volume on routine questions dropped meaningfully. The AI describes new units automatically at a fraction of a cent per description.
None of this is theoretical. It's running every minute of every day on the live anchor build — click here if you want to audit it yourself.
We came to GAP Industries with a website pretending to be a sales tool. Eighteen months later we have a real digital sales department. Inventory updates went from hours to minutes. Leads route automatically. Our customers self-serve everything they used to call about. The build was on time, the price was what they said it would be, and Garrett actually picks up the phone when something breaks.
— Anchor-build ownership
Why This Matters For Your Industry
The anchor build happens to be a boat-and-RV dealership, but the system isn't a boat-and-RV system. It's a multi-touch sales operating system that happens to be configured for that category. The catalog can hold any kind of unit. The lead schema works for any sales cycle. The email engine, customer portal, marketplace layer, AI, mobile PWA — all category-agnostic.
That's the GAP Industries thesis. Each new build (insurance, real estate, RV, golf carts, equipment rental, planes, exotics, individual salespeople, classic-and-foreign-vehicle dealers, your industry) inherits the proven core. I customize the 2–3 systems that are category-specific (catalog schema, marketplace integrations, regulatory compliance if any). The other 9–10 systems work out of the box.
That's why I can build in 30 days and keep it running at a flat monthly rate with dev hours included. A from-scratch agency build of this scope is genuinely $200K–$500K and takes 12–18 months. I'm not building from scratch — I'm adapting. You get the result, I skip the reinvention, the price reflects both. See full pricing →
What's Coming Next
The next adaptation in build is a lead-generation and compliance platform for licensed insurance agents — multi-state, regulator-aware, with quality-gated lead scoring and state-restricted routing. After that, the roadmap names health insurance, real estate, individual salesperson SaaS, and small dealerships of every category off-the-shelf systems ignore.
Specifics that change per category:
- Catalog schema reshapes around what you sell (units → policies → properties → services)
- Lead routing rules pick up your category's gates (license territory, license tier, certified-agent status)
- Compliance layer picks up the regulator-aware email and retention rules for your industry
- Customer portal tabs change to fit your customer's actual journey
- Two-firewall doctrine — verticals never share accounts, sheets, keys, infra, or IP egress
What stays the same: 85% of the platform. CRM, email engine, customer portal, AI layer, mobile PWA, infrastructure, design system primitives, document exchange — all reused.
You probably have the same three problems. Let's find out.
20 minutes. I'll share screen on the live anchor build, then we'll look at your business together -- missed calls, form failures, response-time gaps. If the problems match, the fix is already built.
Show Me What's Broken