The demo is shipped and public: a leaderboard and full entity pages, on real X volume, at ai-mindshare.pages.dev. The roadmap from here is concrete: swap the mock for real model-graded enrichment, make it refresh itself on a schedule, widen the field, then build the differentiators and the archive nobody can backfill.
Built as 12 gated PRs in Niftory/ai-mindshare-sift. The Build Log tracks each.
index.json + per-entity summary.json.Prove the whole shape with a live, themed, tested site on real volume. Done: see "Shipped" above.
Turn the demo into a product: replace the mock with model-graded enrichment, make it refresh itself with no human in the loop, widen to the real field, and go public under a name.
noindex, OG cards per entityNeeds: dedicated X app keys (have), LLM key (have), a "will anyone care" pass on the registry, the name/domain call. Done when: the site refreshes itself hourly with real model-graded sentiment across 20 entities, zero manual steps, methodology public.
The analytics nobody else has, and the surfaces that bring traffic: theme intelligence, capability search, the benchmarks-vs-vibes gap, and the launch archive.
/themes/<topic>): trajectory, facets, verdict, voiced-by, vs-the-field; cross-model view ("who gets roasted on pricing")Needs: the multi-entity registry (v1), a capability-index source + attribution, builder-panel curation. Done when: a real launch runs in launch-mode with a live read + day-0 compare, and the /good-at pages are indexable.
Compound what can't be backfilled, and let the data market itself.
v0 deliberately mocked the hardest parts so the product was visible fast. Here's the honest list of what's unproven, by priority. Blocking = decide/verify before public launch; Important = before v1 is trustworthy; Later = monitor.
| Area | The unknown | How we vet it | Priority |
|---|---|---|---|
| X contract ✓ | Resolved. X gave written approval to run this separate public property on the Sift enterprise token, with three conditions: summary data, summary content, and embeds only. | The architecture already meets the conditions: the leak rule keeps public JSON to IDs + aggregates (no raw text/handles), and tweet content renders only through official X embeds. No transport swap needed. | Cleared |
| Query precision | Do the alias queries actually capture the right conversation? "cursor" matched only 195 (under-matching narrow phrases); generic names risk homonyms. Garbage in = garbage rankings. | Per-entity precision audit: an LLM (or human) judges a sample "is this actually about <entity>?" Tune aliases + guards until precision ≥ 90%. Publish the query strings so others can correct them. | Blocking |
| Enrichment quality | Real LLM sentiment/themes/capabilities never validated on real tweets (v0 is rule-based mock; the 550B free model was too slow). Does a fast model classify well? Which model? | Run real enrichment on the captured Fable 5 sample, eyeball accuracy vs the text, A/B a few fast models (Gemini Flash / Haiku / a fast OpenRouter free). Wire via BAML (one typed batched call). (Starting this now.) | Blocking |
| Sentiment meaning | The 87%-neutral problem: news-sharing reads neutral, so is the Vibe Score signal or noise? Is "+9 net" meaningful? | Validate the score against a human read of a labeled set; lean on the builder-sentiment series (less neutral) and net-of-neutral framing. Calibrate once 5+ entities exist. | Important |
| Author classification | The whole voice model (identity + affiliation → voices, owned-vs-organic, threads) depends on classifying authors from bio/handle. Accuracy + per-author LLM cost both unproven. | Hand-label ~50 real authors, measure precision; cache aggressively (30d) so cost is one call per new author. Registry official-handles short-circuit the obvious ones. | Important |
| The self-running loop | Scheduled Actions → R2 publish → site fetches R2 never run end to end. R2 public access, CORS, manifest atomicity, D1-over-HTTP working set: all unexercised. | Wire it on one entity, watch a few cycles, confirm the live site updates with no rebuild. This is the core of v1. | Important |
| Real cost @ 20 entities | Budget was estimated, not measured: X reads (counts + content + author + thread pulls) + LLM tokens at hourly cadence across 20 entities, with launch-mode spikes. | Measure one real day at 20 entities; reconcile the X ledger vs the dev console; confirm it fits the cap with the per-entity guards on. | Important |
| Registry quality | Which entities are real and worth tracking? The seed has placeholder model names; field medians + the leaderboard are only as good as the list. | A "will anyone care" pass: verify names/aliases/handles, pick the ~20 that actually have conversation, before bootstrap pulls. | Important |
| X embeds live | v0 links out to posts; the real product renders official X embeds (widgets.js), which flake and must degrade. The no-stored-text compliance path runs through embeds. | Render embeds on the entity page with the 4s fallback card; test with widgets.js blocked. Pre-render oEmbed for reads. | Later |
| Launch-Score calibration | Is 87 a "good" launch? The score percentiles against an archive that doesn't exist yet, so early numbers are uncalibrated. | Use the log-ratio fallback until 5+ launches are archived, then switch to percentile and re-state historicals with a version bump. | Later |
| Demand + name | Will people actually use and share a sentiment leaderboard? And the property still has no name/domain (blocks public launch). | The fable-5 prototype got real traction as a signal; the true test is launch-day on X. Name/domain is a call in Open Questions below. | Later |
The property's whole reason to exist is being great for 72 hours at a time. This is the operating procedure per major launch; most of it is automated, the human steps are bolded.
| When | What happens |
|---|---|
| T−1 day | Add/verify the entity in the registry (aliases incl. rumored names, official handles, guard terms). Flip the launch flag with a 72h window. Pipeline warms: full-archive bootstrap if new, baseline captured for the z-score. |
| T0 | Launch mode kicks to 30-min cadence automatically. The Launch tab goes live on the entity page: day-0 curves, provisional Launch Score, past-launch overlay. All of this is guaranteed and human-free. Editorial decides whether the story warrants a read; if yes, the auto-draft is open within 4 hours. |
| T0 → T+72h | Score subscores update each refresh; change feed narrates the arc (day 1 is novelty, day 2 is pricing, day 3 is verdicts). If a read is live, its data blocks re-hydrate and editorial does one pass per day. Charts posted to the X account (v3: auto-drafted). |
| T+72h | Launch mode decays to elevated, then baseline. The Launch Score locks (durability subscore lands) and the fingerprint freezes into /launches. If a read exists, editorial freezes it with the final verdict. The entity's Now tab keeps rolling on the leaderboard either way. |
This isn't "build it and hope it's shared." The growth is structural: it's the only source for this view, the data is inherently a screenshot, the people it measures are incentivized to amplify it, and model launches are recurring viral events the property owns. The job is to be great for 72 hours at a time.
Same data, a few audiences, a few formats. X + Hacker News + AI newsletters are the engine; the rest amplify.
| Channel | Why it fits | The plays |
|---|---|---|
| 𝕏 / Twitter home turf |
The conversation we measure lives here, and the accounts being ranked are on it. Native audience, native amplifiers. | Launch-day war room: live charts in real time ("hour 6: #2 mindshare, vibe 78, builders +40, pricing complaints climbing"). @-mention the subjects so labs + builders engage. Top-voices flywheel: featured builders reshare. An auto-posting account (@-handle) for daily movers + launch updates, charts auto-drafted, human-approved. Reply with receipts under hype threads. |
| Hacker News Show HN, launch-day threads |
The technical-credibility crowd: builders, eng leaders, founders. Loves data, open methodology, and a contrarian-but-rigorous take. A front-page hit is a launch by itself. | Show HN on a launch day: "the only real-time sentiment data on the [model] launch," leading with the methodology + downloadable JSON. The Gap chart (benchmarks vs vibes) is peak HN debate fuel. A data-rich write-up per major launch. Win the comments with rigor, not marketing. |
| LinkedIn DevRel, comms, founders, analysts |
The professional + buyer audience. Thought-leadership format, and the people who watch their own launch are the warmest Sift leads. | A recurring "AI model power rankings" / "state of AI sentiment" digest. "How did [model] launch land?" by-the-numbers posts for comms/DevRel. Founders + execs share when their product ranks well. "Powered by Sift" funnels to pipeline. |
| AI newsletters TLDR AI, The Rundown, Ben's Bites, Last Week in AI, Import AI |
The single highest-leverage channel for this audience. These reach hundreds of thousands of exactly-right readers and are always hungry for a chart and a number. Being the cited source is recurring, compounding distribution. | Become the standing data source. Pitch a launch chart + the Launch Score to the big AI newsletters on every major launch; make it copy-paste easy (OG image + one-line stat + link). A weekly "mindshare movers" they can syndicate. One feature in TLDR AI is worth more than a month of posting. |
Amplifiers (secondary, still worth it): YouTube / creator syndication — feed launch-reaction creators (Matt Wolfe, Wes Roth, Theo, Fireship-tier) the charts for their day-one videos; they credit the source on camera. Product Hunt — a one-time spike for the property's own launch, good for the initial "what is this" moment. Bluesky / Threads — cross-post the X content; low cost, the AI crowd is migrating partially. Targeted AI Discords — drop launch data where builders already gather, softly. None of these are the engine; X + Hacker News + newsletters are.
/good-at/<tag> pages capture "best model for X" search permanently.Don't debut into silence. Ship the property the day a big model drops, when attention is already peaked.
Have the Gap chart or a killer launch read ready; post from a credible account (founder / Sift), tag the top voices featured on the page.
Live charts, @-mention the lab, reply to the hype with data. Then a Show HN the next day, LinkedIn that week.
Between launches, the auto-posting account keeps the cadence: daily movers, weekly state-of-vibes. Always-on engine.
| Horizon | Metric | Target |
|---|---|---|
| v0 | Pipeline uptime through one full week + parity with the hand-built fable-5 numbers | 7 days unattended, numbers reconcile |
| v1 launch | Unique visitors in launch week; at least one unsolicited citation | 10k visitors; 1 citation |
| First tracked launch | Traffic during a 72h launch window; screenshots of our charts circulating on X | 50k visitors; visible organic sharing |
| Quarter | Press/newsletter citations; Sift-attributed inbound demos | 5 citations/mo; measurable demo source tag |
| Two quarters | The coined metric escapes the site: "Launch Score" or "the Gap" quoted without us prompting it | 1 unprompted use in coverage or a lab's own comms |
| Line | Monthly | Notes |
|---|---|---|
| X API | $0 (Enterprise) · ~$2.4k equivalent pay-per-use | Full math in Technical; per-entity caps enforced |
| LLM classification | ~$50-150 | ~500k posts/mo through a flash-tier model, batched, cached |
| Cloudflare (Workers, R2, D1, Pages) | ~$20-50 | Static-first design keeps this near the floor |
| Domain + misc | ~$10 | |
| Total | < $250/mo on our contracts | The expensive ingredient is editorial attention on launch days, by design |
Site framework → TanStack Start (static SPA), not Astro. Runtime → scheduled GitHub Actions on Ubicloud, not Cloudflare Workers. Storage → R2 (raw + published JSON) + D1 over HTTP (working set); no Postgres. Repo posture → private machine, public registry. Themes → the Sift brand-book 4-theme token system. All live in the shipped v0.
leaning VibeBench, with ModelPulse as the safe fallback. Candidates and rationale in Product. Needs a call + domain purchase before v1.
The pipeline and site stay private: anti-gaming rules don't survive publication, and the collector must be swappable to cheaper transports without the swap being visible. The entity registry ships as a small public repo for community alias/entity PRs, and the methodology page carries the full audit surface. Details in Technical.
leaning start on Enterprise (paid for, official), shadow-test the cheap collector on 2-3 entities during v1, swap content pulls when parity clears ~95%. Counts can stay official as the reference series. The Collector contract makes the swap a config change, invisible externally.
leaning reads ship only when the story warrants one, so the question shrinks to "who makes that call and does the daily pass during a launch." The Launch tab + score are guaranteed without anyone; a named owner per launch covers the rest.
~20 slots across the four vectors. Draft list exists in the registry section of Product; needs a final pass for "will anyone care" and alias/guard quality before bootstrap pulls.
leaning artificialanalysis index with attribution (reach out; the chart is free marketing for them too). LMArena Elo as fallback; sentiment-only ranking if neither is usable. Also: builder-panel curation needs an initial 300-account pass and a public inclusion rule.
Everything a coding agent needs to build v0 → v1 without re-deriving a single decision lives in build/: the master brief with build order and gates, then one spec per subsystem, plus real-data fixtures and the registry seed.
| File | Contents |
|---|---|
| README.md | Agent brief: constraints (privacy boundary, leak rule, budget guards), 9-step build order with gates, v0/v1 scope, definition of done |
| 01-repo-scaffold.md | Workspace layout, Cloudflare resources (R2/Queues/D1/crons), D1 schema, conventions |
| 02-data-contracts.md | Registry, NormalizedPost, Classification, and all five public artifacts as exact types; the leak rule as a test |
| 03-collector.md | Collector interface, X API endpoints/params/limits, pull recipe, hard budget guards, shadow-swap harness |
| 04-enrichment.md | Theme vocabulary with definitions, the actual classification/author/summary prompts, validator rules, spam heuristics, amplification detection |
| 05-rollups-scores.md | Window rollups, vibe-score.v1 and launch-score.v1 as exact math, change-event triggers, state machine, atomic publish |
| 06-site.md | Astro pages/components mapped to the mockups, hydration + polling model, embed strategy + fallback, OG cards, quality bar |
| 07-acceptance.md | CI gates, fixture reconciliation tolerances, mockup-parity check, the 7-day live soak |
| fixtures/ · registry-seed.json | Real June 9 Fable 5 capture (trimmed, private-shape) + 21-entity registry seed (placeholder names flagged for verification) |