diff --git a/AGENTS.md b/AGENTS.md index 926f919..422b287 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -43,9 +43,12 @@ session with **no other memory of this project**. So: → `src/hooks/useTradeAttestations.ts`; reputation UI in `TradeReputationCard` - `35000–35012` role profiles (skater/filmer/coach/…) · `35006` crews · `30003` spot collections - `24899` spot chat · `2259` spot status · `32671` Sasquatch Pro · `7103` event updates -- **Marketplace**: `GearSwapPage` + `MarketplaceItemCard`. Buyer/seller trade - attestations build mutual, WoT-weighted reputation. **No payments are - implemented** — "Buy" is intentionally absent; only Contact/Offer/Trade. +- **Marketplace**: `GearSwapPage` (grid) + `MarketplaceItemCard` and a listing + detail page at **`/listing/:pubkey/:identifier`**. Trade/escrow actions live in + the shared **`ListingTradeActions`** (used by BOTH the card and the detail page + — one implementation). Buyer/seller attestations build mutual, WoT-weighted + reputation. **No payments are implemented** — "Buy" is intentionally absent; + buyers contact the seller and settle off-app. - **Cashu escrow** (marketplace): time-locked **P2PK** (lock to seller + buyer refund key + locktime) — see **`ESCROW.md`** and `src/lib/cashuEscrow.ts` (unit-tested). Protocol: `cashu_token` on the `31872`; each user advertises a diff --git a/src/components/ListingTradeActions.tsx b/src/components/ListingTradeActions.tsx index a68f480..ed38732 100644 --- a/src/components/ListingTradeActions.tsx +++ b/src/components/ListingTradeActions.tsx @@ -13,6 +13,7 @@ import { } from '@/hooks/useTradeAttestations'; import { useCashuEscrow } from '@/hooks/wallet/useCashuEscrow'; import { EscrowRequestDialog } from '@/components/EscrowRequestDialog'; +import { EscrowPanel } from '@/components/EscrowPanel'; import { parseEscrowToken } from '@/lib/cashuEscrow'; import { MessageCircle, Loader2, CheckCircle, Lock, Send, RotateCcw } from 'lucide-react'; import type { MarketplaceItem } from '@/lib/types'; @@ -132,6 +133,9 @@ export function ListingTradeActions({ item }: { item: MarketplaceItem }) { return (
+ {filtered.length} of {data?.length ?? 0} mints +
+ )} + {isLoading && (