Skip to content

U5: Add image upload and source URL handling #5

@breadback00-dev

Description

@breadback00-dev

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

  • Uploaded image can be attached, replaced, and removed from an event.
  • Source URL image can be attached, replaced, and removed from an event.
  • Image-less event remains valid with a visible incomplete/placeholder state.
  • Invalid image URL does not break the project.
  • Asset records distinguish stored uploads from external image URLs.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions