All of this originally lived in my AWS account - a few small API services, a Lex bot and a Cognito user pool. It worked fine, but it never really stopped being a thing I had to think about. There was always some resource I wanted to move, some cost I was keeping an eye on, some part of it that needed a bit of attention. Eventually I took it all down "temporarily" so I could reorganize the account and, well, you saw how that went.
The annoying part is that one of my actual goals here was to build something I could just leave running. I wrote a whole thing at the end of last year about how automation gets quietly abandoned once the maintenance burden outgrows whatever value it was providing. Turns out I am not especially immune to my own material.
So rather than promising myself I would be more disciplined about it this time, I got rid of the maintenance entirely. I know myself.
The whole thing is now one Cloudflare Worker. A single JavaScript bundle - no servers, no database, no storage, no queues, nothing that persists between requests at all. Every challenge is request in, response out. It runs on the free tier, so there is genuinely nothing here to patch, restart, or pay for, which means "just leave it up" is actually achievable this time instead of being a thing I say optimistically.
Usefully this keeps the original constraint intact - there is nothing you can break here for anyone else. There are no shells to get. If something looks like it is running a command for you it is faking it, pretty convincingly, against a handful of hardcoded files.
The tradeoff is that two of the old challenges didn't make it. The Lex chatbot and the Cognito registration one were both about AWS specifically, so there was no way to bring them along without bringing along the exact thing I was trying to get rid of. I liked those ones, so I might revisit them if I find a way to host that sort of thing that doesn't slowly bleed money.