Skip to main content

VetWiseAI Vertical — Expected Output Spec

DRAFT — Stage 1 complete (agent research from code + production, 2026-05-20). Stage 2 founder validation interview is required before any touchpoint is locked. Prior partial spec (authored 2026-05-01) covered touchpoints 2.1–2.12 at scaffold level. This extension adds full methodology coverage: all 8 categories, per-touchpoint templates, screenshots directory, and readiness YAML. Gaps and open questions from the original spec are preserved and renumbered.


Drift Found During Research

The following discrepancies were found between the existing spec and actual code/production. They are recorded here for remediation — NOT fixed in this spec.

#Source of truthSpec saidCode/production says
D1vetProfile.intakePathSegment in vet.ts/intake/<slug>appointments — the public hub renders at /appointments/<slug>, NOT /intake/<slug>. Spec §2.12 must be corrected.
D2lifecycle-emails-vet.ts line 49 (FROM)john@churchwiseai.comVetWiseAI <hello@veterinarywiseai.com> — email from address is branded vet domain, not founder personal address.
D3lifecycle-emails-vet.ts email header gradientNot specifiedUses blue gradient (#0c4a6e → #0369a1) — does NOT match the approved forest-green palette (#1A3A2A / #5B9A6E). Potential brand mismatch.
D4vetwiseai-vertical.md §9 User Stateadmin URL: veterinarywiseai.com/admin/[admin_token]vet.tsadminPath: '/admin/[token]' confirmed. But no premium_vet_clinics table confirmed to exist yet — vet.ts comments say "vet DB tables don't exist yet (Phase 6)". Admin routing may resolve to a stub/empty state.
D5Checkout success URLNot specifiedvet-checkout/route.ts redirects to https://veterinarywiseai.com/thank-you?source=vet_self_serve&session_id={CHECKOUT_SESSION_ID} — no vet-specific thank-you page observed; may fall through to global /thank-you. Founder to confirm.
D6Home page hero copySpec gave a placeholder exampleActual: headline is "Never miss a call from a worried pet owner." (not the placeholder). Sub-hero mentions HEAR protocol, not ASPCA directly.
D7vet-pricing.ts plan key vs email filevet-pricing.ts maps checkout tier key as vwa_${tier} (e.g. vwa_starter)lifecycle-emails-vet.ts uses vet_starter / vet_pro as plan keys. These may be different namespaces but founder should confirm the canonical plan key written to premium_vet_clinics.plan.

1. Tier Definitions

vwa_starter — VetWiseAI Starter

FieldValueSource
Plan keyvwa_startervet-checkout/route.ts metadata
Setup fee$745 USD / $995 CAD one-timevet-pricing.ts, pricing.yaml
Monthly fee$199 USD / $249 CAD/movet-pricing.ts, pricing.yaml
Annual optionFounder to confirm (not wired in code)Open Question #3
TrialNone — no trial logic in vet checkoutvet-checkout/route.ts
VoiceIncludedvet.ts
ChatbotDeferred — "Coming Soon" at Phase 4 launchvet.ts
Onboarding SLA10 business daysvet-pricing.ts VET_TIER_FEATURES
SpeciesDogs / cats / 1-exoticvet-pricing.ts VET_TIER_FEATURES
Plan label (UI)"Starter"VET_TIER_LABELS in vet-pricing.ts
Live Stripe productprod_URiRlazRWaJWlc (setup), prod_URiS8R9aKu5N43 (monthly)vet-pricing.ts

Starter includes (from VET_TIER_FEATURES):

  • Unlimited calls — no per-call charges
  • HEAR-protocol empathy framework on every call
  • ASPCA Poison Control escalation (1-888-426-4435)
  • Emergency vet referral — AI asks and routes
  • Dogs / cats / 1-exotic species knowledge base
  • Prescription refill intake + dashboard callback queue
  • Text + email notification after every call
  • After-hours, weekends, and holiday coverage
  • Secure web dashboard — nothing to install
  • 10-day onboarding SLA

vwa_pro — VetWiseAI Pro

FieldValueSource
Plan keyvwa_provet-checkout/route.ts metadata
Setup fee$745 USD / $995 CAD one-timevet-pricing.ts, pricing.yaml
Monthly fee$299 USD / $379 CAD/movet-pricing.ts, pricing.yaml
Annual optionFounder to confirmOpen Question #3
TrialNoneCode
Onboarding SLA5-day priority SLAvet-pricing.ts VET_TIER_FEATURES
SpeciesMulti-species (unlimited)vet-pricing.ts
Cal.comIncluded — direct appointment bookingvet.ts integrations
Plan label (UI)"Pro" (badge: "Most popular")pricing/page.tsx
Live Stripe productprod_URiSvj3clfFN2O (setup), prod_URiSXu3iRfirnM (monthly)vet-pricing.ts

Pro adds over Starter:

  • Cal.com integration — books appointments directly
  • Multi-species knowledge base (unlimited)
  • AVImark / Cornerstone integration placeholders
  • Priority 5-day onboarding SLA
  • Dedicated onboarding call with John

Stripe Price IDs (Live)

Line itemUSD price IDCAD price ID
Starter setup (one-time)price_1TSp13FaoK5IPzNoKJffH9bJprice_1TSp13FaoK5IPzNoV3TwTuJ8
Starter monthlyprice_1TSp1SFaoK5IPzNoxEeUYozmprice_1TSp1TFaoK5IPzNo1QRCLWQk
Pro setup (one-time)price_1TSp1xFaoK5IPzNoKeCZa0bbprice_1TSp1yFaoK5IPzNoIJ0d8CSH
Pro monthlyprice_1TSp2DFaoK5IPzNoQO4LWl2nprice_1TSp2EFaoK5IPzNo5T86DGKv

Test-mode price IDs: NOT YET CREATED. See Open Question #1.


2. User State Definition

FieldValue
Planvwa_starter or vwa_pro
Tenant tablepremium_vet_clinics (Phase 6 — not confirmed created in DB)
Statusactive (post-payment)
Admin URLveterinarywiseai.com/admin/[token]
AuthToken-based magic link (same pattern as church + funeral)
Public Appointments Hub URLveterinarywiseai.com/appointments/[slug] (see Drift D1)
TrialNone
VoiceIncluded in all tiers
Chatbot"Coming Soon" placeholder at Phase 4 go-live
ASPCA disclosureRequired at onboarding

A. Discovery Paths (Touchpoints 1–10)

A1. Direct navigation — veterinarywiseai.com homepage

State: Any pre-purchase prospect URL: https://veterinarywiseai.com Screenshot: knowledge/acceptance/screenshots/vetwiseai/A1-homepage.png

Should See:

  • Nav: VetWiseAI wordmark (lockup-horizontal.svg, 32px height) + links: How it works / Pricing / About / Book a demo + CTA button "Book a demo"
  • Hero eyebrow: "AI answering for veterinary practices"
  • Hero headline: "Never miss a call from a worried pet owner." with "a worried pet owner" in accent color
  • Hero sub-copy mentioning HEAR protocol and clinical empathy framing
  • TWO hero CTAs: "Hear how it works" (primary, anchors to #how-it-works) + "Book a 30-min demo" (secondary, links to https://cal.com/john-moelker/vetwiseai-demo)
  • Value-prop trio: "Always answers." / "Trained for your clinic." / "Clinical empathy built in."
  • 4-step "How it works" section (ring → greeting → triage → notification)
  • Trust signals block: "Live within 10 business days" / "Built on clinical empathy training" / "Your data stays yours"
  • Pricing callout: two cards (Starter $745+$199/mo, Pro $745+$299/mo) with "Most popular" badge on Pro
  • Founder story block (FounderStoryBlock variant="vet")
  • Final CTA band: dark green background, "Every pet owner deserves a calm first voice.", "Book your demo call" button → cal.com
  • Footer: VetWiseAI branding + links (How it works / Pricing / About / Book a demo / Privacy / Terms)

Should NOT See:

  • ChurchWiseAI logo, navigation, or brand colors
  • FuneralWiseAI branding
  • Church, congregation, pastor, sermon, prayer, denomination in any text
  • Funeral, director, mortuary, at-need in any text
  • Any pricing for cwa_* or fwa_* plans
  • PewSearch links or branding

Links:

  • "Hear how it works" → #how-it-works (same page anchor)
  • "Book a 30-min demo" → https://cal.com/john-moelker/vetwiseai-demo
  • "See what's included" (Starter card) → /vetwiseai/pricing
  • "Book a demo" (Pro card) → https://cal.com/john-moelker/vetwiseai-demo
  • "Full pricing details" → /vetwiseai/pricing

Success Criteria:

  • Page loads in VetWiseAI brand chrome (forest-green palette, data-brand="vetwiseai")
  • No cross-vertical terminology bleed detectable in DOM text
  • Both CTAs in hero are visible above the fold on desktop

A2. How it works page

URL: https://veterinarywiseai.com/how-it-works Screenshot: knowledge/acceptance/screenshots/vetwiseai/A2-how-it-works.png

Should See:

  • HEAR protocol explained in veterinary context (Hear / Empathize / Advance / Respond)
  • Call flow walkthrough (01–04 numbered steps)
  • ASPCA Poison Control reference with 1-888-426-4435 and $95 fee disclosed inline
  • Privacy / data section
  • Integration section (existing phone number, no forwarding complexity)
  • CTA to book demo

Should NOT See:

  • Church or funeral terminology
  • Confidentiality promises that violate the AI Bridge Principle

A3. Pricing page

URL: https://veterinarywiseai.com/pricing Screenshot: knowledge/acceptance/screenshots/vetwiseai/A3-pricing.png

Should See:

  • H1: "Simple pricing. No surprises."
  • Two tier columns: Starter + Pro (Pro has "Most popular" badge)
  • USD/CAD toggle (geo-defaulted by getDefaultCurrency())
  • Starter: $745 setup + $199/mo USD (or $995/$249 CAD)
  • Pro: $745 setup + $299/mo USD (or $995/$379 CAD)
  • Feature lists populated from VET_TIER_FEATURES in vet-pricing.ts
  • "$745 setup fee includes (both tiers)" box with 7 bullet items
  • ROI note: "One answered after-hours call typically covers the monthly fee."
  • 9-item FAQ covering emergencies, AI disclosure, setup time, species changes, contracts, 30-day guarantee, staff access, AVImark/Cornerstone, after-hours
  • Final CTA band: "Book your demo call" → /vetwiseai/book
  • Secondary "Skip the call" link → /vetwiseai/checkout (below the primary CTA)
  • 30-day satisfaction guarantee mentioned

Should NOT See:

  • Any cwa_* or fwa_* plan pricing
  • Annual pricing cards (not wired — confirm with founder if planned)

Links:

  • Starter "See what's included" → /vetwiseai/book
  • Pro "Book a demo" → https://cal.com/john-moelker/vetwiseai-demo
  • "Book your demo call" → /vetwiseai/book
  • "Skip the call" → /vetwiseai/checkout

A4. About page

URL: https://veterinarywiseai.com/about Screenshot: knowledge/acceptance/screenshots/vetwiseai/A4-about.png

Should See:

  • Founder framing: 15 years software engineering + 15 years care/empathy work
  • Four credential blocks: 15yr software / 15yr care work / CPE (1 unit) / Stephen Leader Training
  • CPE described as "One completed CPE unit" — NOT "CPE-certified" (MEMORY.md constraint)
  • Stephen Leader described as trained in the Stephen model — NOT "Stephen Leader credential" (MEMORY.md constraint)
  • HEAR protocol origin story connected to pet-owner anxiety
  • Founder photo (Image component)
  • CTA to book demo

Should NOT See:

  • "CPE-certified" (inaccurate — 1 unit, not full certification)
  • "pastor-turned-engineer" framing (MEMORY.md: avoid this)
  • Any church or funeral content
  • "5 years pastoring" framing

A5. Book a demo page

URL: https://veterinarywiseai.com/book Screenshot: knowledge/acceptance/screenshots/vetwiseai/A5-book-demo.png

Should See:

  • DemoRequestForm component with vet-specific fields:
    • Your name (required)
    • Practice name (required)
    • Practice website (optional — "We use your website to build a personalized demo")
    • Email address (required)
    • Phone number (optional)
    • Calls/day select: Under 20 / 20–50 / 50–100 / Over 100
    • Species primarily treated select: Dogs & Cats / Exotics / Mixed-species / Large animals / Other
    • Reason for AI answering (open textarea)
    • Best time to talk select: Mornings / Afternoons / Evenings / Flexible
  • Submit button: "Request your demo"
  • On success: "Request received." confirmation card, "John will reach out within one business day"
  • On error: error message with mailto:hello@veterinarywiseai.com fallback

Form POST destination: /api/contact with source: 'vetwiseai'

Should NOT See:

  • Church-specific fields (denomination, congregation size)
  • Funeral-specific fields (at-need families, services per year)

A6. Self-serve checkout page

URL: https://veterinarywiseai.com/checkout Meta: noindex, nofollow — not indexed Screenshot: knowledge/acceptance/screenshots/vetwiseai/A6-checkout.png

Should See:

  • H1: "Start VetWiseAI today."
  • Tier selector: Starter / Pro toggle buttons (Starter pre-selected)
  • USD/CAD currency toggle (geo-defaulted)
  • Price summary box: "One-time setup $745 USD" + "Monthly subscription (Starter) $199/mo USD"
  • Email field (required, placeholder: "you@yourpractice.vet")
  • Practice name field (optional, placeholder: "Greenfield Animal Hospital")
  • Submit: "Continue to secure checkout"
  • Loading state: "Redirecting to secure checkout…"
  • Footer disclaimer: "Payments processed by Stripe. We never see your card details."
  • Alternative link: "Prefer to walk through it together? Book a 15-minute demo →"

Links:

  • Book link → /vetwiseai/book
  • Submit → POST /api/stripe/vet-checkout → redirects to Stripe-hosted Checkout

Should NOT See:

  • Church or funeral plan options
  • CWA chatbot widget or chatbot plans

A7. WiseAI Agency verticals page (referral path)

URL: https://wiseaiagency.com/verticals State: Prospect browsing the WiseAI Agency portfolio

Should See:

  • VetWiseAI card linking to veterinarywiseai.com
  • Vet vertical listed alongside FuneralWiseAI and ChurchWiseAI
  • Brief "AI phone answering for veterinary practices" description

Founder to confirm: Whether VetWiseAI card is visible and live on this page (currently out of scope to verify here — flag for Stage 2).


A8–A10: Additional discovery paths (N/A or TBD)

PathStatusReason
A8. Google/paid adsN/A — no vet ads running at spec dateNo ad campaigns confirmed. Flag for founder.
A9. PewSearch upsell bannerN/A — PewSearch does not surface vet productsVetWiseAI is not a church product; no PewSearch integration.
A10. Referral / direct URLCovered by A1 (homepage)Direct URL lands on homepage.

B. Pre-Purchase Journey (Touchpoints 11–16)

VetWiseAI is a sales-led service. The canonical purchase path is: Book demo → onboarding interview → provisioned by founder. A self-serve checkout is the secondary ("skip the call") path. There is no self-service wizard equivalent to the church onboarding form at this stage.

B11. Demo request flow (primary pre-purchase path)

State: Prospect who completed form at /vetwiseai/book Component: DemoRequestForm/api/contact Screenshot: knowledge/acceptance/screenshots/vetwiseai/B11-demo-submitted.png

Should See (on success):

  • In-place confirmation card: "Request received."
  • "John will reach out within one business day to schedule your personalized demo."
  • "Check your inbox — including your spam folder."

Success Criteria:

  • Form submission reaches /api/contact with source: 'vetwiseai'
  • No redirect — confirmation in-place
  • Founder receives notification of new demo request (mechanism TBD — confirm with founder in Stage 2)

B12. Self-serve checkout — tier + currency selection

State: Prospect at /vetwiseai/checkout

Should See:

  • Starter pre-selected by default
  • Pro togglable
  • Currency defaults to USD or CAD based on Vercel geo-IP
  • Price summary updates live when tier or currency changes
  • "Starter: $199/mo USD" sub-label visible on tier button

Success Criteria:

  • Price summary reflects the selected tier + currency before form submission
  • No stale prices shown on toggle

B13. Stripe checkout (hosted)

State: Prospect after clicking "Continue to secure checkout"

Should See:

  • Stripe-hosted checkout page in Stripe's standard UI
  • Product name: "VetWiseAI Starter" or "VetWiseAI Pro" (as set in Stripe product metadata)
  • Line items: setup fee (one-time) + first monthly subscription charge
  • Currency matches what was selected (USD or CAD)
  • Promotion code field (checkout created with allow_promotion_codes: true)

Should NOT See:

  • "ChurchWiseAI" in any line item name
  • CAD prices when USD was selected (adaptive pricing is disabled)

Stripe session metadata (critical — do not collapse):

  • vertical: 'vet'
  • tier: 'vwa_starter' or 'vwa_pro' — NEVER collapsed to 'starter' or 'pro'
  • currency: 'USD' or 'CAD'
  • source: 'self_serve'

B14. Checkout confirmation / thank-you

State: After successful Stripe payment URL: https://veterinarywiseai.com/thank-you?source=vet_self_serve&session_id={CHECKOUT_SESSION_ID}

Should See:

  • VetWiseAI branded thank-you page (vet-specific or shared /thank-you — see Drift D5)
  • Confirmation that payment was received
  • What happens next: "We'll be in touch within one business day to schedule your onboarding interview"
  • (Founder to confirm exact copy in Stage 2)

Open Question (OQ-10): Does a vet-specific /thank-you page exist or does the generic churchwiseai.com /thank-you page render? The success_url routes to veterinarywiseai.com/thank-you via middleware rewrite — the middleware rewrites this domain's paths to /vetwiseai/*. So the actual rendered page would be /vetwiseai/thank-you which may not exist, causing a 404. Founder/agent to verify.


B15–B16: N/A for VetWiseAI

TouchpointStatusReason
B15. Multi-step onboarding wizard (church pattern)N/A — sales-ledVetWiseAI uses founder-conducted onboarding interview, not a self-serve wizard. The VetClinicInfoForm is used in-dashboard post-purchase, not pre-purchase.
B16. PewSearch claim pathN/AVetWiseAI has no PewSearch integration.

C. Email Journey (Touchpoints 17–24)

C17. Day 0 Welcome Email

Trigger: checkout.session.completed webhook for any vwa_* plan (or manual send by founder after demo onboarding) From: VetWiseAI <hello@veterinarywiseai.com> (confirmed in lifecycle-emails-vet.ts) Subject: Welcome to VetWiseAI, [contactName] Screenshot: knowledge/acceptance/screenshots/vetwiseai/C17-welcome-email.png (text capture acceptable)

Should See (required elements):

  • Personalized greeting with contact name
  • Dashboard URL / magic link to veterinarywiseai.com/admin/[token]
  • Next steps for the onboarding interview
  • ASPCA Poison Control reference (1-888-426-4435, $95 fee) mentioned or linked
  • Reply address accessible (not a no-reply)

Should NOT See:

  • "church," "congregation," "pastor," "prayer," "denomination," "worship"
  • Funeral-origin copy ("at-need," "pre-planning," "director")
  • ChurchWiseAI or FuneralWiseAI branding

Drift flag (D3): Email header gradient in current code is blue (#0c4a6e → #0369a1), not the approved forest-green palette. This is a brand mismatch that should be corrected before go-live.

Timing: Within 5 minutes of checkout.session.completed (or immediately on manual send).

Submitter-only rule: Email goes to the personal address submitted at checkout. Do NOT Cc any shared clinic inbox.


C18. Day 2 Setup Nudge

Trigger: Lifecycle cron, Day 2 post-signup Subject: "Quick step: confirm your triage protocol" Skip condition: vet_has_protocol_configured (cron checks this flag)

Should See:

  • Prompt to log into dashboard and confirm emergency triage protocol
  • Dashboard link
  • Explanation of what configuring the protocol enables

C19. Day 7 Activation Check

Trigger: Lifecycle cron, Day 7 post-signup Subject: "Have any pet owners reached out after hours?" Skip condition: vet_has_calls (cron checks this flag — skips if agent has already taken calls)

Should See:

  • Check-in from John on whether after-hours calls have come in
  • Offer to adjust agent training if needed

C20. Day 13 Check-in

Trigger: Lifecycle cron, Day 13 Subject: "Two weeks in — anything to adjust?"

Should See:

  • Configuration review prompt
  • Link to dashboard training section

C21. Day 30 Retention Check-in

Trigger: Lifecycle cron, Day 30 Subject: "Your first month — a quick check-in from John"

Should See:

  • Founder personal check-in tone
  • Offer for a review call

C22–C24: Stripe receipt + notification emails

TouchpointExpected outputSource
C22. Stripe receiptStandard Stripe receipt; shows VetWiseAI product names.Stripe-generated.
C23. Call notification (after voice call)Email + text to clinic owner with call summary, caller contact info, urgency assessment. From vet system — vet terminology only.voice-agent-livekit/ notification system. Confirm mechanism with founder.
C24. Emergency escalation notificationImmediate notification when voice agent flags an emergency call. Must arrive within 2 minutes of call end.Open Question — confirm SLA with founder.

D. First Login and Dashboard Discovery (Touchpoints 25–29)

Note: VetWiseAI admin dashboard is scaffolded (Phase 6 for full wiring). Touchpoints below describe the expected state at Phase 4 go-live — some tiles show "0" until DB tables are live.

State: Clinic owner clicks magic link from welcome email URL: https://veterinarywiseai.com/admin/[token] Screenshot: knowledge/acceptance/screenshots/vetwiseai/D25-dashboard-first-load.png

Should See:

  • VetWiseAI brand header (forest-green chrome, VetWiseAI admin header name)
  • Home tab loaded by default
  • Four metric tiles: "Today's Appointments" / "Prescription Refills" / "Emergency Calls" / "Pending Callbacks" (all showing 0 at first login)
  • Tab navigation: Home / Inbox / Train AI / Settings

Should NOT See:

  • Church dashboard (prayer requests, congregation stats, sermon tools)
  • FuneralWiseAI dashboard (at-need families, pre-planning inquiries)
  • "Prayer Requests," "Pastor Pulse," or any church-origin label
  • "At-Need Calls," "Family Contacts," or any funeral-origin label

D26. Dashboard header

Should See:

  • VetWiseAI admin name in header
  • Plan badge showing "Starter" or "Pro"
  • No "View Chat Page" (chatbot deferred — "Coming Soon")
  • Settings gear or similar access

Should NOT See:

  • "View Care Hub" label (vet uses "Client Hub" per terminology.shareableHubTitle)
  • ChurchWiseAI branding in header

D27. Tab navigation

Tabs visible at Phase 4 go-live (from vet.ts):

  • Home (overview/metrics)
  • Inbox (appointment requests, prescription refills, emergency calls)
  • Train AI (clinic knowledge base)
  • Settings (profile, team, integrations)

Tabs NOT present (confirm with founder):

  • Calls (listed in scaffold but marked Phase 6)
  • Care (not applicable — vet uses "Client Hub")
  • Social (not wired for vet)
  • Upgrade (confirm with founder)

D28. Home tab first impression

State: First visit, zero data Screenshot: knowledge/acceptance/screenshots/vetwiseai/D28-home-tab-zero-state.png

Should See:

  • 4 metric tiles at zero: "Today's Appointments (0)" / "Prescription Refills (0)" / "Emergency Calls (0)" / "Pending Callbacks (0)"
  • Recent activity feed (empty or with "No recent activity" state)
  • Quick action buttons: "View Inbox" / "Train AI"

Should NOT See:

  • Getting-started checklist in the church pattern (vet may have equivalent — confirm in Stage 2)
  • "Chatbot" quick link (deferred)

D29. Getting started prompt (if applicable)

Founder to confirm: Does VetWiseAI have a guided setup checklist analogous to the church onboarding wizard? If yes, what steps are included? Mark as open question for Stage 2.

Open Question (OQ-11): What is the onboarding/setup experience for a new vet customer post-payment? Is there a guided checklist, or does the founder handle setup via the onboarding interview?


E. Setup Journey (Touchpoints 30–42)

VetWiseAI is a service-delivered product: the founder conducts the onboarding interview and configures the agent. The clinic owner's setup tasks are lighter than church admin setup. Touchpoints below cover what the clinic owner does in the dashboard.

E30. Train AI tab — Clinic knowledge base

URL: veterinarywiseai.com/admin/[token] → Train AI tab Screenshot: knowledge/acceptance/screenshots/vetwiseai/E30-train-ai-tab.png

Should See:

  • "Train AI" tab heading using vet terminology
  • Clinic knowledge sections (species, services, protocols)
  • Vet-specific knowledge taxonomy (vaccination protocols, species-specific conditions, emergency escalation rules)
  • No church-origin sections (denomination, theology, sermon topics)

Should NOT See:

  • Theological lens picker
  • "Sermon" or "ministry" labels on any training section

E31. Settings → Account → Clinic Profile (VetClinicInfoForm)

Component: VetClinicInfoForm Screenshot: knowledge/acceptance/screenshots/vetwiseai/E31-clinic-profile-settings.png

Should See:

FieldUI labelInput type
clinic_nameClinic nameText
head_veterinarianHead veterinarianText
species_servedSpecies servedMulti-select checkboxes
business_hoursBusiness hoursWeekly schedule editor
emergency_referral_lineAfter-hours emergency clinicText (name) + Phone (E.164)
aspca_disclosure_acknowledgedASPCA disclosureRead-only checkbox + acknowledgment date

Should NOT See:

  • Denomination picker
  • "Director" as a role label (use "Head veterinarian")
  • Church service times ("worship" framing)
  • ChurchInfoForm or FuneralHomeInfoForm rendered for vet tenant

E32. Settings → Integrations

Should See:

IntegrationStatusExpected UI
Cal.comLive"Connect" button or "Connected" state
AVImarkPlaceholder"Coming Soon" badge, one-sentence description, no Connect button
CornerstonePlaceholder"Coming Soon" badge, one-sentence description, no Connect button
Stripe BillingLive"View subscription" / "Update payment method" / "Download invoices"

Should NOT See:

  • Planning Center (church-only)
  • Passare or Tribute Technology (funeral-only)
  • Any integration showing an error or broken Connect button

E33. Settings → Team

Should See:

  • Team member invitations (role-based)
  • Role labels use vet terminology: "front desk," "veterinarian," "practice manager"
  • No pastoral role labels ("elder," "deacon," "worship leader")

Founder to confirm: What roles are available for vet tenants? (Stage 2 open question)


E34–E42: Remaining setup touchpoints

TouchpointStatusNotes
E34. Settings → HoursCovered by E31 (business_hours in VetClinicInfoForm)No separate Hours tab — confirm with founder
E35. Settings → NotificationsN/A pending — confirm in Stage 2Expected: configure who receives call summaries + emergency alerts
E36. Upgrade tabN/A at Phase 4 — confirm if tab existsIf present: should show vwa_starter → vwa_pro ladder only
E37–E42N/A — church-admin-specific tabs not applicableSocial, Theology, Simulator, Care, Calls tabs are all N/A for vet at Phase 4

F. Public-Facing Pages (Touchpoints 43–48)

F43. Client Hub / Appointments page at /appointments/[slug]

URL: https://veterinarywiseai.com/appointments/[slug] Note: Code confirmed intakePathSegment: 'appointments' — NOT /intake/ as the prior spec stated (Drift D1). Screenshot: knowledge/acceptance/screenshots/vetwiseai/F43-client-hub.png

Should See:

  • Clinic name + logo (if uploaded)
  • Business hours (formatted weekly schedule)
  • After-hours guidance: emergency vet clinic name + phone number
  • ASPCA Poison Control reference: "Suspected poisoning? Call 1-888-426-4435 (ASPCA Animal Poison Control, $95 fee, 24/7)."
  • "Book an appointment" CTA → Cal.com link
  • "Request a prescription refill" form
  • Heading: "Client Hub" (per terminology.shareableHubTitle: 'Client Hub')

Should NOT See:

  • "Care Hub" heading (church terminology bleed)
  • Prayer request form for vet tenant
  • "Subscribe for care messages from your congregation"
  • Any church or funeral terminology

URL routing (middleware):

  • veterinarywiseai.com/appointments/[slug] rewrites to /appointments/[slug] in Next.js middleware
  • Middleware must correctly handle this path for the vet domain

F44. Chatbot / embedded widget

State: Phase 4 go-live — chatbot deferred Expected: Chatbot tab in admin shows "Coming Soon" state with Cal.com booking CTA Expected copy: "Your website chatbot is in development. In the meantime, add the appointment booking button below to your clinic website so pet owners can schedule online." CTA: "Copy booking link"

Should NOT See:

  • A rendered chatbot UI (broken or empty)
  • The hosted /chat/[slug] route rendering a vet chatbot (should 404 or redirect to Cal.com)

F45–F48: N/A for VetWiseAI

TouchpointStatusReason
F45. Care subscribe page /care/[slug]/subscribeN/AVet uses appointments hub, not Care Subscribe
F46. Agent-specific chat /care/[slug]/[agent]N/ANo vet chatbot agents at Phase 4
F47. Embed widgetN/A at Phase 4Chatbot deferred; no embed code shipped
F48. Pro Website vanity pageN/AVetWiseAI has no Pro Website product

G. Ongoing Dashboard Use (Touchpoints 49–54)

G49. Inbox tab

Screenshot: knowledge/acceptance/screenshots/vetwiseai/G49-inbox-tab.png

Should See (filter chips from vet.ts):

  • "All" | "Appointment" | "Prescription Refill" | "Emergency" | "Pet Owner Inquiry"

Should NOT See:

  • "Prayer" / "At-Need" / "Pre-Planning" / "Family Contact" chips

Row shape: Avatar, caller name, timestamp, AI summary, status badge, action button Action labels (from terminology.inboxActionLabels):

  • Visitor row: Reply / Schedule follow-up / Mark contacted / Send follow-up
  • Prayer (mapped to pet inquiry) row: Reply / Mark contacted / Assign to vet / Send follow-up

Detail panel on row click:

  • Full call transcript + AI summary
  • Caller-reported species and presenting complaint
  • Action buttons: "Mark resolved" / "Add note" / "Forward to doctor"

G50. Home tab metric tiles (ongoing use)

Should See:

  • "Today's Appointments" tile: count → click → Inbox (all filter)
  • "Prescription Refills" tile: count → click → Inbox (callback filter)
  • "Emergency Calls" tile: count → click → Inbox (call filter) — requires voice channel
  • "Pending Callbacks" tile: count → click → Inbox (callback filter) — requires voice channel

G51–G54: N/A or deferred

TouchpointStatusNotes
G51. Care tabN/A — vet uses Inbox for all client contactNo separate Care tab
G52. Social tabN/A at Phase 4Not wired for vet
G53. Upgrade tabTBD — confirm in Stage 2Should show vwa_starter → vwa_pro only if present
G54. AnalyticsTBD — confirm in Stage 2No vet analytics route confirmed

H. Lifecycle Events (Touchpoints 55–62)

H55–H56: Usage limits

Expected: VetWiseAI has no per-call or per-message cap (flat-rate unlimited voice per VET_TIER_FEATURES). No usage-limit warning banners expected.

Founder to confirm: Is there any soft cap, throttle, or overage logic? (Stage 2 open question)


H57–H58: Trial expiry

Expected: N/A — VetWiseAI has no trial period. Skip.


H59. Payment failure

Expected behavior:

  • Stripe webhook fires invoice.payment_failed
  • stripe_webhook_inbox enqueues event
  • Cron processes: mark subscription past_due in premium_vet_clinics
  • Email notification to clinic owner
  • Dashboard shows payment failure state
  • Voice agent behavior during grace period: TBD — confirm with founder

Founder to confirm: Grace period length, voice agent behavior when payment fails (Stage 2)


H60. Cancellation

Expected:

  • Clinic owner cancels via dashboard (Stripe portal) or contacts founder
  • premium_vet_clinics.statuscancelled
  • Voice agent deactivated
  • Data retained per data policy

Founder to confirm: Cancellation flow — is there a self-serve cancel path in dashboard or does clinic owner email founder? (Stage 2)


H61. Upgrade (Starter → Pro)

Expected:

  • Clinic owner selects Pro on Upgrade tab (if present) or contacts founder
  • Stripe subscription updated via checkout or proration
  • premium_vet_clinics.planvwa_pro
  • Dashboard immediately reflects Pro tier features (Cal.com integration, multi-species KB, 5-day SLA for next changes)

Anti-pattern (FAIL): premium_vet_clinics.plan receives normalizePlanTier() output ('pro') instead of raw key ('vwa_pro').


H62. Downgrade

Expected: Not applicable at launch — only 2 tiers, no documented downgrade path. Confirm with founder if a downgrade from Pro → Starter is supported.


3. Voice Agent Behavior Spec (from existing §2.10, preserved and verified)

Persona: Pet-owner empathetic. Warm, calm, competent. Clinically literate but not intimidating.

AI Bridge Principle (mandatory): The voice agent is a bridge to the clinic and to emergency services — NEVER a replacement for veterinary care. No confidentiality promises. Agent must identify itself as AI when directly asked.

Baseline crisis escalation (non-negotiable):

EscalationRequired script fragmentMandatory?
Mental health crisis (any caller)"If you or someone with you is in emotional crisis, please call or text 988 — there are people there to help right now."YES — every vertical baseline
ASPCA Animal Poison Control"If your pet may have eaten something dangerous, call ASPCA Animal Poison Control at 1-888-426-4435. There is a $95 consultation fee, and they're available 24 hours a day."YES — vet-specific
After-hours emergency vet referral"For after-hours emergencies, [clinic name] uses [emergency_referral_line]. Let me give you that number: [number]. Do you need me to repeat it?"YES

Emergency vs regular routing logic:

  • Active distress / trauma / suspected poisoning / rapid deterioration → emergency vet referral immediately
  • Routine appointment booking, prescription refills, wellness questions → standard agent flow
  • Agent NEVER SIP-bridges to emergency vet — reads number aloud and offers to repeat it

Species-specific handling:

  • References species_served list from clinic config
  • If caller mentions an unserved species: "I want to make sure you get the right care — [Clinic Name] specializes in [species list]. For [caller's species], you may need a specialist. Would you like help finding one?"

Prescription refill intake:

  • Collects: pet name, species, medication name, callback number
  • Writes to voice_callback_requests with vertical: 'vet' and category: 'prescription_refill'
  • Confirms: "I've recorded your refill request for [pet name]. Someone will call you back at [number] — typically within one business day."

Prohibited behaviors:

  • Never offers spiritual or religious counsel
  • Never offers grief support scripted for human bereavement
  • Never gives medical dosage advice or diagnoses
  • Never promises a callback within a specific time unless configured by the clinic

4. Banned Terminology (Test-Enforced)

Must NEVER appear in vet admin UI, vet public pages, or vet voice agent scripts.

Church-origin (banned): church, Pastor, Prayer, sermon, congregation, denomination, theology, worship, ministry, sacrament, Planning Center

Funeral-origin (banned): funeral home, director (as role label), mortuary, casket, burial, at-need, pre-planning, embalmer, Passare, Tribute Store, GriefShare, AFSP


5. Required Terminology

TermWhere it must appear
pet ownerInbox row labels, onboarding copy, voice agent scripts
clinicSettings Account section heading, onboarding, email copy
appointmentInbox filter chip, Home tile label, voice agent booking confirmation
prescriptionInbox filter chip, Home tile label, refill intake confirmation
emergency vetVoice agent after-hours routing, Client Hub
ASPCAWelcome email, ASPCA disclosure checkbox, voice agent poison-control escalation
speciesOnboarding wizard species-served field, voice agent species-routing
head veterinarianSettings Account profile form field label

6. Brand Chrome

TokenConfirmed valueSource
Primary color#1A3A2A (forest green dark)vetwiseai.ts — APPROVED 2026-05-02
Accent color#5B9A6E (sage green)vetwiseai.ts — APPROVED 2026-05-02
FontInter (display + body)vetwiseai/layout.tsx
Brand nameVetWiseAIConfirmed
Logo/lockup/brand-assets/vetwiseai/lockup-horizontal.svglayout.tsx, page.tsx
Favicon/brand-assets/vetwiseai/favicon.svglayout.tsx
Domainveterinarywiseai.comConfirmed
Admin header name"VetWiseAI"vetwiseai.ts
Page title template%s | VetWiseAIlayout.tsx
Homepage titleVetWiseAI — AI Answering for Veterinary Practices (absolute)page.tsx
Email fromVetWiseAI <hello@veterinarywiseai.com>lifecycle-emails-vet.ts

Email brand issue (Drift D3): Email header uses blue gradient, not forest-green. Needs correction before go-live.


7. Acceptance Test Stubs

e2e/vet-admin-no-bleed.spec.ts

test.fixme('vet admin contains no church/funeral terminology', async ({ page }) => {
await page.goto('https://veterinarywiseai.com/admin/vetwiseai-demo-token-2026');
const bodyText = await page.locator('body').innerText();
const banned = ['church', 'Pastor', 'Prayer', 'sermon', 'congregation', 'denomination',
'theology', 'worship', 'ministry', 'sacrament', 'funeral home', 'mortuary', 'casket',
'burial', 'at-need', 'pre-planning', 'embalmer', 'Passare', 'Tribute Store', 'GriefShare'];
for (const term of banned) {
expect(bodyText.toLowerCase()).not.toContain(term.toLowerCase());
}
});

e2e/vet-homepage.spec.ts

test.fixme('vet homepage renders in correct brand chrome', async ({ page }) => {
await page.goto('https://veterinarywiseai.com');
await expect(page.getByRole('heading', { level: 1 })).toContainText('worried pet owner');
await expect(page).not.toHaveURL(/churchwiseai\.com/);
// No church/funeral bleed check
const body = await page.locator('body').innerText();
expect(body.toLowerCase()).not.toContain('congregation');
expect(body.toLowerCase()).not.toContain('prayer');
});

e2e/vet-checkout.spec.ts

test.fixme('vet self-serve checkout submits correct metadata to stripe', async ({ page }) => {
// Navigate, select Pro, USD, fill email, submit
// Assert Stripe session metadata contains tier: 'vwa_pro' (not 'pro')
});

e2e/vet-inbox-filters.spec.ts

test.fixme('vet admin inbox shows vet-specific filter chips', async ({ page }) => {
await page.goto('https://veterinarywiseai.com/admin/vetwiseai-demo-token-2026');
await page.getByRole('tab', { name: 'Inbox' }).click();
for (const chip of ['Appointment', 'Prescription Refill', 'Emergency', 'Pet Owner Inquiry']) {
await expect(page.getByRole('button', { name: chip })).toBeVisible();
}
for (const banned of ['Prayer', 'At-Need', 'Family Contact']) {
await expect(page.getByRole('button', { name: banned })).not.toBeVisible();
}
});

e2e/vet-client-hub.spec.ts

test.fixme('vet client hub renders correct content', async ({ page }) => {
await page.goto('https://veterinarywiseai.com/appointments/vetwiseai-demo-clinic');
await expect(page.locator('body')).toContainText('1-888-426-4435');
await expect(page.locator('body')).toContainText('$95');
await expect(page.locator('body')).not.toContainText('Care Hub');
await expect(page.locator('body')).not.toContainText('prayer');
});

e2e/vet-voice-crisis.spec.ts

test.fixme('vet voice agent crisis copy is present', async () => {
// Load vetProfile.crisisCopy and assert required strings
const { vetProfile } = await import('@/lib/verticals/vet');
const crisisLines = vetProfile.crisisCopy?.lines.join(' ') ?? '';
expect(crisisLines).toMatch(/988/);
expect(crisisLines).toMatch(/1-888-426-4435/);
expect(crisisLines).toMatch(/\$95/);
});

8. Open Questions for Stage-2 Founder Interview

#QuestionWhy it blocksPriority
OQ-1Stripe test-mode products — No test-mode Stripe products exist for VetWiseAI. When should they be created?Required before any QA testing that touches the checkout flow in test mode.P0 for QA
OQ-2premium_vet_clinics DB table — Confirmed it doesn't exist in DB yet (vet.ts says "Phase 6"). When will it be created? Until then, admin routing may fail.Required before ANY vet customer onboarding.P0 for go-live
OQ-3Annual billing option — Is annual pricing planned for VetWiseAI (Starter/Pro)? Code has no annual wiring, pricing page shows no annual option.Affects pricing page, checkout, Stripe product creation.P1
OQ-4Demo token — Confirmed placeholder vetwiseai-demo-token-2026 is referenced in Playwright stubs. Has this been provisioned in the DB?All E2E tests reference this token.P1 for testing
OQ-5Thank-you page — The self-serve checkout redirects to veterinarywiseai.com/thank-you. Does a vet-specific or generic thank-you page exist under the /vetwiseai/ segment? A 404 here is a broken post-purchase experience.Post-purchase UX.P0 for self-serve checkout
OQ-6Canonical plan key in DB — Is the correct canonical plan key vwa_starter (as set by vet-checkout/route.ts) or vet_starter (as used in lifecycle-emails-vet.ts)? These are inconsistent.If wrong key is written to premium_vet_clinics.plan, lifecycle emails and tier gating break.P0
OQ-7Email brand colors — Lifecycle email HTML header uses blue gradient (#0c4a6e), not forest-green palette. Is this intentional or a bug?Brand consistency.P1
OQ-8Client Hub URL — Confirmed as /appointments/[slug] from vet.ts. Is /intake/<slug> (from old spec) retired?Prior spec and any printed QR codes using /intake/ will be wrong.P1
OQ-9Voice agent go-live scope — Is voice agent in Phase 4 scope or deferred? vet.ts has scaffold only; no voice agent YAML confirmed for vet vertical.Determines which crisis-copy and voice tests run at launch.P0 for sprint planning
OQ-10Thank-you page 404 risk — Middleware rewrites veterinarywiseai.com/* to /vetwiseai/*. So veterinarywiseai.com/thank-you/vetwiseai/thank-you. Does this page exist?Broken post-purchase UX if it 404s.P0
OQ-11Post-payment onboarding UX — Is there a guided setup checklist in the vet admin dashboard, or is all setup handled by the founder's onboarding interview?Determines whether E-category touchpoints are self-served or service-delivered.P1
OQ-12Cancellation path — Is there a self-serve cancel flow in the vet admin, or does the clinic owner email the founder?H60 lifecycle touchpoint.P2

9. Touchpoint Coverage Summary

CategoryTouchpointsStatus
A. DiscoveryA1–A10 (10 total)6 specified; A8 N/A (no ads); A9 N/A (no PewSearch integration); A10 N/A (same as A1)
B. Pre-PurchaseB11–B16 (6 total)4 specified; B15 N/A (sales-led); B16 N/A (no PewSearch)
C. EmailC17–C24 (8 total)7 specified; C24 open question
D. First LoginD25–D29 (5 total)4 specified; D29 open question
E. SetupE30–E42 (13 total)5 specified; E37–E42 N/A (church-admin tabs); E34–E36 TBD
F. Public-FacingF43–F48 (6 total)2 specified; F45–F48 N/A (no care/embed/Pro Website)
G. OngoingG49–G54 (6 total)3 specified; G51 N/A (no Care tab); G52 N/A (no Social)
H. LifecycleH55–H62 (8 total)6 specified; H57–H58 N/A (no trial); H62 N/A (no downgrade path)
Total62 methodology touchpoints~37 fully or partially specified; ~15 N/A with reasons documented; ~10 TBD pending founder Stage-2 answers

10. Agents Reading This Spec

Before modifying any vet vertical code path, cross-reference against this spec. If a code change would contradict an expected output here:

  1. Update this spec first (with founder sign-off via explicit "yes" in session), THEN change the code.
  2. OR flag the contradiction as a FAIL in the /ensure-solid vetwiseai scorecard.

When vet admin code lands (Phase 6), the Playwright stubs in §7 should be un-fixed and run against https://veterinarywiseai.com/admin/vetwiseai-demo-token-2026 per the production-testing rule.

The knowledge/readiness/vetwiseai.yaml config references this spec and is required before /ensure-solid vetwiseai can run for the first time.