Formidable Pulse is a privacy-safe signal atlas for the Formidable Builders community. It shows how shared attention changes over time without publishing private messages or identifying people.
The Atlas turns a large message archive into a small set of reviewable signals:
- Attention over time: the weekly share of discussion for each topic.
- What moved: the topics that gained or lost attention between two selected weeks.
- Topic history: first and last appearance, peak week, coverage, streaks, volatility, and direction.
- Topic relationships: topics that appear in the same weeks more often than expected. These links show association, not cause.
- Evidence flow: how many candidate signals were analyzed, accepted for publication, and made public.
- Reviewed stories: sustained themes, emerging themes, recurring friction, cooling themes, and links between discussion and reported outcomes.
- Weekly and monthly records: privacy-safe summaries with limitations and source coverage.
Counts measure attention. They do not measure importance, agreement, quality, or truth. A partial week can also change quickly.
The current release analyzes messages through 1 August 2026.
| Measure | Published value |
|---|---|
| Source chats | 3 |
| Logical messages read | 21,512 |
| Messages retained for analysis | 19,442 |
| Calendar weeks | 72 |
| Canonical topics | 17 |
| Candidate signals analyzed | 1,104 |
| Publishable signals | 158 |
| Public signals | 142 |
| Reviewed longitudinal stories | 27 |
The pipeline excludes system events, deleted-message notices, media-only placeholders, empty messages, and messages after the fixed analysis cutoff. A topic evidence count is an assignment count, so one message can support more than one topic. Participant measures use normalized source identifiers and do not represent verified people.
Private WhatsApp exports
↓
Parse, filter, and fix the analysis cutoff
↓
Redact identifying text and create opaque identifiers
↓
Build deterministic, size-limited work packets
↓
Run schema-bound semantic extraction and topic discovery
↓
Normalize topics, reclassify history when required, and aggregate
↓
Create longitudinal and cross-chat summaries from aggregates
↓
Run an independent evidence and privacy review
↓
Approve one exact candidate hash and publish the public archive
- Parse. The parser joins multiline WhatsApp messages, applies the
Europe/Bucharesttime zone, and assigns ISO weeks and reporting months. - Filter. The coordinator removes non-message records and freezes an
analysisAsOfcutoff. This makes a run reproducible. - Protect. URLs, email addresses, phone numbers, handles, WhatsApp mentions, and sender names become safe placeholders. A private key creates opaque identifiers for messages, participants, days, episodes, and duplicate groups.
- Prepare. Retained messages are split by chat, month, week, and six-hour conversation episode. Each immutable packet has at most 1,000 messages and 119 KB of input.
- Extract and discover. Read-only, schema-bound workers classify every message as analytical or context-only. They assign up to three canonical topics and find wins, pain points, open questions, needs, attitude shifts, cultural signals, and bounded observations. A separate taxonomy-blind pass can propose durable new concepts.
- Normalize and aggregate. The pipeline merges synonyms, rejects private or entity-specific labels, and reclassifies the history if the approved taxonomy expands. Deterministic code then calculates weekly counts, shares, coverage, depth, concentration, diversity, topic movement, lifecycle measures, co-presence, and anomaly scores.
- Synthesize. Longitudinal workers use accepted weekly aggregates to find sustained, emerging, recurring, and cooling patterns. Cross-chat analysis uses aggregate data only and can report overlap, divergence, and timing. It cannot claim cause.
- Review. An independent reviewer rejects claims that are unsupported, duplicated, identifying, source-like, entity-specific, causal, or too confident.
- Publish. The coordinator renders an isolated candidate and records its hash. Publication requires approval of that exact hash, verifies the application build, installs the archive atomically, advances private per-chat checkpoints, and restores the previous archive if installation fails.
The public Next.js app reads only the approved weekly Markdown, monthly Markdown, and signal-explorer JSON files. It never imports the source exports.
| Stays private | Can be published after review |
|---|---|
| Raw exports and message text | Aggregate counts and rates |
| Sender names and contact details | Canonical topic names |
| Redacted work packets | Week and month identifiers |
| Opaque message and evidence identifiers | Reviewed paraphrases and limitations |
| Worker event streams and raw model results | Topic movement, lifecycle, and weekly co-presence |
| The identifier key and private checkpoints | Evidence-stage totals and public stories |
The public archive does not contain names, contact details, raw messages, direct quotes, source URLs, or private identities. News attention does not mean endorsement. Meme activity alone cannot prove a factual, adoption, or commercial claim.
Node.js 20.9 or newer is required.
npm install
npm run devOpen http://localhost:3000. Use these checks for a production build:
npm run lint
npm run build
npm startFrontmatter is parsed with gray-matter and validated with zod. Markdown passes through remark-parse, remark-rehype, rehype-sanitize, and rehype-stringify before it is rendered.
The three WhatsApp exports are in the ignored, owner-only exports/ directory. The Python coordinator keeps raw and model-facing artifacts in ignored .local/ paths. Committed processing/ state contains only privacy-safe configuration, aggregates, and checkpoints.
Prepare and inspect a run:
python3 -m venv .venv
.venv/bin/pip install -r requirements.lock
.venv/bin/python scripts/chat_pipeline.py doctor
.venv/bin/python scripts/chat_pipeline.py inspect
.venv/bin/python scripts/chat_pipeline.py prepare --run-id baseline-2026-08-01
.venv/bin/python scripts/chat_pipeline.py run-workers --run-id baseline-2026-08-01 --dry-runLive workers require a private authorization JSON file. It must match the pending job IDs, source-set hash, model, non-production environment, credential mode, and a positive USD spend limit. Run each phase in order:
.venv/bin/python scripts/chat_pipeline.py run-workers --run-id baseline-2026-08-01 --authorization-file /private/path/authorization.json
.venv/bin/python scripts/chat_pipeline.py validate --run-id baseline-2026-08-01
.venv/bin/python scripts/chat_pipeline.py synthesize --run-id baseline-2026-08-01synthesize advances a resumable queue through topic normalization, required historical reclassification, aggregate-only synthesis, and independent review. Repeat run-workers, synthesize, and validate when the reported phase requires it.
After review, build the isolated candidate, inspect it, approve its exact hash, and publish it:
.venv/bin/python scripts/chat_pipeline.py render --run-id baseline-2026-08-01
.venv/bin/python scripts/chat_pipeline.py approve --run-id baseline-2026-08-01
.venv/bin/python scripts/chat_pipeline.py publish --run-id baseline-2026-08-01The older keyword generator remains only as rollback history.