Skip to content

Work · Retention & payment recovery · Subscription accountability app

AI Accountability Platform

Members go quiet on day three and nobody notices

A $12K/mo subscription app was bleeding members who went silent after day three. AI-routed retention flows brought them back and gave the founder ~15 hours a week back.

  • GoHighLevel
  • Stripe
  • Decision AI
  • SMS
  • Role · sole designer & builder
  • 4 min
re-engagement
+40%Measured
sessions completed
2×Measured
reclaimed by the founder
~15 hrs/wkMeasured
System size
System flow · 6 stages · 17 components reconstructed from the build record

The situation

The product was a subscription accountability app doing $12K a month. Members signed up motivated, logged a few sessions, and then a good share of them stopped. The drop-off clustered around day three.

The founder was the retention system. He noticed who had gone quiet, wrote the reminder himself, and sent it. That works at small numbers and quietly fails as the list grows.

The second leak was on the billing side rather than the behaviour side. Half of all trials lapsed before the first billing cycle ever ran, so those members were lost at the payment layer, where a motivational text never reaches.

What was broken

  • Silence was invisible until the subscription had already gone, so intervention always arrived late.
  • Every reminder was written and sent by hand, which capped retention work at whatever the founder had time for.
  • A missed session and a long stretch of inactivity were treated the same way, because there was no mechanism to treat them differently.
  • Trials lapsed before first billing with nothing watching the subscription lifecycle.
  • Nobody could tell which nudge had actually moved a member, because no touches were logged.

Constraints

  • The retention work had to run on the member's real behaviour, not on a fixed drip, because the app already knew who was active.
  • Anything sending SMS had to be opt-out aware, since a retention system that keeps texting an unsubscribed member is a compliance problem.
  • Billing state lives in Stripe and behaviour state lives in the CRM, so the two paths had to work independently rather than as one funnel.
  • The founder needed to see and tune what the system was doing, not just trust it.

FIG 01 · System Flow

How the system actually runs

Every component below is reconstructed from the project’s own build records. Nothing is added to make it look bigger.

components
17
components
stages
6
stages
decisions & guards
3
decisions & guards
AI
1
AI
human handoffs
0
human handoffs
platforms
4
platforms
  1. Stage 1, Behaviour signal: Silence, a missed session, or a trial nearing its first bill starts the system.
    1. Member goes silent (Trigger, GoHighLevel). Fires when a member stops logging activity — the drop-off clustered around day three. Connects to Decision AI reads state.
    2. Session missed (Trigger, GoHighLevel). Fires when a scheduled session is not completed. Connects to Decision AI reads state.
    3. Inactivity detected (Trigger, GoHighLevel). Fires on a longer stretch of low engagement across the account. Connects to Decision AI reads state.
    4. Trial nears billing (Trigger, Stripe). Fires as a trial approaches its first billing cycle. Connects to Stripe lifecycle trigger when billing side.
  2. Stage 2, AI decision: Decision AI reads the member’s state and picks a track instead of a human sorting them.
    1. Decision AI reads state (AI, Decision AI). Reads each member’s current state and classifies what kind of intervention they need. Connects to Crisis or motivation?.
    2. Crisis or motivation? (Decision, GoHighLevel). Splits the member into a crisis-recovery track or a motivational track. Connects to Crisis-recovery flow when at risk; Motivational flow when stable but quiet.
    3. Crisis-recovery flow (Workflow, GoHighLevel). The harder track, for members at real risk of dropping the subscription. Connects to Cadence tier picked.
    4. Motivational flow (Workflow, GoHighLevel). The lighter track, for members who are stable but disengaged. Connects to Cadence tier picked.
  3. Stage 3, Recovery cadence: The chosen track sets how hard and how often the member is nudged.
    1. Cadence tier picked (Decision, GoHighLevel). Chooses a daily, hourly, or instant send rhythm from the track and the signal that fired. Connects to Tiered SMS journey when daily · hourly · instant.
    2. Tiered SMS journey (Message, SMS). Sends the re-engagement messages at the chosen rhythm until the member responds. Connects to Touchpoint log; Member re-engaged when member responds; Cadence tier picked when still silent — escalate.
  4. Stage 4, Billing rescue: Trials about to lapse are caught on the payment side, where messaging never reached.
    1. Stripe lifecycle trigger (Payment, Stripe). Watches the subscription lifecycle for failing and lapsing trials. Connects to Trial recovery attempt when failing or lapsing.
    2. Trial recovery attempt (Payment, Stripe). Tries to recover the member before the first billing cycle closes them out. Connects to Trial kept; Touchpoint log.
  5. Stage 5, Suppression & logging: Nothing sends to someone who opted out, and every touch is written down.
    1. Opt-out guard (Guard, GoHighLevel). Stops every further send for a member who has opted out. Connects to Tiered SMS journey when opted out — stop.
    2. Touchpoint log (Data store, GoHighLevel). Writes every touch to a log the founder can read and tune against. Connects to Founder time reclaimed when aggregated.
  6. Stage 6, Outcome: Member back in the app, trial kept, founder out of the reminder business.
    1. Member re-engaged (Outcome). The member resumes sessions instead of quietly lapsing. Connects to Founder time reclaimed.
    2. Trial kept (Outcome). The trial reaches a paid cycle rather than lapsing before first billing.
    3. Founder time reclaimed (Report). The reminder work the founder was doing by hand now runs unattended.
