What is the work
Support both user-uploaded images and source-provided image URLs for Events Roundup source items and slide previews.
Planned areas:
components/intake/
components/studio/ImagePicker.tsx
convex/assets.ts
convex/assets.test.ts
components/studio/ImagePicker.test.tsx
Why does it matter
Current Canva workflows require manual image hunting and placement. The MVP needs image handling that supports real editorial sources without pretending automated image sourcing is solved.
What does done mean
- Editors can upload an image and attach it to an event.
- Editors can use an image URL extracted from source material.
- Events can remain image-less with a deliberate placeholder/incomplete state.
- Invalid image URLs are rejected or flagged safely.
- Uploaded and URL-backed images can be consumed by slide preview/rendering later.
Acceptance criteria
Blockers
What can make this fail
- The implementation assumes all images are uploads or all images are URLs.
- External URLs are treated as always rasterizable, which may fail later in Sharp.
- CORS/hotlink failures are not surfaced as reviewable image states.
- Image state is coupled too tightly to a specific slide layout.
How should Codex verify it
- Run asset/backend tests.
- Run ImagePicker component tests.
- Test uploaded image, valid URL image, invalid URL image, and no-image states.
- Confirm later SVG rendering can receive a normalized image attachment model.
What is the work
Support both user-uploaded images and source-provided image URLs for Events Roundup source items and slide previews.
Planned areas:
components/intake/components/studio/ImagePicker.tsxconvex/assets.tsconvex/assets.test.tscomponents/studio/ImagePicker.test.tsxWhy does it matter
Current Canva workflows require manual image hunting and placement. The MVP needs image handling that supports real editorial sources without pretending automated image sourcing is solved.
What does done mean
Acceptance criteria
Blockers
What can make this fail
How should Codex verify it