AutomateDojo — Changelog

2026-05-30 — Enterprise readiness, night 7 (blocks 58-60)

Lead form abuse detection (block 58)

  • lib/lead-abuse.ts scores every dojo-lead submission on 10 heuristics (honeypot, fast submit, link spam, suspicious TLDs, automation user-agents, non-Latin script…).
  • Verdict ≥80 = silently dropped; ≥35 = stored as 'review' status, downstream fan-out skipped (no SMS, no outbound webhooks, no CRM push); <35 = normal flow.
  • Score + reasons stored in lead.enrichment.abuse for audit.

Weekly digest one-click unsubscribe (block 59)

  • RFC 8058 List-Unsubscribe + List-Unsubscribe-Post headers added to weekly client digest emails.
  • /api/digest/unsubscribe (GET + POST) sets notification_prefs.weekly_digest = false and logs activity.

Price-lock guarantee (block 60)

  • Public /price-lock — 24-month no-raise commitment for customers signed up at any current SKU price.
  • Covers SKU recurring + annual + bundled AI tokens. Doesn't cover ad spend, Twilio metered, token top-ups beyond included, newly-added SKUs.
  • Acquisition clause: commitment transfers OR full refund of unused prepaid time.

2026-05-30 — Enterprise readiness, night 6 (blocks 55-57)

Subprocessor list (block 55)

  • Public /subprocessors lists 8 third-party processors (Vercel, Supabase, Stripe, Resend, Twilio, Anthropic, Google Cloud, Meta) with purpose, data shared, region, compliance posture, and links to privacy/DPA.
  • 30-day notice policy for adding new processors.

Cancellation retention flow (block 56, migration 051)

  • /client//cancel intercepts before Stripe portal.
  • Reason picker → context-aware retention offers (pause / downgrade / talk to founder / stay / cancel).
  • Admin alerted within minutes on all non-retained outcomes.

Outbound webhooks for customer integrations (block 57, migration 052)

  • /client//integrations/webhooks lets owners add URLs + select events.
  • HMAC-SHA256 signed deliveries, 10s timeout, auto-disable after 10 consecutive failures.
  • Per-delivery audit ledger.
  • lead.created event already wired through /api/dojo-lead — first webhook fires the moment your dojo receives a new lead.

2026-05-30 — Enterprise readiness, night 5 (blocks 51-54)

Stripe ↔ DB reconciliation (block 51)

  • Nightly cron at 07:00 UTC walks every active dojo_sku with a Stripe subscription, fetches it, and corrects DB drift (status, billing_interval, deleted-in-Stripe). Emails admin summary only when drift > 0.

GDPR / CCPA data subject requests (block 52, migration 048)

  • Public /data-request form for export / delete / rectify. Email verification before any action. Admin gets notification email; subject gets receipt.
  • /api/gdpr/verify confirms ownership.

Multi-user team access (block 53, migration 049)

  • /client//team — owners invite teammates (read-only access to all dojo data) or co-owners (full equivalent).
  • 14-day invite expiry, revocation, status badges. /accept-invite/ binds invite to current user.
  • canViewClientDojo() now honors team membership.

Promo / discount codes (block 54, migration 050)

  • /admin/promo-codes mints Stripe Coupons + Promotion Codes with % or $ off, duration (once / repeating N / forever), max_redemptions, expiration.
  • Stripe webhook attributes each redemption to 9dm_promo_redemptions + increments counter.

2026-05-30 — Enterprise readiness, night 4 (blocks 46-50)

RSS for the changelog (block 46)

  • /changelog.rss feed (RSS 2.0) auto-built from CHANGELOG.md sections — 15 min cache, 1 hour swr.
  • declared in so feed readers + AI agents auto-discover.
  • /changelog page gains an RSS chip in the header.

Pricing A/B implementation (block 47)

  • pricing_setup_fee_framing experiment resolved server-side via lib/ab.
  • Treatment variant adds a "From $98/mo" hook above the bundle grid framing setup fees as right-sized.
  • ABView client component fires one view event per session per experiment.

SLA page (block 48)

  • /sla with per-surface uptime targets (99.95% leads/sites, 99.9% dashboard + API, 99.5% AI/ad APIs).
  • Support response times (critical < 4h, high < 1bd, normal < 3bd).
  • Data residency + ownership + encryption + audit-trail commitments.
  • SLA credit ladder (10/25/50% with cancel-and-refund at <95%).
  • Honest "what this isn't" — no SOC 2 yet, no HIPAA, no 24/7 phone.

Customer success metrics dashboard (block 49)

  • /admin/customer-success — Total MRR, ARR, active/onboarding counts, avg MRR.
  • Time-to-first-lead (key activation metric).
  • Monthly cohorts table with retention % and cohort MRR.
  • Active dojo ladder sorted by MRR with 30d leads + NPS color-coded by category.

