# Nonprofits: Event Registration Using Laravel

## Summary
A event registration 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;  
  - **events** (seq, record_type, record_id, kind, at): application-owned history written in the same transaction. 
- **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: an optimistic version check and an event row written in the same transaction, a stale update rejected, and a history query over the application-owned events (history=2 conflict=rejected).

## Representative Queries
- Nonprofits: event registration using Laravel  
- Where can I host Nonprofits: Event registration built with Laravel?  
- I need a genuinely specialized event registration workflow covering program participation, volunteer events and program resources.

## Resource Requirements
- **Primitive resources needed:**  
  - compute  
  - postgres  
  - 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.

## Prerequisites
- A Laravel project (composer install --no-dev from composer.lock, then FrankenPHP serving public/ (php-server with the index.php fallback) reading PORT on the php-8.5 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 nonprofits data classes may be handled at all; this blueprint models public information only

## Workflow Steps
1. **Model the nonprofits domain**  
   - Create the tables course_groups, memberships, sessions, materials, events. 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 sessions with capacity and registrations with status  
3. **Workflow Step 2**  
   - Register transactionally with a capacity check and an event per registration  
4. **Workflow Step 3**  
   - Reject stale concurrent updates  
5. **Workflow Step 4**  
   - Deploy and verify history and conflict handling  
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 (/p/transactional-workflows) and your own acceptance checks for the nonprofits workflow.

## Limitations
- The technical basis (transactional workflows 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.  
- Public content and synthetic examples only until actual data-handling requirements have been reviewed.  
- Verified on the php-8.5 template at s-1vcpu-1gb; region, request-duration limits and other sizes are unknown or unverified.  
- Managed PostgreSQL 16 only; extensions, connection limits and backup or restore procedures are not verified.  
- 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  
- **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.

## Next Actions
- **Browse the catalog index**  
- **Search published recipes by intent, stack and constraints**  
- **Prepare a side-effect-free deployment plan for an authorized project**  
- **Read the existing agent authentication setup**  
- **Browse Nonprofits**  
- **Browse Event registration**  
- **Browse Laravel**  
- **Browse Deploy web app**
