Restore the profile header wallpaper and wire its controls to the editor

Fixkamo-internal
Ya
6 Agosti 2026, 21:31 UTC
Mwandishi
kamo
Ahadi ya
b8d1c48

The band behind the avatar on **************** had gone flat gradient. Not the wallpaper feature — ae85a8ae routed the header's photos through next/image + safeImageSrc, which rewrites the tenant's https://theme.<apex>/... URLs to /api/images/proxy. That proxy fetches server-side behind a public-routability DNS pin, and a theme host that resolves inside the cluster fails it, so every frame hit onError and hid itself. The wallpaper editor never showed the fault because it paints photos as CSS background-image, which the page CSP already allowlists (img-src ... https://theme.<apex>). The header now does the same: no proxy hop. Beyond the paint, the header was deriving the wallpaper independently — its own list fetch, all rows rather than the on-air ones, org photos only, no tone, no console mode. It now resolves the backdrop from exactly the pieces the editor uses, so the two pages cannot disagree: useMemberBackgrounds for the on-air sequence and the org-vs-own source, useBackgroundMode for plain-vs-slideshow, useBackgroundTone for the wash. Ken Burns motion is kept; the tone wash sits over the photos and the readability scrim over that, so the white identity text survives a fully whitewashed tone. The org photo resolution (config.json backgroundImageCount -> img/bg/{n}.webp, 404s dropped) was duplicated in three places and is now useOrgThemeImages, cached per tab. MediaChrome and useMemberBackgrounds move out of the wallpaper route into app/components/background and app/hooks so the header can share them verbatim rather than grow a second implementation that drifts. Source / Console / Tone and a "My Wallpapers" shortcut now sit to the right of the identity block — my-profile as a shortcut to settings that live on the editor page, writing the same stores. The pod renders on your OWN profile only: console mode and tone are the session member's ui-preferences, so offering them on someone else's profile would silently edit your own console while appearing to edit theirs. Source additionally needs the member-background right, and falls back to MediaChrome's lock affordance without it. Other tabs render the band without controls. Wallpapers are now ON by default: useBackgroundMode defaults to slideshow, and plain is something a member opts into. The absent-key case is cached too, so a member who has never touched the switch no longer re-probes ui-preferences on every mount. Verified with tsc --noEmit. eslint cannot run in this repo — eslint-config-next dies on a circular-config TypeError, unrelated and pre-existing.

Mabadiliko yote

Je, unaona nini kuhusu usafiri?

Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.

Kuwa Huru MileleMtazamo wa bei