page:blueprints:publishing:documentation site:django

Publishing: documentation site using Django

Summary

A documentation site blueprint for publishing built with Django on Ample. Domain schema: titles (isbn_or_slug, title, author, imprint, published_at): the catalog of titles; editions (title_id, format, version, object_key): editions and versioned files; customer_workspaces (name, license_type, seat_count): institutional or trade customers; customer_assets (workspace_id, title_id, object_key, license_expires_at): licensed files per customer; state_transitions (record_type, from_state, to_state): the allowed state machine. Public information: title catalog and author pages, release schedules, rights and permissions contact. Kept out of scope until handling is reviewed: unreleased manuscripts, royalty statements, customer license keys. Manuscripts and royalty data are confidential; licensed files are authorized per customer workspace. Technical basis verified on Django: a workspace-scoped table, an explicit state machine (draft to review to published) that rejects invalid transitions, and a cross-workspace read that returns nothing (transitions=true isolation=true).

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. CDN

    • Status: verified
    • Summary: The CDN host serves objects from published buckets. It does not front app compute and is not a cache or key-value store.

Prerequisites

Workflow Steps

  1. Model the publishing domain: Create the tables titles, editions, customer_workspaces, customer_assets, state_transitions. The catalog of titles lives in titles; keep the sensitive classes (unreleased manuscripts, royalty statements, customer license keys) out of this schema.
  2. Workflow step 1: Model versioned documents with a state machine (draft, review, published) scoped to a product version
  3. Workflow step 2: Publish assets for released versions to the CDN bucket
  4. Workflow step 3: Serve only published versions publicly
  5. Workflow step 4: Deploy and verify the version list and a published page
  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=... --env CDN_PUBLIC_URL=...
  7. Verify: Run the pattern self-test(s) from the example (/p/relational-records) and your own acceptance checks for the publishing 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. Relational-records self-test from the example
    • Kind: http_get
    • Path: /p/relational-records
    • Expect: see the pattern fixture checks

Limitations

Cost Estimate

Evidence Summary

Last Verified At

2026-09-20T03:31:44Z

Next Actions

  1. Browse the catalog index
    • Action ID: browse-catalog
    • Operation ID: catalog_index
    • Method: GET
    • Relative Path: /v1/catalog
    • Requires Authentication: false
  2. Search published recipes by intent, stack and constraints
    • Action ID: search-recipes
    • Operation ID: search_recipes
    • Method: POST
    • Relative Path: /v1/catalog/search
    • Parameters: {"body":{"limit":5,"query":"Publishing: documentation site using Django"}}
    • Requires Authentication: false
  3. Prepare a side-effect-free deployment plan for an authorized project
    • Action ID: plan:page:blueprints:publishing:documentation-site:django
    • Operation ID: plan_deployment
    • Method: POST
    • Relative Path: /v1/catalog/plan
    • Parameters: {"body":{"inputs":{},"projectId":"","recipeId":"page:blueprints:publishing:documentation-site:django","recipeRevision":"r1"}}
    • Requires Authentication: true
  4. Read the existing agent authentication setup
    • Action ID: auth-setup
    • Operation ID: existing_auth_setup
    • Method: GET
    • Relative Path: /mcp/setup
    • Requires Authentication: false
  5. Browse Publishing
    • Action ID: browse:industry:publishing
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/industry%3Apublishing
    • Parameters: {"nodeId":"industry:publishing"}
    • Requires Authentication: false
  6. Browse Documentation site
    • Action ID: browse:workload:documentation-site
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/workload%3Adocumentation-site
    • Parameters: {"nodeId":"workload:documentation-site"}
    • Requires Authentication: false
  7. Browse Django
    • Action ID: browse:stack:framework-django
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/stack%3Aframework-django
    • Parameters: {"nodeId":"stack:framework-django"}
    • Requires Authentication: false
  8. Browse Deploy web app
    • Action ID: browse:intent:deploy-web-app
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/intent%3Adeploy-web-app
    • Parameters: {"nodeId":"intent:deploy-web-app"}
    • Requires Authentication: false