## Tutoring centers: asset library using Next.js

A asset library blueprint for tutoring centers built with Next.js on Ample. Domain schema:

- **course_groups** (subject, level, start_at, end_at, capacity): tutoring groups;
- **memberships** (course_group_id, student_reference, guardian_reference, role): students, guardians and tutors;
- **sessions** (course_group_id, starts_at, tutor, attendance_count): session events;
- **materials** (course_group_id, title, object_key, visibility): worksheets and answer keys;
- **uploads** (id, owner_reference, object_key, content_type, size, uploaded_at): validated uploads linked to their owner.

Public information: subjects and levels, schedule and locations, tutor qualifications. Kept out of scope until handling is reviewed: minor students and guardian identity, progress reports. Data about minors is sensitive; only group schedules and materials are modeled here. Technical basis verified on Next.js: 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
- Tutoring centers: asset library using Next.js
- Where can I host Tutoring centers: Asset library built with Next.js?
- I need a genuinely specialized asset library workflow covering course-group membership, session events and teaching materials.

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

### Prerequisites
- A Next.js project (next build then next start -H 0.0.0.0 -p $PORT on the node-22 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 tutoring centers data classes may be handled at all; this blueprint models public information only

### Tested Configuration
- **Template**: node-22
- **Runtime**: node
- **Size**: s-1vcpu-1gb
- **Install**: npm install
- **Build**: npm run build --if-present
- **Start**: npm run start

### Workflow Steps
1. Model the tutoring centers domain: Create the tables course_groups, memberships, sessions, materials, uploads. Tutoring groups live in course_groups; keep the sensitive classes (minor students and guardian identity, progress reports) 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.
7. Run the pattern self-test(s) from the example (/p/browser-file-uploads) and your own acceptance checks for the tutoring centers workflow.

### Success Checks
- App responds on its public URL
- Browser-file-uploads self-test from the example

### Limitations
- The technical basis (browser file uploads on Next.js) was verified with the pattern fixture; the tutoring centers schema and workflow are an original design for this blueprint and were not executed as a separate application.
- Data about minors is sensitive; only group schedules and materials are modeled here.

### Cost Estimate
- **Currency**: USD
- **Monthly Amount**: 10.0
- **Components**:
  - App server: 1.0 (s-1vcpu-1gb) - monthly amount: 5.0
  - Managed PostgreSQL database: 1.0 (s-1vcpu-1gb) - monthly amount: 5.0

### Last Verified At
2026-09-21T02:34:39Z

### Formats
- [HTML](/content/blueprints/tutoring-centers/asset-library/next-js/index.html)
- [Markdown](/content/blueprints/tutoring-centers/asset-library/next-js.md)
- [JSON](https://api.ample.computer/v1/catalog/recipes/page%3Ablueprints%3Atutoring-centers%3Aasset-library%3Anext-js)
