Skip to content

Feat: integrate the MessagePassingBridge #628

@L03TJ3

Description

@L03TJ3

1) Summary

GoodProtocolUI currently exposes the MicroBridge flow at /microbridge but this only suppports fuse <> celo.
We need to add a new coexisting bridge page named GoodBridge at /goodbridge, built with the Message Passing Bridge (MPB) UI/controller patterns from GoodDollar’s shared design/sdk packages. The new page must follow existing GoodProtocolUI layout conventions (PageLayout, FAQ area, wallet gating) and must be feature-flagged for controlled rollout. Minipay users must not see GoodBridge in navigation. This bounty improves bridge UX consistency while keeping MicroBridge intact.

2) Desired behavior

  • A new route /goodbridge exists and renders a GoodBridge page; /microbridge remains unchanged and functional.
  • The GoodBridge page follows current bridge page structure: PageLayout + FAQ panel + wallet-gated content.
  • When wallet is disconnected, users see the same style of “connect wallet” placeholder behavior used in current bridge pages.
  • When wallet is connected, page mounts MPB controller/UI from @gooddollar/good-design (expected to be available as root export in latest version).
  • Bridge chain/provider/route options are driven by MPB flow and fee API behavior (no custom hardcoded route matrix in GoodProtocolUI).
  • Proper user-facing error feedback is shown for RPC/bridge failures (reusing MPB default error handling patterns where possible).
  • GoodBridge visibility is controlled by feature flag goodBridgeEnabled and hidden from minipay navigation.
  • No regression to existing MicroBridge navigation, route, or behavior.

3) Scope

In scope

  • Add a new GoodBridge page component under src/pages/gd.
  • Add lazy route registration for /goodbridge.
  • Add sidebar entry for GoodBridge under Bridges section.
  • Wire feature-flag behavior for goodBridgeEnabled in relevant UI surfaces.
  • Enforce minipay navigation exclusion for GoodBridge.
  • Reuse existing layout and wallet-gating patterns from current MicroBridge page.
  • Keep implementation aligned with existing good-design/sdk-v2 MPB flow behavior.
  • Update sdk-v2 and good-design dependencies to latest deployed version.

Out of scope

  • Replacing or removing existing /microbridge flow.
  • Final GoodBridge FAQ content authoring (copy will be provided later, just make sure PageLayout is used properly in line with the other pages).

4) Starting points

  • src/pages/gd/MicroBridge/index.tsx — reference for current bridge page composition, SwitchChainModal, and wallet placeholder gating.

  • src/routes.tsx — add lazy import + route for /goodbridge.

  • src/components/SideBar.tsx — add GoodBridge nav item under Bridges, with minipay + feature-flag visibility logic.

  • src/hooks/useFeaturesEnabled.tsx — add/use goodBridgeEnabled in feature config and consumer checks.

  • src/components/Layout/PageLayout.tsx — shared layout contract for page title + FAQ placement.

  • src/components/Faq/copies.tsx — prepare bridge FAQ integration point for future GoodBridge copy updates.

    (GoodWeb3-Mono reference): find in https://github.com/GoodDollar/GoodWeb3-Mono

  • packages/good-design/src/apps/bridge/mpbridge/MPBBridgeController.tsx (GoodWeb3-Mono reference) — target controller behavior.

  • packages/sdk-v2/src/sdk/mpbridge/* (GoodWeb3-Mono reference) — source of truth for bridge fees/routes/validation and flow states.

  • See the demo story example of how it can be integrated in: https://github.com/GoodDollar/GoodWeb3-Mono/blob/master/packages/good-design/src/stories/apps/bridge/MicroBridgeController.stories.tsx
    The demo should not by default be taken as is. make sure it fits within the existing structure of GoodProtocolUI and the behavior from the demo make sense. eg. do we need switchchainModal? how is it handled in other places in ProtocolUI?

5) DoD + How to test

DoD

  • /goodbridge route is implemented and accessible in GoodProtocolUI.
  • New GoodBridge page is added and follows PageLayout + FAQ side panel pattern.
  • Wallet-disconnected state shows connect-wallet placeholder; connected state mounts MPB controller.
  • Sidebar includes GoodBridge entry under Bridges with goodBridgeEnabled gating.
  • GoodBridge sidebar entry is hidden for minipay users.
  • /microbridge flow remains intact (no behavior regression).
  • RPC/bridge failures present actionable user feedback (no silent failures).
  • yarn lint and yarn build pass.
  • Properly test on mobile. If there are changes or fixes needed in the UI components, please ask for help.
  • PR includes desktop + mobile screenshots, + a demo video for the full flow. Ping maintainers on telegram or on github to request tokens to test

How to test

# from GoodProtocolUI repo

yarn install

yarn lint
yarn build

yarn start

Manual QA:

  1. Open /goodbridge disconnected: verify placeholder.
  2. Connect wallet: verify MPB UI loads and can select chain/provider.
  3. Verify available routes adapt based on fee availability (no hardcoded mismatch).
  4. Trigger a bridge attempt and verify pending/success/error UX states.
  5. Verify /microbridge still behaves as before.
  6. Verify GoodBridge nav visibility toggles correctly for goodBridgeEnabled and remains hidden in minipay.

Metadata

Metadata

Assignees

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions