Skip to content

Trial win-back by usage; first onboarding nudge after 1 hour - #899

Merged
keysersoft merged 3 commits into
mainfrom
keysersoft/winback-by-usage
Oct 6, 2026
Merged

keysersoft merged 3 commits into
mainfrom
keysersoft/winback-by-usage

Conversation

@keysersoft

@keysersoft keysersoft commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Why

The site's win-back gave everyone the same 50% code: about 2,100 emails, 1 redemption. Most people whose Cloud trial ended never connected an app, and a discount does not help with a product they never saw work. Only the Cloud knows who used it.

Changes

  • runWinbackPass in the onboarding cron, for Cloud trials that ended from 6 Oct 2026. Earlier ones are still won back by the site.
    • A workspace that made a successful call gets 30% off (START30, env WINBACK_FIRST_PROMO_CODE) 7–14 days after expiry, then 50% off (WINBACK50, env WINBACK_FINAL_PROMO_CODE) 30–37 days after.
    • A workspace that never made one gets a single email 7–14 days after expiry, with no discount. It explains that you can add AnythingMCP to Claude (directory) or ChatGPT (/mcp) and ask for an app: the assistant installs the connector and hands over a one-time link to sign in. Plans link included, since the trial has ended.
    • One email per stage, flagged in org_settings. Workspaces that bought a plan are skipped, and admins who opted out of marketing email are respected. A failed send is retried while the window lasts.
  • EmailService.sendTrialWinbackEmail, with the discount and help variants.

Pairs with HelpCode-ai/anythingmcp-website (keysersoft/winback-by-usage), which stops the site's duplicate reminders for Cloud trials. There is no ordering constraint: the first Cloud win-back is due 13 Oct.

Also: first onboarding nudge after 1 hour

  • A user whose workspace is still empty an hour after signing up gets the first nudge. Before, it came after 24 hours, or after 2 if an AI client was connected. The email explains how to add an app from the chat (Claude via the directory, ChatGPT via /mcp: "Connect my Shopify store", then a one-time sign-in link) or from the dashboard. If the user already connected an AI client, the email names it and says to ask it in the same chat. The second nudge is unchanged (72 hours).
  • .github/workflows/onboarding-reminders.yml now runs hourly instead of every 6 hours. Every pass is gated by its own window or flag, so nothing is sent twice.
  • Tests: the nudge timing spec is updated. Full jest is green except the HANA suite (hdb is missing locally). Both email variants were rendered and checked.

Tests

  • Cron spec: windows, 30%/50%, help vs discount, no repeat, purchase, opt-out, retry, env override. Full jest: all green except the HANA suite (hdb is missing locally) and the curl parser suite, which fails only inside the full run and passes alone (43/43).
  • Local E2E on the real Nest context, Postgres and SMTP (Mailpit), with simulated dates and three workspaces:
    • used (7 successful calls): 30% at +8 days, 50% at +31 days
    • never used: help email at +8 days, nothing at +31 days
    • opted out: nothing
    • +9 days: no repeats

A week after a Cloud trial ends, a workspace that made a successful call gets
30% off (START30) and a month after 50% (WINBACK50); one that never did gets a
single email on connecting an app from Claude or ChatGPT instead of a discount.
Only trials that ended from 6 Oct 2026, honours the marketing opt-out, skips
workspaces that bought a plan, one email per stage.
A user whose workspace is still empty an hour after signing up (was 24 hours,
2 with an AI client connected) gets how to add an app: ask Claude or ChatGPT
in the chat, which installs the connector and hands over a one-time sign-in
link, or pick one in the dashboard. The onboarding cron now runs hourly.
@keysersoft keysersoft changed the title Trial win-back from the Cloud, by usage Trial win-back by usage; first onboarding nudge after 1 hour Oct 6, 2026
@keysersoft
keysersoft merged commit 859cdbd into main Oct 6, 2026
13 checks passed
@keysersoft
keysersoft deleted the keysersoft/winback-by-usage branch October 6, 2026 10:07
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant