X1.NinjaX1.Ninja

Release Notes

Changelog and version history for X1.Ninja Screener

v0.9.9Apr 1, 2026
  • Feature
    Shadow Feed — live trade terminal

    New real-time trade feed at /terminal showing every XDEX swap as it happens. Features a cypherpunk-styled interface with buy/sell color coding, whale alerts (>$25), top trading pairs, active wallet rankings, and live buy/sell volume ratio — all derived from the Geyser stream with zero additional RPC load.

  • Improvement
    Upgraded to dedicated RPC infrastructure

    All backend scripts and the web server now use a private RPC node as the primary endpoint, eliminating rate-limit failures that were causing empty holder data and stale prices during high-traffic periods.

  • Fix
    Fixed bubble maps and holder data

    Holder queries were returning empty for every token because the web server was hitting the rate-limited public RPC. Switching to the private validator RPC restored holder data, bubble maps, and safety scores across all 830+ pools.

  • Feature
    Global SSE trade stream

    The /api/stream/trades endpoint now supports a global feed (pool=all) that streams every trade across all pools. Powers the Shadow Feed with no per-pool subscription needed.

v0.9.8Mar 31, 2026
  • Fix
    Fixed real-time price updates for 527 pools

    The Geyser consumer assumed on-chain vault ordering (token0Vault/token1Vault) matched base/quote token assignment, but XDEX doesn't guarantee this. 527 of 830 pools had swapped vault ordering, causing the Geyser pipeline to write inverted reserves and wildly wrong prices (e.g. ANAL showed $3,531 instead of $0.00004). The sync now stores explicit baseVault/quoteVault mappings, and the Geyser consumer uses role-based mapping instead of index-based.

  • Fix
    Fixed pool reserve data accuracy in batch sync

    The batch sync had the same vault ordering assumption — it assigned vault balances by index rather than by actual token mint. Reserves are now mapped by verifying each vault's on-chain mint. All 830 pool prices, liquidity, and LP data verified against on-chain within 0.03%.

  • Improvement
    Batch vault optimization — 20x faster sync

    Pool sync now pre-fetches all vault balances in batches of 100 (17 RPC calls for 830 pools) instead of 830 individual calls. Combined with holder count caching, sync dropped from 20+ minutes (timing out) to ~8 minutes on warm runs.

  • Fix
    Fixed candle aggregator skipping new pools

    Pools indexed after their first trades permanently had empty charts because the candle aggregator applied a 48-hour lookback window. New pools with no prior watermark now aggregate all historical swaps on their first run, so charts appear immediately.

  • Fix
    Profile logos now override on-chain metadata

    User-submitted profile images were being ignored because the API used them as a fallback only. Now the uploaded profile logo takes priority over the default IPFS mint logo.

  • Improvement
    Column headers clarified

    Screener table headers now show "Txns 24H" and "Vol 24H" instead of ambiguous "Txns" and "Vol".

v0.9.7Mar 29, 2026
  • Feature
    Geyser pipeline for instant price updates

    Prices now update directly from the validator's Geyser plugin instead of polling public RPC. Vault balance changes stream in real-time through an SSH tunnel, giving sub-second price updates with zero RPC load. This eliminates the stale data issues caused by public RPC congestion.

  • Feature
    Validator SSH tunnel infrastructure

    Persistent autossh tunnel to the private validator for RPC, WebSocket, and Geyser relay access. Auto-reconnects on drop, survives reboots via systemd. All ports bound to localhost only.

  • Improvement
    SEO overhaul: sitemap, robots.txt, canonical URLs

    Added a dynamic sitemap.xml with 820+ URLs (all pool pages), robots.txt with crawl rules, and fixed canonical URLs on pair pages that were incorrectly pointing all 810 pages to the homepage.

  • Fix
    Fixed stale trade display on pair pages

    Trades now refresh immediately when switching back to the tab instead of waiting up to 60 seconds. Tightened polling intervals and added refetchOnWindowFocus to both trade and pool queries.

  • Fix
    Resolved 13-hour sync outage

    The batch sync pipeline hung overnight due to X1 public RPC instability — pool sync timed out 4 times, then the price poller got stuck on an unresponsive RPC call. Killed the stuck process and the Geyser pipeline now provides resilience against future RPC outages.

