Host help desk with Django: CSV imports | Ample

INFRASTRUCTURE

What it needs

Before you start

Exactly what was tested

How to do it

Build and start

  1. pip install into .ample/python from requirements.txt, then waitress serving project.wsgi from run.py reading PORT on the python-3.12 template. The server must bind 0.0.0.0 on PORT.

Implement the pattern on PostgreSQL

  1. The fixture's module implements bulk import staging: a CSV staged as an object, row-level validation with per-row errors recorded, and a restart-safe import keyed by import id (imported=2 rejected=1 restart=ok). Copy the approach into your schema; keep migrations idempotent and run them with --release-command.

Wire object storage

  1. Create the bucket(s), then pass endpoint, region, bucket and keys as --env values. Use path-style addressing. Keep private data in an unpublished bucket.

Deploy

  1. Run the synchronous deploy once and read the result (exit 0 live, 1 failed, 2 blocked). Re-running with no change is a no-op.
   ample deploy . --name <app-name> --public --start "python3 run.py" --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...

Verify

  1. Fetch the live URL and the pattern self-test route(s) (/p/bulk-import-staging) from the example; then run your own checks. On failure read ample logs <deployment_id> --kind build then --kind runtime.
   ample logs <deployment_id> --kind build

Tested examples

How to know it worked

Know the limits

Cost estimate

Estimated 10.00 USD per month (size prices from pricing.toml at build revision a1b8c38919e59cd035ebabaced73cf84ece24371).

Verification evidence

Execution binding

MCP tool ample_deploy (registry mcp:ample_deploy), schema hash 876465fce906da0c observed 2026-09-21T03:19:59.461917+00:00 at revision 49962bcade4f. Binding state at export: current. Required scopes: servers:write, databases:read, buckets:read.

Typed next actions