0/10

A member stops logging sessions three days in — the exact point where they used to be lost.

Read this system as text
  1. Stage 01

    Behaviour signal

    Silence, a missed session, or a trial nearing its first bill starts the system.

    • Member goes silent · Trigger · GoHighLevel — Fires when a member stops logging activity — the drop-off clustered around day three. → Decision AI reads state
    • Session missed · Trigger · GoHighLevel — Fires when a scheduled session is not completed. → Decision AI reads state
    • Inactivity detected · Trigger · GoHighLevel — Fires on a longer stretch of low engagement across the account. → Decision AI reads state
    • Trial nears billing · Trigger · Stripe — Fires as a trial approaches its first billing cycle. → Stripe lifecycle trigger (billing side)
  2. Stage 02

    AI decision

    Decision AI reads the member’s state and picks a track instead of a human sorting them.

    • Decision AI reads state · AI · Decision AI — Reads each member’s current state and classifies what kind of intervention they need. → Crisis or motivation?
    • Crisis or motivation? · Decision · GoHighLevel — Splits the member into a crisis-recovery track or a motivational track. → Crisis-recovery flow (at risk), Motivational flow (stable but quiet)
    • Crisis-recovery flow · Workflow · GoHighLevel — The harder track, for members at real risk of dropping the subscription. → Cadence tier picked
    • Motivational flow · Workflow · GoHighLevel — The lighter track, for members who are stable but disengaged. → Cadence tier picked
  3. Stage 03

    Recovery cadence

    The chosen track sets how hard and how often the member is nudged.

    • Cadence tier picked · Decision · GoHighLevel — Chooses a daily, hourly, or instant send rhythm from the track and the signal that fired. → Tiered SMS journey (daily · hourly · instant)
    • Tiered SMS journey · Message · SMS — Sends the re-engagement messages at the chosen rhythm until the member responds. → Touchpoint log, Member re-engaged (member responds), Cadence tier picked (still silent — escalate)
  4. Stage 04

    Billing rescue

    Trials about to lapse are caught on the payment side, where messaging never reached.

    • Stripe lifecycle trigger · Payment · Stripe — Watches the subscription lifecycle for failing and lapsing trials. → Trial recovery attempt (failing or lapsing)
    • Trial recovery attempt · Payment · Stripe — Tries to recover the member before the first billing cycle closes them out. → Trial kept, Touchpoint log
  5. Stage 05

    Suppression & logging

    Nothing sends to someone who opted out, and every touch is written down.

    • Opt-out guard · Guard · GoHighLevel — Stops every further send for a member who has opted out. → Tiered SMS journey (opted out — stop)
    • Touchpoint log · Data store · GoHighLevel — Writes every touch to a log the founder can read and tune against. → Founder time reclaimed (aggregated)
  6. Stage 06

    Outcome

    Member back in the app, trial kept, founder out of the reminder business.

    • Member re-engaged · Outcome — The member resumes sessions instead of quietly lapsing. → Founder time reclaimed
    • Trial kept · Outcome — The trial reaches a paid cycle rather than lapsing before first billing.
    • Founder time reclaimed · Report — The reminder work the founder was doing by hand now runs unattended.