v0.9.6Mar 28, 2026
  • Feature
    Near-real-time price updates

    Pool prices now update within seconds of each trade via the WebSocket pipeline, instead of waiting for the 16-22 minute batch sync cycle. Active pools show live prices on both the screener table and pair detail pages.

  • Feature
    Dynamic SEO on pair pages

    Sharing a pair link on Discord, Telegram, or Twitter now shows the token name, current price, 24h change, volume, and liquidity in the preview — instead of the generic site title.

  • Improvement
    Price freshness indicator

    The pair detail sidebar now shows "Updated X ago" with color coding: green (< 5 min), yellow (5-15 min), red (> 15 min). Auto-refreshes every 15 seconds.

  • Improvement
    Custom error and 404 pages

    Broken pages now show a styled error screen with a retry button instead of white-screening. Invalid URLs and missing pools get dedicated 404 pages with navigation back to the screener.

  • Fix
    Fixed Telegram bot crash loop

    The approval bot was stuck in a 409-conflict restart loop due to duplicate PM2 daemon processes. Cleaned up zombie daemons, added a singleton guard to prevent duplicates, and increased shutdown timeout for clean Telegram session release.

  • Fix
    Blocked API spam and tightened rate limits

    Blocked a persistent bot hammering a non-existent endpoint (/api/price/xnt) at the nginx level. Reduced API burst allowance from 60 to 20 requests.

v0.9.5Mar 26, 2026
  • Feature
    LP Pool Tool

    New tool at /lp-tool to search any token and see all its pools with prices, reserves, and liquidity. Prices for non-standard pairs (e.g. FOREST/XUNI) are derived by looking up each token's price from their own XNT or USDC pools. Includes a cross-price calculator to compute the correct rate when initializing a new pair.

  • Feature
    Cross-price calculator for new pool initialization

    Pick any two tokens and get the calculated exchange rate routed through shared intermediaries (XNT, USDC, pXNT, rXNT). Shows confidence level based on liquidity depth, with a reserve calculator that tells you exactly how much of each token to deposit.

  • Feature
    Token price lookup across all pools

    New /api/token-pools endpoint returns all pools for a token with derived USD prices — even for non-standard pairs where the pipeline shows $0. Paired token prices are looked up from their own pools in the system.

  • Fix
    Fixed x1-web crash loop (500K+ restarts)

    An orphaned Next.js process was holding port 3000, causing every PM2 restart to fail with EADDRINUSE. Added restart_delay and max_restarts to the PM2 config to prevent runaway restart loops.

  • Fix
    Top Gainers ticker loop fix

    The scrolling marquee now loops seamlessly without visible jumps or gaps at the wrap point

v0.9.4Mar 8, 2026
  • Feature
    Real-time sidebar stats on pair pages

    Price, volume, and trade counts in the sidebar now update instantly as trades stream in — no more waiting for the next poll cycle

  • Improvement
    Faster pair page data refresh (60s → 15s)

    Pool stats now refresh 4x more frequently on pair pages, keeping the sidebar in sync with live activity

  • Improvement
    Smarter trade feed polling

    When the live trade stream (SSE) is connected, redundant API polling backs off from 15s to 60s — reducing server load without affecting data freshness

  • Fix
    Fixed refetch storms on tab switch

    Switching browser tabs no longer triggers a burst of API requests across all active queries

  • Improvement
    Top Gainers ticker now derived from cached data

    The scrolling ticker no longer makes its own API call when pool data is already loaded — cuts duplicate requests on the home page

  • Feature
    Price Range ruler tool added to chart

    New ruler drawing tool on the chart toolbar lets you measure price distance and percentage change between two points

  • Fix
    Deterministic trade history ordering

    Trades with the same block timestamp now sort consistently by signature — fixes occasional row-shuffling in the transaction feed

  • Fix
    Fixed watchlist hydration mismatch

    Watchlist stars and badge counts no longer flash incorrectly on first page load

  • Fix
    Improved sticky table header on mobile

    Table header stays visually anchored when scrolling horizontally on small screens

  • Improvement
    Telegram community link added to sidebar
v0.9.3Feb 22, 2026
  • Fix
    Transfer indexer now captures plain transfer instructions

    Previously only transferChecked instructions were indexed — plain SPL transfer instructions are now resolved via token balance entries and captured as edges

  • Fix
    AMM filter relaxed from transaction-level to instruction-level

    Mixed transactions containing both a swap and a separate wallet-to-wallet transfer no longer lose the transfer edge

  • Improvement
    X-Ray empty state now shows explanation instead of blank graph

    Tokens with no transfers show a clear message distinguishing between "not yet indexed" and "no transfers found (AMM-only activity)"

  • Improvement
    Re-indexed all 413 tokens with improved parsing

    All transfer index progress reset to re-scan with the new instruction-level filter and plain transfer support

