Command Center

🔒 Topher-only. Live API key + internal wiring plan. The key is stashed in ~/.aria-secrets as BOATS_COM_UJ_KEY (chmod 600, not committed). Do not paste into client-facing copy, Eric materials, or CC public pages.

🎯 The 6/5 prediction just came true

The integration map from 6/5 told you exactly this would happen: "UJ requests an API key through their Boats Group rep… per-dealer agreement naming Aspire as authorized website provider (dealer ID 28802)." Five days later, Jason Smith emailed the working key. No paperwork friction surfaced. The "BUILD ON THIS" verdict on Boats Group is now empirically validated.

This means the new uglyjohns.com inventory pages can be powered by a clean JSON feed — completely decoupled from DealerSpike. The DealerSpike contract becomes a clean cutover, not an inventory-migration problem.

Endpoint specs (verified live)

Base: https://api.boats.com/inventory/search

Auth: URL query param key=<BOATS_COM_UJ_KEY>

Format: JSON, { numResults, results: [...] }

Pagination: start=N (offset) + rows=M (page size) — Solr-style

Full pull: ?key=…&rows=200 → all 117 in one 1.6 MB call (~0.4 s)

Filter: SalesStatus=Active (115) · sale pending (2) · on-order (0) · Inactive (0)

Fields per record: 77 keys (make/model/year/price/photos/description/specs/location/sales-rep)

Photos: CDN URLs on images.boatsgroup.com, public, no auth (HTTP 200 verified)

Docs: http://api.boats.com/docs (JS-rendered, slow; partner-facing reference)

What's actually in the feed

117

boats listed

$13,171,853

total listed value

$153,161

avg ticket

16.5

photos per boat (avg)

Boat locations (the 5-marina footprint — verified)

  • Rogers, AR45
  • Afton, OK43
  • Catoosa, OK24
  • Eufaula, OK3
  • Ketchum, OK1
  • Austin, TX1

All records show "Afton, OK" as the office of record; BoatLocation gives the real per-boat slip.

Top brands carried

  • Nautique23
  • Sea Ray16
  • Premier14
  • Monterey11
  • Harris11
  • Cruisers Yachts6
  • Pardo Yachts4
  • MasterCraft4

💡 What the data tells us (strategic)

1. Zero 360 photos. Zero video. Zero immersive tours. The feed has flags for all three (Image360PhotoPresent, EmbeddedVideoPresent, ImmersiveTourPresent) — and UJ is at 0/117 on each. The Insta360 X5 walkaround moat from the 6/2 research is even bigger than projected: when UJ adopts it, every single listing in the feed surfaces an empty-vs-rich differentiation, and Boats Group's own discovery surfaces (boats.com, YachtWorld) will rank UJ listings higher.

2. 101 of 117 records are CoOpIndicator=true. That means 86% of the inventory is broker-co-op eligible — boats UJ can sell from other dealers' inventory, splitting the commission. The new site should expose this aggressively; competing single-dealer sites can't.

3. The feed is rich enough to skip a CMS. 77 fields per record including GeneralBoatDescription (HTML, already populated for all 117), AdditionalDetailDescription, full engine specs, dimensions. We render directly from the feed — no editorial layer to maintain. UJ updates Boat Wizard once, the site reflects it.

4. Average ticket $153K, top end $899K. The integration map's pricing-anchor math holds — at this ticket range, a single additional sale per quarter covers the entire Aspire engagement.

5. Sales rep names are exposed (e.g. "Max Jordan, max@uglyjohns.com"). The new site can route inquiries directly to the listing's owning rep (white-glove signal vs. generic web-form), but we should confirm with UJ before exposing personal emails publicly — likely route through a Worker that obscures and forwards.

Sample record — DocumentID 9473572 (2009 Supra Launch 21)

Make/Model/Year: Supra Launch 21 (2009)

Price: $36,000 USD · 21 ft · Fiberglass · 514 engine hours

Sales rep: Max Jordan (max@uglyjohns.com · 918-266-6633)

Boat location: Catoosa, OK

Photos: 13 (XLARGE on images.boatsgroup.com)

Source platform: IMT (BoatWizard back-office)

Last-modified: 2026-05-27 (the feed is current — Boat Wizard ↔ API is live)

Full JSON saved at ~/projects/clients/ugly-johns/.research/sample-record.json (gitignored).

🔧 Wiring plan — three options, pick one

Option A — Build-time fetch (simplest, recommended for Phase 1)

Astro getStaticPaths() calls the API at build time, generates a static page per boat, photos hotlinked from images.boatsgroup.com. CF Pages rebuild fires on a daily cron (or webhook from Boat Wizard if available). Zero runtime infra. Inventory page loads instant. Trade-off: ~24 h staleness on price changes.

Option B — Edge-cached Worker proxy (live, fast, recommended for Phase 2)

CF Worker fronts the API, caches responses 5–15 min, scrubs/normalizes the response, hides the key. Astro pages fetch the Worker, render dynamically. New listings appear in minutes, not days. Cost: one Worker + KV. This is the right shape long-term.

Option C — Sync to GHL custom objects (Circa's later play)

Worker pulls the API on a schedule, upserts records into GHL Custom Objects as "Vessel" records. Then GHL becomes the read source for site + automations + sales-rep routing. Couples inventory to CRM. Bigger lift; only worth it once Circa is engaged. Ties to CLI-51.

🎯 Aria's recommendation

A → B → C, in that order. Ship A this week (decouples us from DealerSpike, gives Jaime a real design surface to lay out, gives Eric a "look at this" demo). Promote to B before launch (live updates beat daily-stale on a luxury-goods site). C is a Circa-era project, not blocking Phase 1.

Action items

  • Topher (5 min): Confirm we should reply to Jason now — and if so, with what (acknowledge receipt + start building, or hold for terms?). Suggested reply drafted below.
  • Topher (judgment): Confirm whether Aspire has the per-dealer data-feed agreement with Boats Group in writing yet, or if Jason just shared the key informally. Want a paper trail before this hits production.
  • Aria (Tier-1, this week): Build Option A scaffolding in ugly-johns/src/pages/boats/. Listing index + per-boat detail page. Dispatch to Vegas for visual design layer once Jaime's brand direction lands.
  • Aria (Tier-1): File Linear CLI ticket (below) to track the integration work.
  • Topher (judgment): Personal email exposure for sales reps — public or proxy? Default to proxy unless you say otherwise.
  • Eric channel: Do NOT mention the API key, internal wiring options, or the DealerSpike-decoupling angle on the Eric-mentorship workspace. This is internal Aspire-build strategy.

✉️ Suggested reply to Jason (Chris voice, no em-dashes)

Hey Jason, Yep, this is exactly what we needed. Tested the endpoints and everything is coming through clean. 117 boats, full photos, descriptions, specs, sales-rep info, the works. We can start wiring this into the new site immediately. One thing we want to confirm on your end before we go live: is there a per-dealer data-feed agreement in place with Boats Group that names Aspire as the authorized website provider? They have an account-rep paperwork process for that. If not, who is your Boats Group rep and we can get it kicked off in parallel so we are not flying without it when the new site replaces the current one. We will keep the key on our side locked down. Server-side only, never exposed in the browser. Thanks for moving fast on this. Chris

Per voice doctrine: "Hey Jason" not "Hi", commas not em-dashes, signed "Chris" not "Topher". Ready to copy/send.