Every club in Goal Legends is either run by a person or run by the AI. Until this week there was no path from the first group to the second: if a manager stopped logging in, their club just sat there. Facilities never upgraded, the transfer market never moved for them, and nobody else could ever take it over, because nothing in the codebase had ever cleared a club's owner. We wanted a way for clubs to come back to life without just deleting someone's season the first week they went quiet.
The schedule
Three thresholds, all measured from the last time a manager actually did something in the app:
- 30 days: a "we miss you" email and inbox message. No consequence yet, just a nudge.
- 83 days: a warning that the club will be reassigned in exactly 7 days, spelling out what that means.
- 90 days: the club is actually freed up. It becomes claimable again from Claim a Club, exactly as it was before anyone owned it, crest and history intact.
The moment a club is freed, every facility on it immediately drops two levels. If it's still unclaimed three days later, it drops one more, and again every three days after that, floored at zero, until either someone claims it or there's nothing left to lose. A neglected club should look neglected. Claiming it stops the decay immediately; whatever level the facilities are at when you claim it is what you inherit.
The bug we almost shipped
The obvious signal for "is this manager active" is their last
login. It's also wrong. ASP.NET's login cookie renews itself
for two more weeks every time you use the site, silently, with
no new login event, so a manager who checks in every ten days
would never trigger a fresh login row at all, and by the
LastLoginAt measure would look permanently
inactive despite actually playing regularly. We added a second
field, LastActiveAt, touched on ordinary page
loads instead of just the login screen, specifically so this
couldn't repossess someone's club out from under them while
they were still around.
Opting out without losing the club
Every inactivity email carries a one-click unsubscribe link: no login required, since the whole point is that someone who doesn't want to be emailed might not want to sign back in either. It uses ASP.NET's Data Protection API to seal the manager's id into a tamper-proof token, so the link works without a session and can't be forged into unsubscribing someone else. Clicking it turns off the emails immediately. It deliberately does not turn off the reassignment itself: opting out of email is a communication preference, not an exemption from a 90-day-inactive club going back into circulation.
