The tunnel-first design (no open ports, admin panel off the internet) is the right default, and it's nice to see it explained without jargon.
One addition from running small boxes in production: add swap before you add the fifth prototype. On a 1–2 GB VPS, a single memory spike (a build, an image-heavy request, a Node process that grows) doesn't crash cleanly. The box thrashes and stops answering, including SSH, and the tunnel happily keeps saying the origin exists. We had exactly this on 2 GB servers; 2 GB of swap turned hangs into slowdowns we could see and fix.
A per-container memory limit is the other half. Then the process that misbehaves gets killed and restarted, instead of taking the other nine subdomains down with it.
AI app builder — chat to build, preview, and publish
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.
A health check for missing swap is a nice touch. One setting worth pairing with it: vm.swappiness around 10, so the box only swaps under real memory pressure instead of pushing idle processes out early. And agreed on the framing: a test box that fails slowly is what makes quick experiments safe to run next to each other.
Mythex
The tunnel-first design (no open ports, admin panel off the internet) is the right default, and it's nice to see it explained without jargon.
One addition from running small boxes in production: add swap before you add the fifth prototype. On a 1–2 GB VPS, a single memory spike (a build, an image-heavy request, a Node process that grows) doesn't crash cleanly. The box thrashes and stops answering, including SSH, and the tunnel happily keeps saying the origin exists. We had exactly this on 2 GB servers; 2 GB of swap turned hangs into slowdowns we could see and fix.
A per-container memory limit is the other half. Then the process that misbehaves gets killed and restarted, instead of taking the other nine subdomains down with it.