# Deploying, in plain words.

URL: https://antideploy.com/blog

How to put what your coding agent built online, what it costs and what to do when it breaks. One question per page, checked against the live platform.

- [Start here](https://antideploy.com/blog#fam-start)
- [Deploy from your coding agent](https://antideploy.com/blog#fam-agents)
- [Deploy by app type](https://antideploy.com/blog#fam-apps)
- [Add something to your app](https://antideploy.com/blog#fam-add)
- [Fix an error](https://antideploy.com/blog#fam-errors)
- [Hosting in India](https://antideploy.com/blog#fam-india)

## Start here

What Antideploy is, what problem it solves, and what it can and cannot run.

- [What is Antideploy?](https://antideploy.com/blog/what-is-antideploy): Antideploy deploys what your coding agent built, backend and database included. What it is, who it is for and what it costs.
- [Why does my app work on localhost but not online?](https://antideploy.com/blog/why-does-my-app-work-on-localhost-but-not-online): Nine common reasons, how to check each one, and how to fix it.
- [What does deploying an app mean?](https://antideploy.com/blog/what-does-deploying-an-app-mean): Deploying, in plain words. The ten words you will meet, and what each one means.
- [Is my app a static site, a server or a function?](https://antideploy.com/blog/static-site-server-or-function-which-is-my-app): How to tell which one you have, and how each is treated, including what it costs.
- [Do I need Docker, Kubernetes or YAML to deploy?](https://antideploy.com/blog/do-i-need-docker-kubernetes-or-yaml-to-deploy): No. What each one is, why one app does not need them, and when a Dockerfile is still worth it.
- [Is Antideploy free? What happens at the limit?](https://antideploy.com/blog/is-antideploy-free): Yes, there is a Free plan. What it includes, what happens at each limit, and what paid plans cost.
- [Is Antideploy safe and legit?](https://antideploy.com/blog/is-antideploy-safe-and-legit): Who runs it, where your data lives, how secrets are handled, and what is not promised.
- [What can't Antideploy run?](https://antideploy.com/blog/what-antideploy-cannot-run): The honest list: one region, sleeping apps, no Redis or MongoDB, no background workers, and what is refused.
- [How Antideploy works, from one sentence to a live link](https://antideploy.com/blog/how-antideploy-works): What happens between your agent's first request and your live link, step by step.
- [What your coding agent forgets before you deploy](https://antideploy.com/blog/what-your-coding-agent-forgets-before-you-deploy): A checklist of what agents often leave out: the lock file, the port, variables, migrations and uploads.

## Deploy from your coding agent

Claude Code, Codex, Cursor, Antigravity or any other agent. The steps are the same, and your agent does most of them.

- [How to deploy an app built with Claude Code](https://antideploy.com/blog/how-to-deploy-an-app-built-with-claude-code): One sentence, one approval, a live link. What Claude Code does at each step, what it costs and where it stops.
- [How to deploy an app built with Codex](https://antideploy.com/blog/how-to-deploy-an-app-built-with-codex): One sentence, one approval, a live link. Plus the one Codex setting that can get in the way: network access.
- [How to deploy an app built with Cursor](https://antideploy.com/blog/how-to-deploy-an-app-built-with-cursor): One sentence, one approval, a live link. How Cursor's approval settings fit in.
- [How to deploy an app from Antigravity](https://antideploy.com/blog/how-to-deploy-an-app-from-antigravity): One sentence, one approval, a live link. How Antigravity's terminal settings fit in.
- [How to deploy from any coding agent](https://antideploy.com/blog/how-to-deploy-from-any-coding-agent-with-mcp): Windsurf, Cline or any agent that can read a web page. Paste one sentence, or add the MCP server.
- [How to deploy an app without opening a dashboard](https://antideploy.com/blog/how-to-deploy-an-app-without-opening-a-dashboard): Your agent deploys, reads logs and sets things up. The few things that stay in a browser, and what to say.
- [What can my coding agent do with my Antideploy account?](https://antideploy.com/blog/what-can-my-coding-agent-do-with-my-antideploy-account): What your agent can do, what it cannot do, where its token lives, and how to revoke it.
- [How to let your agent read logs and fix a failed deploy](https://antideploy.com/blog/how-to-let-your-coding-agent-read-logs-and-fix-a-failed-deploy): The loop: read the reason, read the logs, fix the code, deploy again. And what Antideploy repairs for you.

## Deploy by app type

One guide for each kind of app: what Antideploy detects, how it starts the app, and what usually goes wrong.

- [How to deploy a website](https://antideploy.com/blog/how-to-deploy-a-website): Ask your agent, connect GitHub, or drop a folder. A site made only of files is free and unlimited.
- [How to deploy a full-stack app](https://antideploy.com/blog/how-to-deploy-a-full-stack-app): A frontend, an API and a database. One app or two, and what to do about each piece.
- [How to deploy a static website for free](https://antideploy.com/blog/how-to-deploy-a-static-website-for-free): Plain HTML or a built frontend. Unlimited, free on every plan, with HTTPS and no card.
- [How to deploy an Express API with a database](https://antideploy.com/blog/how-to-deploy-an-express-api-with-a-database): The start script, the PORT variable, DATABASE_URL, migrations, and the failures to avoid.
- [How to deploy a Next.js app with a backend and database](https://antideploy.com/blog/how-to-deploy-a-nextjs-app-with-a-backend-and-database): API routes, Postgres and Prisma. What runs, how migrations work, and why builds fail on environment variables.
- [How to deploy a Vite React app](https://antideploy.com/blog/how-to-deploy-a-vite-react-app): A Vite app deploys as a free static site. The build, the dist folder, routing and variables.
- [How to deploy a FastAPI app with Postgres for free](https://antideploy.com/blog/how-to-deploy-a-fastapi-app-with-postgres-for-free): The uvicorn command, the port, DATABASE_URL, Alembic migrations and the Python version.
- [How to deploy a Flask app for free](https://antideploy.com/blog/how-to-deploy-a-flask-app-for-free): How your app is found, why to add gunicorn, the PORT variable and Postgres.
- [How to deploy a Django app](https://antideploy.com/blog/how-to-deploy-a-django-app): gunicorn, automatic migrations, ALLOWED_HOSTS, static files and the database setting.
- [How to deploy a Streamlit app](https://antideploy.com/blog/how-to-deploy-a-streamlit-app): Your entry file is found, Streamlit starts with the right flags, and WebSockets stay open.
- [How to deploy a Gradio app](https://antideploy.com/blog/how-to-deploy-a-gradio-app): Your entry file is found and run with python. Launch on 0.0.0.0 and PORT, and mind the 1 GB of memory.
- [How to deploy a Spring Boot app](https://antideploy.com/blog/how-to-deploy-a-spring-boot-app): Maven or Gradle, the executable jar, the port, and a Postgres JDBC URL from the PG variables.
- [How to deploy a Hono app](https://antideploy.com/blog/how-to-deploy-a-hono-app): Run Hono as a Node server: the adapter, the start script, the PORT variable and Workers code.
- [How to deploy a Go app](https://antideploy.com/blog/how-to-deploy-a-go-app): go.mod, the built binary, the PORT variable, Postgres and the go.sum fix.
- [How to deploy a Docker app with your own Dockerfile](https://antideploy.com/blog/how-to-deploy-a-docker-app-with-your-own-dockerfile): Where the Dockerfile must be, how the port is read, the account rule and the RUN --mount limit.

## Add something to your app

A database, file uploads, login, email, AI, scheduled jobs, secrets and your own domain.

- [How to add a Postgres database to your app](https://antideploy.com/blog/how-to-add-a-postgres-database-to-your-app): Ask your agent. A Postgres 17 database is created beside your app and DATABASE_URL is set.
- [How to add file uploads to your app](https://antideploy.com/blog/how-to-add-file-uploads-to-your-app): Uploads on disk vanish on every deploy. Ask for a private S3 bucket and upload with any S3 client.
- [How to add login to your app](https://antideploy.com/blog/how-to-add-login-to-your-app): Email and password sign-in, with users stored in your own Postgres. What is on and what is not.
- [How to send email from your app](https://antideploy.com/blog/how-to-send-email-from-your-app): Welcome messages and receipts with the Resend package, with no account to open and no DNS to touch.
- [How to add AI to your app](https://antideploy.com/blog/how-to-add-ai-to-your-app): One key for hundreds of models, paid from a prepaid wallet in rupees. Your agent creates the key.
- [How to run a scheduled job on your app](https://antideploy.com/blog/how-to-run-a-scheduled-job-on-your-app): Write a route, schedule it. Antideploy calls it on a cron schedule and wakes the app if it sleeps.
- [How to set environment variables and secrets](https://antideploy.com/blog/how-to-set-environment-variables-and-secrets): Encrypted and write-only. What you set, what is filled in for you, and how a change reaches the app.
- [How to connect your own domain](https://antideploy.com/blog/how-to-connect-your-own-domain): One CNAME record, HTTPS included. Available from the Go plan. Root domains versus www.
- [How to see logs and know when your app is down](https://antideploy.com/blog/how-to-see-logs-and-know-when-your-app-is-down): Logs, traffic numbers and health on every plan. An email when your app goes down and when it is back.

## Fix an error

Each page starts with the exact message, then says what it means and how to fix it.

- [npm ci can only install packages when your package.json and package-lock.json are in sync](https://antideploy.com/blog/npm-ci-can-only-install-packages-when-package-json-and-package-lock-json-are-in-sync): The lock file does not match package.json. Run npm install and commit the lock file.
- [sh: 1: vite: not found](https://antideploy.com/blog/sh-command-not-found-during-the-build): The build ran a command that is not installed. Add the package, or use a Dockerfile for system programs.
- [Failed to collect page data for /api/users](https://antideploy.com/blog/nextjs-failed-to-collect-page-data): A route's code threw during the build. Usually a variable or a database call at the top of a file.
- [Next.js build worker exited with code: 1](https://antideploy.com/blog/nextjs-build-worker-exited-with-code-1): The build worker crashed. Read the lines above for the file, run the build locally, and check memory.
- [invalid Python version specified: failed to resolve version](https://antideploy.com/blog/python-version-not-available): The builder does not offer the Python version you asked for. Pin one of the versions it lists.
- [failed to parse Dockerfile: file with no instructions](https://antideploy.com/blog/empty-dockerfile): Your Dockerfile is empty. Add instructions, or delete it and let Antideploy build the project.
- [npm error ERESOLVE could not resolve dependency tree](https://antideploy.com/blog/npm-err-eresolve-unable-to-resolve-dependency-tree): Two packages want different versions of a third. Align the versions, or use legacy-peer-deps.
- [npm error EBADPLATFORM Unsupported platform](https://antideploy.com/blog/npm-error-ebadplatform-unsupported-platform): Your lock file requires a package for another operating system. Regenerate and commit it.
- [Your app built successfully but never started listening on its port](https://antideploy.com/blog/your-app-built-successfully-but-never-started-listening-on-its-port): The app built but never answered on its port. Read PORT, listen on 0.0.0.0 and check the logs.
- [ModuleNotFoundError: No module named](https://antideploy.com/blog/modulenotfounderror-no-module-named): Your code imports a package that is not in requirements.txt. Add it, using the package name.
- [ERROR: Could not find a version that satisfies the requirement](https://antideploy.com/blog/could-not-find-a-version-that-satisfies-the-requirement): No version matches your requirements.txt, often because of the Python version. Pin Python or loosen the pin.
- [ERROR: Failed building wheel for psycopg2](https://antideploy.com/blog/failed-building-wheel): A package had to be compiled and the compile failed. Use a prebuilt version, or pin Python to 3.12.
- [TypeScript error fails the build](https://antideploy.com/blog/typescript-error-fails-the-build): A type error stops the build even when the app runs locally in dev mode. Run the type check and fix it.
- [Module not found: Can't resolve](https://antideploy.com/blog/module-not-found-cant-resolve): The build cannot find an import. Match capital letters exactly, add the package, or commit the file.
- [FATAL ERROR: JavaScript heap out of memory](https://antideploy.com/blog/javascript-heap-out-of-memory-during-the-build): The build ran out of memory, usually from a very large bundle. Shrink it or raise Node's limit.
- [Error: Cannot find module when the app starts](https://antideploy.com/blog/error-cannot-find-module-when-the-app-starts): The start command needs a package that was removed with the dev dependencies after the build.
- [ERR_PNPM_IGNORED_BUILDS Ignored build scripts](https://antideploy.com/blog/pnpm-ignored-build-scripts): pnpm blocked install scripts for packages like esbuild and sharp. Allow them in pnpm-workspace.yaml.
- [ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION](https://antideploy.com/blog/pnpm-minimum-release-age-violation): pnpm refused packages published too recently. Wait, pin the previous version, or relax the policy.
- [sh: prisma: not found during prisma generate](https://antideploy.com/blog/prisma-generate-command-not-found): The build ran prisma generate and prisma is not installed. Add it at the same version as @prisma/client.
- [Prisma Environment variable not found](https://antideploy.com/blog/prisma-environment-variable-not-found): Prisma needed a variable and it was not set. DATABASE_URL is set for you when your app has a database.
- [Prisma 7 datasource url is no longer supported](https://antideploy.com/blog/prisma-7-datasource-url-no-longer-supported): Prisma 7 removed the url field. Pin Prisma to version 6, or move the connection into prisma.config.ts.
- [missing go.sum entry for module providing package](https://antideploy.com/blog/go-missing-go-sum-entry): Your go.sum is incomplete. Run go mod tidy and commit go.mod and go.sum.
- [npm error notarget No matching version found](https://antideploy.com/blog/npm-error-no-matching-version-found): No published version matches the range in package.json. Check the version and the spelling.
- [npm error code E404 is not in this registry](https://antideploy.com/blog/npm-error-404-package-not-in-this-registry): npm cannot find a package by that name. Check the spelling. Agents sometimes invent package names.
- [npm error Missing script: "build"](https://antideploy.com/blog/npm-error-missing-script-build): Something ran npm run build and there is no build script. Add one, or remove the step.
- [ERROR: No buildpack groups passed detection](https://antideploy.com/blog/no-buildpack-groups-passed-detection): The builder could not tell the language. No manifest file is at the root of what was sent.
- [Parsing ecmascript source code failed](https://antideploy.com/blog/parsing-ecmascript-source-code-failed): The compiler could not parse a source file, usually a syntax error. The lines above name the file.
- [The build ran out of time](https://antideploy.com/blog/build-ran-out-of-time): Builds are given 20 minutes. A step is probably hanging, such as a watch mode or a long compile.
- [invalid Node.js version specified: failed to resolve version](https://antideploy.com/blog/node-version-not-available): Your project asks for a Node.js version the builder does not have. Change engines.node or .nvmrc.
- [Your app ran out of memory while starting up](https://antideploy.com/blog/app-ran-out-of-memory-while-starting): Each app has 1 GB, a Java app 2 GB. Loading a large model or dataset at startup can use it all. Load lazily.
- [relation "users" does not exist](https://antideploy.com/blog/relation-does-not-exist-database-tables-missing): The database exists but the tables do not. Your migration did not run, or was not detected.
- [Error: connect ECONNREFUSED 127.0.0.1:5432](https://antideploy.com/blog/econnrefused-127-0-0-1-5432-cannot-connect-to-the-database): Your app tries to reach a database on localhost. Read DATABASE_URL and create a hosted database.
- [Access blocked by CORS policy after deploy](https://antideploy.com/blog/cors-error-after-deploy): Your frontend calls an API on another address and the browser blocks it. Allow the exact origin.
- [404 Not Found when I refresh a React page](https://antideploy.com/blog/404-not-found-when-i-refresh-a-react-page): A single-page app shows 404 on refresh. How Antideploy handles routes, and when it still fails.
- [My app is slow on the first visit](https://antideploy.com/blog/my-app-is-slow-on-the-first-visit): Apps sleep when idle, so the first request takes seconds. Measured times and what helps.
- [My uploaded files disappeared after I deployed](https://antideploy.com/blog/uploads-disappear-after-a-deploy): Files saved to the app's disk are gone after a deploy, with no error. Use a private bucket instead.
- [My SQLite database resets after every deploy](https://antideploy.com/blog/sqlite-database-resets-after-a-deploy): SQLite keeps data in a file, and the disk is replaced on every deploy. Move to Postgres.
- [My node-cron job never runs after deploy](https://antideploy.com/blog/node-cron-job-never-runs): A timer inside your app cannot fire while it sleeps. Use a scheduled job that calls a route.
- [process.env variable is undefined after deploy](https://antideploy.com/blog/process-env-variable-is-undefined-after-deploy): A variable is undefined online. It was not set, set after the build, not redeployed, or misspelled.
- [DisallowedHost: Invalid HTTP_HOST header](https://antideploy.com/blog/django-disallowedhost-invalid-http-host-header): Django refuses an address that is not in ALLOWED_HOSTS. Add your address or the .antideploy.app pattern.

## Hosting in India

Pay with UPI, run close to your users, and start on a free plan.

- [How to host an app in India and pay with UPI](https://antideploy.com/blog/host-an-app-in-india-and-pay-with-upi): Start free with no card, then pay in rupees by UPI Autopay or card. Apps run in Singapore.
- [A Vercel alternative in India with rupee pricing](https://antideploy.com/blog/a-vercel-alternative-in-india-with-rupee-pricing): When Antideploy fits for a backend and a database, paid in rupees, and when Vercel is the better choice.
- [Free hosting for students and first projects in India](https://antideploy.com/blog/free-hosting-for-students-and-first-projects-in-india): Unlimited static sites, 1 app with a server and 1 database. No card, and nothing to verify.
- [How to host client apps as a freelancer or small agency](https://antideploy.com/blog/host-client-apps-as-a-freelancer-or-small-agency): How many client apps each plan holds, free static sites, client domains and the limits to tell clients.

## Deploy something. Start with one sentence.

Paste one sentence into your coding agent, click Approve once, and get a live link. No card, no trial clock.

To set this up, give your coding agent this sentence:

```text
Set this project up to deploy on Antideploy. Fetch https://antideploy.com/agent.md and follow it.
```