Public sales playbook (block 50)

  • /how-we-sell — transparent 6-section page laying out what we don't do (no 60-min sessions, no annual lock-in) vs what we do (public pricing, live demo, ROI calc).
  • Includes "when NOT to sign up" and a 5-question vendor evaluation checklist.

2026-05-30 — Enterprise readiness, night 3 (blocks 39-45)

Status badge

  • /status/badge.svg returns a 180×20 shields.io-style badge reflecting latest probe-log overall_status. Customers can embed on their own sites. /status includes copy-paste embed block.

NPS surveys (migration 044)

  • Daily cron at 17:00 UTC sends first survey 30 days after each dojo's first lead, then every 90 days.
  • Public /survey/ page (noindex) — color-coded 0-10 grid + comment field.
  • Detractors (0-6) trigger an immediate admin alert email.
  • /admin/nps shows NPS score, promoters / passives / detractors, response rate, quotes.

Programmatic case studies

  • /case-studies indexes testimonials with metric_before/after. Empty-state with onboarding CTA.
  • /case-studies/[slug] individual case page with Schema.org Review JSON-LD.

Re-engagement (migration 046)

  • Weekly Tuesday cron sends dormant-prospect touches (30/60/90 days) and winback emails (60/120/180 days) with max 3 touches.
  • RFC 8058 List-Unsubscribe + one-click POST headers.
  • Public opt-out endpoint sets re_engagement_opted_out_at.

Per-dojo audit log CSV export

  • GET /api/client//activity/export.csv (auth = canViewClientDojo) returns full activity ledger including system events. ?days=N (max 1825). Surfaced as "Export 1-yr CSV ↓" on /client//activity.

Customer API tokens (migration 045)

  • /client//api-tokens lets owners mint scoped read-only tokens. SHA256-hashed at rest, prefix-displayed.
  • GET /api/v1/leads is the first public REST endpoint — Authorization: Bearer ad_live_…, scope read:leads, ?since pagination.
  • Activity-log entries for token mint + revoke.

A/B experiment infrastructure (migration 047)

  • 9dm_ab_experiments + assignments + events tables.
  • lib/ab.ts with first-party visitor cookie + deterministic bucketing + variantFor() server helper + logAbEvent().
  • /admin/ab-experiments dashboard with per-variant funnel metrics.

2026-05-30 — Enterprise readiness, night 2

Testimonials infrastructure

  • Migration 040 enriches 9dm_testimonials with metric before/after, per-surface eligibility flags, consent tracking.
  • component on /pricing + /compare. Renders nothing when no eligible quotes.
  • /admin/testimonials form gained 18 new fields.

Affiliate program

  • /affiliates public landing — 20% recurring + 10% setup + 12-month tail, math example, anti-spam rules.
  • /api/affiliates/apply accepts applications, emails admin.
  • /admin/affiliates tabbed (Affiliates / Applications / Commissions) with one-click approval → email.
  • Attribution: ?ref=CODE persisted in sessionStorage; resolved on signup via lib/affiliate-attribution.
  • Monthly accrual cron at 0 2 1 * * computes per-dojo MRR × commission_pct, honors 12-month tail, idempotent.

Annual upgrade prompt

  • Migration 042 adds billing_interval to 9dm_dojo_skus; Stripe webhook writes it from session metadata.
  • on /client//billing-portal nudges monthly customers — calculates yearly savings.
  • POST /api/client//billing/switch-to-annual updates Stripe subscription items to annual price with proration.

Live demo sandbox

  • /demo/sandbox — fully populated read-only fake dojo with 6 tabs (Overview, Leads, Ads, Site editor, Reviews, AI assistant). No signup required.
  • Sticky DEMO MODE banner with /pricing CTA. All action buttons stub-disabled.

Customer onboarding checklist

  • 6-item checklist on /client/ computed honestly from DB state (active SKU, logo, domain, tracking ID, AI budget, first lead).
  • Progress bar, per-item "Do it →" link to right surface. Dismissible per dojo.

Status page incidents + uptime

  • Migration 043 adds 9dm_status_incidents + 9dm_status_probes_log.
  • /status now shows 90-day uptime bar (per-day color-coded squares), 90-day uptime %, recent incidents list.
  • /admin/incidents to post + manage incidents (severity, status, affected components, public/private).
  • health-alerts cron writes one probe log row per run.

Deliverability health check

  • GET /api/admin/deliverability-status checks RESEND_FROM + Resend domain verification.
  • on admin home + /admin/settings/email when unhealthy.
  • health-alerts cron warns when RESEND_FROM is still onboarding@resend.dev or domain isn't verified.