Platforms · GoHighLevel · Decision AI · Stripe · SMS

What I built

I built two independent entry paths into one retention system. The public version of this build reads as a single funnel. It is actually two, and that is the design.

The behaviour path

Three signals start the behavioural side: a member going silent, a scheduled session not completed, and a longer stretch of low engagement across the account. Each is a distinct trigger, because a missed session is a different problem from a member who has stopped opening the app.

Decision AI reads the member's current state and classifies what kind of intervention they need, then branches them into a crisis-recovery track or a motivational track. That replaces the founder sorting members by hand. The two tracks are first-class destinations in the system, and I am not going to describe internals of them here that the build record does not support.

The cadence tiers

The chosen track and the signal that fired decide the send rhythm: daily, hourly, or instant. One cadence for every situation is either ignored or experienced as spam, so the tier is picked rather than fixed. If the member stays silent, the cadence tightens rather than the sequence simply ending.

The billing path

Stripe lifecycle triggers watch for failing and lapsing trials and attempt recovery before the first billing cycle closes the member out. This path bypasses the AI branch entirely. It exists because the members lost here were never going to be saved by a behavioural nudge, and nothing was watching them.

Suppression and logging

Two governance components sit under both paths. An opt-out guard stops every further send for a member who has opted out. A touchpoint log writes every touch to a record the founder can read and tune against. Neither is a feature anyone asks for, and both are the reason the system can be improved rather than merely trusted.

Edge cases and failure handling

  • A member who opted out: the guard stops every subsequent send, including the ones a retention sequence would otherwise consider urgent.
  • A member who stays silent through the first nudge: the cadence escalates through the tier selector instead of the sequence quietly ending.
  • A trial that is about to lapse: it is caught on the payment side, where messaging never reached, rather than being counted as churn afterwards.
  • A missed session versus general inactivity: each fires its own trigger, so the member is classified on what actually happened.
  • A member who comes back: the outcome is written to the touch log, which is what makes it possible to tell which nudge moved them.

How I verified it

Honest answer: the verification evidence for this build is thin. There is no QA suite, no test count and no read-back record in the material I hold for it, and I am not going to invent one. What exists is the touchpoint log. It was built in precisely so the founder could see every send and its result, and tune the flows against real member behaviour instead of a hunch.

What changed

+40% member re-engagement after going silent, measured. Sessions completed doubled. The founder reclaimed roughly 15 hours a week that had been going into manual reminders.

That last number is the one I would lead with. The percentages describe members behaving differently. The hours describe work that no longer exists, which is a different and more durable kind of result. The billing path also gives the business something it did not have before: lapsing trials get caught before the first cycle rather than discovered after it.

Before / after

  • Before
  • ✕ $12K/mo in subscriptions quietly slipping
  • ✕ Users silent by day three, no one noticing
  • ✕ Founder sending every reminder by hand
  • ✕ Half of all trials lapsed before first billing
  • After
  • ✓ +40% member re-engagement after going silent
  • ✓ Sessions completed doubled
  • ✓ ~15 hours a week back in the founder's calendar
  • ✓ Lapsing trials caught by Stripe triggers, pre-billing

MeasuredOutcome figures on this page were measured before and after the build.

Have something close to this? Book a call. I’ll tell you if I’ve already built it.

One Manila business day to reply. All client work is under NDA; what you see here is redrawn architecture with real metrics.

Book