What is the work
Create the backend domain model for the carousel workflow: formats, projects, source items, slide instances, assets, and intake runs.
Planned areas:
convex/schema.ts
convex/formats.ts
convex/projects.ts
convex/sourceItems.ts
convex/slides.ts
convex/assets.ts
convex/intake.ts
convex/*.test.ts
Why does it matter
The Format Library, agent intake lane, visual studio, and SVG export path all need shared durable concepts. If this layer is vague or blob-like, later work will drift and the app will be hard to test.
What does done mean
- Convex schema and functions can represent an Events Roundup project.
- Intake results are separate from editor-approved source items.
- Slide instances can be generated from approved project content later.
- Uploaded image assets and source image URLs can both be represented.
- Backend tests cover the happy path, edge cases, and invalid references.
Acceptance criteria
Blockers
What can make this fail
- Domain state is stored as undifferentiated JSON blobs that later UI/tests cannot reason about.
- Intake output and approved editor state are conflated.
- Asset modeling assumes only uploads or only URLs, breaking the chosen MVP image workflow.
- Tests assert implementation internals rather than workflow behavior.
How should Codex verify it
- Run Convex/backend tests for all new domain functions.
- Add at least one workflow-shaped test from project creation through source item insertion.
- Confirm the schema supports the later issue requirements without overbuilding a format builder.
- Check that generated Convex files and secrets are handled correctly.
What is the work
Create the backend domain model for the carousel workflow: formats, projects, source items, slide instances, assets, and intake runs.
Planned areas:
convex/schema.tsconvex/formats.tsconvex/projects.tsconvex/sourceItems.tsconvex/slides.tsconvex/assets.tsconvex/intake.tsconvex/*.test.tsWhy does it matter
The Format Library, agent intake lane, visual studio, and SVG export path all need shared durable concepts. If this layer is vague or blob-like, later work will drift and the app will be hard to test.
What does done mean
Acceptance criteria
Blockers
What can make this fail
How should Codex verify it