WiseAI Realtor — Pro Website Template De-overwhelm, Phase 2
Source: Terry Beckett (real paying customer, wiseaiagency.com/s/terry-and-sheri and teambeckett.ca) — "packed full of valuable... information... somewhat overwhelming."
C:\dev\BECKETT_UX_REVIEW_2026-09-10\REVIEW.md+RECOMMENDATIONS.mditems 7–10 (MEDIUM tier). Every guardrail below is binding: remove no content — every guide, review, listing, and language option stays reachable; only presentation/pacing changes.
1. Consolidated "talk to us" launcher (item 7)
Before: four to six separate "talk to us" mechanisms on the homepage —
Hero's language-CTA row (English AI + Hindi/Punjabi AI tel/browser-call
buttons) + a plain office tel: button, the mid-page AiBandSection ("Ask
our AI assistant") repeating the SAME three buttons, and the floating
ChatWidgetStream "Talk" pill (voiceAnchorHref, plain scroll-to-anchor link)
above the chat FAB.
After:
- Hero's language-CTA row is removed entirely (0 inline instances). The search bar remains the hero's one job.
AiBandSectionkeeps exactly ONE inline instance: a singleDisclosurecontrol whose SUMMARY LINE itself names both languages ("Choose how to talk to us — English AI, Hindi AI, or call the office directly"), so English/Hindi availability is discoverable at a glance without opening anything. Opening it reveals the same three choices via the sharedTalkChoicescomponent.- A new persistent floating
TalkLauncher(bottom-left, mirroring the existing chat FAB's bottom-right corner and--cwa-fab-offsetso it also lifts above the mobile sticky CTA bar) replaces the plain "Talk" pill on the homepage only (RealEstateSiteTemplateno longer passesvoiceAnchorHreftoChatWidgetStream). Clicking it opens a menu offering the sameTalkChoices: Speak to English AI, Speak to Hindi AI (or whatevergetAiLanguageCtasreturns for the tenant), and Call the office. - Subpages (guides, listings, etc.) are unchanged —
RealEstateHeaderandRealEstateScanViewkeep passingvoiceAnchorHrefto the sharedChatWidgetStreampill exactly as before (out of scope; those pages had no duplicate cluster to consolidate). AiBandSection'sid="talk-to-aria"+scroll-mt-24anchor is UNCHANGED (still the landing target those subpage pills link to).
Reachability rule (Playwright-verified): from page load, on the
homepage, both the office call and BOTH AI languages must be reachable within
two clicks via the floating TalkLauncher (click 1: open launcher: click 2:
select a choice). AiCallCta/WebRTCDemoButton/DirectorTransferDemo
internals are untouched — only where AiCallCta is mounted changed.
2. Homepage sticky mini-nav with scroll-spy (item 8)
A HomeMiniNav renders fixed just below the main header, appears (fade +
slide) once the hero (#top) scrolls out of view, and offers four jumps:
Listings (#listings), Guides (#resources — the existing "Guides, tools &
answers" section), Reviews (#reviews), Contact (#contact). All four ids
already exist on the homepage (FeaturedListingsSection, ResourcesSection,
TestimonialsSection, ContactSection) — no new ids were needed. An
IntersectionObserver highlights whichever section is currently in view
(aria-current="true" + accent color) as the visitor scrolls.
3. Home value: CTA + modal, form unchanged (item 9)
HomeValueSection's benefits copy + headline stay inline; the full
name/email/phone/address/photo-upload form (HomeValueForm — internals
byte-for-byte unchanged, per the task's hard constraint) now renders
inside a modal/drawer opened by a single "Start my free home evaluation" CTA
button, rather than being mounted inline mid-scroll. id="home-value" stays
on the section (nav "What's my Home worth", the mobile sticky CTA bar, and the
Buy/Sell dropdown's "What's my home worth?" link all still scroll here and
land on the CTA). home-value-honesty.contract.test.ts is unaffected — it
only asserts on source strings inside HomeValueSection.tsx, all of which
remain present in the file regardless of the modal wrapper.
4. Guides index filter chips (item 10)
GuidesFilterChips (client component) adds a row of toggleable chips — Buyer,
Seller, Investor, Local area, Multilingual — above the existing Buy/Sell/
Resources hub grouping on /s/[slug]/guides. Categories are DERIVED at
render time from each guide's existing tag string, hub, lang, and
translations fields (no schema change, no new content, no guides.ts
edits). Filtering is OR across active chips; with zero chips active every
guide shows (today's behavior, unchanged default). Non-matching cards are
hidden via a hidden class (display:none), never removed from the DOM or
excluded from the server-rendered HTML — the same "hide, don't slice" pattern
ReviewsLoadMore.tsx already established for /reviews (quick wins, PR
#1592), so every guide stays crawlable/citable regardless of filter state. A
hub section with zero currently-visible guides is hidden the same way, and an
"no guides match — clear filters" note appears when nothing across all three
hubs matches.
Guardrails (binding)
- No guide, review, listing, or language option is removed or hidden from the DOM/HTML — only presentation changes (collapse/cap/filter/modal), matching RECOMMENDATIONS.md's "Explicitly NOT recommended" list.
BrowserCallButton.tsx,WebRTCDemoButton.tsx, andDirectorTransferDemo.tsxinternals are untouched (a parallel PR is editing their audio-autoplay behavior) — only where/howAiCallCta(which wrapsWebRTCDemoButton) is mounted changed.testimonial-truncation.contract.test.tsis unaffected (this phase does not touchTestimonialsSection.tsxor/reviews).- Team Beckett's live data (
00000000-0000-4000-a000-000000000c01) is read via the existinggetRealEstateSiteConfig/resolvePublicGuidescalls only — no writes.
Verification
- Unit/contract:
home-value-honesty.contract.test.ts,ai-language-cta.contract.test.ts,ChatWidgetStream.voice-anchor.contract.test.tsx,testimonial-truncation.contract.test.tsall green, unmodified. - Playwright against the Vercel PREVIEW (desktop + ~400px mobile width,
prefers-reduced-motion: reduceemulated):- Mini-nav is absent/invisible at page load, appears after scrolling past the hero, and highlights the section currently in view.
- The home-value CTA opens the form in a modal/drawer; the form fields are the same ones that used to render inline.
- Guides filter chips filter the visible cards client-side; clearing chips restores the full list.
- From page load, the floating
TalkLauncherreaches the office call, the English AI, and the Hindi AI each within two clicks.
- Real-host follow-up (not run by the builder; noted for the founder/lead):
wiseaiagency.com/s/terry-and-sheriandteambeckett.ca— Pro Website/s/[slug]is host-aliased, so the Vercel preview host skips the hostname-rewrite middleware even though the template code is identical.