dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Browser-based network diagnostics: DNS security (8 resolvers probed over RFC 8484 wire format, ECS leak + DNSSEC checks), speed/bufferbloat test, ad blocker analysis, security header scanning. No installs, no accounts — Cloudflare Workers + TypeScript + Vite.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Browser-based network diagnostics toolkit — DNS security, speed test, ad blocker analysis, and HTTP security header scanning. No installs, no accounts; every check runs client-side against Cloudflare's edge network.檢視完整 README ↗
Browser-based network diagnostics toolkit — DNS security, speed test, ad blocker analysis, and HTTP security header scanning. No installs, no accounts; every check runs client-side against Cloudflare's edge network.
Live: netcheck.oilygold.xyz
speed.cloudflare.com, Netflix's fast.com, or Ookla Speedtest servers (nearest found via your city — proxies only the tiny discovery call; speed traffic goes browser → server direct)ReadableStreamwrangler devOff by default, and off on netcheck.oilygold.xyz. This is the one check that needs a server outside Cloudflare, because Workers cannot serve UDP/53.
probe-server/ is an authoritative nameserver for a zone you delegate to it. The browser resolves <label>.<your-zone>, which forces every recursive resolver in the visitor's real path to query that nameserver directly — so it sees their actual resolver IPs, and any EDNS Client Subnet forwarded. A DoH-only page can never learn this about its visitor, because it only ever talks to the one resolver it picked.
The label is the SHA-256 of a read key the visitor's tab keeps to itself. Every resolver in the path sees the label, and so do the nameserver's own logs, so observing a query must not be enough to read the result back: only the key names the session, and it never travels in a DNS query. The Worker presents the key over TLS to fetch the result.
Enable it by setting all three on the Worker:
| Variable | Where | Example |
|---|---|---|
PROBE_SERVER_URL | wrangler.toml [vars] | https://ns-probe.example.com:8443 |
PROBE_ZONE | wrangler.toml [vars] | p.example.com |
PROBE_SECRET | wrangler secret put | — |
The URL must be https:// (localhost excepted): PROBE_SECRET travels in a request header, so a plaintext URL is refused and reported as unconfigured rather than sent in the clear.
With any of them missing, the client is told the probe does not exist here: it skips the lookup entirely, and the DNS card drops both the encrypted-DNS row and the "your recursive resolver" block rather than showing a check it cannot answer.
Running the nameserver — GCP always-free VM, zone delegation, systemd unit, and the reflection-hardening notes — is documented in probe-server/README.md.
@cloudflare/vite-plugin — Workers runtime integrated directly into Vite dev/build#08090a canvas, indigo-violet accentssrc/shared/dns-wire.ts; interactive lookups via Cloudflare DNS-over-HTTPSnetcheck-site/
├── wrangler.toml # Cloudflare Worker config
├── vite.config.ts # Vite build configuration (Cloudflare plugin)
├── tsconfig.json # TypeScript configuration
├── index.html # Single-page app shell
├── probe-server/ # Authoritative nameserver for recursion-path probing
├── src/
│ ├── client/ # Frontend logic (TypeScript)
│ │ ├── app.ts # Entry point — tab routing, UI orchestration
│ │ ├── i18n.ts # Bilingual (en/zh-TW) translation strings
│ │ └── ... # Domain-specific logic (dns-check, speed-test, adblock-test, etc.)
│ ├── shared/ # Code shared between client, worker and probe server
│ │ ├── dns-wire.ts # RFC 8484 wire-format encoder/decoder
│ │ └── resolvers.ts # Public DNS resolver list
│ └── worker/ # Backend logic (TypeScript)
│ └── index.ts # Worker — API routes
└── public/
├── icon.svg, manifest.json, sw.js
└── css/styles.css # Linear design system implementation
npm install
npm run dev # Vite dev server with the Cloudflare Workers runtime
npm run typecheck # tsc --noEmit
npm test # node --test — no framework, no browser, no network
To exercise the recursion probe locally, put the three variables in a gitignored
.dev.vars and run the nameserver alongside the dev server — see
probe-server/README.md for the local port to use
(5354; mDNS holds 5353 on macOS).
npm run deploy # vite build && wrangler deploy
MIT