Skip to content

[FEAT]: Add the Escrow / Trade Status screen (lifecycle stepper)Β #321

Description

@grantfox-oss

πŸ“˜ Description

Once a trade starts, users need to see the escrow lifecycle. Add app/trades/[id]/page.tsx with a
vertical stepper reflecting the Trustless Work escrow flow:
Initiated β†’ Funded β†’ Released (with a Disputed branch). Each step shows a state
(done / current / pending) and a mock timestamp, plus the primary action for the current state.

βœ… Acceptance Criteria

  • New route app/trades/[id]/page.tsx.
  • New component frontend/components/trade/escrow-stepper.tsx (a reusable stepper).
  • Steps render with distinct visual states using tokens: completed = primary, current =
    emphasized, pending = muted-foreground, disputed = destructive.
  • A summary header (amount, counterparty via WalletBadge, contract-id placeholder).
  • A context-aware primary action button (e.g. "Fund escrow" / "Release funds" / "Open dispute")
    wired to console.log stubs.
  • Mock trade state; light + dark correct.

🌎 References

  • Escrow flow context: root README.md ("How It Works") + p2p-safe-swap/lib/trustless-work.ts
    (the escrow steps this UI represents: initialize β†’ fund β†’ complete β†’ dispute β†’ resolve)
  • frontend/components/ui/Button/Button.tsx, WalletBadge

πŸ“œ Additional Notes

  • UI/mock only β€” do not call the Trustless Work API in this issue.
  • Make the stepper data-driven (array of steps) so it can be reused later.

Guidelines

  • Use semantic brand tokens only β€” bg-card, text-foreground, text-muted-foreground,
    bg-primary, border-border, etc. No hardcoded hex. Reference:
    docs/guidelines/colors.md.
  • Typography is Satoshi (already global) β€” no font setup needed.
  • Light + dark: build both. Test with the theme toggle (bottom-right) β€” every screen must
    look right in both themes.
  • Reuse existing components before building new ones: Button
    (frontend/components/ui/Button), WalletBadge, TransactionList, TabBar, SearchBar,
    Reveal (frontend/components/motion/reveal.tsx).
  • Motion: wrap screen content / lists in <Reveal> for a subtle entrance; it already
    honors prefers-reduced-motion.
  • Layout: mobile-first. Match existing screens β€” centered column, max-w-md, bg-background.
  • Data: mock data only (no backend). Keep mock arrays in the page file or a local mock.ts.
  • Copy: match the language of the surrounding screens (currently Spanish labels, e.g.
    "Comprar", "Transacciones"). Don't introduce a new convention.
  • Accessibility: semantic elements, aria-labels, keyboard-focusable controls.
  • Definition of done: npm run lint + npx tsc --noEmit clean; screen renders at its route
    in both themes; no changes to files outside the issue's declared scope.

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardOfficial Campaign | FWC26Campaign: Official Campaign | FWC26

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions