page:recipes:digital downloads:nuxt:download delivery

Host digital downloads with Nuxt: authorized file delivery

Summary

Deploy a digital downloads built with Nuxt on Ample using the generated downloads pattern. Compute runs the app in an isolated microVM behind a public HTTPS URL, a managed PostgreSQL 16 database is auto-provisioned and injected as DATABASE_URL, a private S3-compatible bucket holds objects with credentials delivered as encrypted environment variables. Verified on Nuxt: an export query rendered to a CSV artifact stored with metadata in a private bucket and returned only to an authorized caller (401 without token, export=ok rows=3). Not separately tested: your export formats, retention policy and entitlement model; treat the digital downloads-specific behavior as your application code.

Representative Queries

Resource Requirements

Infrastructure Requirements

Prerequisites

  1. A Nuxt project that builds and starts with the documented commands (nuxt build then node .output/server/index.mjs (reads HOST and PORT) on the node-22 template)
  2. A PostgreSQL driver reading DATABASE_URL at runtime (auto-provisioned when omitted, or supplied with --env)
  3. A bucket from ample bucket create with its credentials passed as encrypted S3_* environment variables.
  4. An Ample account token with servers:write, databases:read, buckets:read.

Workflow Steps

  1. Build and start: nuxt build then node .output/server/index.mjs (reads HOST and PORT) on the node-22 template. The server must bind 0.0.0.0 on PORT.
  2. Implement the pattern on PostgreSQL: The fixture's module implements generated downloads: an export query rendered to a CSV artifact stored with metadata in a private bucket and returned only to an authorized caller (401 without token, export=ok rows=3). Copy the approach into your schema; keep migrations idempotent and run them with --release-command.
  3. Wire object storage: 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.
  4. Deploy: 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.
    Command: ample deploy . --name --public --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...
  5. Verify: Fetch the live URL and the pattern self-test route(s) (/api/p/generated-downloads) from the example; then run your own checks. On failure read ample logs --kind build then --kind runtime.
    Command: ample logs --kind build

Examples

Success Checks

Limitations

  1. Verified on the node-22 template at s-1vcpu-1gb with the example fixture; other sizes, templates and Nuxt major versions are not verified.
  2. The digital downloads itself (your export formats, retention policy and entitlement model) is application code and was not separately tested; the pattern checks are what was verified.
  3. Region, compliance attestations and request-duration limits are unknown and not claimed.
  4. Apps auto-pause when idle and wake on the next request; always-on is an operator setting, not a plan feature.
  5. Managed PostgreSQL 16 only; extensions, connection limits and backup or restore procedures are not verified; apps and their databases are placed together.
  6. PutObject and GetObject with path-style addressing are verified; multipart upload, listing, presigned URLs and lifecycle rules are not.

Cost Estimate

Evidence Summary

Next Actions

  1. Browse the catalog index: GET /v1/catalog
  2. Search published recipes by intent, stack and constraints: POST /v1/catalog/search with body: {"limit":5,"query":"Host digital downloads with Nuxt: authorized file delivery"}
  3. Prepare a side-effect-free deployment plan for an authorized project: POST /v1/catalog/plan with body: {"inputs":{},"projectId":"","recipeId":"page:recipes:digital-downloads:nuxt:download-delivery","recipeRevision":"r1"}
  4. Read the existing agent authentication setup: GET /mcp/setup
  5. Browse Digital downloads: GET /v1/catalog/nodes/workload%3Adigital-downloads
  6. Browse Nuxt: GET /v1/catalog/nodes/stack%3Aframework-nuxt
  7. Browse Generated downloads: GET /v1/catalog/nodes/pattern%3Agenerated-downloads
  8. Browse Deploy web app: GET /v1/catalog/nodes/intent%3Adeploy-web-app