SEO + AI discoverability

  • WebSite JSON-LD with SearchAction (Google sitelinks search box).
  • Preconnect / dns-prefetch for GA4, GTM, Facebook, Stripe.
  • /llms.txt + /ai.txt routes for AI crawler discovery.

2026-05-29 evening — Enterprise readiness + annual billing

New surfaces

  • Annual billing — Monthly/annual toggle on [/pricing](/pricing). 17% discount (≈2 months free) on prepaid annual. Threads end-to-end through /get-started → pitch → Stripe checkout.
  • [/roi-calculator](/roi-calculator) — Plug in your numbers, get payback period + 12-month ROI across bundles + DIY + agency.
  • [/compare](/compare) — 18-row honest comparison of AutomateDojo vs DIY (Squarespace) vs local agency.
  • [/security](/security) — Trust + compliance position. Includes the HONEST "what we don't do yet" (2FA, SAML, HIPAA, SOC 2).
  • [/refund-policy](/refund-policy) — Explicit money-back terms.
  • [/franchises](/franchises) — Multi-location sales surface with volume discounts (10% at 2-4 locations, 20% at 5-9).
  • [/api-docs](/api-docs) — Public API + webhook reference.
  • [/roadmap](/roadmap) — 26-item public roadmap.
  • [/demo](/demo) — Book a 15-minute walkthrough.
  • [/help](/help) — 12 self-serve articles.

Pricing rework

  • Website Only setup: $1,700 → $348 (5× drop). Ratio 17× monthly → 3.5×.
  • Ads Managed: $299 → $399/mo (reflects real labor).
  • Full Bundle (was Soup To Nuts): $973/mo + $3,150 setup → $1,173/mo + $1,743 setup.
  • All 21 SKUs re-synced to live Stripe.

