## Creator businesses: asset library using Django

### Summary
A asset library blueprint for creator businesses built with Django on Ample. Domain schema: customer_workspaces (name, membership_tier, joined_at): member accounts or communities; content_items (title, tier_required, object_key, published_at, version): versioned content releases; customer_assets (workspace_id, title, object_key, visibility): downloads granted to a member; releases (content_item_id, version, notes): release notes per version; uploads (id, owner_reference, object_key, content_type, size, uploaded_at): validated uploads linked to their owner. Public information: free content and previews, membership tiers, creator profile. Kept out of scope until handling is reviewed: member identity and payment status, private community posts. Member payment status comes from your payment provider; it is not modeled here and no PCI claim is made. Technical basis verified on Django: content-type and size validation that rejects disallowed files, an object written to a private bucket and a row linking the record to the object key (reject=ok upload=ok linked=ok).

### Representative Queries
- Creator businesses: asset library using Django
- Where can I host Creator businesses: Asset library built with Django?
- I need a genuinely specialized asset library workflow covering sponsor/client workspaces, publication guides and content assets.

### Resource Requirements
- primitive:compute
- primitive:postgres
- primitive:s3-compatible-object-storage

### Infrastructure Requirements
- **Compute**: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
- **Postgres**: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.
- **S3-compatible object storage**: Buckets are S3-compatible with issued credentials; PutObject and GetObject are verified by canary. Other S3 operations are not verified.

### Framework
Django

### Workload
Asset library

### Industry
Creator businesses

### Release Status
Published

### Support Status
Verified

### Execution Status
Ready

### Docs Only
False

### Prerequisites
- A Django project (pip install into .ample/python from requirements.txt, then waitress serving project.wsgi from run.py reading PORT on the python-3.12 template)
- A PostgreSQL driver reading DATABASE_URL (auto-provisioned when omitted)
- Bucket credentials from `ample bucket create` passed as encrypted S3_* environment variables
- A review of which creator businesses data classes may be handled at all; this blueprint models public information only

### Tested Configuration
- **Template**: python-3.12
- **Runtime**: python
- **Size**: s-1vcpu-1gb
- **Install command**: python3 -m pip install --target .ample/python -r requirements.txt
- **Start command**: PYTHONPATH=.ample/python:${PYTHONPATH:-} python3 run.py

### Input Schema
- **Properties**:
  - **env**: Encrypted environment variables
  - **name**: App name
  - **path**: Project directory or ample.toml service
  - **release_command**: Migration command run before activation
  - **start**: Start command
- **Required**: ["env", "name", "path", "start"]

### Workflow Steps
1. **Model the creator businesses domain**: Create the tables customer_workspaces, content_items, customer_assets, releases, uploads. Member accounts or communities lives in customer_workspaces; keep the sensitive classes (member identity and payment status, private community posts) out of this schema.
2. **Model assets linked to their owning group or workspace**
3. **Validate uploads and store them in the private bucket; link each object to its row**
4. **Authorize downloads by membership**
5. **Deploy and verify rejection of disallowed files and a linked upload**
6. **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/browser-file-uploads) and your own acceptance checks for the creator businesses workflow.
   - **Command**: ample logs  --kind build

### Examples
- **Django pattern fixture**: Verified browser file uploads basis for this blueprint.

### Success Checks
- **App responds on its public URL**: Path: /, Expect: ample canary django patterns
- **Browser-file-uploads self-test from the example**: Path: /p/browser-file-uploads, Expect: see the pattern fixture checks

### Limitations
1. The technical basis (browser file uploads on Django) was verified with the pattern fixture; the creator businesses schema and workflow are an original design for this blueprint and were not executed as a separate application.
2. No health, financial, privacy or other compliance claim is made. Member payment status comes from your payment provider; it is not modeled here and no PCI claim is made.
3. Public content and synthetic examples only until actual data-handling requirements have been reviewed.
4. Verified on the python-3.12 template at s-1vcpu-1gb; region, request-duration limits and other sizes are unknown or unverified.
5. Managed PostgreSQL 16 only; extensions, connection limits and backup or restore procedures are not verified.
6. PutObject and GetObject with path-style addressing are verified; other S3 operations and CDN cache rules are not.

### Cost Estimate
- **Currency**: USD
- **Monthly Amount**: 10.0
- **Authoritative**: true
- **Basis**: size prices from pricing.toml (loaded by the API) at build revision 1ac5595375130d45290090e82ed0f554ccd45405-dirty
- **Components**:
  - **app server**: size: s-1vcpu-1gb, quantity: 1.0, monthly amount: 5.0
  - **managed PostgreSQL database**: size: s-1vcpu-1gb, quantity: 1.0, monthly amount: 5.0
- **Note**: Always-on monthly price of the tested sizes; apps and databases auto-pause when idle. Buckets are allocation-priced per quota and not included.

### Evidence Summary
- **Kind**: canary_run
- **Summary**: Django pattern fixture deployed on Ample (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 browser file uploads checks passed: content-type and size validation that rejects disallowed files, an object written to a private bucket and a row linking the record to the object key (reject=ok upload=ok linked=ok). The blueprint's Creator businesses schema and workflow below build on that verified basis and were not separately executed.
- **Observed At**: 2026-09-20T03:31:44Z
- **Implementation Revision**: 03b6402b1b3e19178985f08ea4033804521d85d4-dirty (CLI b75e104)
- **Expires At**: 2027-03-19T03:31:44Z
- **Scope**: Checks: [/p/browser-file-uploads], Pattern: pattern:browser-file-uploads, Template: python-3.12

### Last Verified At
2026-09-20T03:31:44Z

### Next Actions
- **Browse the catalog index**: operationId: catalog_index, method: GET, relativePath: /v1/catalog
- **Search published recipes by intent, stack and constraints**: operationId: search_recipes, method: POST, relativePath: /v1/catalog/search
- **Prepare a side-effect-free deployment plan for an authorized project**: operationId: plan_deployment, method: POST, relativePath: /v1/catalog/plan
- **Read the existing agent authentication setup**: operationId: existing_auth_setup, method: GET, relativePath: /mcp/setup
- **Browse Creator businesses**: operationId: browse_node, method: GET, relativePath: /v1/catalog/nodes/industry%3Acreator-businesses
- **Browse Asset library**: operationId: browse_node, method: GET, relativePath: /v1/catalog/nodes/workload%3Aasset-library
- **Browse Django**: operationId: browse_node, method: GET, relativePath: /v1/catalog/nodes/stack%3Aframework-django
- **Browse Deploy web app**: operationId: browse_node, method: GET, relativePath: /v1/catalog/nodes/intent%3Adeploy-web-app
