Trial Expired — Expected Output Spec
Status: COMPLETE -- Lifecycle state spec covering all chat plan trial expiry scenarios. Applies to: Starter Chat, Pro Chat, Suite Chat (monthly + annual variants) Does NOT apply to: Voice plans, bundle plans (no trial)
Scope
This spec covers the customer experience when a 14-day free trial on a chat plan ends without successful payment. It defines:
- What the dashboard looks like after trial expires
- The "trial ending" warning emails (Days 11 + 13)
- The "trial expired" email (Day 15)
- The win-back email sequence
- The re-subscribe flow
- Edge cases (payment failed, plan switching, data retention)
State Transitions
Day 1-14: status = 'preview' (trial active, full access)
Day 12: Dashboard amber banner ("2 days left")
Day 14: Stripe attempts charge
├─ Charge succeeds → status = 'active' (no further action)
├─ Charge fails → status = 'past_due' (grace period, ~7 days Stripe retries)
│ ├─ Retry succeeds → status = 'active'
│ └─ All retries fail → status = 'cancelled' (expired state below)
└─ No card on file → status = 'cancelled' immediately
Day 15: "Trial expired" email sent (only if not active)
Day 21: Win-back email #1
Day 44: Win-back email #2 (final)
A. Dashboard State After Trial Expires
Touchpoint TE-1: Expired Dashboard
URL: https://churchwiseai.com/admin/[token]
Component: Admin dashboard with expired state handling
Should See:
- Status badge: "Expired" (amber/red styling, distinct from "Active" and "Trial")
- Persistent banner on EVERY tab:
- Headline: "Your free trial has ended"
- Body: "Your chatbot is offline -- but everything you set up is still here. Subscribe to bring it back to life and keep serving your congregation 24/7."
- "Choose a Plan" CTA button (prominent, gold) ->
/pricing
- All existing data visible in READ-ONLY mode:
- Requests tab: can view prayer requests, visitor contacts, callbacks (cannot edit status)
- Training tab: can view all church knowledge, agents, theology settings (cannot edit)
- Care tab: can view member list (cannot send broadcasts or toggle)
- Settings tab: can view all settings (cannot modify)
- Overview tab: shows historical stats (all at zero for current period since chatbot is offline)
- Tab navigation unchanged -- same tabs as during trial (no tabs removed on expiry)
Should NOT See:
- Full functional dashboard (cannot edit anything)
- Working chatbot generating responses
- "Your data will be deleted in X days" threats
- Complete lockout / redirect away from dashboard
- Punitive or guilt-trip messaging
- Active trial badge or countdown
- "Upgrade to Pro" messaging (they're not even paying for Starter yet)
Playwright Test Hints:
- Assert "Expired" status badge visible
- Assert banner with "Your free trial has ended" text on Overview tab
- Assert "Choose a Plan" button links to
/pricing - Assert Training tab inputs are disabled/readonly
- Assert Settings tab inputs are disabled/readonly
- Assert Requests tab data is still visible
Founder Decision: [x] Approved (read-only; empathetic banner; no data deletion)
Touchpoint TE-2: Chatbot Public Page (Expired)
URL: https://churchwiseai.com/chat/[slug]
Component: churchwiseai-web/src/app/chat/[slug]/ChatInterface.tsx
Should See:
- Chat interface visible (not removed)
- Fallback message instead of AI responses:
- "Hi! [Church Name]'s chatbot is not currently available."
- "Please contact the church directly:"
- Church phone number (from
organization_settings) - Church email (from
organization_settings) - Church website (if available)
- "Powered by ChurchWiseAI" badge (still visible)
Should NOT See:
- LLM-generated responses
- Working chatbot conversation
- Error messages or technical jargon
- "This church hasn't paid" or any billing-related messaging
- Completely blank/empty page
Playwright Test Hints:
- Assert chat page loads without errors
- Assert fallback message contains church contact info
- Assert sending a message does NOT produce an AI response
- Assert NO technical error messages visible
Founder Decision: [x] Approved (gentle fallback with church contact info)
Touchpoint TE-3: Care Hub Page (Expired)
URL: https://churchwiseai.com/care/[slug]
Should See:
- Care hub still accessible (church info, service times visible)
- Agent "Chat Now" buttons disabled or show fallback message
- Subscribe page still functional (
/care/[slug]/subscribe) -- congregation members can still opt in (valuable for re-engagement)
Should NOT See:
- Working agent chat
- Technical error pages
Founder Decision: [x] Approved (care hub partially available; subscribe still works)
B. Trial Ending Warning Emails (Days 11 + 13)
Touchpoint TE-4: Day 11 Email -- "3 Days Left"
Trigger: Lifecycle email system, 11 days after activation
Sender: Resend (ChurchWiseAI <hello@churchwiseai.com>)
Component: churchwiseai-web/src/lib/lifecycle-emails.ts
Should See:
Subject: "Your free trial ends in 3 days -- here's what to know"
Body:
Hi {$name},
Just a heads-up -- your 14-day free trial for {$church_name} ends on {trial_end_date}.
Here's what you've built so far:
- {service_times_count} service times added
- {staff_count} staff members listed
- {ministry_count} ministries described
- {conversation_count} chatbot conversations served
That's real ministry happening automatically!
What happens next:
- Your card on file will be charged ${amount} on {trial_end_date}
- Your chatbot keeps running -- no interruption
- Everything stays exactly as it is
If you'd like to cancel, you can manage your subscription anytime:
[Manage My Subscription ->] (Stripe Customer Portal)
Grace and peace, John ChurchWiseAI
Tier-specific amounts:
| Plan | Amount |
|---|---|
| Starter Chat (monthly) | $14.95 |
| Starter Chat (annual) | $149.50 |
| Pro Chat (monthly) | $34.95 |
| Pro Chat (annual) | $349.50 |
| Suite Chat (monthly) | $59.95 |
| Suite Chat (annual) | $599.50 |
Founder Decision: [x] Approved
Touchpoint TE-5: Day 13 Email -- "Trial Ends Tomorrow"
Same as existing Day 13 lifecycle email (Starter Chat Touchpoint 23, Pro+Suite Chat Touchpoint 23). This email already exists in lifecycle-emails.ts.
Subject: "Your free trial ends tomorrow -- here's what happens next"
Content: see Starter Chat Touchpoint 23 for Starter copy, Pro+Suite Chat Touchpoint 23 for Pro/Suite copy.
Founder Decision: [x] Approved (already implemented)
Touchpoint TE-6: Day 12 Dashboard Banner
Trigger: 2 days before trial end Component: Dashboard header/banner area
Should See:
- Amber/warning banner (same as Starter Chat Touchpoint 57):
- "Your free trial ends in 2 days -- your card will be charged ${amount} on {date}"
- "Manage Subscription" link -> Stripe Customer Portal
- Informational, not aggressive
Should NOT See:
- Red/error styling (amber/warning is appropriate)
- "Last chance!" urgency language
- Feature degradation (full access until trial actually ends)
Founder Decision: [x] Approved (same as Touchpoint 57 across all specs)
C. Trial Expired Email (Day 15)
Touchpoint TE-7: "Your Chatbot Is Offline" Email
Trigger: Day 15 (1 day after trial end) -- only fires if subscription is NOT active (payment failed or no card)
Sender: Resend (ChurchWiseAI <hello@churchwiseai.com>)
Component: lifecycle-emails.ts -- new email key: trial_expired_[tier]
Should See:
Subject: "Your chatbot is offline -- reactivate anytime"
Body:
Hi {$name},
Your 14-day trial for {$church_name} has ended, and your chatbot is no longer responding to visitors.
But here's the good news:
Everything you set up -- your church info, agent personalities, ministry descriptions -- is safely saved. It'll be right where you left it when you come back.
In the meantime, visitors to your chat page will see your church contact information so they can still reach you.
Ready to bring it back?
[Choose a Plan ->] (link to /pricing)
We understand -- timing matters. When you're ready, your chatbot is ready.
Grace and peace, John ChurchWiseAI
Should NOT See:
- "Your account has been deactivated" (too harsh)
- Data deletion threats
- Discount offers or incentives
- Aggressive upsell language
Founder Decision: [x] Approved (empathetic; mentions data preserved; no pressure)
D. Win-Back Email Sequence
Touchpoint TE-8: Day 21 Win-Back Email
Trigger: 7 days after trial expiry (Day 21 from signup) Sender: Resend
Subject: "Your chatbot is still set up and waiting for you"
Body:
Hi {$name},
It's been a week since your trial ended for {$church_name}. We wanted you to know -- everything you set up is still there:
- Your church profile with {staff_count} staff and {ministry_count} ministries
- Your agent personality settings
- {request_count} requests captured during your trial
All of it is saved and ready to go the moment you reactivate.
[Reactivate My Chatbot ->] (link to /pricing)
If you had any issues during your trial, we'd love to help. Just reply to this email.
Grace and peace, John ChurchWiseAI
Founder Decision: [x] Approved
Touchpoint TE-9: Day 44 Win-Back Email (Final)
Trigger: 30 days after trial expiry (Day 44 from signup) Sender: Resend
Subject: "We're still here when you're ready"
Body:
Hi {$name},
A month ago, you tried ChurchWiseAI for {$church_name}. We know timing isn't always right, and that's OK.
Your chatbot and all the church information you entered are still saved in our system. Whenever you're ready, you can pick up right where you left off -- no re-setup needed.
[Choose a Plan ->] (link to /pricing)
If you ran into issues or have questions, I'd love to chat. Reply here or schedule a quick call:
[Schedule a Call ->] (link to /book)
Grace and peace, John ChurchWiseAI
After this email, no more win-back emails are sent. The decision is respected.
Founder Decision: [x] Approved (final contact; schedule-a-call option; no more after this)
E. Re-Subscribe Flow
Touchpoint TE-10: Re-Subscribe from Dashboard
URL: Dashboard -> "Choose a Plan" button
Destination: /pricing (pricing page, pre-filtered to Chat channel)
Should See:
- Full pricing page with all plans visible
- Customer can choose ANY plan (not forced back to the same tier they trialed)
- "Chat Only" channel pre-selected (since they had a chat trial)
- Normal checkout flow from pricing -> onboard -> Stripe
Should NOT See:
- Forced same-tier selection
- New 14-day trial offer (no second trial for same email)
- "Reactivation" fee or penalty
Founder Decision: [x] Approved (choose any plan; no second trial)
Touchpoint TE-11: Re-Subscribe from Email
URL: Email CTA -> /pricing
Destination: Same as TE-10
Same flow. Customer lands on pricing page, picks a plan, checks out.
Founder Decision: [x] Approved
Touchpoint TE-12: Post-Re-Subscribe Confirmation
Trigger: Successful Stripe checkout after trial expiry Component: Stripe webhook + email
Should See:
-
"Welcome back" email:
- Subject: "Welcome back to ChurchWiseAI -- [Church Name]"
- Body: "Great news -- your chatbot is back online and serving your congregation!"
- Confirms plan and price
- "Everything you set up before is still there -- your church info, agent personalities, and ministry descriptions are all exactly as you left them."
- Dashboard magic link
- If upgraded (e.g., trialed Starter, subscribed to Pro): mentions new features unlocked
- No "3 things to do first" (they already did setup)
-
Dashboard immediately:
- Status badge changes from "Expired" to "Active"
- Read-only mode lifted -- all editing restored
- Chatbot goes live immediately on public pages
- If changed plans: new features visible immediately
-
All training data carried over -- nothing reset, nothing lost
-
Requests from trial period still visible
Should NOT See:
- Need to re-enter church info
- Need to re-configure agents
- Data loss of any kind
- "Start over" messaging
Founder Decision: [x] Approved (welcome back email; immediate restore; all data preserved)
Touchpoint TE-13: Re-Subscribe with Different Plan
Trigger: Customer trialed one plan but subscribes to a different one
Should See:
- All training data preserved regardless of plan change
- If upgrading (Starter trial -> Pro subscribe): new features unlock immediately (FAQs, Simulator, additional agents, analytics)
- If downgrading (Pro trial -> Starter subscribe): Pro features HIDDEN (not deleted), data preserved in database
Should NOT See:
- Data reset or "start fresh" option
- Loss of any training content entered during trial
Founder Decision: [x] Approved (data always preserved; features adjust to new plan)
F. Edge Cases
Touchpoint TE-14: Payment Failed on Day 14 (Card on File)
Trigger: Customer has card on file but charge fails on Day 14
Should See:
- Grace period: Chatbot remains active during Stripe retry window (~7 days)
- Dashboard:
past_duestatus badge (amber, distinct from "Active" and "Expired") - Banner: "Payment failed -- please update your payment method"
- Stripe email: "Payment failed" with link to update card
- "Update Payment Method" CTA -> Stripe Customer Portal
If Stripe retries succeed: status returns to active, no expired email sent.
If all retries fail: status becomes cancelled, expired state applies (TE-1 through TE-9).
Key difference from "no card on file":
- No card = immediate expiry on Day 14
- Failed card = ~7 day grace period (Stripe retries)
Founder Decision: [x] Approved (grace period for failed payments; same as active subscription payment failure)
Touchpoint TE-15: Cancel During Trial (Before Day 14)
Trigger: Customer actively cancels before trial ends (doesn't wait for it to expire)
Decision: Treated as cancellation, NOT trial expiry. See cancelled.md spec.
- Service continues until end of trial period (Day 14)
- No charge on Day 14 (they cancelled)
- After Day 14: same expired state as TE-1
- Dashboard read-only, chatbot offline, data preserved
The distinction matters for email copy: "You cancelled your trial" (their choice) vs "Your trial expired" (they didn't act).
Founder Decision: [x] Approved (cancellation flow, not expiry flow; service until Day 14)
Touchpoint TE-16: Annual Plan Trial Expiry
Trigger: Customer on annual plan trial (e.g., starter_chat_annual) -- trial ends without payment
Same behavior as monthly trial expiry. The only difference is the amount in emails:
| Plan | Amount shown |
|---|---|
| Starter Chat Annual | $149.50/yr |
| Pro Chat Annual | $349.50/yr |
| Suite Chat Annual | $599.50/yr |
All dashboard behavior, data retention, and re-subscribe flow is identical to monthly.