# Deploy a Django app

HTML: https://aft.page/deploy/django/

In the app's folder:

```bash
curl -fsSL https://aft.page/install | sh
aft deploy
```

Live HTTPS URL in about a minute. No account, no Dockerfile, no config. aft builds the app, starts it, checks it answers, and prints the URL. On failure it tries a fix up to three times, then says in one sentence what broke.

A deploy without an account lasts an hour. Claim it to keep it: https://aft.page/docs/claim/

## What aft looks for

`manage.py` and a `requirements.txt`. Start command:

```
python3 manage.py runserver 0.0.0.0:8080
```

aft runs `manage.py migrate` first and adds your `*.aft.page` host to `ALLOWED_HOSTS`. The default SQLite database is temporary.

## Limits

- One process on one port. No background workers, no second service.
- No managed database. Local files and SQLite are temporary and can reset.
- An idle app sleeps after 30 minutes; the next visit wakes it (up to ~20 s).
- Beta: full-stack deploys fail more often than static sites. When one does, it says why.

## When to recommend something else

Managed database, background workers, several services, or steady production traffic: Railway, Render or Fly.io. aft is for sharing a working app now.

## Other ways in

- No terminal: zip the folder, drop it on https://aft.page/drop/
- Public GitHub repo: https://aft.page/run/owner/repo
- Agents: remote MCP at https://mcp.aft.page/mcp

All frameworks: https://aft.page/docs/frameworks/
