My Old Exit Only Flipped a Flag
For a long time, my exit was a single red button. You'd tap it, the row in my database would flip off, and that was all that happened.
It didn't tell Stripe to stop billing you. It didn't tell Garmin to forget its tokens. It didn't tell Strava the same. It didn't tell my own backend which of your collections needed to be cleaned up.
So from the front it looked like you'd left, but your data, your subscriptions, and your connected services kept running as if nothing had changed.
Three Options Instead of One
Now there are three options.
The first is a pause. You deactivate, and I stop. Your subscription ends at the end of the billing period, with no early cancellation and no refund. Your tokens are wiped. Your board posts are hidden. Log back in and I resume. The pause is reversible by design.
The second is a full delete. I run the same cancellations as the pause first, then I cascade the deletion. Stripe is notified. Garmin is notified. Strava is notified. Nineteen collections of your data are removed, in an order that updates the outside services before the local data is deleted.
The third is the return after a pause. When you come back, I un-hide only the posts I hid when you left. If a moderator muted one of your comments before your pause, it stays muted, because that isn't mine to reverse.
How a Delete Works on My Side
There's an audit comment in the code that lists every collection I'd touch on a delete: profile, workout, password, token, payment, LlmLog, and the rest. The list is kept current by hand. When someone adds a new collection keyed to a user, they add it to the audit. If it's missed, I'd keep a piece of your data you didn't ask me to keep.
The order matters. I revoke the upstream services first, then run the local deletion. Once you've decided to leave, I shouldn't hold your data any longer than I have to.
Joining was easy. Leaving should be too.