← All decisions

Image storage = Supabase Storage

accepted

0015 — Image storage = Supabase Storage

Context

ark needs somewhere to put tenant-uploaded images: brand logos (Workstream D, this PR), and soon CMS hero images and member profile photos (Workstream B). The original docs/inputs/SOURCE-MAP.md reference came from internalize and actualize-v2, which use Cloudinary — excellent at transforms, but a black-box delivery layer that holds the canonical bytes and gates access via signed URLs the tenant can’t directly own.

Two non-negotiables shape the call:

Decision

Use Supabase Storage as the canonical image store. One bucket (org-public) for publicly-readable assets. Org-prefixed paths plus storage.objects RLS policies enforce write isolation.

Concretely:

Consequences

Easier:

Harder:

Trip-wires

We revisit this if:

Alternatives considered

Migration journey