Coverage Changelog turns the public CMS Coverage API into a free policy workbench. Ranked LCD/NCD updates, Monday briefs, operator review lanes, per-contractor feeds. Static files, GitHub Pages, MIT.
Coverage policy changes are scattered across CMS reports, document pages, and revision endpoints. This repo collapses them into one obvious question:
What changed, who might care, and what should be checked next?
The output is a static workbench with five views, a forwardable Monday brief, and per-contractor JSON / RSS / CSV feeds you can drop into a script, scheduler, or feed reader.
| Surface | Use it for |
|---|---|
| Radar | Scan signal mix and the highest-impact updates before opening filters. |
| Changes | Search and filter every revision. Deep-link any view via the URL. |
| Queue | Operator review lanes (coding, criteria, effective date, national, retirement). |
| Contractor | Slice the workbench by MAC footprint with direct subscribe URLs. |
| Brief | Forwardable Monday brief, copy-to-email button, RSS, mailto fallback. |
| Feed | Every static artifact, including per-contractor feeds. |
- Ranked CMS coverage updates with impact heuristics and source citations.
- Operator review lanes for the recurring real-world questions.
- Per-contractor subscribe URLs for monitoring just the MACs you bill.
- Forwardable Monday brief in markdown, HTML, and Gmail-friendly inline layout.
- Static feeds in JSON, NDJSON, CSV, and RSS so anything can integrate.
- Direct links to the official CMS document for every entry.
No patient data. No payer credentials. No private claims. No paid API keys.
The current build consumes only public CMS surfaces:
https://api.coverage.cms.gov/docs//v1/reports/whats-new/local//v1/reports/whats-new/national//v1/metadata/update-period//v1/data/lcd/revision-history/v1/data/lcd/reason-change/v1/data/lcd/synopsis-changes/v1/data/article/revision-history
See SECURITY.md for the full security and Business Associate boundaries.
Every build writes public artifacts:
| File | Purpose |
|---|---|
public/data/latest.json |
Full dataset with stats, highlights, brief sections, and entries |
public/data/feed.json |
Smaller flat feed for scripts and integrations |
public/data/high-impact.json |
High-impact updates only |
public/data/contractors.json |
All updates grouped by contractor |
public/data/contractors/<slug>.json |
Per-contractor full slice |
public/data/contractors/index.json |
Manifest of all contractor slugs |
public/data/queues.json |
Operator review lanes |
public/data/manifest.json |
Current release metadata and artifact map |
public/data/feed.csv |
Spreadsheet-friendly export |
public/data/feed.ndjson |
Line-delimited export for data pipelines |
public/feeds/<slug>.rss.xml |
Per-contractor RSS feed |
public/feeds/<slug>.csv |
Per-contractor CSV |
public/briefs/latest.md |
Forwardable markdown brief |
public/briefs/latest.html |
Gmail-friendly HTML brief |
public/briefs/<slug>.html |
Per-contractor email brief |
public/rss.xml |
Global RSS feed |
public/og-image.svg |
Social card with current dataset stats |
public/sitemap.xml |
Search indexing hint |
npm install
npm run devBuild the live dataset and production app:
npm run buildRun the full verification loop (test + lint + build):
npm run checkCMS Coverage API
-> build-time TypeScript ingestion
-> version-scoped enrichment
-> impact heuristics
-> static artifacts (JSON / RSS / CSV / briefs)
-> per-contractor slicing
-> React workbench (URL-deep-linkable)
-> GitHub Pages
Optional detail endpoint failures are skipped gracefully via safeData(). If the required CMS report fetch fails, the previous generated dataset is reused so the deploy never ships an empty wall.
UI system notes live in docs/UI_SYSTEM.md. Architecture detail in docs/ARCHITECTURE.md.
| Layer | Technology |
|---|---|
| Build pipeline | TypeScript + tsx (CMS ingestion → static artifacts) |
| App | React 19 + Vite 8 |
| Styling | CSS custom properties (no framework) |
| Icons | Lucide |
| Tests | Vitest |
| Hosting | GitHub Pages (free) — fork-friendly to Cloudflare Pages, Netlify, Vercel |
npm run check # test + lint + build
npm run test # vitest
npm run lint # eslint
npm run build:data # CMS ingestion onlyEvery filter and selection lives in the URL. Examples:
- High-impact coding updates for Palmetto:
?view=changes&contractor=palmetto-gba&q=coding&impact=high - Open the contractor slice:
?view=contractor&contractor=cgs-administrators - Deep-link a specific entry:
?view=changes&entry=L12345
Press ? in the app for the full keyboard shortcut list.
GitHub Pages deploys should set the base path:
PUBLIC_BASE_PATH=/coverage-changelog/- Free for maintainers.
- Free for users.
- Public sources only.
- Source links over black-box summaries.
- Static hosting before infrastructure.
- Practical outputs before platform features.
- specialty slices for common billing and RCM workflows
- change history across build windows
- stronger coverage-criteria detection
- additional free public policy sources after CMS surfaces are stable
See CONTRIBUTING.md and CODE_OF_CONDUCT.md. Security: SECURITY.md.
MIT — see LICENSE.
Built by ByteWorthy. Custom AI you own. Not SaaS you rent.