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
- Stage 1, 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. Connects to Decision AI reads state.
- Session missed (Trigger, GoHighLevel). Fires when a scheduled session is not completed. Connects to Decision AI reads state.
- Inactivity detected (Trigger, GoHighLevel). Fires on a longer stretch of low engagement across the account. Connects to Decision AI reads state.
- Trial nears billing (Trigger, Stripe). Fires as a trial approaches its first billing cycle. Connects to Stripe lifecycle trigger when billing side.
- Stage 2, 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. Connects to Crisis or motivation?.
- 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.
- Crisis-recovery flow (Workflow, GoHighLevel). The harder track, for members at real risk of dropping the subscription. Connects to Cadence tier picked.
- Motivational flow (Workflow, GoHighLevel). The lighter track, for members who are stable but disengaged. Connects to Cadence tier picked.
- Stage 3, 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. Connects to Tiered SMS journey when daily · hourly · instant.
- 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.
- Stage 4, 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. Connects to Trial recovery attempt when failing or lapsing.
- Trial recovery attempt (Payment, Stripe). Tries to recover the member before the first billing cycle closes them out. Connects to Trial kept; Touchpoint log.
- Stage 5, 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. Connects to Tiered SMS journey when opted out — stop.
- 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.
- Stage 6, 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. Connects to 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.
A member stops logging sessions three days in — the exact point where they used to be lost.
0/10A member stops logging sessions three days in — the exact point where they used to be lost.
Read this system as text
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)
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
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)
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
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)
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.
Related systems
Not a one-off.
Recurring membership offer
Subscription Funnel
Both catch failing card payments before the subscription silently ends.
+35%retentionMeasured
Digital publishing product · sibling of CS-04
AI book-writing application
Both meter trials and enforce expiry so revenue doesn't leak.
100API endpoints across the product’s two servicesScope
Local service business with a cold lead list
Dead-Lead Reactivation Engine
Both branch on read state — silent versus engaged — rather than a fixed cadence.
100%of dead list worked automaticallyScope
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.