Promote RecordCard out of the microfrontends and into shared/ui — one Card, many consumers

Why Care?

In a federated UI, the most expensive mistake is to let each microfrontend invent its own visual primitives. You end up with six subtly-different Card components, six date-format helpers, six button-press affordances — and the shell composes them into something that looks like a designed app but actually isn't one.
The fix is unsexy and load-bearing: move the primitives into the shared package early, before the divergence has time to set in. RecordCard is the first concrete example of that discipline. From here on, any UI element likely to show up in more than one microfrontend gets considered for packages/ui before being authored inside an app.
A bonus: ErrorBoundary landed in the same commit. Federated remotes can fail in interesting ways at runtime (the remote isn't reachable, the manifest shifted under you, a shared dep version drifted). A shared ErrorBoundary gives every microfrontend a consistent failure UX without each one writing its own.

What's New?

  • packages/ui/src/RecordCard.tsx — promoted from app-local Card components into the shared package. Single source of truth for how a "record" presents in the workshop.
  • packages/ui/src/ErrorBoundary.tsx — first shared error-handling surface; every MFE wraps its mount in it.
  • packages/ui/src/index.ts — explicit barrel for what's exported from the package.
  • The microfrontend-local Card components stayed in their dists for comparison this commit; they were removed in a later cleanup.
ℹ️
Backfilled from git history on 2026-05-12. Commit: c627d5b.