尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A multi-tone frequency generator set inside an orbital observation chamber. Pick frequencies from the built-in library (brainwave, Schumann, solfeggio, reference tones, …) or enter your own, layer them, and route each tone to L / L+R / R and — in Chrome/Edge — to a specific output device.
Plain static files, no build step, no external requests. Works 100% offline.
index.html the whole app (HTML + CSS + JS)
sw.js service worker — precaches everything for offline use
manifest.webmanifest makes it installable (home screen / dock / start menu)
assets/vista.webp background scene (736 × 983)
assets/inter-var.woff2 Inter variable font, self-hosted (OFL, see inter-LICENSE.txt)
icons/ app + favicon icons
vercel.json headers (security, service worker, manifest)
/) — find and run any frequency, preset,
saved combo, playlist or action from the keyboard. ? opens shortcuts &
settings (visual quality auto / full / lite, haptics).shepherd.freq.html with the
image, font and icons embedded. Open it from any device's files, no network
needed.Import this repo at https://vercel.com/new. Framework Preset Other, build
command and output directory empty. Or with the CLI: vercel --prod.
When you change a file that the service worker caches, bump VERSION in
sw.js so installed copies pick up the update.
docs/design-system.md — component relationship map, visual hierarchy,
motion system and the performance contract.docs/audit-2026-10.md — the October 2026 audit: every bug found and fixed.tests/run.mjs drives a real Chromium through every feature, safety gate and
a set of attacks (296 checks), served with the production headers:
npm i --no-save playwright && npx playwright install chromium
node tests/run.mjs
npx serve . # or: python3 -m http.server 3000
The service worker and device scanning need https:// or localhost.
Everything placed over the scene is anchored to positions measured from the image's luminance profile: header in the ceiling band (0–8.9 %), the hero frequency in the calm haze band (38.7–50.9 %), the live wave drawn on the distant land horizon (51.4 %), tone cards resting on the land above the diners, light that swells at the orbital horizon (15.3 %) and floor as tones play. The stage keeps the image's aspect ratio and is centred on the window opening, so those anchors hold on every screen size.
prefers-reduced-motion.A static, client-only app — no server code, accounts, cookies, analytics or third-party resources. Hardening (each control was attack-tested):
| Threat | Control |
|---|---|
| Script injection (XSS) via labels, saved data or Bluetooth device names | all dynamic text escaped; strict CSP with SHA-256 hashes for the one inline script and style — no unsafe-inline, no unsafe-eval, no external origins |
| Injection through any HTML sink | Trusted Types default policy routes every innerHTML through a tag-aware sanitizer; eval, string timers and new policies are refused |
| Data exfiltration | connect-src 'self', default-src 'none', form-action 'none' |
| Clickjacking / framing | frame-ancestors 'none', X-Frame-Options: DENY, JS frame-guard in the single file |
| Prototype pollution | saved state rebuilt from an allow-list of keys (no object spread); built-in prototypes and app data frozen |
| Oversized / malformed saved state | strict type checks and clamps; max 48 tones, 40-char labels; control and bidi-override characters stripped |
| Service-worker cache poisoning | caches an explicit allow-list only; no query strings, redirects, errors or cross-origin responses |
| Cross-origin attacks / side channels | COOP + COEP + CORP same-origin (cross-origin isolated), nosniff, no-referrer, Origin-Agent-Cluster |
| Downgrade | HSTS (2 years) + upgrade-insecure-requests |
| Permission abuse | Permissions-Policy denies everything except microphone (device names, on click only, released immediately), speaker selection, and — only on a tap — geolocation and Bluetooth |
| Repo files exposed by deploy | .vercelignore ships only the app |
| Supply chain | zero runtime dependencies; font self-hosted; CI action pinned by commit |
After editing index.html, run node tools/csp.mjs to refresh the CSP
hashes (CI fails if you forget). Report vulnerabilities via
SECURITY.md.
AudioContext.setSinkId (Chromium). Elsewhere
tones play through the system default.localStorage.