npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

pulse-trenches

v0.1.1

Published

Market intelligence for the Solana and Robinhood Chain trenches: live launch firehose, runner and death tracking, KOL and smart-money scoring, tech-vs-meme classification, a Telegram newsletter, a dashboard, an MCP server, and a Postgres archive for train

Readme

Pulse

npm license MCP

Site and docs: https://nirholas.github.io/pulse/

npx pulse-trenches            # collector, API and dashboard on :8787
npx -y -p pulse-trenches pulse-mcp   # MCP server for agents (set PULSE_URL)

Personal market intelligence for the Solana and Robinhood Chain trenches. Pulse watches every launch, runner and death, scores wallets, labels KOLs, classifies tokens by tech versus meme, writes a daily newsletter to Telegram, and archives everything in Postgres so the history can later train a trading bot.

What it records

| Table | Contents | |---|---| | tokens | One row per token: metadata, lifecycle status (new, running, graduated, dying, dead), category, tech score, ATH, peak volume | | token_snapshots | Price, mcap, liquidity, volume, holders, traders, buy/sell counts every cycle (Timescale hypertable when available) | | list_appearances | Which trending, top-traded or promoted list surfaced a token, and at what rank | | launch_events | Launches and graduations from the pump.fun firehose and the Robinhood Chain factories | | trades | Trades by labelled wallets, whales (5 SOL or more) and early buyers of tokens that run or graduate | | wallet_positions, wallet_scores | Per-wallet PnL, win rate, early hits and best multiple | | wallets | KOL and smart-money labels, plus wallets Pulse promotes itself (3+ early hits, 50%+ win rate) | | market_snapshots | Chain-wide totals each cycle | | daily_reports | Every newsletter issue as data, markdown, HTML and the Telegram messages |

Export any table as JSON from /api/export/<table>.

Run it

Requires Node 24 or newer.

npm install
cp .env.example .env       # optional, everything has a default
npm run build              # builds the dashboard into dist/web
npm start                  # collector + firehose + API + dashboard on http://localhost:8787

With no DATABASE_URL, Pulse stores data in an embedded PGlite database at data/pglite. For TimescaleDB:

npm run db:up              # Postgres on host port 5544
echo 'DATABASE_URL=postgres://pulse:pulse@localhost:5544/pulse' >> .env

Other commands:

| Command | What it does | |---|---| | npm run dev | Collector and Vite dev server with hot reload (http://localhost:5173) | | npm run collect | One collection cycle, then exit (-- --jobs also imports wallets and scores them) | | npm run report -- --no-send --print | Build today's newsletter without sending it | | npm test, npm run typecheck | Tests and types |

Telegram newsletter

Create a bot with @BotFather, add it to your channel as an admin, and set TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID (for example @my_channel). The issue is generated once a day at REPORT_HOUR in REPORT_TIMEZONE, stored first, then sent. Set ANTHROPIC_API_KEY to add a short written overview that is constrained to the day's data.

Data sources

All keyless: Jupiter token lists, DexScreener, pump.fun, GeckoTerminal, Solana RPC logs for the pump.fun and PumpSwap programs, Robinhood Chain RPC factory logs, and public KOL wallet labels. The public Solana WebSocket drops connections often; Pulse reconnects, but a dedicated SOLANA_WS_URLS endpoint keeps the firehose steady.

Layout

src/collector   firehose, scheduler, Robinhood walker, persistence
src/sources     one client per data provider
src/intel       classification, lifecycle status, wallet scoring
src/report      newsletter data, rendering, Telegram, narrative
src/server      Hono API and static dashboard hosting
src/db          migrations and the Postgres/PGlite client
web             Vite dashboard (overview, tokens, token detail, launches, wallets, newsletter)

Token names, symbols and descriptions are untrusted on-chain input. The dashboard escapes every interpolation and Pulse never acts on them.

MIT licensed.