May 19, 2026 · build log

Signals: an early-warning system for internet momentum

I built an open-source tool that watches behavior changes, not mention counts, across Reddit, Hacker News, GitHub, Polymarket and a few other independent sources. Every claim is backed by a clickable packet of evidence. Below is a tour of what it does, then how I use it with a coding agent like Claude Code or Codex.

Repo: github.com/alejandroclvi/Signals · MIT.

The problem

By the time TechCrunch covers an AI shift, three founders already pivoted. By the time a Reddit thread goes viral, the moment to enter the conversation is gone.

Most “social listening” tools count mentions and slap a sentiment score on top. That tells you what is loud. It doesn't tell you what is changing — and changing is what predicts where things are going.

Signals does three things differently:

The radar

The home screen is a radar. KPIs across the top — emerging signals, high-confidence ones, communities being watched, evidence saved. A bubble chart plots every signal by relevance × momentum. The right rail is an inbox you can rank, filter, and triage.

Signals radar dashboard showing KPI strip, bubble chart, and ranked signal inbox
The radar. 187 signals detected this period, 5 high-confidence, 24 communities monitored, 94 pieces of evidence saved. The bubble chart is colored by signal type — demand, frustration, adoption, comparison, narrative, economic.

Each bubble is a signal — a claim that something is changing. Bigger means more evidence behind it. Color tells you what kind of behavior change. The list on the right is the same data ranked, so you can work top-down instead of by visual hunting.

Seven independent ways to see

Behind every signal sits a mesh of producers, each one a different angle on the same topic. The premise: if seven different kinds of source all hint at the same change, the change is real. If only one does, you have a rumor.

Evidence coverage panel showing 7 layers active and the source nodes powering each
Evidence coverage. 7/7 layers active — Conversation (Reddit, HN), Intent (Google Search), Behavior (GitHub), Expectation (Polymarket), Economic commitment (HN Who's Hiring), Capital-market response (Stocktwits, Yahoo Finance), Primary truth (Anthropic releases). Each node can be toggled on or off.

Adding a new source is a matter of writing a small producer that returns a normalized evidence packet. The registry handles the rest — scheduling, dedupe, lifecycle tracking, scoring contributions. The point is that missing coverage is itself a finding: if a signal has Conversation but no Behavior, that's a clue about whether anyone is actually building anything in response.

One signal, end to end

Click into a signal and you get the whole chain. Lifecycle stage. Momentum. The communities driving it. A “why this matters” written from the evidence. Threads ranked by score and reconstructed so you can read the parent post and the comments it sparked.

Signal detail showing why it matters, key quotes, and representative evidence threads
r/ClaudeCode: claude code — Emerging, High confidence, 14× post volume vs baseline. The 'Why it matters' summary is grounded in concrete quotes: 'oh we give you 200$ of additi…', '10x reduction in the actual…', 'a benefit to users…'. Below it, the representative thread is reconstructed with each comment's evidence-state tagged (Insight, Pain, Comparing).

Notice the small tags under each comment — insight, pain, comparing. Every piece of evidence is classified for where the person is in their journey (experiencing a problem, trying things that failed, sharing what works, warning others, etc). That's how you separate “people are complaining” from “people are switching tools because of the complaint.”

Cross-source corroboration (and what's missing)

This is the load-bearing claim of the whole system. A signal isn't real until independent sources point at the same thing. So the detail view shows, layer by layer, what you have and — equally important — what you don't.

Signal detail with the cross-source corroboration strip on the right and missing-evidence callouts
The right rail shows the seven-layer corroboration strip. Each layer has a count of unified-signal evidence supporting it. Below the strip, explicit 'missing — …' callouts surface what evidence the system expected to find but didn't: specific metrics, frequency data, official statements. Absence becomes a finding.

Most dashboards hide gaps. This one pins them to the surface, because missing evidence is the cheapest, most honest signal you have. If a claim ought to be backed by usage stats and there are none, that's a directive: go look.

Drill all the way to the source

Every packet links to its original URL — the Reddit thread, the Polymarket market page, the GitHub PR. Clicking a piece of evidence opens a panel that shows where it came from, which signal cites it, and a one-click jump to the live source. There is no “trust me” layer.

An evidence packet card showing community, age, content, and the signal it's cited by
An evidence packet. 'Market research workflow is eating a full day' from u/seed_researcher in r/startups, 1 month old, cited by the 'Founder research agents' signal. One click away from the live Reddit post.

Comparison signals, not just complaint signals

One of the more useful classes of behavior change is comparison — people actively weighing two tools against each other. Those threads are where switching decisions get made, and the language people use is gold.

A r/codex signal showing comparison-type evidence, deeper insight pulls, identity tags, vocabulary
r/codex: codex cursor — comparison-type signal, growing. The deeper-insight panel pulls out identity language ('edge over codex'), failed solutions ('Cursor', 'ClaudeCode'), and vocabulary ('slight edge at the moment', 'edge over codex', 'prefer Codex'). This is what a real switching conversation looks like.

Driving it with Claude Code or Codex

Signals is built to be operated by a coding agent, not babysat. The repo ships with two README files written for two different audiences: HUMAN_README.md for the operator, AGENT_README.md for whatever agent you point at it. Drop the agent into the repo, tell it to read both, and it can do real work in minutes.

Setup once

git clone https://github.com/alejandroclvi/Signals
cd signals
pnpm setup           # install, build DB, seed sample data
cp .env.example .env # paste your OPENROUTER_API_KEY
pnpm doctor          # green-checks everything is wired
pnpm dev             # dashboard on http://localhost:3000

Common agent loops

What makes it agent-friendly

Why I open-sourced it

Two reasons. First, I want this kind of evidence-first early-warning to be the default for anyone building in fast-moving categories — founders, analysts, product leaders — not a feature gated behind a $500/mo SaaS. Second, the most useful version of this system is the one you customize for your own topic, your own sources, and your own way of thinking. That's only practical if the code is yours to edit.

If you build something interesting on top of it, I'd love to see it.