尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Bellwether is an interactive atlas of the ISM PMI suite — Manufacturing PMI (1948→present, 75+ years) and Services PMI (1997→present) — read alongside the US economic-policy decisions that shaped each era.
翻译准备中
正在加载完整 README。 以下为已保存的摘录。
The economy's earliest tell, made explorable. Read the ISM PMI the way the Fed does.
Bellwether is an interactive atlas of the ISM PMI suite — Manufacturing PMI (1948→present, 75+ years) and Services PMI (1997→present) — read alongside the US economic-policy decisions that shaped each era. The PMI is the economy's earliest monthly tell: a diffusion index that crosses 50 before GDP turns. Bellwether makes that signal something you can drive rather than a number you read once a month.查看完整 README ↗The economy's earliest tell, made explorable. Read the ISM PMI the way the Fed does.
Bellwether is an interactive atlas of the ISM PMI suite — Manufacturing PMI (1948→present, 75+ years) and Services PMI (1997→present) — read alongside the US economic-policy decisions that shaped each era. The PMI is the economy's earliest monthly tell: a diffusion index that crosses 50 before GDP turns. Bellwether makes that signal something you can drive rather than a number you read once a month.
It's for the economically curious non-economist — anyone who sees "ISM Manufacturing PMI came in at 48.7" in the headlines and wants the machine behind it: what the number means, how it's built, and what it has caught (and missed) across seventy-five years of cycles.
Try it live → bellwether-nine.vercel.app
Status: live — 7 modes, Manufacturing PMI back to 1948 (75+ years), Services PMI to 1997, per-cell data provenance, FRED-backed, no signup.
| Mode | Route | What it does |
|---|---|---|
| Timeline | / | INDPRO Y/Y % spine 1949→present, with hand-curated ISM PMI markers, a separate Services PMI figure (1997→), and a policy lane of major US economic decisions. |
| Decompose | /decompose · ?report=services | Reweight the headline subindices and backtest your blend against NBER recessions — Manufacturing (5 subindices) and Services (4). |
| Fed Chair | /fed-chair | Era-locked decision game with after-action review. Manufacturing PMI only; scenarios pre-date the Services PMI's 1997 launch. |
| Heatmap | /heatmap · ?report=services | 18 industries × 5 policy regimes, for both Manufacturing and Services. |
| PMI Explained | /pmi-explained | How to read the ISM Reports on Business, with live Manufacturing and Services prints. |
| About the data | /about-the-data | Per-cell provenance ledger — every value traced to its source. |
| Background | /background | Illustrated timeline of the institutions and the seventeen Fed chairs. |
The headline PMI is a fixed-weight blend of five subindices. In Decompose, move the weights and watch your custom blend redraw against the real series — then see whether your mix would have caught the last twelve recessions. (static version.)
npm install
cp .env.example .env.local # paste your FRED key
npm run refresh-data # fetch FRED snapshots into data/fred/
npm run dev # http://localhost:3000
The build doesn't require FRED at runtime — all market data is checked-in JSON in data/. Re-run npm run refresh-data when you want fresher FRED snapshots, and npm run import-prnewswire to backfill the most recent ISM headline prints from ISM's monthly press releases on PRNewswire. ISM Wayback re-imports (for the post-2014 history and the per-month subindex / industry tables) are documented in data/CONTRIBUTING.md.
noUncheckedIndexedAccess) · Tailwind CSS + shadcn-style primitivesd3-shape, d3-scale, d3-array) for the timeline and backtestsNo database, no auth.
src/
app/ # Next.js App Router
page.tsx # Timeline (default mode)
decompose/page.tsx # ?report=services for Services
fed-chair/page.tsx # scenario index
fed-chair/[id]/page.tsx # per-scenario runner
heatmap/page.tsx # ?report=services for Services
pmi-explained/page.tsx
about/page.tsx
about-the-data/page.tsx
background/page.tsx
style-guide/page.tsx
components/
timeline/ # PMITimeline, PolicyLane, etc.
decompose/
fed-chair/
heatmap/
background/
pmi-explained/
ui/ # primitives — Button, Sheet, Card, Slider, etc.
lib/
data/ # series loaders + Zod schemas
content/ # policies + glossary (data lives in `_policies-data.ts`, not MDX)
decompose/ # weighting math + backtest
background/ # illustrated timeline data
data/
fred/*.json # FRED snapshots (INDPRO, IPMAN, FEDFUNDS, USREC, NAPM stubs)
pmi-historical.json # forecasts.org mirror, 1948 → 2014
pmi-wayback.json # ISM Mfg ROB via Internet Archive, 2014→present
pmi-subindices-wayback.json # the five Mfg subindices
pmi-curated.{csv,json} # Mfg headline rows from ISM press releases (PRNewswire) + hand entries
nmi-wayback.json # ISM Services ROB via Internet Archive
nmi-subindices-wayback.json # the four Services subindices
nmi-curated.json # Services headline rows from ISM press releases (PRNewswire)
industry-monthly-wayback.json # Mfg per-month industry growth/contraction lists
services-industry-monthly-wayback.json
sectors.json # Mfg heatmap (18 industries × 5 regimes)
sectors-services.json # Services heatmap
scripts/
fetch-fred.ts # FRED refresh
import-wayback-ism.ts # Mfg headline scraper (Wayback Machine)
import-wayback-subindices.ts # Mfg subindices (Wayback Machine)
import-wayback-industries.ts # Mfg industry lists (Wayback Machine)
import-wayback-nmi*.ts # Services equivalents (Wayback Machine)
import-prnewswire-ism.ts # current-vintage Mfg + Services headlines from PRNewswire
import-forecastsorg.ts # historical mirror
import-pmi-csv.ts # CSV → JSON for hand-curated rows
reconcile-ism.ts # 3 checks/sector: cross-source, composite, spot-check
verify-nber.ts # link health on NBER citations
Bellwether's edge is its provenance. Nothing is scraped live at request time — every series is a checked-in JSON snapshot, backfilled from several primary sources and cross-checked against each other:
Those sources are held against each other rather than trusted individually. npm run check-data requires that months carried by two sources agree, that each headline equals the mean of its own subindices, and that hand-read anchor values match what ships — so a scraper that starts quietly returning the wrong number fails the build instead of publishing.
Every value is reproducible, and the per-cell provenance ledger traces each one to its source. See data/CONTRIBUTING.md for how the imports work and data/LICENSING.md for the per-source licensing posture before you redistribute the data.
noUncheckedIndexedAccess is on, deal with undefinedContributions are welcome — especially data corrections, new policy events, and deeper provenance. Good first contributions: file a data correction when you spot a value that disagrees with the primary source, or improve the explainer for one of the subindices. See CONTRIBUTING.md to get started and CODE_OF_CONDUCT.md for community expectations; bug reports and feature requests have their own issue templates.
Before opening a PR: npm run lint && npm run typecheck && npm test.
The project's own code and content are released into the public domain under CC0 1.0 — use it for anything, no attribution required.
The data layer is different and is not dedicated to the public domain: economic values are facts reproduced with attribution to their primary sources, and quoted ISM commentary is included as fair-use excerpts. See data/LICENSING.md for the per-source posture before redistributing the data.