dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Every Medicaid dollar, verified before it is paid.
A pre-payment fraud tripwire for Medicare and Medicaid, built at DNHacks 2026 entirely on public federal data. Verity joins fourteen public datasets into one warehouse, runs three independent detectors over 238 million payment rows, and hands a human investigator a ranked, cited referral packet. Every sentence in a packet points to the public record behind it.README 전문 보기 ↗Every Medicaid dollar, verified before it is paid.
A pre-payment fraud tripwire for Medicare and Medicaid, built at DNHacks 2026 entirely on public federal data. Verity joins fourteen public datasets into one warehouse, runs three independent detectors over 238 million payment rows, and hands a human investigator a ranked, cited referral packet. Every sentence in a packet points to the public record behind it.
Deep dives: docs/methods.md has every number behind the demo (regenerated by the detectors on each run), docs/DATA.md is the data dictionary, docs/SUPABASE.md the storage wiring, docs/validation.md the ground-truth checks.
Click the cover to page through the full deck as a PDF, or expand below.
| 238,015,729 | Medicaid payment rows scanned (T-MSIS, 2018–2024) | every state |
| $532.8B | time-coded Medicaid spending made searchable | screened continuously |
| $55.9M | paid to providers after their strongest-evidence exclusion or revocation | 391 providers, ID-matched, name-verified, dated |
| 2,576 | revoked or excluded providers still holding an active Medicaid enrollment | 90+ days after the action |
| $1.48B | paid after a for-cause termination in another state | offered as a screening queue, not a finding |
| 289 | providers adjudicated in a public enforcement record (DOJ, HHS-OIG, state attorneys general) and on no exclusion or revocation list yet | the feed refreshes daily; 3,342 records since January 2024, name-matched at high confidence only |
The $55.9M figure independently matches the order of magnitude of HHS-OIG's audited finding of $50.3M (OEI-03-19-00070). Every number here is regenerated by the detectors on each run and written to docs/methods.md.
flowchart TB
subgraph sources["Public data"]
A["T-MSIS spending<br/>238M rows"]
B["CMS enrollment,<br/>owners, revocations"]
C["Exclusion lists<br/>LEIE, SAM, CA / NY / TX"]
E["Enforcement feed<br/>DOJ, HHS-OIG, state AGs, daily"]
end
W["DuckDB warehouse<br/>verity.duckdb, ~15 min build"]
A --> W
B --> W
C --> W
E --> W
subgraph detectors["Three detectors"]
D1["Ghost networks<br/>who owns what"]
D2["Impossible days<br/>hours vs the clock"]
D3["Paid after trigger<br/>banned, still paid"]
end
W --> D1
W --> D2
W --> D3
R["Risk score<br/>tiers 1-5, corroboration"]
D1 --> R
D2 --> R
D3 --> R
S[("Supabase serving tables<br/>+ committed static fallback")]
R --> S
S --> API["Serving layer<br/>(see below)"]
API --> H["Human investigator<br/>signs every hold"]
Everything statistical runs offline into plain rows. The deployed console is read-mostly, renders from committed JSON if the database is unreachable, and no automated action ever fires without a human decision recorded in the review log.
The warehouse results are served two ways that stay in lockstep: a Next.js console (deployed on Vercel, reads Supabase) and a FastAPI service (api/) that mirrors the same routes for programmatic use and the browser extension. Both speak to one shared Anthropic client (api/llm.py, claude-sonnet-5) whose helpers strip house-style prose and force every model sentence to carry a citation.
flowchart LR
subgraph read["Read paths"]
SB[("Supabase<br/>serving tables")]
DUCK[("DuckDB<br/>9M-NPI universe")]
end
subgraph api["API surfaces (console route = FastAPI route)"]
SRCH["/search, /provider/:npi<br/>whole-universe lookup"]
CTY["/county<br/>map + drill-down"]
PKT["/packets, /packets/:id/pdf<br/>cited referral memo"]
REV["/reviews<br/>append-only audit log"]
EXT["/extension<br/>NPI verdict for Chrome"]
ASK["/ask<br/>case assistant"]
end
LLM["Shared LLM client<br/>api/llm.py, claude-sonnet-5"]
TOOLS["Evidence tools<br/>Supabase rows only"]
SB --> SRCH & CTY & PKT & REV & EXT & ASK
DUCK --> SRCH
ASK --> LLM
PKT --> LLM
LLM --> TOOLS
TOOLS --> ASK
ASK --> OUT["Every sentence cited<br/>[tool: NPI, month]"]
Ask this case (api/ask.py, and the mirrored web/app/api/ask) is the case assistant: Claude answers a reviewer's question about a flagged provider using evidence tools that read only the Supabase serving tables, and every factual sentence must end with a bracketed citation naming the tool and the row ([payment_timeline: NPI 1234567893, 2022-11]). It is instructed to describe records, dates and amounts and never to assert fraud or intent, because the subject is a referral candidate, not a defendant. The same fenced pattern drives the packet builder; without an API key both fall back to deterministic, still-cited output.
Detector 1, ghost networks. A heterogeneous graph over hospice, home-health and skilled-nursing enrollments: owners resolved with PECOS IDs plus a Fellegi–Sunter model fitted by EM, where agreement on field $i$ contributes the log-likelihood weight
$$w_i=\log_2\frac{m_i}{u_i},\qquad m_i=P(\text{agree}\mid\text{match}),\quad u_i=P(\text{agree}\mid\text{non-match})$$
Communities come from Leiden clustering; each network is scored on incorporation bursts, shared suites and phones, exclusion links and county saturation, composited as robust z-scores. Validation is out of sample: features from 2018–2022, scored against providers actually revoked in 2023–24, with chains held out, reported as precision at $K$.
Detector 2, impossible days. Time-based billing codes convert to implied hands-on hours per clinician per calendar day:
$$\text{hours}(p,d)=\frac{1}{60}\sum_{c}u_{p,d,c}\cdot m_c$$
where $u_{p,d,c}$ is units billed and $m_c$ the minutes one unit of code $c$ implies (318 codes hand-mapped in ingest/02_timecodes.csv; untimed codes get deliberately low durations so the detector under-counts). Outliers are flagged with a robust z-score within state and taxonomy:
$$z=\frac{x-\mathrm{median}(x)}{1.4826\cdot\mathrm{MAD}(x)}$$
Detector 3, paid after a screening trigger. Rule-based, not statistical: an NPI appears on a federal or state "must not be paid" list with an effective date, and Medicaid shows paid claims in service months strictly after that month and before any reinstatement. Every NPI passes the check-digit test; names must agree with the national registry; weaker administrative grounds are tiered down and excluded from headlines.
Ranking. One row per provider:
$$\text{score}=\text{base}(\text{tier})+\beta\cdot\text{corroboration}+\gamma\cdot\log($)$$
A provider flagged by two detectors independently outranks any single loud signal. Dollars come from the tier-defining detector only and are never summed across detectors.
| Tier | Meaning |
|---|---|
| 1 | On a public list, and still paid afterwards |
| 2 | More hours than a day holds, across several organisations |
| 3 | Part of a suspicious network that touches a public list |
| 4 | Network structure alone, or excess hours under one organisation |
| 5 | Worth knowing, not yet a referral |
Every row is a candidate for records review, not a finding. Appeals and reinstatements are respected.
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env # Supabase keys, ANTHROPIC_API_KEY, SAM_API_KEY
python3 scripts/download_all.py --tier all --workers 5
Build the warehouse and run everything (about 15 minutes on an M-series laptop once data is on disk):
.venv/bin/python ingest/00_clean_encoding.py
.venv/bin/python ingest/build_warehouse.py && .venv/bin/python ingest/03_sanity_checks.py
.venv/bin/python -c "import duckdb,re;c=duckdb.connect('data/verity.duckdb');[c.execute(s) for s in re.split(r';\s*\n', open('ingest/04_build_monthly_and_aux.sql').read()) if 'CREATE' in s]"
.venv/bin/python ingest/05_mn_rates_and_state_exclusions.py
.venv/bin/python ingest/06_sam_exclusions.py --no-fetch
.venv/bin/python detectors/d3_revoked_but_paid.py
.venv/bin/python detectors/d2_impossible_days.py
.venv/bin/python detectors/d1_ghost_networks.py
.venv/bin/python detectors/risk_score.py
.venv/bin/python ingest/sync_supabase.py && .venv/bin/python ingest/sync_outputs.py
Run the surfaces:
cd web && npm install && npm run dev # http://localhost:3000, console at /app
.venv/bin/uvicorn api.main:app --port 8000 # evidence, packets, /verify, Blue Button
Deploy to Vercel from the repo root (the root vercel.json builds only web/, and .vercelignore keeps the pipeline and data off the upload) with NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY (server only) and, optionally, ANTHROPIC_API_KEY for Claude-drafted packets; without a key the packet builder is deterministic and still cites every row. scripts/export_static.py writes web/public/fallback/*.json so the console renders with no database at all.
The spending file ends in December 2024. Enforcement records fill the gap forward and refresh daily, from primary sources only (never news): Department of Justice press releases through the official JSON API, and the HHS-OIG enforcement actions listing, which also carries state attorney general and Medicaid fraud control unit actions and links out to the originating release for the full text.
.venv/bin/python ingest/10_enforcement_feed.py # backfill from 2024-01-01 (resumable: appends per page, resumes from the newest stored record)
.venv/bin/python scripts/enforcement_extract_claude.py # model reads each release into a schema; tier is a fixed mapping from action type, never the model's call
.venv/bin/python scripts/enforcement_match_claude.py # parties to NPIs: deterministic blocking, at most five candidates, Claude judges, high confidence only
sh scripts/enforcement_daily.sh # the whole chain: feed (last 7 days), extract, match, D3, D1, risk score, publish
Adjudicated outcomes (sentenced, convicted, pleaded guilty, civil judgment) are tier A in Detector 3 and tier 1 in the risk score, because a
conviction is the record an OIG exclusion later cites. Charges (indicted, charged, arrested, complaint) are tier B and risk tier 3: documented,
not adjudicated. Individuals named as owners or operators are indexed by name and state so a conviction propagates through Detector 1 to every
enrollment that person owns, months before LEIE carries it. An action too recent to have Medicaid months after it uses forward exposure
(Medicaid paid in the last 12 observed months) as its dollars figure. An enforcement record adds to corroboration only when no list action already
documents the provider, since an exclusion follows the conviction it cites. Schedule with ops/launchd/org.verity.enforcement-daily.plist
(instructions inside) or any cron; the chain is set -e, so a broken feed leaves every score unchanged.
Any Medicare beneficiary can export their own claims from Medicare.gov and run them through the same exclusion sources as detector 3:
python3 scripts/bluebutton_offline_verify.py <bluebutton_export.json>
api/bluebutton.py implements the full authorization-code + PKCE flow against the production Blue Button API for consenting beneficiaries; the registered sandbox app is used only for CMS review, since sandbox data is synthetic. Real data only.
ingest/ encoding clean, warehouse SQL, time-code table, state exclusion loaders, Supabase sync
detectors/ d1_ghost_networks, d2_impossible_days, d3_revoked_but_paid, risk_score
api/ FastAPI: evidence, packets (Claude + deterministic fallback), /ask case assistant, whole-universe lookup, /verify, Blue Button 2.0; api/llm.py is the shared Anthropic client
web/ Next.js console: overview map, providers, networks, methods, search, news; web/app/api mirrors the FastAPI routes and serves the browser extension
scripts/ downloader, static export, ground-truth checks, Claude batch jobs
docs/ methods (generated), data dictionary, validation, demo script
data/ raw downloads (gitignored); manifest.json lists every file and source URL
No private data, no PII, no PHI: every input is a public federal or state file. Verity never touches a beneficiary's claim and never denies anything; it ranks providers for a human to review, and the review itself is recorded. The cross-state queue is exactly that, a queue. What the system cannot see, it says it cannot see.
Sahaj Satani · Rachel Lee · Ajay Sharma · Ishaan Samantray
Built at DNHacks 2026, Health & Public Service track, Washington, D.C.