Customer success

  • 30-day welcome drip — 5-touch email sequence (day 1, 3, 7, 14, 30). Idempotent.
  • Notification preferences at [/client//notifications](/client) — email/SMS/digest/quiet hours/CC emails.
  • Per-lead email to dojo owner with honors for prefs.
  • Welcome tour refresh with the new AI surfaces.

Production-safety

  • Webhook idempotency — Stripe retries can't double-activate SKUs.
  • Health-alert cron — hourly probe of /api/status, Claude error rate, webhook backlog. Emails admin with 4-hour dedupe.
  • Cron heartbeats — all 4 new crons emit activity rows for /admin/cron-health visibility.
  • Stripe checkout rate-limited (20 / IP / hour).

SEO + sales enablement

  • Schema.org Product markup on /pricing with AggregateOffer.
  • Sitemap 30+ entries; robots.txt explicit allow list.
  • Homepage footer rewritten linking every public surface.
  • /pricing FAQ (10 objection-handling Q&As) + risk-reversal strip.

2026-05-29 — Major release: composable pricing + self-serve

New ways to use AutomateDojo

  • 5 bundles + À La Carte builder at [/pricing](/pricing). Pick exactly what you need: Website Only ($98/mo), Ads Reporting Only, Ads Managed ($399/mo), Website + Ads Reporting, or the Full Bundle ($1,173/mo). Setup fees right-sized to monthlys (3.5× ratio low end, 1.5× ratio high end).
  • Self-serve checkout from the pitch page. /pricing → bundle → /get-started → preview → Stripe Checkout → auto-invite + magic link → /client/<slug>. Zero staff touch on the common path.
  • 30-day money-back guarantee on your first paid month. Cancel anytime, your domain + leads + data stay yours.

New customer-facing surfaces

  • AI website editor at /client/<slug>/site — plain-English prompts that update your site. 200,000 Claude tokens / month included with the SKU.
  • Ads AI Assistant at /client/<slug>/ads/assistant — chat with Claude grounded in your live ad data. 200k tokens / month included.
  • Unified reporting dashboard at /client/<slug>/reporting — roll-up KPIs + per-channel tiles + funnel + attribution table, all in one view.
  • AI token billing page at /client/<slug>/billing/ai-tokens — balance per surface, buy more, auto-recharge toggle.
  • Subscription management at /client/<slug>/billing-portal — SKU breakdown + Stripe Customer Portal access.

New marketing surfaces

  • [ROI calculator](/roi-calculator) — plug in your dojo's numbers, get payback period + 12-month ROI for each bundle vs DIY vs agency.
  • [Comparison page](/compare) — honest 18-row table comparing AutomateDojo vs DIY vs local agency.
  • [Help center](/help) — 12 self-serve articles across getting-started, site editing, ads, billing, data.
  • [Pricing FAQ](/pricing#faq) — 10 common questions (cancel, refund, add/remove SKUs, setup time, token top-ups) answered directly on the pricing page.

Customer success

  • 30-day welcome drip — 5-touch email sequence over 30 days for paying customers (day 1, 3, 7, 14, 30). Feature-aware copy.
  • Welcome magic link sent automatically the moment Stripe payment clears.

Behind the scenes

  • 21 SKUs in the catalog, synced to live Stripe. Hard rules enforced in DB + runtime + UI (Website AI Editor needs Website Managed; Ads AI Chatbox needs Ads Managed).
  • Idempotent Stripe webhook — duplicate deliveries can't double-activate SKUs.
  • Auto-recharge cron for AI tokens (opt-in only, off by default).
  • Bing + TikTok data plane ready for the rollup cron once OAuth wizards land.
  • Customer data export — one-click JSON download of leads, site revisions, billing history.

2026-05-21 — 4 changes

New features

  • full-site rebuild pipeline + brand-adaptive template (#3) — *Anthony* ([5c0ffa3](https://github.com/kennyhyder/automatedojo/commit/5c0ffa3e3b126eb64f291c7947fbc29fd6b70e73))
  • Other

  • Cost reduction: 3-tier model strategy + prompt caching — *Kenny* ([54edfce](https://github.com/kennyhyder/automatedojo/commit/54edfcea1ad892500c9525281ff3d8a8891632ba))
  • Instrument Claude cost across every call site + admin dashboard + per-dojo daily cap — *Kenny* ([d33ce70](https://github.com/kennyhyder/automatedojo/commit/d33ce701b257082f898d0fbcea4d8b19ad6fe48d))
  • CLAUDE.md: persistent project instructions to maintain session-to-session consistency — *Kenny* ([9caaf38](https://github.com/kennyhyder/automatedojo/commit/9caaf387e258c5f263ddb0a206d3ad5374215584))

2026-05-18 — Polish round

  • Cmd-K command palette in admin — search dojos, jump to any page. ⌘⇧N new client, ⌘⇧P new pitch, ⌘⇧L leads, ⌘⇧I inbox.
  • Logo upload per dojo. PNG / JPEG / WebP / SVG.
  • Brand color customizer — 8 presets + custom hex, applies to templates + emails.
  • Lead detail drawer — click any lead row to see contact, enrichment (LinkedIn + score), UTM, notes thread.
  • Notes thread per lead so staff + clients can log conversations.
  • System notice banner — admins can post global announcements at /admin/settings/notices.
  • Manual cron triggers — run any of 8 background jobs on demand from /admin.
  • Per-dojo Slack webhook — real-time lead alerts in your own Slack channel.
  • Lead lifecycle metrics at /admin/leads — win rate + conversion by source.
  • Stripe customer quicklink on every prospect page.

2026-05-17 — Customer-facing polish

  • Stripe billing portal embedded in client dashboard — update card, view invoices, cancel without emailing us.
  • Toast notification system — all forms now use consistent in-app feedback.
  • First-login walkthrough for dojo owners (4-step tour).
  • Print/save-as-PDF on client dashboards.
  • Loading skeletons + empty states across admin lists.
  • Lead enrichment scaffold — auto-infers company name, LinkedIn search URL, business vs free email, quality score 0-100.

2026-05-16 — Phase 2: full operations stack

  • Mobile-responsive admin with hamburger drawer.
  • Bulk-onboard clients from CSV.
  • Per-location everything: Meta page + pixel + campaign filter, CallRail tracking number, lead routing, KPI breakdown.
  • Lead status workflow (new/contacted/qualified/converted/lost).
  • CSV export for leads, audit log.
  • Manual lead entry for walk-ins / referrals.
  • Domain health monitoring — daily DNS / Vercel / HTTPS / SSL probe.
  • Webhook retry queue — failed lead fan-outs retry with exponential backoff.
  • Daily content snapshots — full DR backup of every dojo's content.
  • Webhook health dashboard for staff visibility into integration reliability.
  • Per-tier feature gating with upgrade prompts.

2026-05-15 — Launch

  • Weekly client digest email — Friday 9am PT with leads + ad spend + per-location breakdown.
  • Multi-location dojo support with per-location lead attribution.
  • Per-dojo lead-source breakdown in client portal.
  • Public dojo directory at /dojos.
  • Public status page at /status.
  • Referral program scaffold — clients earn $200/mo credit per dojo they refer.
  • Pre-cutover preview email sent when domain cutover is scheduled.
  • Pitch share OG image — pitch links look professional in iMessage/Slack/Twitter.
  • Onboarding wizard — 9-step save-and-resume flow.

This changelog is rendered from /CHANGELOG.md in the repo. Edit there and it updates here on next deploy.