Command Center

🧭 ← Pre-Meeting Talking Points (the prep sheet Topher walked in with)

This page is the recap — what Bryan actually said + the action items + Vegas briefs.

Outcome

✅ Site approved direction

~25 content tweaks to ship

Domain

Squarespace (~$15/yr)

Email = Zoho. Both confirmed.

CRM

Markate (~$60/mo)

Bryan sharing login → API check

Next call

Late next week

Topher OOO early week

🎯

The headline

What changed

Bryan walked the launch site with Topher + Jaime for 1h 26m. He likes the direction. No structural objections. The meeting was a content-review pass: Bryan flagged ~25 specific corrections (wording, dates, products, prices, hours, generation count) that need to land before cutover. The frame "consulting, not pitching" held — most of the call was Bryan explaining his actual operating reality (the truth that lives outside the playbook) and Topher mapping it to site changes in real time.

The big content correction: Bryan's prior SEO friend over-emphasized "low-moisture cleaning" (VLM) on his Squarespace site, and that emphasis carried into our build. Now customers request VLM when they need hot-water extraction (HWE), and Bryan spends call time redirecting them. Our site needs to lead with HWE as the default and demote VLM to a situational option. Bryan also moved off enzymes (Bio Conqueror 105) to oxidizers (Unchained 15% peroxide) as the primary pet-treatment chemistry — products section needs a full rework.

The unlock landed organically: domain is at Squarespace, email at Zoho. Both annual, both cheap. Bryan confirmed he understands his bcleancarpet.com URL stays the same — we just swap the engine underneath. No transfer required; we'll point nameservers when ready.

CRM angle: Bryan loves Markate (~$60/mo) — text reminders, Square integration for cards, PayPal fallback, customer history with prior-work-orders. He's sharing his login so Topher can check Markate's API for form-to-CRM passthrough wiring. Voice AI was discussed and Bryan's in — but website ships FIRST, voice layers in second.

