Code from an AI
Where to deploy a project you built in Cursor
In short
A project built in Cursor is just a folder of code on your machine, so you can deploy it to any platform that builds projects for you: upload the folder as an archive without venv and node_modules, or import it from GitHub, and you get a public link. Before uploading, remove the hard-coded port and the localhost address from the code and move keys and tokens into environment variables — those are the two most common reasons AI-written code runs locally and goes silent online. Netrun detects the language and project type on its own, builds it and gives you an HTTPS address, and you can check the project for free without signing up.
Cursor and other AI editors removed the scariest barrier: an app is now written by talking, not by years of practice. But the code is still code on your laptop. As long as the project only runs in the editor, it lives exactly as long as your machine stays awake, and a localhost address opens for nobody but you. Where to deploy a project built in Cursor is something the editor usually stays quiet about — it owns the code, not the server.
Normally the next part is the one nobody prepared you for: rent a server, install the language, work out how to keep the process running, add a proxy and a certificate. Netrun drops that part — you upload the folder with your code, the platform detects the language, builds the project and hands you a public HTTPS link. Below is what is worth fixing before you upload, and why AI-written code tends to trip over the same few things.
Work out what kind of project you have#
Everything else follows from this. A site opens at a link, a Telegram bot needs no address of its own and talks to the messenger itself, and a background script simply keeps running and doing its job. When an AI wrote the code, the type is not always obvious: look for a web server such as Flask, FastAPI or Express, or for a bot library. You do not have to guess — upload the folder as an archive to the free project check on Netrun, and without signing up it tells you the language, the project type and whether it will run as is.
Zip the folder without the service directories#
Archive the project folder, but leave out venv, node_modules, build output such as dist, build and target, and editor caches. Those weigh many times more than the code itself and are not needed: dependencies are installed again during the build on the server. Keep the sources and the dependency list — requirements.txt for Python or package.json for Node.js.
Remove the port and localhost from the code#
An AI almost always writes startup the way it is convenient on your machine: the site listens on 127.0.0.1 and on a port like 3000, 5000 or 8000 written straight into the code. On a server the platform assigns the port, so read it from the PORT environment variable and listen on 0.0.0.0 instead of localhost. It is a one-line change, and Cursor can make it for you — ask it to take the port from the PORT environment variable and bind to 0.0.0.0. A hard-coded port is the number one reason a project builds but the link stays blank.
Move keys and data out of the code folder#
The second common fingerprint of AI code is a bot token or a paid API key sitting right next to the logic in a file. Read them from environment variables instead: during project setup Netrun asks for those values and passes them in encrypted, so they never sit in the archive or the repository. If the AI made a SQLite database as a plain file next to the code, move it into the persistent /data folder: files next to the code are recreated on every publish, while anything in /data stays put.
Upload the project and take the link#
Upload the archive to Netrun, or import the repository from GitHub if Cursor already pushed the code there, including a private one. The platform detects the language, installs dependencies, builds the project and issues a public HTTPS address. If something goes wrong, the reason shows up in the logs in your dashboard in real time: usually a missing library, or a dependency list produced by pip freeze together with local paths from your computer.
Ship updates the same way#
Once you add something in Cursor, upload the new version as an archive or refresh it from GitHub — the link stays the same, so nobody has to be told a new address. There is no automatic publish on git push: updating the code is an action in your dashboard, which also means a stray draft never ships itself. Secrets and the contents of the persistent folder survive the update, so you do not enter them again.
A project from Cursor is no different from one typed by hand: it is a folder of code that needs a machine online around the clock and an address. On the free plan a site lives as long as you like — it sleeps while idle and wakes up by itself when someone opens the link, with only the first visit after a pause being a little slower. A bot or a background script has nobody to wake it, so it gets three days of free running, after which it needs the Pro plan with round-the-clock operation; the code, the settings and the secrets stay in place either way. Upload your project to Netrun, or first run it through the free project check.
Common questions
How do I tell whether I have a site or a bot if an AI wrote the code?
Look at what the project does on startup. If it brings up a web server and offers an address to open in the browser, it is a site or a web app. If it connects to a messenger with a token and waits for messages, it is a bot and needs no link of its own. The easiest route is not to work it out yourself: the free project check on Netrun reads the files and tells you the type in plain words.
Do I need Git and GitHub to deploy a project from Cursor?
No. Zipping the project folder and uploading the archive is enough, with no Git and no terminal involved. If Cursor already pushed the code to GitHub, importing the repository is more convenient, private ones included: updates then take a couple of clicks.
Why does the project run in Cursor but not open at the link?
Most often it is the hard-coded port or the localhost address: the app listens somewhere other than where the outside world knocks. Drop your own values, read the port from the PORT environment variable and bind to 0.0.0.0. The second most common reason is that the app crashes at startup, which shows up in the dashboard logs within seconds.
What if requirements.txt fails to install?
That usually happens when the list came out of pip freeze: it picks up local paths from your computer and packages that only exist on your operating system. Rebuild the list by hand, keeping only what the project actually imports and no file paths. The exact point of failure is visible in the build logs.
Do I need to understand the code the AI wrote?
Not deeply. Three things are enough: the port from an environment variable, keys outside the code, and data in the persistent folder. Cursor can make all three changes for you, and the build, the start and the restart after a crash are handled by the platform.
What happens to the SQLite database the AI created?
It keeps working, but the database file has to live in the persistent /data folder. If it sits next to the code, the next publish recreates it empty and the records are gone. It is handy to set the file path through an environment variable so it can differ locally and on the server.
Which languages and technologies are supported?
Python, Node.js, Go, Rust, Ruby, PHP, Java, .NET, Deno, Bun, Elixir, static sites and bash scripts. You can bring your own Dockerfile or docker-compose, but more often the stack is detected from your code automatically.
Where do I set tokens and other secret values?
Every project has a Secrets tab where you set the values from your code — for example the token from BotFather. We store them encrypted: you can see the variable names, but the values are shown to no one, including you.
Where can I see the logs and status of my project?
The project page shows the status, the logs and the event history — together they show what is happening with the project right now. The log view also reaches further back: scroll up and earlier lines load on their own.
How do I update the code of a project that is already published?
Open the project and upload a new version or update it from GitHub. The link stays the same, and your data is kept as long as it lives in persistent storage — the /data folder or a volume from your compose file.