2.8 KiB
2.8 KiB
Good Grief
TypeScript-first monorepo for a live theatrical photo-submission and media-control system.
Workspace
apps/submission: mobile-first audience submission flow.apps/admin: operator and moderation console.packages/shared-types: shared domain entities and scene/cue data.packages/effects: reusable effect vocabulary and presets.packages/cue-engine: deterministic cue and transition helpers.packages/render-engine: scene registry and render host contracts.services/api: local-first Fastify API for submissions, moderation, and cueing.services/worker: derivative generation and retention worker.
Current status
This repository implements the MVP foundation from the planning package:
- shared TypeScript domain model
- a live-intake submission UI
- an operator-facing moderation and cue-control UI
- a local-first API/storage architecture scaffold
- scene, effect, and cue contracts for the rendering layer
Bootstrapping
- Install dependencies with
npm install. - Start everything together:
npm run dev:all
- Or reset local runtime state first and then start everything:
npm run dev:all:reset
This starts:
- submission UI at
http://localhost:4100 - admin UI at
http://localhost:4200 - API at
http://localhost:4300 - worker health at
http://localhost:4301/health
Individual services
npm run dev:apinpm run dev:workernpm run dev:submissionnpm run dev:adminnpm run reset:runtime
Both apps expect the API on http://localhost:4300 by default. Vite dev servers proxy /api and /uploads there.
Local testing notes
- Place curated images in
assets/import-library/and use the adminRescan library folderaction, or restart the API, to import them. - The submission flow writes new uploads into
storage/runtime/. - The API state lives in
data/runtime/state.json. - Use the admin UI to approve or reject new uploads and take cues live to program.
Containers
Base compose file contains the shared backend services. Add the prod override for the built frontends:
- Podman:
podman compose -f docker-compose.yml -f docker-compose.prod.yml up --build - Docker:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
That starts:
- submission UI at
http://localhost:4100 - admin UI at
http://localhost:4200 - API at
http://localhost:4300 - worker health at
http://localhost:4301/health
For local frontend hot reload, add the dev override:
- Podman:
podman compose -f docker-compose.yml -f docker-compose.dev.yml up --build - Docker:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build
To reset runtime state inside the container stack:
- Podman:
podman compose -f docker-compose.yml run --rm api npm run reset:runtime - Docker:
docker compose -f docker-compose.yml run --rm api npm run reset:runtime