v0.9.2Feb 18, 2026
  • Improvement
    Candle aggregator incremental rebuild

    Only re-aggregates candle buckets affected by new swaps instead of the full 48h window — major ClickHouse CPU reduction

  • Improvement
    Trade indexer 4x faster batch processing

    Reduced inter-batch sleep from 1s to 250ms with RPC rotation per batch to spread load across endpoints

  • Improvement
    WSS queue dedup now O(1) instead of O(n)

    Signature dedup in the real-time trade queue uses a Set lookup instead of linear array scan

  • Fix
    Fixed Telegram bot crash loop on restart

    Bot now properly releases the Telegram polling session on shutdown, preventing 409 conflicts on restart

  • Fix
    Removed dead RPC from trade indexer

    Dead endpoint 51.195.104.145 was still in trade indexer RPC list, causing timeout waste every 5th batch

  • Fix
    LP burn detection now recognizes burnChecked

    Safety score now detects LP tokens destroyed via SPL burnChecked instruction, not just tokens sent to burn addresses

  • Improvement
    Holder concentration scoring adjusted for small-cap tokens

    Threshold widened from 50% to 80% — early-stage tokens now get partial credit instead of a flat zero

  • Fix
    Holder concentration now excludes DEX vaults and burn addresses

    XDEX pool vaults, burn addresses, and system accounts are no longer counted as top holders in the safety score

v0.9.1Feb 15, 2026
  • Improvement
    Migrated CDN and token profile storage to gptree.vip

    Token profile images now served from gptree.vip via Cloudflare R2

  • Fix
    Fixed backup script failing on cron runs

    SQLite, config, and remote sync backups were silently skipping since Feb 14 — now fully restored

  • Fix
    LP burn detection now recognizes partial burns

    Safety score now shows actual burn percentage instead of binary pass/fail — pools with 50-90% LP burned get partial credit

  • Fix
    Transfer indexer batch retry on RPC failure

    Failed transaction batches now retry on a different RPC instead of silently dropping transfers

  • Improvement
    X-Ray view now shows all holders as nodes

    Holder bubbles are always visible in X-Ray, even when no wallet-to-wallet transfers exist

  • Fix
    X-Ray transfer graph now shows correct data per token

    Fixed fallback that caused all unindexed tokens to display the same XNT transfer graph

  • Fix
    Transfer indexer now scans full token history

    Scans up to 100k signatures per cycle per token, resuming deeper each cycle to reach initial distributions

  • Improvement
    Transfer indexer RPC split for reliable signature fetching

    Archival RPC for signature history, fast validator RPCs for transaction data

  • Fix
    AMM-only pages no longer count against indexer scan limit

    High-volume tokens with mostly swap activity are now scanned deeper to find actual transfers

  • Fix
    Removed dead RPC endpoint from WSS and transfer indexer
v0.9.0Feb 13, 2026
  • Feature
  • Feature
    X-Ray transfer graph with cluster detection
  • Feature
    Wallet Inspector panel with flow analysis
  • Feature
    On-demand transfer indexing
  • Feature
    Holder concentration metrics (Gini coefficient)
  • Improvement
    Known address labels (DEX vaults, burn address, system program)
  • Improvement
    Fullscreen mode for Bubble Map
  • Feature
    Token Safety Scanner with risk scoring
  • Feature
    Table sparklines for 24h price trends
  • Feature
    Biggest gainer ticker marquee
  • Feature
    Chart timezone selection
  • Feature
  • Fix
    Watchlist view preference now persists across reloads
  • Fix
    Mobile table header alignment on horizontal scroll
  • Fix
    Pool count display now shows true count beyond 500
v0.8.0Feb 7, 2026
v0.7.0Feb 3, 2026
  • Feature
    Real-time trade streaming (WSS → Redis Streams → SSE)
  • Feature
    Live trade feed with green pulsing indicator
  • Improvement
    Buy/sell volume split in sidebar
v0.6.0Jan 28, 2026
v0.5.0Jan 24, 2026