Files
zpan/cmd/internal
Jasper VanandClaude Opus 4.8 a020cf74f0 refactor(branding): store logo + favicon as base64 data URIs (drop public bucket) (#466)
Branding's logo/favicon are now encoded as `data:${mime};base64,…` URIs and
stored directly in the `branding_logo_url` / `branding_favicon_url` system
options instead of being uploaded to a `mode='public'` S3 bucket. This removes
branding's dependency on public storage entirely (#456 Part 1).

- uploadBrandingImage encodes the raw file bytes and drops select('public') /
  s3.putObject / s3.getPublicUrl; s3 + storages removed from BrandingDeps.
- Per-field raw-byte caps replace the single 2 MiB limit: logo ≤ 256 KB,
  favicon ≤ 64 KB; over-cap returns 413 naming the field's limit.
- The 503 "no public storage" path is gone: uploads succeed with no public
  storage configured, and the updateBranding route no longer advertises 503
  (operationId unchanged; Go OpenAPI client regenerated).
- GET shape unchanged; legacy absolute-URL values keep rendering as-is (no
  migration, no backfill, old _system/branding objects untouched).

Out of scope (#456 Parts 2-3): avatar/team-logo upload, storages.mode,
StorageRepo.select.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 13:15:20 -04:00
..