Remove the client-side simulated vault and all its wiring (simVault.ts,
AppBoard/DepositPanel/PositionPanel/useCampaigns sim paths, the balance/
faucet changes) and restore the original local dev addresses. The only
change retained over d6e38d2 is the $500 minimum-deposit rule: the
MIN_DEPOSIT/BelowMinimum contract enforcement plus the "Min. deposit $500"
frontend validation. Working tree now equals d6e38d2 + that feature.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove the pre-funded wallet ($25k hUSD) and the faucet step from the
client-side vault so the showcase reads like a real, already-funded mainnet
wallet: no balance readout, no MAX, no "Get hUSD". The flow is simply
approve -> deposit. Only the vault allowance is tracked (a single approve
covers later deposits). Portfolio swaps the "Wallet balance" tile for
"Rewards claimed". Storage key bumped to v2 so any stale $25k state from a
prior visit is discarded.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
When no on-chain vault is reachable (the production/showcase build), route
faucet -> approve -> deposit -> withdraw/claim through a client-side vault
(lib/simVault) instead of firing an on-chain tx that has no contract to hit.
This removes the ContractFunctionExecutionError and makes the desk behave
exactly like the live app: a funded wallet, realistic confirm delays,
positions that show in the portfolio, campaign depth that grows and rewards
that accrue over time (tuned to the displayed APRs). No funds move.
Wired through AppBoard (deposit/claim/withdraw), DepositPanel and
PositionPanel, plus useCampaigns/usePositions/usePosition so TVL, LP counts
and positions all reflect the simulated deposits. On-chain path (dev/anvil,
or any future real deployment) is unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contract: add MIN_DEPOSIT (500e6) + BelowMinimum error, checked against the
combined credit (stable leg + valued stock leg) in _deposit, so it covers
single- and dual-sided deposits. Tests updated (sub-$500 fixtures raised,
fuzz bounds lifted) plus three new cases; 33/33 pass. ABI regenerated.
Frontend: pre-submit validation in AppBoard and DepositPanel — button
disables with a "Min. deposit $500" label and an inline error below the
minimum, so users get feedback before signing. Shared MIN_DEPOSIT_USD /
MIN_DEPOSIT_UNITS constants. Also refreshes the local anvil addresses in the
dev deployment block (dev-only; prod uses the seed).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Translate every Japanese kana/kanji glyph on the page to Simplified
Chinese: side rail, CyberGrid lexicon rail, folios, footer, scramble pool,
partner header (e.g. 流動性デスク -> 流动性交易台, katakana terms -> 哈希/流动性/深度/…).
- Remove em-dashes from the remaining code comments.
- Tighten two thesis lines that read as AI filler.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Each market panel gains a full-width depth-fill meter (depth vs target),
an expanded stat column (spread est, fee/reward/net APR alongside the
existing figures) and a micro-stat stack under the health dial (target,
fill %, ends-in, boost). Fills the previously empty card interior.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Remove the drop-shadow blur from SlippageCurve/DepthHistory/HealthRadial so
the segmented meter, depth trace and health dial render crisp.
- CyberGrid: add a dotted survey field, two targeting reticles, a katakana
lexicon rail, corner brackets and a coordinate header alongside the existing
survey lines and decoding labels.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- SlippageCurve: segmented depth-charge meter with a volt redline at the 2%
slippage limit, replacing the flat bar.
- DepthHistory: area trace with survey grid, peak marker and a pulsing live
'now' node.
- HealthRadial: ticked radial dial with reticle crosshairs instead of the
plain arc.
- Faucet/action copy: "Get test hUSD" -> "Get hUSD", "Get test {SYM}" ->
"Get {SYM}", "test hUSD minted" -> "hUSD minted".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
DepthChart maps the mouse to SVG space with getBoundingClientRect, which
assumes the drawing fills the container. The viewBox (960x380) is narrower
than the container, so preserveAspectRatio centers it with ~127px of side
padding and the crosshair drifted ~100px from the cursor near the edges.
Map through the SVG's own getScreenCTM().inverse() so it stays exact
regardless of letterboxing.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The public build sets ACTIVE_CHAIN_ID to Arbitrum Sepolia (421614), which has
no deployment and isn't in the prod wagmi config, so useReadContracts never
resolved -> Campaigns/Markets/Positions hung on skeletons forever.
Add CAMPAIGN_SEED (mirrors script/Deploy.s.sol's launch set) and HAS_LIVE_VAULT.
When no vault is reachable, useCampaigns returns the seeded launch set instead
of reading on-chain, and the position/balance reads are disabled so they can't
hang against an unreachable chain. Live anvil/dev path is unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Switch wallet connect default to Robinhood Chain mainnet (4663); keep testnet
and anvil selectable. Header chip and hero folio now read Mainnet.
- New CyberGrid fx layer: survey lines, cross marks, corner locators, vertical
kanji + scramble glyphs across Markets/Campaigns/Positions/Partners/AppBoard,
echoing the hero's cyberpunk instrumentation.
- New DepthCanyon: 2D isometric voxel crater hero, single contained core glow
(no bleed onto copy).
- Real per-token market data via Dexscreener /tokens/{mint} on canonical xStock
mints; realistic prices/volume/liquidity.
- Remove VAULT address line from footer.
- Deploy target -> hoodquidity.com.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>