Thanks for this, really thoughtful comment, and exactly the kind of thing that only shows up after running boxes for real. You're right on both. The per-container memory limit is already in the skill: every service in the compose templates gets a mem_limit, so a runaway process gets killed and restarted instead of taking the other subdomains with it. Swap I had missed. My own box has 16 GB, so I never felt it, but most people reading this will start on a 1–2 GB plan, which is exactly where you saw the thrashing. I'm adding a swapfile step to the skill, plus a health check that flags it if it's missing. And for context: I see this setup as the place to test ideas quickly. Once something gets real traction, it should probably move to something sturdier. But a test app shouldn't be able to freeze the whole box, so this is worth getting right. Appreciate you taking the time.