Landing (/)
Hero strip + live market previews + feature cards. Restrained framer-motion entrances (fadeUp / stagger) calibrated to Sui’s brand voice on the DeepBook product page.
Markets (/markets)
One grid for every market kind. BTC strikes by duration + binary event markets. Limitless-style category tabs (URL-backed ?cat), sidebar filters, sort, and header-search ?q= filtering across all kinds.
- Crypto tab opens with the
UpDownStripquick cards (15 Min / Hourly / Daily). Baseline = Pyth price at window open rounded to $1; Up/Down buttons deep-link to the market page with strike + side preselected. - Events tab lists scaffolded binary markets from
/v1/binary-markets. - Settled / expired markets are hidden here (filtered in the
allMarketsmemo); reachable from Positions / Profile. - Parallel testnet oracles sharing one (asset, expiry) are deduped to the freshest book (
lastUpdateMshour-bucket,fillCounttiebreak).
MarketDetail (/markets/:oracleId)
Limitless-style PriceLineChart by default (Pyth history, green above / red below the selected strike, dashed STRIKE rule, 15m/1H/1D/1W ranges) with the TradingView candles widget one toggle away. Live strike book (WS quotes), BuyPanel / CustomStrike / RangeMint, expiry countdown.
Reads ?strike= / ?side= (from Up/Down cards) to prefill + auto-select. Trading is blocked once the oracle expires (BuyPanel short-circuits + shows a banner).
EventMarketDetail (/event-markets/:id)
Scaffolded binary market page:
- Trade on DeepBook panel. Buy/Sell × YES/NO market orders via
pool::swap_exact_quantitywith a zero-DEEP coin. Live estimate + mid price; 1% slippage floor. Renders only when registry entry has pool ids; “order book pending” otherwise. - Mint pair panel.
$XDUSDC → equal YES + NO. - Burn pair panel. Redeem the matching DUSDC pre-resolution.
- Redeem panel. Winning leg → DUSDC, post-resolution.
- Live order book card. Limitless layout (asks / mid+spread / bids, cumulative notional, depth bars), YES/NO toggle, 5s refresh.
OOPanel. Propose / dispute / finalize forms when the registry hasooMarketLinkId.
DarkPool (/dark-pool)
Vault UI. Lists open vaults (reads /v1/vaults), shows TVL + label + state. Deposit privately opens a confirm sheet. Withdraw post-settlement redeems the receipt for the pro-rata share.
Positions (/positions)
Two sections:
- Predict positions marked to live
fairPerTokenviauseStrikeQuote(entry, value, unrealized P&L per row). - Event-market holdings read straight from wallet
Coin<YES>/Coin<NO>balances per registry market viagetBalance(15s refetch), marked to pool mid ($1 once resolved). Losing-side coins of resolved markets are hidden. No cost basis since V3 fills aren’t indexed.
Agents (/agents)
Trader-card surface:
- Hero strip. Agents · trades settled · combined realized P&L · top agent.
- Fleet cards. Live pulse dot + realized-P&L hero + equity sparkline + win rate + recent settlements.
- Leaderboard. Ranked by computed realized P&L (the on-chain TradeAgent PnL stays $0 until facade attribution ships). Every row navigates to
/agents/:agentId. - Create agent wizard. One-PTB BalanceManager + TradeCap + (optional) deposit + register. Groq model selector + downloadable mandate.
AgentDetail (/agents/:agentId)
Per-agent surface:
- Performance hero. 3xl realized P&L + full
PortfolioChartequity curve. - Open positions + scrollable settlement history.
- Live runtime card. Matched off configured
/statusURLs (pulse + tick/mint/skip/error counters + 30-line action feed). - Owner controls. Reclaim + Pause/Resume (rendered when connected signer matches owner).
- Identity card. TradeAgent, owner, BalanceManager (live DUSDC balance), TradeCap.
- Custody model explainer.
Profile (/profile)
Limitless-style portfolio dashboard:
- Live Portfolio Value headline + unrealized P&L (mark-to-market via
usePositionsValue). lightweight-chartsrealized-P&L baseline chart with 1D/1W/1M/All tabs.- Stat tiles. Available · Positions Value · To Win · Unrealized P&L · Realized P&L.
- Recent activity. Fills (Buy) merged with redemptions (Redeem/Sell) with Suiscan links.
- PredictManager controls. Create / Deposit / Withdraw (gated on connected signer == profile address).
- Send DUSDC card (recipient + amount + MAX). Only way for zkLogin users to move DUSDC out of the app.
AuthCallback (/auth/callback)
Enoki zkLogin redirect handler. Parses the OAuth code, completes the flow, redirects to /.