Skip to content

[Performance][P0] Add responsive cover pipeline and resilient IPFS delivery #87

Description

@knzeng-e

Goal

Make artwork appear immediately and consistently without compromising IPFS-backed content addressing.

Problem

The upload API currently accepts multi-megabyte original covers and pins them unchanged. The UI reuses those assets across hero, rooms, stage rail, player, and catalog surfaces. Gateway fallback occurs only after an image error; a slow gateway may stall without failing.

Scope

  • Transform cover uploads server-side with sharp or equivalent.
  • Produce a tiny placeholder plus 64, 160, 320, and 640 px AVIF/WebP variants.
  • Extend the release manifest/read model with responsive cover refs and intrinsic dimensions.
  • Use srcset, sizes, decoding="async", fixed aspect ratios, and lazy loading outside the hero.
  • Use fetchpriority="high" only for the active hero/player artwork.
  • Add gateway timeout/racing and remember the winning gateway per CID/session.
  • Put an immutable caching edge/read-through gateway in front of IPFS where allowed.
  • Preserve the original cover as an archival asset, not the default UI asset.

Performance budgets

  • Hero cover p75 < 1 s cold on mobile 4G.
  • Catalog thumbnail transfer target < 40 KB each.
  • Zero layout shift caused by artwork.
  • Broken/slow gateway recovery < 1.2 s before trying the next source.

Acceptance criteria

  • Newly uploaded releases have responsive image variants.
  • Existing releases degrade to generated aura placeholders while legacy covers load.
  • Repeated surfaces do not independently download full-size originals.
  • Cache headers are immutable by CID.
  • Browser tests cover slow, failed, and CORS-rejected gateways.

Metadata

Metadata

Assignees

Labels

dotify-backlogTracked by docs/backlog/backlog.json and Project 5

Projects

Status
Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions