Skip to content

Repository files navigation

Perps Observatory

Cross-exchange analytics for Solana perpetuals (Phoenix and Jupiter):

  • Overview — side-by-side volume and open-interest comparison
  • /phoenix, /jupiter — per-exchange stats, OI/volume charts, markets table
  • /discover — surfaced wallets: volume/PnL leaderboards, liquidation feed, whale fills, most active takers, largest open positions, PnL leaders
  • /trader/[pubkey] — cross-platform trader profile with inferred traits (bot vs human, likely timezone, trading style, size tier)

Data is queried live from read-only Postgres replicas; heavy aggregates are cached server-side.

Local development

cp .env.example .env.local   # fill in both connection strings
npm install
npm run dev

Environment variables

Server-only (no NEXT_PUBLIC_ prefix — never shipped to the client bundle; the browser only ever talks to the /api/* routes):

  • DATABASE_URL — read-only Postgres connection string for the Phoenix perps database (RDS Proxy; TLS with rejectUnauthorized: false)
  • JUPITER_DATABASE_URL — read-only Postgres connection string for the Jupiter perps database (Aurora reader endpoint)

Deploying to Vercel

  1. Import the repo as a Next.js project (auto-detected, no build settings).
  2. Under Settings → Environment Variables, add DATABASE_URL and JUPITER_DATABASE_URL for Production + Preview. Do not prefix them with NEXT_PUBLIC_.
  3. Deploy. API routes run as serverless functions; DB pools are capped at 3 connections per function instance. Some Jupiter routes declare maxDuration = 300 for the heavy open-interest reconstruction, which requires a plan/function config that allows 300s execution.

About

Cross-exchange analytics for Solana perpetuals: Phoenix + Jupiter dashboards, wallet discovery, and trader profiling

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages