ADR-004: Global Upload Activity UI

Prev Next

Context

Uploads can be initiated from multiple parts of the application, and may continue while users navigate across routes or perform other tasks.

If upload progress and controls are rendered within feature modules:

  • users lose visibility when navigating away
  • progress UI becomes duplicated and inconsistent
  • lifecycle actions (pause, retry, cancel) are fragmented
  • upload behavior feels unreliable and opaque

Users need a single, predictable place to observe and control uploads regardless of where they were initiated.

Decision

All upload visibility and lifecycle controls are centralized in a global Upload Activity UI.

This UI:

  • is mounted at the application root
  • persists across route changes
  • renders upload state from UploadEngine snapshots
  • is the only place where upload progress is displayed
  • owns all lifecycle actions (pause, resume, cancel, retry, abort)

Feature modules do not render upload progress or controls.

Consequences

  • Users always know where to find upload status
  • Upload controls are learn-once and consistent
  • Upload lifecycle is not tied to feature UI lifetimes
  • Progress UI duplication is eliminated
  • Uploads feel like a platform capability, not a feature detail

Notes

  • The global upload UI acts as a control plane for uploads.
  • It reflects UploadEngine truth and issues lifecycle commands, but does not implement upload logic itself.
  • This decision intentionally mirrors interaction patterns from systems such as Google Drive, providing familiarity and trust.