📌 Key decisions locked in the meeting

  • Migration path = Path A (full migration) — Bryan understood the URL stays, the engine swaps, nameservers point to us when ready. No "MVP-first" fallback needed; he's bought in.
  • Phone topology — Bryan keeps his current cell as the business number (it's the published number on Google + everywhere). If he ever splits later, he'd get a NEW personal number and leave the existing one with the business.
  • Voice AI sequence — website ships first, voice agent layers in second. When it arrives: voice answers, handles easy Qs, books QUOTE calls (not full appointments), forwards live calls to Bryan when needed. Bryan agreed to the phased rollout.
  • Pricing display philosophy — drop per-tile dollar amounts from homepage; keep a clean pricing-LIST page (not the 3-tier package calculator). Defer the interactive guided-quote widget; Bryan says "later, when I figure out how I want it." Carry as a future CLI ticket.
  • Personality / tone — Bryan loved the "off the clock" section and Wendy's-style humor. Keep going. "People like dealing with humans."
  • Hiring page — suppress. Not actively hiring.
  • Team section — add Troi (full-time, 1-year anniversary today) and Ayla (his niece, turns 14 in a week, part-time family help).
  • Bryan's homework — share Markate login + his text-autofill keywords + better photos + finalized product wording + FAQ review.
  • Topher's homework — ship Sprint 1 + 2 + 3 of Vegas changes; check Markate API; bring follow-up agenda for late-next-week call.

🛠️ Action items — site changes (full list)

Bundled into the three Vegas handoff prompts below. Each numbered item maps to a line in a sprint.

Sprint 1 — Homepage + About + Footer content corrections (27 items)

  • "3rd-generation carpet" → "2nd-gen carpet, 3rd-gen in the trade" (grandpa was janitorial supply)
  • "Established 2007" → "Established 2018"
  • "96 reviews" → "100+ reviews"
  • Strip all prices from the 4 service tiles (basement = 800 sqft objection)
  • Demote "low moisture cleaning" subtitle emphasis → "professional truck-mounted hot water extraction" as default
  • Pet tile: drop "Bio Conqueror 105" / "live enzyme" reference; use "specific chemistry blend"
  • "Bryan answers, Bryan does the work" → "Bryan answers the phone, him and his crew clean your carpet" (acknowledge Troi)
  • Drop "30-minute response" promise (can't guarantee)
  • Soften "the number we quote is the number you pay" with sqft + scope-change wiggle room
  • "2,400 jobs completed" → "10,000+ cleanings completed"
  • Add truck-mounted equipment credibility line ("same standard on every truck")
  • Add 4th cert badge: IICRC UFF (Upholstery and Fine Fabric)
  • Footer phone: fix to (740) 913-4494 (currently wrong test number)
  • Hours: Mon-Fri 8-6, Sat 9-5, Closed Sunday (match GBP, not the 6am-9pm wrong default)
  • About: grandfather "purchased and operated" KE·WA·PA (he didn't FOUND it)
  • Timeline labels: "1970's" with apostrophe + lowercase, not "1970S"
  • Father: "ran Central Ohio carpet cleaning for 20 years" (exact)
  • Timeline entry: "2018 — Bryan started B Clean" (match new establish date)
  • Years-of-experience headline: "30+ years of combined experience" framing
  • Team: add Troi (Lead Technician, hired 6/9/25, 1-year anniversary TODAY)
  • Team: mention Ayla (niece, 14, part-time family help, "neighborhood kids have B Clean hoodies")
  • Suppress "We're Hiring" page
  • "Westerville Quality Business Award" — verify vs Nextdoor Neighborhood Fave; consolidate if duplicate
  • Replace mismatched bottom-left before/after slider (or remove until photos arrive)
  • Profile photo: acceptable v1, Bryan will send replacement
  • Confirm 4-6h dry time language matches everywhere
  • "Off the clock" section: keep as-is, Bryan loves it

Sprint 2 — Pricing page rework + new Satisfaction Guarantee page (15 items)

  • Replace 3-tier package calculator with clean pricing LIST page (match Bryan's Squarespace structure)
  • Per-room: 1 room $59 / 2 rooms $109 / 3 rooms $139 / +$40 each additional
  • $119 job minimum — call out prominently + clarify it doesn't stack
  • Add-on pricing: Carpet Armor $20/rm, Pet treatment $20/rm, Pet Hair Rx 33%, grout seal ~50%
  • Specialty stain pricing list ($30 stain removal — red dye, makeup, pink juice, up to 1 sqft)
  • 225 sqft = 1 room rule, +$0.19/sqft for larger rooms, open floor plans are MEASURED
  • Drop any "VLM available on request" line
  • Soften "no surprises ever" with sqft + scope-change wiggle language
  • Keep "why pricing is published" rationale (key differentiator)
  • Homepage: "See full pricing →" link beneath service-tile grid (post-Sprint-1 strip)
  • DEFER interactive guided-quote widget (Bryan: "later, when I figure out how I want to do it")
  • NEW PAGE: /satisfaction-guarantee — 30-day spot, 60-day stain, wicking return, callbacks free
  • Guarantee page: reasonability fine print (worn polyester, tile cracks, etc.)
  • Report-within-7-days clause + (740) 913-4494 contact
  • Link "100% satisfaction guaranteed" homepage stat → new guarantee page

Sprint 3 — Services + Products rework + Sprint 1 consistency cleanup (16 items)

  • Whole-site sweep: pull back "low moisture cleaning" emphasis everywhere
  • HWE = default + recommended; VLM = situational (commercial, apartments)
  • Add educational HWE vs VLM section (explains wicking + why HWE prevents "spots come back")
  • REPLACE brand-name product list with "Safety Highlights" framing (no VOCs, no caustics, pet/kid safe, everything rinsed, green-safe)
  • Drop Bio Conqueror 105, Citrus Slam, Carpet Armor (named), Superball-as-rinse-agent (it's a spotter)
  • Reference Black Label by Truck Mount Forums as the 99% green-safe pre-treat (only if naming a product at all)
  • Pet treatment: "UV inspection + specific chemistry blend" (not enzyme/oxidizer naming)
  • Carpet service: HWE default, eco/water-only as sensitive-household callout, drop VLM-first comparison
  • Upholstery: pull "fabric armor" brand name; verify Pet Hair Rx at 33% with Bryan
  • Tile + grout: largely fine, just sweep for VLM emphasis
  • Pet stain detail: drop Bio Conqueror naming, use generic chemistry-blend wording
  • Cleanup (from Sprint 1): "96" → "100+" reviews GLOBAL (TestimonialWall, reviews, before-after, blog)
  • Cleanup: meta/SEO descriptions in Base.astro + index.astro ("Third-generation carpet care… 96 five-star" → updated)
  • Cleanup: FAQ.astro homepage Bio Conqueror 105 / live-enzyme reference → chemistry-blend framing
  • Cleanup: satisfaction-guarantee.astro (Sprint 2) Bio Conqueror reference
  • Cleanup: data/site.ts canonical product data + service-areas/[slug] schema text

🎰 Vegas handoff prompts (copy-paste ready)

Three separate Vegas chats. Run them sequentially — Sprint 1 deploys before Sprint 2 starts. Each prompt is the canonical brief from build-brief.mjs --agents vegas --client b-clean-carpet --task build + the meeting-specific change payload.

📋 Prompt 1 — Vegas Sprint 1 (Homepage + About + Footer)

Click to expand the copy-paste prompt
══════════════════════════════════════════════════════════════════
ASPIRE DIGITAL — MISSION (non-negotiable)
══════════════════════════════════════════════════════════════════
Bulletproof digital work for small businesses — websites, brands,
automation, and ongoing care — built by AI agents held to a
craftsman's standard.

The Five Commitments:
  · Quality over speed
  · Signal over noise
  · Earn the complexity
  · Show the why
  · The portfolio is the proof

Full mission: https://playbook.madebyaspire.com/mission/
══════════════════════════════════════════════════════════════════

You are now Vegas — Website builder — Jaime's build partner.
Load your identity and rules before doing anything.

── Client ────────────────────────────────────────────────────────────
  Name: B Clean Carpet
  Slug: b-clean-carpet
  Phase: launch — Site already promoted to launch domain. Post-meeting content revisions, NOT new build.
  Studio: https://b-clean-carpet.studio.madebyaspire.com
  Launch: https://b-clean-carpet.launch.madebyaspire.com

── Working tree ────────────────────────────────────────────────────────────
cd /Users/tophermacstudio/projects/clients/b-clean-carpet
git checkout studio

── Load Vegas's identity ────────────────────────────────────────
Read these files:
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/working.md
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/preferences.md
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/mistakes.md

── Client context ────────────────────────────────────────────────────────────
  /Users/tophermacstudio/projects/clients/b-clean-carpet/{soul,context,session-log}.md  +  /Users/tophermacstudio/projects/clients/b-clean-carpet/CLAUDE.md (if exists)
  /Users/tophermacstudio/projects/clients/b-clean-carpet/ghl-knowledge-base.md  (canonical content source — update this too if facts change)

── Deploy + review (Studio-Always, 2026-04-25) ───────────────
  Jaime reviews → https://b-clean-carpet.studio.madebyaspire.com
  Deploy → `npm run deploy:studio`
  Cadence: deploy + share studio URL after every meaningful change. Surgical commits (`git add <path>`).

── Shared library first ────────────────────────────────────────
  /Users/tophermacstudio/projects/aspire-clients/shared/components/  (10 components)
  /Users/tophermacstudio/projects/aspire-clients/shared/design-tokens.css  (per-brand override in client global.css)
  quality-check is mandatory after code changes (0 violations to ship).

── Rules ────────────────────────────────────────────────────────────
1. SHARED LIBRARY FIRST. Custom is last resort — extend a shared with a prop/slot first.
2. NEVER narrate. Acknowledge → build → share URL. Max 3 messages per task.
3. NEVER share file:// paths or .pages.dev / .workers.dev URLs.
4. Brand is LOCKED in soul.md. Variation goes in client global.css overriding shared/design-tokens.css.
5. ALWAYS run quality-check after code changes — 0 violations to ship.
6. STUDIO-ALWAYS — `npm run deploy:studio` + share studio URL after every meaningful change.
7. Commit + push surgically — `git add <path>` for files you actually changed, never `git add -A`.
8. After 3 failures on the same problem, STOP and ask for help.
9. Do NOT spawn sub-agents — they timeout in cloud VMs.
10. DIRECT AUTHORITY: repo create, CF deploy + custom domain on madebyaspire.com, studio→launch promote. CF token at `~/.aspire.env`.

── Confirm (≤50 words) ────────────────────────────────────────
State: working on B Clean Carpet post-meeting revisions. Then WAIT — don't build until told the specific sprint.

══════════════════════════════════════════════════════════════════
SPRINT 1 — HOMEPAGE + ABOUT + FOOTER CONTENT CORRECTIONS
Source: B Clean meeting transcript 2026-06-09, Bryan Wilson review.
Path-level: do all of these as ONE pass, deploy:studio once, share URL.
══════════════════════════════════════════════════════════════════

HOMEPAGE — HERO

1. "Third-generation carpet care" → "**2nd-generation carpet, 3rd-generation in the trade**"
   Why: Grandpa ran a janitorial-supply company (KE·WA·PA), not carpet. Dad did carpet. Bryan does carpet. So 3 generations in cleaning trades, 2 generations in carpet specifically. Update soul.md taglines AND any place this string appears.

2. "Established 2007" → "**Established 2018**"
   Why: Bryan started cleaning carpet (under his own brand) in 2018. The 2007 date came from somewhere else (possibly KE·WA·PA's date or a guess) and is wrong. Update ghl-knowledge-base.md too.

3. "96 five-star Google reviews" → "**100+ five-star Google reviews**" (use the "+" so it scales — he's at 103 today)

HOMEPAGE — FOUR SERVICE TILES

4. **REMOVE all prices from the four service tiles.** Carpet "$59/room", Upholstery "$49/chair", Tile/Grout "$30/bathroom", Pet "+$20/affected room" — strip the dollar amounts entirely.
   Why: Prices imply minimums. Bryan's example: a basement can be 800 sqft alone — one "room" can run higher. Customers anchor on the floor price and complain when reality is different. Keep the captions/descriptions, drop the price line.

5. **Service tile subtitles — rework the "hot water extraction or low moisture cleaning" framing.**
   Why: Bryan's prior SEO friend over-emphasized low-moisture (VLM) cleaning on his current Squarespace site and now customers REQUEST low-moisture when they should get hot-water extraction. He spends time on calls redirecting them. We're pulling the same emphasis forward — stop.
   New framing for carpet tile subtitle: "Professional truck-mounted hot water extraction" (default/recommended), and remove the prominent low-moisture mention. Low-moisture stays available as a method for specific scenarios (commercial, apartments), but it is NOT a featured option on the homepage. Same rule applies on the Services page rework (Sprint 3).

6. **Pet treatment tile — remove the "live enzyme" / "Bio Conqueror 105" reference.**
   Why: Bryan has shifted from enzymes to oxidizers (specifically "Unchained", 15% peroxide) because oxidizers dissolve urinary salts faster. Enzymes are still safe + still in the kit, but not the lead. Reword to something like: "UV inspection finds every spot. Professional chemistry breaks down urinary salts at the source." Drop the brand name entirely — Bryan will resend a wording variant.

HOMEPAGE — "BRYAN ANSWERS THE PHONE" / TRUST PROMISE SECTION

7. "Bryan answers the phone, Bryan does the work" → "**Bryan answers the phone, him and his crew clean your carpet**"
   Why: Troy (Troi — TROI) works for him full-time and Ayla (his niece, part-time, turns 14 in a week) helps as needed. "Bryan alone" is wrong AND undersells the team.

8. **REMOVE the "text back within 30 minutes" promise.**
   Why: Bryan tries to hit it but can't guarantee it. He'd rather promise "responds quickly during business hours" or similar honest framing. He sometimes sends an auto-text "messages received, someone will be back with you shortly" when busy — that's the realistic experience.

9. **Soften the "the number we quote is the number you pay" verbiage** (appears in the trust strip + likely on pricing).
   Why: Too absolute. Bryan can't promise it because a basement might be 800 sqft. Suggested rewrite: "Promised pricing — quotes are good for rooms up to 225 sqft each. If we get there and scope changes, we tell you before we start." Wiggle-room version.

HOMEPAGE — STATS / NUMBERS

10. **"2,400 jobs completed" → "10,000+ cleanings completed"**
    Why: Bryan does ~5 jobs/day × 5 days × 52 weeks × 7 years = ~9,100. Plus Troy's jobs. Conservative ceiling = 10,000+.

11. **Equipment credibility — add a line about truck-mounted equipment.**
    Why: Both Bryan and Troy run identical truck-mount extractors. Bryan's competitive differentiator vs. local low-moisture-only competitors (Dry Step, Capsule Clean/EC Solutions). Suggested phrasing: "Every truck runs professional truck-mounted hot water extraction equipment — same standard whether Bryan or Troy is on the job."

HOMEPAGE — CERTIFICATIONS BADGES

12. **Add a 4th certification badge: IICRC UFF (Upholstery and Fine Fabric Cleaning)**
    Why: Bryan holds this in addition to IICRC CCT, TMF HWE, TMF STG. Add to the badge row + the cert descriptions.

HOMEPAGE — FOOTER

13. **Phone number is WRONG in footer.** Currently shows a "740..." number that may be a Topher test number. **Real number: (740) 913-4494** (already correct in ghl-knowledge-base.md). Fix everywhere in the site.

14. **Business hours are WRONG.** Currently Mon-Fri 6 AM – 9 PM, Sat-Sun 8 AM – 8 PM. **Real hours (match Google Business Profile): Mon-Fri 8 AM – 6 PM, Sat 9 AM – 5 PM, Closed Sunday.** Update site + ghl-knowledge-base.md.

ABOUT PAGE — TIMELINE / STORY

15. **Grandfather wording** — currently implies he "founded" KE·WA·PA. He did NOT found it. He **bought it from the prior owners and grew it into what it is.**
    Reword to: "Grandfather purchased and operated KE·WA·PA Sales in Sunbury, Ohio." Or simply "owned and operated" if cleaner. Note: Bryan's dad recently sold KE·WA·PA — he still works there 5 more years for the new owner. We don't need that detail on the site, but soul.md / KB should record it.

16. **Decade labels in the timeline** — currently shows "1970S" (looks AI-generated to Bryan). **Use apostrophe + lowercase: "1970's"** (matching style guide). Same for any other decade labels.

17. **Father's run length** — "Dad ran Central Ohio carpet cleaning business for 20+ years" → keep, but specifically "20 years" (Bryan confirmed). Don't inflate.

18. **Bryan's start year on the timeline** — say "**2018 — Bryan started B Clean**" (matching the Hero "Established 2018" fix above).

19. **"3 generations in the trade"** language is fine. The shift is "carpet" vs "trade" — keep "trade" in the storytelling section, just don't say "3rd-generation carpet."

ABOUT — STATS HEADLINE

20. **"Years of experience" callout** — Bryan suggests "30+ years of combined experience" or "a lifetime in the trade" rather than a single-business-age number. Use one of those. He's been around the work since childhood; the brand is 8 years old.

TEAM SECTION

21. **Add Troy (Troi)** to the team section.
    - Name: Troi (pronounced "Troy", spelled T-R-O-I)
    - Role: Lead Technician
    - Hired: June 9, 2025 (today is her 1-year anniversary!)
    - Photo: pending from Bryan (he'll send a shot of him + Troi next to both vans)
    - Bio: TBD — Bryan to send

22. **Mention Ayla** as part-time family/team help.
    - Niece, turns 14 in a week
    - Helps as needed (cash, not on payroll — under-14 family-business exception)
    - Bryan suggested phrasing: "Bryan's niece Ayla joins the team part-time when school's out — and the kids in their Westerville neighborhood all have B Clean hoodies."
    - Use one of his existing fun photos with her.

23. **Hide / suppress the "We're Hiring" page** — not actively hiring. Don't delete the template, just remove the nav link + add `draft: true` to the route OR delete the file if cleaner.

ABOUT — "OFF THE CLOCK" SECTION

24. **No changes — Bryan loves it.** Wendy's-style humor, captures his personality. Just verify the date on the section header (was "2026" or similar — keep current).

AWARDS / RECOGNITION

25. **"Westerville Quality Business Award" line — verify the source before keeping.**
    Bryan thinks this may be the same as the Nextdoor "Neighborhood Fave" (Westerville/Granville area, last 4 years). If they're the same thing, consolidate into one line ("Nextdoor Neighborhood Fave — 4 years running, Westerville-Granville area"). Drop the standalone "Westerville Quality Business Award #1" claim if it can't be sourced. Jaime to verify if needed.

BEFORE/AFTER SLIDERS

26. **Bottom-left before/after pair is MISMATCHED** — currently shows two different carpets (left = staircase landing; right = unrelated). REPLACE or REMOVE.
    Bryan will send a matched pair separately. Until photos arrive, swap to one of the other valid pairs or remove the tile to avoid showing the mismatch.

PROFILE PHOTO

27. **Bryan's profile photo is acceptable v1** — it's from a job with his buddy Matt. Bryan will send a replacement later. Leave for now.

DEPLOY + CONFIRM

When Sprint 1 is complete:
- `npm run deploy:studio`
- Share https://b-clean-carpet.studio.madebyaspire.com
- Note any items you can't complete (photos, Troi's bio, the Westerville award verification) so they can be carried to Sprint 4 / Bryan's homework.

DO NOT START SPRINT 2 OR 3 IN THE SAME CHAT — those are separate Vegas chats with separate context windows.

📋 Prompt 2 — Vegas Sprint 2 (Pricing + Guarantee page)

Click to expand the copy-paste prompt
══════════════════════════════════════════════════════════════════
ASPIRE DIGITAL — MISSION (non-negotiable)
══════════════════════════════════════════════════════════════════
Bulletproof digital work for small businesses — websites, brands,
automation, and ongoing care — built by AI agents held to a
craftsman's standard.

The Five Commitments:
  · Quality over speed
  · Signal over noise
  · Earn the complexity
  · Show the why
  · The portfolio is the proof

Full mission: https://playbook.madebyaspire.com/mission/
══════════════════════════════════════════════════════════════════

You are now Vegas — Website builder — Jaime's build partner.
Load your identity and rules before doing anything.

── Client ────────────────────────────────────────────────────────────
  Name: B Clean Carpet
  Slug: b-clean-carpet
  Phase: launch — Site already promoted to launch domain. Post-meeting content revisions, NOT new build.
  Studio: https://b-clean-carpet.studio.madebyaspire.com
  Launch: https://b-clean-carpet.launch.madebyaspire.com

── Working tree ────────────────────────────────────────────────────────────
cd /Users/tophermacstudio/projects/clients/b-clean-carpet
git checkout studio

── Load Vegas's identity ────────────────────────────────────────
Read these files:
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/working.md
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/preferences.md
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/mistakes.md

── Client context ────────────────────────────────────────────────────────────
  /Users/tophermacstudio/projects/clients/b-clean-carpet/{soul,context,session-log}.md  +  /Users/tophermacstudio/projects/clients/b-clean-carpet/CLAUDE.md (if exists)
  /Users/tophermacstudio/projects/clients/b-clean-carpet/ghl-knowledge-base.md  (canonical content source — update this too if facts change)

── Deploy + review (Studio-Always, 2026-04-25) ───────────────
  Jaime reviews → https://b-clean-carpet.studio.madebyaspire.com
  Deploy → `npm run deploy:studio`
  Cadence: deploy + share studio URL after every meaningful change. Surgical commits (`git add <path>`).

── Shared library first ────────────────────────────────────────
  /Users/tophermacstudio/projects/aspire-clients/shared/components/  (10 components)
  /Users/tophermacstudio/projects/aspire-clients/shared/design-tokens.css  (per-brand override in client global.css)
  quality-check is mandatory after code changes (0 violations to ship).

── Rules ────────────────────────────────────────────────────────────
1. SHARED LIBRARY FIRST. Custom is last resort — extend a shared with a prop/slot first.
2. NEVER narrate. Acknowledge → build → share URL. Max 3 messages per task.
3. NEVER share file:// paths or .pages.dev / .workers.dev URLs.
4. Brand is LOCKED in soul.md. Variation goes in client global.css overriding shared/design-tokens.css.
5. ALWAYS run quality-check after code changes — 0 violations to ship.
6. STUDIO-ALWAYS — `npm run deploy:studio` + share studio URL after every meaningful change.
7. Commit + push surgically — `git add <path>` for files you actually changed, never `git add -A`.
8. After 3 failures on the same problem, STOP and ask for help.
9. Do NOT spawn sub-agents — they timeout in cloud VMs.
10. DIRECT AUTHORITY: repo create, CF deploy + custom domain on madebyaspire.com, studio→launch promote. CF token at `~/.aspire.env`.

── Confirm (≤50 words) ────────────────────────────────────────
State: working on B Clean Carpet post-meeting revisions. Then WAIT — don't build until told the specific sprint.

══════════════════════════════════════════════════════════════════
SPRINT 2 — PRICING PAGE REWORK + NEW SATISFACTION GUARANTEE PAGE
Source: B Clean meeting transcript 2026-06-09, Bryan Wilson review.
PREREQUISITE: Sprint 1 deployed.
══════════════════════════════════════════════════════════════════

PRICING PAGE — STRUCTURE

The current pricing page shows the "3-tier package calculator" (Regular / Plus One / Full Reset). Bryan likes the IDEA of an interactive guided quote later but says "for now, just a simple pricing list page like my current site." So:

1. **Replace the 3-package interactive calculator on the pricing page with a clean pricing LIST.** Match the structure of his current Squarespace site at https://www.bcleancarpet.com/ → /pricing.
   Look at his current site for the canonical list format. Replicate the discipline (room counts, add-ons, specialty stains, sqft rule).

2. **Per-room carpet pricing — show explicitly:**
   - 1 room: $59
   - 2 rooms: $109
   - 3 rooms: $139
   - Each additional room: +$40
   - **Job minimum: $119** (call out prominently — but explain it doesn't stack)

3. **$119 minimum rule explanation** — verbatim from ghl-knowledge-base.md (Section "Pricing & Payment"): "The $119 minimum covers fuel, prep, and travel for small one-room visits. If the job totals more than $119, the customer only pays the quoted total — the minimum never stacks on top."

4. **Add-on pricing list:**
   - Carpet Armor stain protectant: $20 / room
   - Pet stain & odor treatment: $20 / affected room
   - Pet Hair Rx (upholstery): 33% of clean cost
   - Grout sealing: ~50% of grout cleaning cost
   - Stairs, hallways, closets: priced separately — link to detailed list

5. **Specialty stain pricing** — get the list from Bryan's current Squarespace site. Key example: "$30 stain removal — red dye, makeup, pink juice, etc. — up to 1 sqft." Bryan says it's important these are LISTED so customers don't get surprised.

6. **Sqft rule (mandatory):** "Any space up to 225 sqft = 1 room. Spaces over 225 sqft add $0.19/sqft to the room price. Open floor plans are measured, not guessed." Front-and-center.

7. **Drop the "VLM available on request" line** if it appears anywhere on the pricing page. Bryan removed it from his Squarespace site for the same reason — people request VLM when they should get HWE.

PRICING PAGE — TRUST + DIFFERENTIATION HEADLINE

8. **Keep the "No surprises ever" headline** but soften the absolute language. Suggested: "Promised pricing — no surprises ever. Estimates are good for rooms up to 225 sqft each. If we arrive and scope changes (an extra room, severe pet damage that wasn't visible in initial photos), we tell you BEFORE we start the work." Carry the same wiggle-room language Sprint 1 added to the homepage trust strip.

9. **Keep the "why pricing is published" rationale** — verbatim from ghl-knowledge-base.md. This is a major differentiator vs. competitors who hide pricing behind "call for quote."

HOMEPAGE LINK TO PRICING

10. **On the homepage, where the 4 service tiles used to show prices** (which Sprint 1 strips) — add a single "See full pricing →" link beneath the tile grid that points to /pricing. Don't put the calculator on the homepage.

INTERACTIVE WIDGET — DEFER

11. **Do NOT build the interactive guided-quote widget (rooms + upholstery + tile + add-ons calculator).** Bryan says: "later, when I figure out how I want to do that." Keep the option on the roadmap (CLI ticket) but don't ship it in this sprint.

NEW PAGE — SATISFACTION GUARANTEE

12. **Build a new page: /satisfaction-guarantee** (or /guarantee — pick the cleaner URL).
    Goal: enable the "100% satisfaction guaranteed" claim that currently appears as a stat on the homepage. Link the stat to this page.

13. **Page content (use ghl-knowledge-base.md as canonical):**
    - 30-day spot guarantee (included with "The Plus One" carpet package)
    - 60-day stain guarantee (included with "The Full Reset" carpet package)
    - **Wicking return policy** — if a treated spot wicks back within 7 days, Bryan returns and re-treats at no charge. **Why 7 days?** Carpet dries within a day; wicking shows up in 2-3 days; 7 days gives a safe reporting window without inviting late callbacks.
    - **Stain return policy** — if a stain Bryan committed to removing returns within 30 days, free re-treat.
    - **Satisfaction policy** — Bryan walks the rooms with the customer at the end of every job. If something isn't right, he comes back.
    - **Reasonability fine print:** worn-out polyester carpet can't be restored; cracks in tile aren't a cleaning issue; wood floor scratches aren't restored by cleaning. Bryan: "as long as people aren't expecting us to restore their **** polyester carpet that's just worn out and there's nothing we can do for it."
    - **How to report an issue:** "Report within 7 days by call or text — (740) 913-4494."

14. **Link from "100% satisfaction guaranteed" homepage stat → /satisfaction-guarantee.**

15. **Footer fine-print mention** — short sentence under the footer pointing to /satisfaction-guarantee for full details. Bryan's instinct was to "not advertise the guarantee front-of-house" — so the headline stays prominent, the fine print stays subtle, the full doctrine lives on its own page.

DEPLOY + CONFIRM

When Sprint 2 is complete:
- `npm run deploy:studio`
- Share https://b-clean-carpet.studio.madebyaspire.com/pricing AND /satisfaction-guarantee
- Note specialty stain pricing items that need Bryan's confirmation (the list from his Squarespace site is the source, but flag anything that looks stale).

📋 Prompt 3 — Vegas Sprint 3 (Services + Products rework)

Click to expand the copy-paste prompt
══════════════════════════════════════════════════════════════════
ASPIRE DIGITAL — MISSION (non-negotiable)
══════════════════════════════════════════════════════════════════
Bulletproof digital work for small businesses — websites, brands,
automation, and ongoing care — built by AI agents held to a
craftsman's standard.

The Five Commitments:
  · Quality over speed
  · Signal over noise
  · Earn the complexity
  · Show the why
  · The portfolio is the proof

Full mission: https://playbook.madebyaspire.com/mission/
══════════════════════════════════════════════════════════════════

You are now Vegas — Website builder — Jaime's build partner.
Load your identity and rules before doing anything.

── Client ────────────────────────────────────────────────────────────
  Name: B Clean Carpet
  Slug: b-clean-carpet
  Phase: launch — Site already promoted to launch domain. Post-meeting content revisions, NOT new build.
  Studio: https://b-clean-carpet.studio.madebyaspire.com
  Launch: https://b-clean-carpet.launch.madebyaspire.com

── Working tree ────────────────────────────────────────────────────────────
cd /Users/tophermacstudio/projects/clients/b-clean-carpet
git checkout studio

── Load Vegas's identity ────────────────────────────────────────
Read these files:
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/working.md
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/preferences.md
  /Users/tophermacstudio/projects/aspire-digital/agents/vegas/mistakes.md

── Client context ────────────────────────────────────────────────────────────
  /Users/tophermacstudio/projects/clients/b-clean-carpet/{soul,context,session-log}.md  +  /Users/tophermacstudio/projects/clients/b-clean-carpet/CLAUDE.md (if exists)
  /Users/tophermacstudio/projects/clients/b-clean-carpet/ghl-knowledge-base.md  (canonical content source — update this too if facts change)

── Deploy + review (Studio-Always, 2026-04-25) ───────────────
  Jaime reviews → https://b-clean-carpet.studio.madebyaspire.com
  Deploy → `npm run deploy:studio`
  Cadence: deploy + share studio URL after every meaningful change. Surgical commits (`git add <path>`).

── Shared library first ────────────────────────────────────────
  /Users/tophermacstudio/projects/aspire-clients/shared/components/  (10 components)
  /Users/tophermacstudio/projects/aspire-clients/shared/design-tokens.css  (per-brand override in client global.css)
  quality-check is mandatory after code changes (0 violations to ship).

── Rules ────────────────────────────────────────────────────────────
1. SHARED LIBRARY FIRST. Custom is last resort — extend a shared with a prop/slot first.
2. NEVER narrate. Acknowledge → build → share URL. Max 3 messages per task.
3. NEVER share file:// paths or .pages.dev / .workers.dev URLs.
4. Brand is LOCKED in soul.md. Variation goes in client global.css overriding shared/design-tokens.css.
5. ALWAYS run quality-check after code changes — 0 violations to ship.
6. STUDIO-ALWAYS — `npm run deploy:studio` + share studio URL after every meaningful change.
7. Commit + push surgically — `git add <path>` for files you actually changed, never `git add -A`.
8. After 3 failures on the same problem, STOP and ask for help.
9. Do NOT spawn sub-agents — they timeout in cloud VMs.
10. DIRECT AUTHORITY: repo create, CF deploy + custom domain on madebyaspire.com, studio→launch promote. CF token at `~/.aspire.env`.

── Confirm (≤50 words) ────────────────────────────────────────
State: working on B Clean Carpet post-meeting revisions. Then WAIT — don't build until told the specific sprint.

══════════════════════════════════════════════════════════════════
SPRINT 3 — SERVICES PAGES + PRODUCTS REWORK
Source: B Clean meeting transcript 2026-06-09, Bryan Wilson review.
PREREQUISITE: Sprint 1 + 2 deployed.
══════════════════════════════════════════════════════════════════

SERVICES — METHOD POSITIONING (whole-site sweep)

1. **Pull back "low moisture cleaning" (VLM) emphasis everywhere on the Services page + each individual service detail page.**
   Why (re-stated from Sprint 1 for context): Bryan's old site over-pitched VLM. Customers now request VLM when they should get hot water extraction (HWE). He spends time redirecting them. Inheriting the same SEO copy on the new site repeats the problem.

2. **New positioning rule:**
   - HWE (hot water extraction / truck-mounted steam) = DEFAULT and RECOMMENDED for residential carpet.
   - Low-moisture = "available for specific scenarios" — commercial spaces, apartments, fast-turnaround needs. Mentioned as an option, not a feature.
   - Educational angle: "We use the method that's right for your floor — but for most homes, truck-mounted hot water extraction is the gold standard for actually getting carpet clean down to the padding."

3. **Add a short educational section to /services (or to the carpet-cleaning detail page)** explaining HWE vs VLM for the customer who doesn't know the difference. Key points:
   - HWE: 200°+ water + truck-mounted equipment. Dries in 4-6 hours. Pulls soil out of the padding.
   - VLM: minimal water + bonnet pad. Dries in ~1 hour. Surface-only — good for commercial, apartment turnover, scenarios where carpet is being torn out next.
   - Why HWE matters: prevents the "spots come back" problem (wicking) that cheap surface cleans cause.
   - This is also Bryan's competitive pitch against local low-moisture-only competitors (Dry Step, Capsule Clean/EC Solutions) — without naming them.

PRODUCTS SECTION — FULL REWORK

The current Products section names specific brand-name chemicals (Bio Conqueror 105, Carpet Armor, Citrus Slam, Superball). Bryan says NONE of this list is current. He also says customers don't care about brand names — they care about safety.

4. **REPLACE the brand-name product list with a "Safety Highlights" framing.** New section title: "What we use — and what you'll never have to worry about." Bullets:
   - **No VOCs** — products don't contain volatile organic compounds (the harsh-smelling stuff that lingers in the air).
   - **No caustic chemicals** — nothing harsh to breathe, nothing that needs the windows open.
   - **Pet-safe + kid-safe** — products are eco-friendly. Bryan can specify "pet/kid safe focus" on request — just mention it when booking.
   - **Everything is rinsed.** Whatever Bryan puts down, he extracts back out. Carpet is left in a neutral-pH safe state.
   - **Green-safe products on 99% of jobs** — Bryan uses Black Label by Truck Mount Forums, a 99% green-safe certified pre-treatment.

5. **Pet treatment specific language:** "UV inspection finds every spot. Specific chemistry blend breaks down urinary salts at the source — not just the smell." Do NOT name the brand. Bryan currently uses Unchained (15% peroxide oxidizer) as primary and Bio Conqueror 105 (enzyme) for specific cases. Wording should accommodate both without specifying.

6. **REMOVE specific obsolete brand names from prior products section:**
   - Bio Conqueror 105 → out (not the primary anymore)
   - Citrus Slam → out (discontinued — Bryan's dad's company can no longer source it)
   - Superball as a "rinse agent" → WRONG — it's a high-pH degreaser SPOTTER. If Superball appears anywhere, fix the classification or drop it.
   - Carpet Armor as a product name → use generic "fabric protectant / stain protectant" instead. (Bryan uses a different but equivalent product now.)

7. **Wording note (Bryan's quote — use as a model):** "The products we use don't contain volatile organic compounds. They don't contain caustic chemicals. They're pet-safe, kid-safe, and rinsed out before we leave. Whatever the floor needs, we use it — but you never have to worry about what's in the air after we're gone."

SERVICES PAGES — PER-SERVICE DETAIL

8. **Carpet Cleaning detail page:**
   - HWE as default method (per #1).
   - Process: pre-inspection → furniture move → pre-treatment → extraction → post-check.
   - DROP the "Hot Water Extraction (Steam) / Low-Moisture Bonnet / Water-Only Eco" three-method comparison if it leads VLM. Keep the eco/water-only as a callout for sensitive households.
   - **Drying time**: "typically 4-6 hours with hot water extraction." Bryan confirmed.
   - **Tip the educational scales toward HWE** without disparaging VLM.

9. **Upholstery Cleaning detail page:** content is largely good. Pull the brand-name "fabric armor" reference. Keep "Pet Hair Rx" as an add-on (33% of clean cost — verify still accurate with Bryan via Sprint 4 followup).

10. **Tile & Grout detail page:** content is largely good. Keep rotary pressure extraction process, grout sealing as ~50% upcharge. Just sweep for any VLM emphasis.

11. **Pet Stain & Odor detail page:** REMOVE specific Bio Conqueror 105 brand reference (per #5). Use the "specific chemistry blend" / "live-enzyme treatment OR oxidizer treatment depending on the spot" framing. UV inspection + saturation + extraction + post-check process stays.

CONSISTENCY CLEANUP — carried from Sprint 1 (do these in the SAME global pass)

These are Sprint 1 corrections that didn't get swept site-wide. Since Sprint 3 is already a global find/replace pass, fold them in here so it's one clean sweep, not two touch-ups.

12. **"96" → "100+" reviews — GLOBAL.** Sprint 1 updated the visible stat tiles to "100+" but left "96" in several places, creating a visible inconsistency (the homepage TestimonialWall says "Average from 96 Google reviews" directly under a "100+ five-star" heading). Fix every instance:
    - `components/TestimonialWall.astro` — "Average from 96 Google reviews" → "100+"
    - `pages/reviews.astro` — "96 Google reviews", "Join the 96 five-star reviews"
    - `pages/before-after.astro` — "96 five-star reviews"
    - `pages/blog/*` — several "96 five-star" references
    - Use the "100+" scaling format Bryan asked for (he's at 103 and climbing), NOT a hard number.

13. **Meta/SEO descriptions — stale.** The site-wide default + homepage meta still read the OLD facts. These show in Google results + social/link previews, so they matter as much as body copy:
    - `layouts/Base.astro` (default description) — "Third-generation carpet care… 96 five-star Google reviews" → "Second-generation carpet, third-generation in the trade… 100+ five-star Google reviews"
    - `pages/index.astro` (homepage description) — same fix; also "from $59/room" is fine to keep but align with the rest.
    - Sweep all page-level `description=` / schema `"description"` fields for "Third-generation carpet care", "96", and stale founding language.

14. **`components/FAQ.astro` (homepage)** — the pet-treatment FAQ still names "Bio Conqueror 105, a live-enzyme product" + "$20/room". Reword to the "specific chemistry blend / UV inspection" framing (same rule as #5/#11 above), no brand name.

15. **`pages/satisfaction-guarantee.astro`** (built in Sprint 2) — references "Bio Conqueror 105 pet treatment". Align with the products rework: drop the brand name, keep "The Full Reset package (pet treatment + enzymatic sub-surface flush)".

16. **`data/site.ts`** — the canonical data file still carries old product names (Bio Conqueror 105 as the lead enzymatic, etc.) and any "low moisture" lead language. This is the upstream source many pages pull from — fixing it here cascades. Also check `pages/service-areas/[slug].astro` schema text for the Bio Conqueror reference.

QUOTE-FLOW NOTE (info only, no build)

Bryan uses keyword-templates in his Markate CRM to auto-fill text quotes (e.g. "item count" → expands to "let me know how many rooms, hallways, staircases..."; "add-ons" → expands to "$20/room for pet treatment or carpet protector..."). He's sending these to Topher for our team to learn from, with a view toward replicating a similar conversational quote-builder in our system later. NOT a Sprint 3 build item — just FYI so you know what's coming.

DEPLOY + CONFIRM

When Sprint 3 is complete:
- `npm run deploy:studio`
- Share https://b-clean-carpet.studio.madebyaspire.com/services + each detail page URL
- Flag anything where the rework affects soul.md OR ghl-knowledge-base.md and update those files in the same commit.

⚠️ Run order + cadence

  1. Open a fresh Vegas chat → paste Prompt 1 → wait for Vegas's confirmation → say "go" → Vegas deploys studio → review.
  2. After Sprint 1 looks right on studio: open another Vegas chat → paste Prompt 2 → repeat.
  3. After Sprint 2 looks right: open another Vegas chat → paste Prompt 3 → repeat.
  4. Do NOT run all three in the same chat — Vegas's context window will overflow and quality drops.

🏠 Bryan's homework (waiting on these from him)

  • Markate login — for Topher to inspect API access + form-to-CRM passthrough.
  • Text-autofill keyword list — Bryan's Markate templates ("areas", "add-ons", "item count" etc.) with what each keyword expands to. He'll text it.
  • Updated photos:
    • Photo of Bryan + Troi next to both vans (team section)
    • Better profile photo of Bryan (current is from a job with his buddy Matt)
    • Matched before/after pairs (replace the mismatched bottom-left slider)
    • Showcase before/after photos (red juice, severe pet stains, anything that demonstrates capability)
  • FAQ review — line-by-line through the FAQ page, flag corrections or new questions to add.
  • Pet-treatment chemistry wording — Bryan to send his preferred phrasing (he wants something that accommodates both enzymes AND oxidizers without naming brands).
  • Specialty stain list — confirm the current pricing list from his Squarespace site is still accurate (red dye, ink, makeup, pink juice all $30 up to 1 sqft, etc.).
  • Westerville Quality Business Award sourcing — Bryan to confirm: same as Nextdoor Neighborhood Fave, or a separate recognition?

📒 Topher's homework

  • Spawn Vegas Sprint 1 (paste Prompt 1 above into a fresh Vegas chat).
  • Once Sprint 1 ships, spawn Sprint 2, then Sprint 3.
  • When Bryan sends Markate login → log into Markate, look for API + webhook docs; assess whether we can pull form-to-CRM cleanly. Compare to GHL's API surface.
  • Schedule late-next-week follow-up call with Bryan (Topher OOO early week per Bryan's mention). Calendar invite him + Jaime.
  • Prep follow-up agenda: confirm cutover date once Sprint 1-3 look good on studio, walk the updated launch URL with Bryan, talk Voice AI timeline.
  • Update Linear CLI-136 with the post-meeting capture (specifically: domain answered Squarespace, CRM is Markate, all 6 prep questions resolved).

🗓️ Deferred / future items (file as Linear, don't lose)

  • Interactive guided-quote widget — rooms + upholstery + tile + add-ons calculator. Bryan: "later, when I figure out how I want to do it." Carry as a CLI ticket.
  • Voice AI rollout — Bryan agreed to phased approach. Layer in after website cutover. Recommended start: after-hours-only as v1. Pending LC Phone + A2P 10DLC.
  • Markate-to-Aspire CRM migration — Bryan happy with Markate today. No pressure. Topher's API assessment is reconnaissance, not the start of a migration. Revisit only if a clear consolidation win surfaces.
  • Markate's text-blasting feature — Bryan hasn't used it; says it's pennies per message but worth it for the $350 average job value. Bryan to explore on his own; we can help wire customer-anniversary / re-book SMS workflows in our system once the website is live.
  • What's Up Delaware Facebook group — Bryan keeps getting kicked out (suspects a competitor admin: Dry Step / Capsule Clean / EC Solutions). Not Aspire's problem but interesting market intel — could inform Strat's SEO + local-search positioning for Delaware area.
  • Text-quote-builder replication — Bryan's Markate keyword templates ("item count", "add-ons") drive a conversational quote flow. We should learn from this pattern and bake a similar tool into Aspire's CRM offering. Long-term build item.

📎 Source + related links

🤖 Aria · Aspire Digital · B Clean Post-Meeting Summary + Vegas Briefs · 2026-06-09