Data and realtime model
REST snapshots establish truth; WebSocket and SSE notify clients that truth changed.
Direct RPC mode
The browser scans canonical factory events from each deployment's start block, reads current contract getters, caches derived launch state, and optionally listens to RPC WebSocket logs. HTTP reconciliation remains necessary for first load, providers without WebSocket, reconnect gaps, and background-tab recovery.
Optional API mode
The reference backend uses one process and one JSON state file per network:
HTTP RPC catch-up + optional chain WebSocket logs
↓
D17 event reducer
↓
network-specific JSON state
↓
REST + app WS + SSEREST is authoritative for a complete client snapshot. The application WebSocket sends an initial summary and later activity notifications. It is not a durable replay stream. Clients must fetch REST on first render, after reconnect, and when a hidden tab becomes visible.
Low-frequency safety refreshes in hosted mode call the indexed API, not Ethereum RPC. They cover time-derived phase boundaries and missed notifications without making the UI wait for the next WebSocket event.
Event scope
The reference indexer ingests D17 lifecycle and liquidity events. It excludes Swap, Sync, ERC-20 Transfer, ERC-20 Approval, and pair watching by default. D17's OfficialPoolCreated, LateVaultSettlementClaimed, and LateLiquidityAdded remain available because they are protocol lifecycle evidence.
Network isolation
Sepolia and mainnet use separate process profiles, ports, manifests, state files, and logo directories. Existing state with the wrong chain ID fails closed. Clients must validate meta.chainId on every REST response.