An explainable, agent-built tool that detects emerging narratives and early signals in the Solana ecosystem and turns them into concrete build ideas. Runs on free public APIs only — no API keys required.
Live dashboard: https://k4it00.github.io/narrative-radar/
Latest fortnight report: reports/2026-09-08_fortnight.md
python3 run.py # zero third-party dependencies (stdlib only)
# outputs:
# reports/<date>_fortnight.md - human-readable fortnight report
# site/index.html + data.json - static dashboard
# data/signals.json - raw collected signals (audit trail)Optional: GITHUB_TOKEN (or gh auth token if the GitHub CLI is installed)
raises GitHub Search rate limits from 60 to 30 req/min.
| Source | What it provides | Why it matters for narratives |
|---|---|---|
| GitHub Search API | new repos (created:>date), push velocity, topic queries (solana-agent, solana+defi, solana+depin, anchor-framework, paymaster) |
Developer intent precedes product launches; repo creation spikes are the earliest durable signal |
| Hacker News (Algolia API) | Solana/Jupiter/Jito/Anchor/pump.fun stories, points + comments | Non-crypto-native technical community attention |
| Reddit r/solana (RSS) | community hot posts | Retail/community sentiment; note: RSS endpoints rate-limit aggressively, the collector retries and degrades gracefully |
| DexScreener API | token boosts, top boosts, new token profiles (Solana only) | Paid boosts and fresh profiles are literal spend-on-attention signals from launch teams |
| Superteam Earn API | live bounty/project listings with rewards and skills | What sponsors are paying builders to ship right now — a forward-looking demand signal |
| Cointelegraph (Solana tag) + CoinDesk RSS | filtered news flow | Mainstream coverage confirms narratives already forming elsewhere |
Explicit limitation: X/KOL firehose data (Mert, Toly, Akshay, …) is not accessible without paid auth; this build trades that coverage for a fully keyless, reproducible pipeline and leans on HN + GitHub as the developer-attention proxy. Messari/Electric-Capital style reports are periodic PDFs, not real-time feeds, so they are not machine-collected here.
- Collect — each source returns weighted
Signals (weight encodes source confidence: stars, points, boost tier, reward size). - Vectorize — signals are tokenized, stop-worded, and weighted by
idf(t) = log((n+1)/(df+1)) + 1, L2-normalized. Tokens appearing in more thanmax(12, n/8)signals (e.g. "solana", "crypto") are dropped as non-discriminative. - Cluster — greedy centroid agglomeration (average-linkage flavor): each signal joins the most similar existing cluster at cosine similarity ≥ 0.16, else seeds a new one. Transitive over-merging that plagues pairwise union-find is avoided by construction.
- Score —
score = Σ weight·recency × source-diversity, whererecency = 0.5 + 0.5·e^(−age_days/14)anddiversity = 1 + 0.5·(distinct_sources − 1). A narrative must either span ≥ 2 sources or clear the score floor (6.0). - Explain — every narrative ships with its top raw signals (titles, sources, links) so any claim is auditable, plus label tokens that actually occurred in ≥ ⅓ of member signals.
- Ideas — the dominant category of each cluster (agent/defi/memecoin/ depin/payments/rwa/infra/security/consumer lexicon over labels + summaries) selects 3 build ideas, each tied to named evidence from the cluster.
Prioritization is novelty / signal quality / explainability over volume: small clusters without cross-source corroboration are filtered out rather than padded.
See the live dashboard and
reports/ for the full ranked list with evidence. Highlights from
the current run are regenerated by python3 run.py — narratives are
re-derived from live data on every run, never hard-coded.
Each narrative in the report carries 3 build ideas with a "why now" rationale and the named signals backing it. The ideas pipeline is data-driven: idea categories are selected by cluster composition, and each idea cites the concrete repos/tokens/listings that triggered it.
git clone https://github.com/k4it00/narrative-radar
cd narrative-radar
python3 run.py # ~30-60s, writes report + dashboardRefresh cadence: designed for fortnightly runs (recency half-life tuned to 14 days); cron-friendly, no state, fully idempotent.
MIT