Chamber AI-Search Report Page — Acceptance Spec
Status: DRAFT. Not approved. Written because Cross-Project Rule #17 forbids building a customer-facing surface without a spec, and the founder selected the hosted-page option on 2026-08-04.
Event: Ingersoll District Chamber lunch and learn, Thursday 2026-09-17, up to 20 local business owners.
Session script (do not re-design): C:\dev\CHAMBER_INGERSOLL_LUNCH_LEARN_2026-09-17.md
Instrumentation plan: C:\dev\wise-dating-prep\docs\phase-one\D-C-chamber-sept17-instrumentation.md
The problem this solves
The session hands every attendee a printed packet containing a personalized page: "How your business currently shows up to AI search tools, and the two things I would fix first." On paper, that page is unmeasurable. The founder would leave the room with no idea whether anyone read it, which makes the whole borrowed-distribution experiment undiagnosable — the exact failure the v2 strategy exists to correct.
Hosting it at a unique URL per business makes a visit an unforgeable engagement signal that requires no email address and no signup.
Foundational decisions
- Nothing is sold on this page. The founder promises the room three times, on the record, that he is not selling, not following up by email, and does not have their addresses. The page must be consistent with that or it destroys the asset it was built to measure.
- The
/s/[slug]Pro Website demo path is REJECTED for this purpose, despite being near-zero build and already instrumented. It renders a sales demo. Using it would break decision 1. - No email capture anywhere on the page. Not optional, not "just in case", not a newsletter box in the footer.
- Keyed on
demo_sluginoutreach_contacts, reusing the provenrecord_demo_engagementbeacon path rather than inventing a table. Consistent withacceptance/demo-result-tracking.md. - These rows are NOT an email list. See the CASL section — this is the highest-risk part of the design.
Expected output — what the attendee sees
Scanning the QR code or typing the printed URL loads a page that shows, in this order:
| Element | Requirement |
|---|---|
| Their business name | Exactly as printed on the packet. A mismatch reads as a mail-merge and undoes the personalization |
| What was checked | One plain sentence naming the AI tools queried and the date checked |
| Finding 1 | The specific thing found, in plain language, with what it means for them |
| Finding 2 | Same |
| What it does not mean | One short honest paragraph. No scores, no grades, no red/amber/green alarm |
| The single CTA | "Want the other two things I found? Reply here and I will send them." |
| Who to reach | John's name and direct contact, matching the packet |
Explicitly absent: pricing, plans, a booking calendar, a trial, a signup form, an email field, a countdown, a "limited spots" claim, or any comparison against another named local business.
Tone requirements
- Every finding must be something actually observed, with the observation stated separately from the interpretation. No inferred claims presented as fact.
- No finding may overstate severity to manufacture urgency.
- If the check found nothing wrong, the page says so plainly. A page that invents a problem to justify the CTA is a failure of this spec, not a success.
Expected output — what the founder can measure
Per business, in the existing engagement columns:
| Signal | Column | Meaning |
|---|---|---|
| Opened their report | demo_viewed_at | The packet worked |
| Came back | demo_last_engaged_at later than first view | Genuine interest |
| Asked for the rest | demo_cta_clicked_at | The one conversion event |
Aggregate rows for the scorecard in D-C section 4: attended, packets handed out, pages visited, revisited, CTA clicked, inbound replies.
Not captured, deliberately: email addresses, identity beyond the business name already on the packet, and any cross-site tracking.
CASL and data-safety requirements — the highest-risk part
Chamber attendees did not consent to email. The founder told them so out loud. Storing them in outreach_contacts, an outreach table, creates a real risk that a future campaign sweeps them into a send.
Required guards, all of them:
- Rows are created with no email address. If the column is
NOT NULL, the seeding step must be redesigned rather than filled with a placeholder that could later be treated as sendable. - A dedicated campaign row, clearly named for the event, marked non-sendable.
skip_reasonset to a value that fails closed in the send pre-flight.- A regression test asserting no member of this campaign can enter a send run. Not a comment, a test.
- Before any future send that touches
outreach_contacts, the pre-flight must show zero rows from this campaign.
If any of these cannot be satisfied, do not seed the rows. Print the QR codes against a table that has no send path at all.
Verification before packets print
A printed QR code cannot be corrected. Every item below must pass before printing, on the real production host, not a preview:
- Each slug loads on
wiseaiagency.com, not a*.vercel.apppreview (previews skip hostname-rewrite middleware) - Loading a page writes
demo_viewed_at— verified by loading one and re-querying the row - Clicking the CTA writes
demo_cta_clicked_at— verified by a real browser click with a real user agent, then re-querying. Not a unit test, not a curl -
/api/analytics/resolves on the wiseaiagency host (fixed 2026-08-04, commit3b2fc5231, needs post-merge confirmation) - QR codes scanned with an actual phone
- Page readable on a phone screen
- No page claims anything the underlying check did not actually show
- Send pre-flight shows zero sendable rows for this campaign
Why this checklist is strict. On 2026-08-04 two independent silent-beacon failures were found: the church demo route never rendered a component firing a CTA event, and /api/analytics/ was missing from the middleware allowlist so beacons 404'd on alias hosts. Both produced data that looked like "nobody clicked" when the truth was "nothing was recorded." This event has one date and no second attempt.
Non-goals
- Not a Pro Website demo, and must not become one
- Not a lead magnet, and must not gain an email gate later
- Not reusable marketing copy — it is one honest report per business
- Not a scoring product. No grades, no rankings, no leaderboard
- Not a template for cold outreach. These people met John in person; cold prospects have not
Open questions for founder sign-off
- URL shape. Proposed
wiseaiagency.com/ai-report/{slug}./r/is taken by the local-business feedback page. Shorter is better on paper. - Slug form. Business name slug is readable on a printed page but guessable; a random token is private but unreadable. Recommend the readable slug, since nothing on the page is confidential.
- What happens to the pages after the event. Recommend leaving them up. Taking them down would contradict "it is yours."
- Who writes the findings. The GEO tooling can generate candidates, but every finding is a claim about a real local business made under John's name and needs his eyes before printing.
- CASL guard feasibility — whether the five guards above can actually be satisfied in
outreach_contacts, or whether a separate no-send table is required.
Question 5 is the one that can change the design. It should be answered first.