Docs · 05
Architecture
How the interface is separated from data sources so real integrations can be added without rewriting the UI.
The web application is a Next.js App Router project. All market data enters through a single provider interface, MarketDataProvider. The live provider reads the public GeckoTerminal API; when nothing is reachable the interface renders an explicit unavailable state. A mock provider exists only for offline builds and visual testing.
Data flow
The current pipeline is:
- GeckoTerminal indexes DEX pools on Robinhood Chain, Ethereum, Base, Arbitrum and Solana from chain state.
- CerinFI fetches the top pools by 24h volume per chain, applies the quality gate, and pulls 48 hourly candles for the leading pool of each chain. Other tracked pools show a three-window trend built from their 1h, 6h and 24h volume buckets.
- Reserves, volume, swap counts, unique traders, price change and candles are mapped into the Market, Signal and Chain types and rendered unchanged.
- Snapshots are cached for five minutes at the edge. Pages are statically regenerated on that schedule, so the API is never hit per visitor.
What is derived
Cerin Signal, condition labels, depth labels and the market-depth chart are derived. The depth chart estimates resting liquidity from pool reserves using a constant-product model, which is a floor for concentrated-liquidity pools rather than an order book.
Next
Direct indexer and RPC integrations, more venues per chain and historical storage are planned for the infrastructure phase. The provider seam means none of that changes the interface.
