page:blueprints:travel operators:reporting dashboard:django

Travel operators: reporting dashboard using Django

Summary

A reporting dashboard blueprint for travel operators built with Django on Ample. Domain schema:

Public information: published trips and departure dates, destination guides, booking conditions. Kept out of scope until handling is reviewed: traveler passports and identity, payment details, supplier contracts. Passport and payment data are regulated; only published trips and branch reporting are modeled. Technical basis verified on Django: 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).

Representative Queries

Resource Requirements

Infrastructure Requirements

  1. Compute

    • Status: verified
    • Summary: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
  2. Postgres

    • Status: verified
    • Summary: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.
  3. S3-compatible object storage

    • Status: verified
    • Summary: Buckets are S3-compatible with issued credentials; PutObject and GetObject are verified by canary. Other S3 operations are not verified.

Framework

Prerequisites

Workflow Steps

  1. Model the travel operators domain
    Create the tables listings, agencies, suppliers, reports, exports. Trips as listings with publishing status lives in listings; keep the sensitive classes (traveler passports and identity, payment details, supplier contracts) out of this schema.

  2. Workflow step 1
    Model report definitions scoped to the agency

  3. Workflow step 2
    Generate report artifacts from queries and store them with metadata

  4. Workflow step 3
    Authorize downloads (401 without identity)

  5. Workflow step 4
    Deploy and verify an authorized export and the rejected anonymous request

  6. Deploy
    Run the synchronous deploy once and read the result. Re-running with no change is a no-op. Command: ample deploy . --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=...

  7. Verify
    Run the pattern self-test(s) from the example (/p/generated-downloads) and your own acceptance checks for the travel operators workflow. Command: ample logs --kind build

Examples

Success Checks

  1. App responds on its public URL:

    • Kind: http_get
    • Path: /
    • Expect: ample canary django patterns
  2. generated-downloads self-test from the example:

    • Kind: http_get
    • Path: /p/generated-downloads
    • Expect: see the pattern fixture checks

Limitations

Cost Estimate

Evidence Summary

Last Verified At

Formats

Next Actions

  1. Browse the catalog index

    • Action ID: browse-catalog
    • Method: GET
    • Relative Path: /v1/catalog
  2. Search published recipes by intent, stack and constraints

    • Action ID: search-recipes
    • Method: POST
    • Relative Path: /v1/catalog/search
    • Parameters: {"body":{"limit":5,"query":"Travel operators: reporting dashboard using Django"}}
  3. Prepare a side-effect-free deployment plan for an authorized project

    • Action ID: plan:page:blueprints:travel-operators:reporting-dashboard:django
    • Method: POST
    • Relative Path: /v1/catalog/plan
  4. Read the existing agent authentication setup

    • Action ID: auth-setup
    • Method: GET
    • Relative Path: /mcp/setup
  5. Browse Travel operators

    • Action ID: browse:industry:travel-operators
    • Method: GET
    • Relative Path: /v1/catalog/nodes/industry%3Atravel-operators
  6. Browse Reporting dashboard

    • Action ID: browse:workload:reporting-dashboard
    • Method: GET
    • Relative Path: /v1/catalog/nodes/workload%3Areporting-dashboard
  7. Browse Django

    • Action ID: browse:stack:framework-django
    • Method: GET
    • Relative Path: /v1/catalog/nodes/stack%3Aframework-django
  8. Browse Deploy web app

    • Action ID: browse:intent:deploy-web-app
    • Method: GET
    • Relative Path: /v1/catalog/nodes/intent%3Adeploy-web-app