Frontend Overview

The sBTC Escrow frontend is a production-ready React application for creating and managing escrows through a web interface.

Tech Stack

TechnologyPurpose
React 18UI framework
React Router v6Client-side routing
ViteBuild tooling (SWC compiler)
TypeScriptType safety
Tailwind CSSStyling
Radix UIAccessible component primitives
Framer MotionAnimations
Stacks ConnectWallet integration (Leather/Xverse)
TanStack React QueryData fetching + caching
Supabase JSRealtime subscriptions
React Hook FormForm management
ZodSchema validation
RechartsAnalytics charts

Pages & Routes

RoutePageDescription
/LandingMarketing page with features, stats, CTA
/dashboardDashboardOverview with recent escrows, stats cards
/createCreateEscrowEscrow creation form
/escrowsMyEscrowsList of user's escrows with filtering
/escrow/:idEscrowDetailSingle escrow detail with actions
/activityActivityTransaction history feed
/analyticsAnalyticsCharts and platform statistics
/settingsSettingsUser preferences
/adminAdminDashboardAdmin overview (guarded)
/admin/disputesDisputeQueueDispute management (guarded)
/admin/controlsContractControlsContract settings (guarded)
/docs/*DocumentationThis documentation

Project Structure

frontend/src/
├─ App.tsx — Router + providers
├─ main.tsx — Entry point
├─ index.css — Global styles + CSS variables
├─ components/
  ├─ layout/ — AppLayout, Sidebar, Header, MobileNav
  ├─ shared/ — Logo, StatusBadge, WalletButton
  └─ ui/ — Radix primitives (shadcn/ui)
├─ contexts/
  ├─ ThemeContext.tsx — Dark/light mode
  └─ WalletContext.tsx — Stacks wallet state
├─ hooks/
  ├─ use-escrow.ts — Escrow data hooks
  ├─ use-admin.ts — Admin permission check
  └─ use-block-height.ts — Current block height
├─ lib/
  ├─ escrow-service.ts — Contract interaction helpers
  ├─ admin-service.ts — Admin operations
  ├─ post-conditions.ts — Post-condition builders
  ├─ stacks-config.ts — Network configuration
  ├─ supabase.ts — Supabase client
  └─ types.ts — Shared type definitions
└─ pages/
  ├─ Landing.tsx
  ├─ Dashboard.tsx
  ├─ CreateEscrow.tsx
  └─

Next Steps