Skip to content

fix(ui): cache marketplace images and stabilize gallery and calendar layouts - #2980

Merged
bobleer merged 4 commits into
GCWing:mainfrom
bobleer:bob/market-cache-and-calendar-polish
Sep 11, 2026
Merged

fix(ui): cache marketplace images and stabilize gallery and calendar layouts#2980
bobleer merged 4 commits into
GCWing:mainfrom
bobleer:bob/market-cache-and-calendar-polish

Conversation

@bobleer

@bobleer bobleer commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Marketplace visits now restore the last public catalog immediately and reuse a persistent image cache across desktop restarts. Catalog refreshes discover new content-hashed image URLs; a new hash or resolution downloads once, while a cached unchanged image needs no image request. Cards remain mounted during refresh, and reordered cards move through a short, interruptible transition that respects reduced-motion and keyboard interaction.

This PR also includes the preceding calendar fix as a separate commit: calendar cells can shrink after the sidebar/window changes size without overlapping.

Type and Areas

Type: Bug fix / UI/UX

Areas: Desktop/Tauri, integration services, Web UI, product operation registry

Motivation / Impact

Reopening either marketplace previously exposed image loading and abrupt catalog reordering. The shared cache stores only public, content-addressed marketplace WebP images, with bounded disk and memory usage. Public catalog snapshots preserve initial ordering, remain visible on refresh errors, and isolate MiniApp catalogs by device. Small catalog requests still run to discover updates; cached image hits perform no network request.

Verification

  • pnpm run check:web — passed (types, Appearance contracts, theme color and visual governance).
  • pnpm run lint:web — passed (one pre-existing warning in tiptapMarkdown.ts).
  • pnpm run motion:audit — completed; reviewed the new reorder/reveal motion and reduced-motion behavior.
  • Focused Vitest run — 49 tests passed across MarketCatalogCache, MarketImageCache, MarketImage, MarketList, AppearanceMarketDialog, MiniAppLibraryItems, MiniAppCard presentation, and the existing marketplace API/image helpers.
  • cargo test --locked -p openbitfun-services-integrations --no-default-features --features miniapp-market --lib market_image::tests — 5 passed, including reuse by a new cache instance with the server offline.
  • cargo check --locked -p openbitfun-desktop — passed.
  • cargo test --locked -p openbitfun-product-domains --no-default-features remote_surface — 19 passed.
  • cargo test --locked -p openbitfun-desktop --lib remote_workspace_policy — 9 passed.
  • pnpm run capabilities:check, pnpm run check:core-boundaries, and git diff --check — passed. After upstream synchronization, regenerated registries and reran capability, boundary and remote-surface checks successfully.

Reviewer Notes

Image IO lives in integration services and is exposed by a small controller-local desktop adapter. The cache accepts only configured marketplace origins, hashed image paths and supported variants, sends no credentials, and follows no redirects. Existing public image URLs remain the fallback for hosts without the optional cache command.

Remote validation is limited to device-scoped catalog and controller-local routing contracts. Remote workspace, remote control, Peer Device Mode and Detached Dispatch were not exercised end to end. No native visual-fidelity claim is made from DOM tests. Existing user records are unchanged; absent, invalid or unsupported cache records fall back to normal loading.

Checklist

  • This PR is focused and does not include secrets, temporary prompts, generated scratch files, or unrelated artifacts.
  • Relevant verification is recorded above, or skipped checks are explained.
  • User-facing strings, docs, and locales are updated where applicable (no new user-facing copy).

…d-calendar-polish

# Conflicts:
#	docs/interactive-capabilities/technical/tauri-command-map.json
#	src/crates/contracts/product-domains/src/generated/remote-surface-registry.json
#	src/web-ui/src/infrastructure/api/generated/remoteSurface.ts
@bobleer
bobleer merged commit 32b3b21 into GCWing:main Sep 11, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant