A deployed web app usually shows "no open ports detected" because it listens only on localhost or ignores the port assigned by the host. Bind to 0.0.0.0 and read PORT from the environment.
Reduce Playwright concurrency first. Reuse one browser, close every context in a finally block, limit open pages, and increase container memory only after the process has a bounded workload.
The best host depends on how Telegram delivers updates to your bot. Long polling needs a process that stays awake, while webhooks need a reliable public HTTPS endpoint.
A cron expression has no useful meaning until its timezone is known. Check the clock inside the running process, then pin an IANA timezone or schedule explicitly in UTC.
Remote MCP servers need HTTPS, Streamable HTTP, authentication, and a runtime that matches their state model. Here is how to choose between edge functions, managed containers, and a VPS.
A background worker is a process that takes slow or asynchronous work out of the user request path, usually by reading jobs from a queue.
The bit nobody vibe-codes for you is the deploy. Here is what actually happens between "it works on my machine" and something that stays running, in plain terms.
It runs, then it does not. Nine times out of ten it is one of four things, and none of them require understanding the code that broke.
Your app works until you close the laptop. Here is what actually keeps it online, what each option costs, and why the free tiers stop working after a few weeks.
It shows as online, then it does not. Here are the six causes in the order they actually happen, and how to tell them apart from the logs.
What actually happens between saying "deploy this" and your app being online. No marketing, just the sequence.
An honest description of who gets value out of this, including the cases where you should use something else.
These tools get you to a working app fast and then the hosting question arrives. What each one gives you, where it stops, and what to do when your project outgrows it.
You built the app in an AI editor. You can deploy it from the same window over MCP, without a CLI, a Dockerfile or an API key.
AI writes code that works, not code that is safe by default. Five checks worth doing before anyone else can reach your project.
Both are mature, both are maintained, and the answer is mostly about which language you already write. Here is the honest comparison, including where they genuinely differ.
Functions and containers solve different problems. Picking the wrong one produces either surprising bills or an app that is asleep when it matters.
Where the token goes, why .env does not get deployed, and how to stop a leaked secret from being a rewrite.