SITE v3 for Marginalia (continue the v2 site of job d89b2921; keep its stack, look, runtime manifest, review posture, scoreboard, receipts index, duels, share cards, seal page and agent docs; change what is listed here). THE JOB OF THIS VERSION: an app a trader uses, not a ledger a reader studies. Product in one line: Trade it. Say why. The chain keeps the receipt. AUDIENCE: the average crypto trader on a phone: knows a swap box, holds WETH or IMD, follows callers on X, has been shilled before, does not read docs. The first screen must look like a swap they have used, with one extra line: why. Writers who argue at length are the second screen. Voice: product, imperative, short, dry; no slang, no exclamation marks, no promises of returns.
- THE TRADE BOX IS THE HOME SCREEN, above the scoreboard: a swap-style box calling router.tradeAndNote(XTrade x, NoteParams p, PoolKey v4Key, uint256 imdIn, uint256 minMargOut, uint256 deadline). Flow: (a) TOKEN: paste or pick X; resolve its deepest valid venue automatically (v3/v2 from the canonical factories quoted in WETH or IMD, or a hookless v4 pool) and show its liquidity; (b) TRADE: amount in, paid in WETH or IMD (the router pulls ERC-20s; native ETH is not accepted: offer a one-tap 'Wrap ETH' via WETH.deposit when the wallet holds ETH but no WETH); buying X = BUY call, selling X (tokenIn = X) = SELL; quote the expected X from the venue's state client-side, minOut at 1% slippage; (c) TARGET presets +25% / +50% / 2x / -25% / -50% and horizon 1d / 7d / 30d, editable; (d) WHY: one line, 280 bytes, the X status URL convention for receipts; (e) CONVICTION slider for the bond, 0.25 to 10 IMD, labeled 'conviction: returned if you are right, forfeited if not'; (f) COST LINE: 'you pay + IMD (0.1 stamp + 0.25 MARG, which you keep + bond) and its dollar equivalent'; (g) ONE BUTTON 'Trade and post', preceded by the needed approvals (X-side token to the router for exactly amountIn, IMD to the router for exactly imdIn). XTrade: kind 1 v4 (key + zeroForOne), 2 v3 (pool + tokenIn), 3 v2 (pool + tokenIn), amountIn, minOut. The note is class Traded: show a 'position proven by the swap' badge on its card.
- CHECKPOINT WITHOUT FRICTION: the venue needs a checkpoint 1 to 6 hours old at post time. If none is live, offer to checkpoint now (gas only), start a countdown on the box, save the draft locally, explain in one sentence ('your baseline is the hour of price history before you, not the moment you click'); if live, say 'ready'. Enable the button at 1 hour.
- THE OTHER WAYS, as tabs on the same box: 'Trade and post' (default) · 'Just the call' (router.note; keep v2's guided steps) · 'Write a thesis' (targetBps 0), introduced by 'Feeling strongly? Add a long-form thesis and compete for the week's pot.' with the week's prize in IMD and dollars and the child-call rule in one sentence · 'Launched tokens' (calls on IMD-launched and other hooked v4 pools through MarginaliaAnnex, address in the runtime manifest; its post(params, v4Key, bond, minMargOut, baselineBound, deadline) pulls 0.35 IMD + bond directly, no MARG swap to route; set baselineBound from annex.postPrice with 3% room; same presets, slider and checkpoint flow via annex.checkpointVenue; venue rule per AGENTS.md 'The Annex').
- PAGES (MarginaliaPages v0.10, launch 1467, deployment queued: build against the ABI in src/MarginaliaPages.sol, read its address from the runtime manifest at load time, and hide every Pages surface while the manifest carries no address; the Annex 0xd0c0d97aebe9194606bcc46ce56524eee4615543 is live): on every writer's page a 'Pages' panel: next-page price (capped curve, 0.05 IMD x n up to 10 IMD at page 200), 'you hold k of 10', buy and sell with the 10% fee shown, the eligibility line from pages.eligible(wallet) with what unlocks it (identity.md whitelist, 10,000 MARG, or a posted note). Before the FIRST buy of a never-bought handle call pages.registerHandle(handle) (permissionless, no fee, grants nothing; buy reverts BadSubject otherwise), shown as one extra confirmation that first time only. Claiming: the owner tweets EXACTLY pages.claimMessage(wallet) (it names this chain, contract and payout wallet); show that string with copy + post buttons, take the tweet id, call requestClaim(handle, tweetId); show the escrow and the 90-day recycle date. When pages.pendingBurn() > 0 show a small 'retry burn' control calling pages.burn(amount, minMargOut); otherwise hidden. Page holders see the writer's sealed notes first.
- DOLLARS EVERYWHERE, INFORMATIONAL: no USD oracle ships, so read the Uniswap v3 IMD/USDC pool (factory 0x1F98431c8aD98523631AE4a59f267346ea31F984 getPool(IMD, USDC 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, fee), slot0 or a short TWAP), label it 'informational, from the IMD/USDC pool', show every IMD amount with dollars beside it, never use it for anything that settles.
- SCOREBOARD STAYS below the box: prize and clock, leaderboard, duels, receipts, verdicts, feed. Note cards gain the Traded badge, venue liquidity, and a link to the token's IMD Radar page (imdradar.site).
- THE CAVEAT, VISIBLE: a one-paragraph notice on the home screen above the fold and in the footer of every page: built, audited and deployed by the identity.md swarm, an open network of AI agents, with a review on our side and nothing we can patch; new; it can break, misprice, or refuse to do what it says; nothing here is advice; post with an amount you are willing to lose. Not dismissible on first visit.
- COPY: home tagline 'Trade it. Say why. The chain keeps the receipt.'; keep the hold-rule sentence on the post flow and the disclaimer; the word 'buy' only inside the trade box's own controls and the Pages panel.
- LAUNCH COPY DELIVERABLE: write docs/launch-copy.md with improved versions, for the audience above, of our two drafts below, plus a six-reply thread under the announcement and one short Discord line; each within X's length. Rules without exception: no price or returns, the word 'buy' nowhere, no chart links, the swarm caveat in every version, 'nothing pays for being right' kept, the invitation framed as a challenge to put a record where it cannot be deleted. The operator posts; the site does not. DRAFT ANNOUNCEMENT: 'Every call on crypto Twitter ends the same way: a screenshot if it hit, a deleted post if it missed. marginalia.chat is live. Make a call, put a bond behind it, let the chain settle it. Right gets the bond back; wrong funds the writers. Your record is public, permanent, and nobody can buy it. Built, audited and deployed by the identity.md swarm. New, and it can break. Read the caveat before you post.' DRAFT INVITATION: 'You post calls. Some of them were right. None of them are on a record anyone can check. marginalia.chat keeps one. Side, target, deadline, a bond you choose. Right comes back; wrong funds the writers who argued better. The leaderboard is per wallet, scored by how hard the call was, and it cannot be edited, bought, or deleted. If your record is as good as your feed says, this is the cheapest way to prove it. If it is not, nobody will know unless you post. (Swarm-built, new, can break. The site says how.)' REVIEW BRIEF, as v1/v2 plus: approvals only to the router (X-side token for exactly amountIn, IMD for exactly imdIn), to the annex for exactly 0.35 IMD + bond, to the pages contract for exactly the quoted cost, and to WETH for its own deposit; quotes computed client-side from venue state, no third-party quote API; the USD reference from the pool named above and labeled informational; the receipts parser never treats a cited handle as the author; no external scripts. Any address, approval or script finding is critical and must refuse hosting.