PagesSpec §3.3
Trade panel
This is the core of the product. It should look like a normal swap box.
┌─────────────────────────────────┐
│ [ Buy ] [ Sell ] │
│ │
│ You pay │
│ [ 0.00 ] [ SOL ▾ ] │
│ Balance: 4.21 SOL [Max] │
│ │
│ You receive (estimated) │
│ [ 1,204,331 ] $TOKEN │
│ │
│ Price impact 0.8% │
│ Fee 1% │
│ Route Direct ▸ │
│ Slippage 1% ⚙ │
│ │
│ [ Buy $TOKEN ] │
└─────────────────────────────────┘The “SOL ▾” button opens a token picker with two sections:
- On this curve: the token's curve assets, marked “Direct, lowest cost”.
- Any token: all other supported tokens in the user's wallet, sorted by balance, plus search. Marked “Routed”.
- Direct (paying with a curve asset): one swap on the curve.
- Routed (paying with anything else): we swap into whichever curve asset gives the most tokens out, then buy. The route row reads “Routed via USDC ▸”. Expanding it shows each step, with the combined fee and price impact.
- If a routed path is meaningfully worse than a direct one the user could take, show a hint: “Paying with SOL directly gives ~2% more.”
BONK → USDC (Jupiter) → $TOKEN (curve)The user picks which asset to receive. Default to the curve asset that pays out the most; offer “Any token” as a routed option as well. If a curve asset's real reserve is too low to pay out the requested amount, grey it out with the reason (“Not enough USDC in the curve”).
- Wallet not connected → button reads “Connect wallet”
- Insufficient balance
- Amount exceeds what's left on the curve (the last buy before graduation): show “Only X tokens left. You'll be refunded the rest.”
- Price impact above 5%: amber warning; above 15%: red, requires confirm
- Quote expired / price moved: re-quote prompt
- Transaction pending, success (with link), failed (plain-language reason)
- Curve graduating: trading paused banner while migration runs
Transaction pending.
Success (with link).
Failed (plain-language reason).
Curve graduating: trading paused banner while migration runs.
Slippage tolerance (0.5%, 1%, 3%, custom), priority fee (Normal / Fast / Turbo).