05 Automation Plan

Kingdom Wife Blueprint — Automation Plan

What runs without Sandi · what stays manual · what’s deferred. The principle: Sandi keeps the voice work; everything mechanical is automated.


Automation map

flowchart LR
    A[New Tier 2/3 purchase] -->|Stripe webhook| B(IONOS PHP handler)
    B --> C[(MySQL: kwb_purchases)]
    C --> D[Trigger Day 0 email]
    C --> E[Schedule Day 3,7,14,30 in queue]
    D --> F[Cron: every 6h email-sender.php]
    E --> F
    F --> G[Send via PHP mailer or ConvertKit]
    G --> H[(MySQL: kwb_email_log)]

    I[New cohort signup Tier 3] --> J[Calendly RSVP auto-link]
    J --> K[Cohort #N membership row]
    K --> L[Accountability partner pairing]

    M[Receipt drop in 2026_Receipts/] --> N(receipt-watcher-agent)
    N --> O{Auto-classify?}
    O -->|High confidence| P[Append journal row]
    O -->|Ambiguous| Q[Prompt Sandi]

    style A fill:#1F4D4A,stroke:#163A38,color:#fff
    style D fill:#B8893A,stroke:#8B5E3C,color:#fff
    style F fill:#6B7F6B,stroke:#3D7A4E,color:#fff

What runs WITHOUT Sandi (full automation)

Trigger What happens Tech
Stripe webhook (Tier 2 / Tier 3 purchase) User row updated · purchase logged · Day 0 email queued PHP webhook handler in includes/stripe-webhook.php
Daily cron @ 6am Email queue check; sends due Day 3/7/14/30 emails cron-email.php via IONOS cron
Hourly cron Bounced-email cleanup · failed-payment retry cron-cleanup.php
Weekly cron @ Sunday 8pm Cohort attendance digest emailed to Sandi · accountability-pair non-engagement flags cron-cohort-digest.php
Monthly cron @ 1st of month 1am Receipt-watcher sweep · receipt journal stub generated for the new month cron-monthly.php
Quarterly cron @ Q1/Q2/Q3/Q4 first Monday KPI snapshot generated · emailed to Sandi for review cron-quarterly.php
Per-content-completion kwb_content_progress row inserted · downstream unlock check inline in lesson-N.php

What stays MANUAL (Sandi keeps the voice)

Task Why manual Cadence
Cohort call (90 min monthly) Live presence is the product Monthly
Personal check-ins to disengaged members Trust-keeping work; can’t be templated As needed
Approving newly-drafted course content Voice gate + theological accuracy Per content batch
Quarterly business review Strategic decisions live in her head Quarterly
Beta-feedback consensus calls Editorial judgment Per book launch
Sabbath calls (calls she takes outside structured cohort) Pastoral relationship As needed
Anything that goes out under her name Voice ownership Always

What’s DEFERRED (don’t build until Phase 4)

Feature Defer until Why
Mobile app (native) After Y1 revenue ≥ $50K Web-responsive is sufficient initially
Advanced analytics dashboard After 100 paid members KPI snapshot email is enough
AI-driven content recommendations After course content complete Premature personalization
Affiliate program After Y1 testimonials proven Need ambassadors first, not affiliates
Multi-language After English audience saturates Y3+
Public REST API Never (without specific reason) Out of scope

Email automation sequence (the core flow)

sequenceDiagram
    participant U as User
    participant S as Stripe
    participant P as PHP webhook
    participant DB as MySQL
    participant Q as Email queue
    participant M as Mailer (cron)

    U->>S: Pays $197 (Tier 2)
    S->>P: webhook payment_intent.succeeded
    P->>DB: INSERT kwb_purchases (succeeded)
    P->>DB: UPDATE kwb_users SET current_tier=2
    P->>Q: INSERT email_queue (day-0-welcome, NOW)
    P->>Q: INSERT email_queue (day-3-introduction, NOW+3d)
    P->>Q: INSERT email_queue (day-7-reflection, NOW+7d)
    P->>Q: INSERT email_queue (day-14-deeper, NOW+14d)
    P->>Q: INSERT email_queue (day-30-celebrate, NOW+30d)

    Note over M: cron every 6h
    M->>Q: SELECT pending WHERE scheduled_for <= NOW
    M->>M: Render template + send
    M->>DB: INSERT email_log (sent)

Manual-override controls

Every automation has a manual-override toggle in /admin/: - Pause email queue for specific user (e.g., she emails back asking to slow down) - Manually advance a user to next tier (refund · gift · beta access) - Suspend cohort attendance counter (member on medical leave) - Re-send last email (user reports they didn’t receive) - Trigger out-of-cycle email (announcement · quarterly newsletter)

These overrides write to an audit log table for traceability.


Failure modes & alerts

Failure Detection Alert
Stripe webhook signature mismatch webhook handler returns 401, logs to kwb_webhook_errors Email to valuetovictory@gmail.com immediately
Email send rate > 100/hr (suggests stuck queue) cron checks queue depth Email + dashboard banner
Failed payment 3x in 24h webhook handler counter Email + admin dashboard flag
MySQL connection refused bootstrap.php health check Email + 500 page with status
Disk usage > 80% on IONOS weekly cron df -h check Email

Cross-references