import { useEffect, useState } from "react"; import type { StateSnapshot } from "./types"; import { subscribeState } from "./api"; import { StatsBar } from "./components/StatsBar"; import { PriceMatrix } from "./components/PriceMatrix"; import { OpportunityFeed } from "./components/OpportunityFeed"; import { PnlChart } from "./components/PnlChart"; import { TradeLog } from "./components/TradeLog"; import { Wallets } from "./components/Wallets"; import { Controls } from "./components/Controls"; import { ConfigPanel } from "./components/ConfigPanel"; export function App(): JSX.Element { const [snapshot, setSnapshot] = useState(null); const [connected, setConnected] = useState(false); useEffect(() => { return subscribeState(setSnapshot, setConnected); }, []); return (

ArbPulse

Real-time cross-exchange BTC arbitrage engine · Kraken · Bybit · OKX · Binance

BTC/USDT · WebSocket feeds · inventory model

{!snapshot ? (
Connecting to engine…
) : (
)}
); }