## Nonprofits: Asset Library Using Laravel

### Summary
A asset library blueprint for nonprofits built with Laravel on Ample.

**Domain schema:** 
- `course_groups` (program, cohort, start_at, end_at): programs and cohorts; 
- `memberships` (course_group_id, participant_reference, role): participants, volunteers, and staff; 
- `sessions` (course_group_id, starts_at, title, location): program sessions and events; 
- `materials` (course_group_id, title, object_key, visibility): program materials; 
- `uploads` (id, owner_reference, object_key, content_type, size, uploaded_at): validated uploads linked to their owner.

**Public information:** mission and programs, events, donation entry point.

**Kept out of scope until handling is reviewed:** beneficiary identity and case notes, donor records. Beneficiary and donor data are sensitive; donations are handled by your payment provider and are not modeled here.

**Technical basis:** verified on Laravel: 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
- Nonprofits: asset library using Laravel
- Where can I host Nonprofits: Asset library built with Laravel?
- I need a genuinely specialized asset library workflow covering program participation, volunteer events, and program resources.

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

### Workflow Steps
1. **Model the nonprofits domain**: Create the tables course_groups, memberships, sessions, materials, uploads. Programs and cohorts live in course_groups; keep the sensitive classes (beneficiary identity and case notes, donor records) out of this schema.
2. **Workflow step 1**: Model assets linked to their owning group or workspace.
3. **Workflow step 2**: Validate uploads and store them in the private bucket; link each object to its row.
4. **Workflow step 3**: Authorize downloads by membership.
5. **Workflow step 4**: Deploy and verify rejection of disallowed files and a linked upload.
6. **Deploy**: Run the synchronous deploy once and read the result. Re-running with no change is a no-op.
7. **Verify**: Run the pattern self-test(s) from the example and your own acceptance checks for the nonprofits workflow.

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

### Limitations
- The technical basis (browser file uploads on Laravel) was verified with the pattern fixture; the nonprofits schema and workflow are an original design for this blueprint and were not executed as a separate application.
- No health, financial, privacy, or other compliance claim is made. Beneficiary and donor data are sensitive; donations are handled by your payment provider and are not modeled here.

### Cost Estimate
- **Currency**: USD  
- **Monthly Amount**: 10.0  
- **Basis**: size prices from pricing.toml (loaded by the API).

### Next Actions
- **Browse the catalog index**: `GET /v1/catalog`
- **Search published recipes by intent, stack, and constraints**: `POST /v1/catalog/search` with query: Nonprofits: asset library using Laravel
- **Prepare a side-effect-free deployment plan**: `POST /v1/catalog/plan` 
- **Read the existing agent authentication setup**: `GET /mcp/setup`
