# v69.3 Product Image Upload UX

Browser review exposed two issues in the first image implementation.

1. Laravel public-disk URLs can be relative (`/storage/...`). The web client may run on a different origin from the API during development, so product media URLs are now resolved against the API origin.
2. Image upload had no visible progress. The upload now uses XMLHttpRequest progress events, displays an immediate local preview, percentage progress, disables duplicate upload clicks, and updates the product media state immediately when the server responds.

The database and media storage design are unchanged.
