Inside the project
Prepared with the project’s development agent from source and retained evidence. This is a project-owner assessment, not an independent customer review. Dated checks were not rerun for this website.
A single-page, offline-capable hearing and tinnitus instrument whose defining quality is restraint: it measures what uncalibrated browser audio can honestly support and labels everything else. Its strongest, genuinely working parts are the adaptive per-ear audiometry (Bayesian ZEST-inspired thresholds reported with a credible interval, a downloadable self-referenced profile, catch-trial false-alarm rate and one-tap retest), the slow tinnitus pitch-match with a live oscilloscope/spectrum fine-tuner, a calibration-free speech-in-noise screen, and an exploratory research-test suite. A persistent safety spine, local-by-default storage and an emergency stop sit above every tab. It is explicitly a research/self-observation prototype, not a diagnostic device, and never claims calibrated dB HL.
What stands out
- Honest, uncertainty-first design: thresholds carry 95% credible intervals + trial counts; the plot is a self-referenced profile, not a dB HL audiogram
- Adaptive audiometry engine (ZEST-inspired posterior, informed priors, catch trials, shuffled interleave) with a downloadable PNG audiogram
- Breadth of auditory tests in one dependency-free page: Quick sweep/pitch-match, audiology battery, speech-in-noise, 8+ research tests
- Strong safety + privacy posture: protocol-wide safety gate reconfirmed each load, pain interlock, no microphone, local-only by default, explicit-consent send
- Runs anywhere with no install/build; self-contained index.html
Current limits
- Uncalibrated: no dB HL/SPL; results are relative/within-session, device- and headphone-dependent
- No automated test suite; performance figures are the author's own simulations, not independently validated
- Several recent modules (measurement spine, Sound Lab, prospective A/B, newer research tests) are committed but not independently runtime-verified
- Extended highs (10-16 kHz) hardware-limited; per-ear work needs headphones
- No real UI screenshot/audio/video demo assets exist yet (only a share card + logo)
Features & evidence
Quick test (sweep + pitch-match scope)
releasedSet a 1 kHz level, run a 250 Hz-20 kHz hearing-range sweep, then a slow pitch-match with a live oscilloscope + spectrum fine-tuner (÷2/×2 octave jumps), averaged over up to 3 passes; rule-based tinnitus-character suggestion.
Recorded evidence
source+deployed; initial commit ~2026-08 (e12dfbd), Pages site 8c2ea9d; pitch-match scope observed running in original build session; live status not re-verified 2026-10-18
Audiology panel (adaptive thresholds + audiogram)
releasedPer-ear warbled-chirp thresholds 250 Hz-8 kHz (optional 10-16 kHz EHF); Bayesian/ZEST-inspired posterior with credible interval; downloadable PNG audiogram with CI whiskers + ISO-7029-style age overlay; device/stereo check; catch-trial false-alarm rate; one-tap test-retest.
Recorded evidence
source+deployed ~2026-08 (e12dfbd); author simulation in README (~6 trials/freq, ~1.8 dB mean error) — not independently verified; no automated test suite
Speech-in-noise (digits-in-noise)
releasedCalibration-free three-digit-in-noise screen, 1-up/1-down SNR track, relative SRT.
Recorded evidence
source+deployed ~2026-08; README author simulation SRT recovered to ~0.8 dB; relative (TTS, uncalibrated)
Research tests — spectrum / RI function / tuning curve / gap detection
installed-testedTinnitus spectrum-likeness map, residual-inhibition function, tinnitus tuning curve, adaptive gap-detection.
Recorded evidence
committed 7bfe34e ~2026-09-14 (codex/publish-research-tests, FF-merged); these four were driven in-browser during their original build session
Research tests — frequency discrimination / temporal-modulation / binaural ILD-ITD / dichotic stream
sourceAdditional adaptive psychoacoustic tasks; results captured in the JSON export.
Recorded evidence
committed ~2026-09-14; NOT independently runtime-verified this pass
Measurement spine
sourceSafety gate (seek-care / self-report-only), device/capability + master-bus dBFS monitor, momentary check-ins + trends, auditable event stream, emergency stop, Session Trace export/merge/delete (schema v4).
Recorded evidence
committed ~2026-10-03/04 (1dd4032, b05ec98); not independently runtime-verified
Sound Lab + prospective personal A/B
sourceBounded comfort sessions (narrowband/notched/pink/white/quiet-rest) with before/after observations; computer-randomised within-person A/B returning a descriptive difference only (no p-value/efficacy).
Recorded evidence
committed ~2026-10-03 (1dd4032) and A/B ~2026-10-04 (ecf7216); not independently runtime-verified
Result delivery (optional Netlify -> Microsoft Graph)
sourceOn-screen results, JSON/CSV export, audiogram PNG, pre-filled email, and an opt-in server-side send behind a health-data consent prompt.
Recorded evidence
functions present (send-result.js app-only; send-result-delegated.js no-secret); requires Netlify deploy + env vars; runtime unknown
Supporting notched-sound research (embedded)
sourceLiterature strand (Consensus-reviewed) shaping the notched-noise/Sound-Lab and tinnitus features; cited inline in README + Methods.
Recorded evidence
README references [1]-[18]; no separate repo; not a shippable product
Review updates & corrections
- No new commits since the 17 Oct biography — HEAD still 3e0a6c77 (last commit ~2026-10-04); repo content unchanged.
- Site integration now exists: [local evidence archive] and dist/projects/hearing.html (coordinator-curated from yesterday's biography).
- Coordinator reworded body copy to 'Sound-therapy language is deliberately limited to exploratory research' — but the integrated FAQ 5 still says sound-therapy claims were 'tempered after a 2026 RCT'. Minor internal inconsistency to reconcile (coordinator's copy, not mine to edit).
- Still no real screenshot/audio/video demo assets in the repo or the site (only og.png + logo.svg). The 'real screenshots and demos' request remains open and needs a permitted operator.
Workflow walkthrough
Explore the live project website above. The steps below describe the development workflow; native operations may require a separate installation.
- Open the live app in a modern browser with headphones and answer the safety check (reconfirmed every load)
- Set a comfortable level using the 1 kHz reference tone
- Run the Quick hearing-range sweep (tap 'I can't hear it anymore'), then the slow pitch-match using the live scope/spectrum fine-tuner
- Optionally run the full Audiology panel for a per-ear profile with uncertainty whiskers, and download the audiogram PNG
- Review results on screen; export JSON/CSV (everything stays local unless you explicitly send it)
Planned captures · not yet available
- Landing page, live audiogram + PNG export, pitch-match scope/spectrum, one research test.
- Short screen-capture walkthrough of a Quick test end-to-end.
- Example raw-session JSON export + downloadable audiogram PNG (runtime-generated, not committed files).
Development biography · earlier archive
Development profile compiled from project source and retained records in October 2026. Dates and test results describe those records; they do not imply a new build, live acceptance test or public release.
3 · Biography
Most consumer "hearing test" pages overstate themselves: they present a tone player as if it produced a clinical audiogram, ignore that browser audio is uncalibrated, and reduce tinnitus to a single matched pitch. The Hearing & Tinnitus Panel is the opposite wager — an instrument built around the honest question what can a browser actually measure, and how can it say when it doesn't know? Its documented intellectual centre (stated on the Methods page) is a specific, testable relationship: where does a person's tinnitus percept sit relative to their own measurable hearing loss — at the audiometric edge, inside the loss region, or at a displaced frequency — expressed in octaves and an estimated Greenwood tonotopic coordinate. That framing separates research-prototype capability (collecting repeatable within-person relationships) from clinical validation (calibrated dB HL, validated questionnaires), which the app never claims.
The intended audience is threefold: individuals who want to observe and track their own hearing/tinnitus between clinic visits; a producer/technical audience curious about auditory psychophysics; and an audiologist or ENT reading a shared session as context, not a result. The app is careful to be useful to each without misleading any.
What it does, concretely, spans four visible tabs plus a persistent "measurement spine". Quick gives a 1 kHz level-set, a 250 Hz→20 kHz hearing-range sweep, and a slow tinnitus pitch-match with a live oscilloscope + spectrum fine-tuner (with ÷2/×2 octave jumps to defeat octave confusion) averaged over up to three passes. Audiology runs per-ear pure-tone thresholds using warbled pulsed chirps and a Bayesian, ZEST-inspired adaptive estimator: each (ear, frequency) holds a posterior over its threshold, informed by priors from age and neighbouring frequencies/the other ear, and reports a threshold with a 95% credible interval and trial count rather than false single-dB precision. It adds catch trials (false-alarm rate), shuffled interleaving, a self-referenced downloadable audiogram with an illustrative ISO-7029-style age overlay, and a one-tap test–retest repeatability check. Speech-in-noise is a calibration-free digits-in-noise screen with a 1-up/1-down SNR track yielding a relative SRT. Research tests is a directly accessible exploratory suite: frequency-discrimination, gap-detection, temporal-modulation detection, binaural lateralisation, dichotic stream attention, a tinnitus spectrum/likeness map, a residual-inhibition function and a tinnitus tuning curve.
The distinctive ideas are less the individual tests than the discipline around them. A measurement spine ribbon runs above every tab: a protocol-wide safety state (sudden-hearing-change or neuro/vestibular symptoms switch the app to "seek care first"; sound-pain or uncertain tolerance switches to self-report-only and removes sound-provoking tasks for the session, reconfirmed on every load); a device/capability context block (AudioContext state, sample rate, stereo-routing check, a monitored master-bus RMS/peak/clipping in dBFS — explicitly device/signal facts, not acoustic calibration); momentary check-ins (prominence, loudness, distress, stress, tolerance) with local trends; an auditable requested/applied/observed event stream; and a persistent emergency-stop that silences every Web Audio voice and OS speech instantly. A Sound Lab offers bounded comfort sessions (narrowband/notched/pink/white maskers or a quiet-rest comparator) with fixed durations and before/after observations, and a prospective personal A/B comparison that computer-randomises balanced session pairs, conceals later allocations, and returns a descriptive within-person difference — never a p-value or efficacy claim.
A representative user journey: open the page on a phone with headphones; answer the safety check; set a comfort level; run the Quick sweep and pitch-match, or the full Audiology panel for a profile with uncertainty whiskers; optionally run a research test or a Sound Lab session; review everything on-screen. Results stay local in that browser by default. Nothing is transmitted on finishing a test — the user must explicitly export JSON/CSV, download the audiogram PNG, open a pre-filled email, or consent to an optional configured results service.
The honesty is structural, not a footnote: the profile is named a "self-referenced hearing profile", never a dB HL audiogram; speech-in-noise is an "SRT-equivalent (relative)"; the tinnitus "type" is a transparent rule-based suggestion that surfaces red flags (pulsatile, unilateral, sudden-onset-with-vertigo) and routes to an audiologist/ENT. Sound-therapy language is deliberately limited to exploratory research. The result is a tool that behaves like an instrument that knows the limits of its own measurements — which, for uncalibrated browser audio, is the whole point.
4 · Modules & features — what a visitor can see / hear / try
(All authored by the project in index.html; the only external moving part is the optional Netlify/Graph email path.)
- Quick test — reference-tone level set; hearing-range sweep; slow pitch-match with live oscilloscope + real-time spectrum + A/B-against-silence; rule-based tinnitus-character suggestion. See/hear/try.
- Audiology panel — per-ear warbled-chirp thresholds (250 Hz–8 kHz; optional 10–16 kHz EHF, flagged exploratory); downloadable PNG audiogram with CI whiskers + age overlay; device/stereo check; catch-trial false-alarm rate; test–retest repeatability; advanced tinnitus battery (pitch, sound-quality audition, loudness in dB SL, minimum masking level, MRIL residual-inhibition search, impact index). See/hear/try + downloadable artifact.
- Speech-in-noise — adaptive digits-in-noise (TTS + Web Audio noise) → relative SRT. Hear/try.
- Research tests — frequency discrimination (cents/Hz), gap detection (with catch trials/false alarms), temporal-modulation detection (4/8/16/32 Hz), binaural ILD/ITD lateralisation, dichotic stream attention, tinnitus spectrum/likeness map, residual-inhibition function, tinnitus tuning curve. Try; results in JSON export.
- Measurement spine — safety gate, capability/quality context, momentary check-ins + trends, auditable event stream, emergency stop, Session Trace (JSON/CSV export, merge-import, per-record + full-history deletion). See/try.
- Sound Lab + prospective A/B — bounded comfort sessions and computer-randomised within-person A/B (descriptive difference only). Hear/try.
- Result delivery (authored UI + optional dependency) — on-screen results, JSON/CSV export, audiogram PNG, pre-filled email; optional server-side send via Netlify Function → Microsoft Graph (the only third-party integration).
5 · Technical foundations & integrations
- Web Audio API throughout —
OscillatorNodetones,BufferSourcegenerated/filtered noise,StereoPannerNodeL/R split, per-voiceGainNode; canvas for audiogram/scope/spectrum. Exponential sweep lawf(t)=f0·(f1/f0)^(t/T). - Audiometry engine — ZEST-inspired posterior over θ (
initPrior/updatePost/postStats), posterior-mean placement, SD-based stop; catch trials; shuffled interleave. - Speech-in-noise math (verified in-repo against DiN literature):
SNR = 20·log10(RMS_speech/RMS_noise); noise amplitude scaled by10^(−N/20)("fix speech, vary noise"); 4 dB→2 dB step after first reversal; SRT = mean of reversal SNRs (first discarded). - No bundled local packages / no npm in the web app. Optional functions use Node 18+ global
fetch(zero deps). Local packages named in the brief (FIRFilters/Kalman/SpectralProcessor/RemezEngine) are not used by this app — they belong to the sibling native/DSP portfolio; stating otherwise would be inaccurate. - Integrations: optional Netlify Forms + Netlify Functions (
send-result.jsapp-only client-credentials;send-result-delegated.jsdelegated/no-secret) → Microsoft GraphMail.Send. Credentials live only in Netlify env vars; the recipient is fixed server-side (not an open relay); origin allow-listing, size cap, per-IP rate limit, honeypot, payload validation.tools/get-refresh-token.jsmints the delegated token locally. - Privacy posture: no microphone; no claimed room-acoustics/SPL/autonomic sensing; local-by-default storage (schema version 4); nothing transmitted without explicit user action + health-data consent.
6 · Maturity by feature (dated; evidence .git/logs/HEAD)
Dates derived from the git reflog (±1 day for timezone, commits +0100).
- Implemented + committed + public (source-complete): Quick, Audiology (Bayesian thresholds, audiogram, reliability), Speech-in-noise, measurement-quality layer — initial commit ~2026-08 (
e12dfbd), Pages site + privacy/social-preview same window (8c2ea9d,192cf6a). - Research-test suite — "Publish research auditory tests" ~2026-09-14 (
7bfe34e, codex/publish-research-tests, fast-forward-merged to main). - Measurement spine + Sound Lab — ~2026-10-03 (
1dd4032/7822f8e); private-by-default + master-bus monitor (b05ec98); prospective Sound Lab A/B (ecf7216); research-test accessibility + safety-lock polish ~2026-10-04 (edafbb7,a9a2a39,3e0a6c7). Last commit ~2026-10-04 (~13 days before this pass). - Tests passed: No automated test suite in the repo. The README cites the author's own simulations (Bayesian ~6 trials/freq, ~1.8 dB mean error; SNR steps exact; SRT recovered to ~0.8 dB). Treat as author-stated, not independently verified.
- Built: N/A (static; no build).
- Runtime verified: the four earliest research tests (spectrum, residual-inhibition function, tuning curve, gap detection) were driven in-browser during their original build session; the later-added modules (measurement spine, Sound Lab, prospective A/B, and the additional research tests) are committed but NOT independently runtime-verified in this read-only pass — mark unknown.
- Released/deployed: deployment is configured . Live status not verified here (no network in this pass).
9 · Roadmap (aspirational — not yet built)
- Native iPhone HRV/pupillometry reactivity probe (sits with iOS Vitals) to add an objective autonomic correlate to the self-reported sound-reactivity log — the in-app text already states the browser does not measure this.
- Deeper tinnitus-tuning-curve vs psychoacoustic-tuning-curve comparison; richer longitudinal trend visualisations.
- Optional calibrated-headphone profiles to narrow the uncalibrated gap (still not clinical dB HL).
10 · Known limitations
- Uncalibrated: no dB HL/SPL; levels depend on device/DAC/OS volume/headphones; results are relative/within-session, not clinical.
- Headphones required for per-ear work; EHF (10–16 kHz) is hardware-limited and flagged exploratory.
- Not diagnostic; tinnitus "type" is a rule-based suggestion; research tests are within-session, uncalibrated, not clinical cut-offs.
- No automated test suite; several recent modules not independently runtime-verified here.
11 · FAQs
- Is this a medical device / diagnosis? No — an uncalibrated research/self-observation prototype; see an audiologist (calibrated audiogram) or ENT for concerns.
- Do I need anything installed? No — open the URL in a modern browser; headphones strongly recommended (required for per-ear tests).
- Where do my results go? Local to your browser by default; nothing is sent on finishing a test. You may export JSON/CSV, download the audiogram PNG, email, or opt into the configured send service.
- Why "relative" not dB HL? A browser can't produce calibrated sound pressure; the app re-references to your own best threshold and is explicit about it.
- Does it treat tinnitus? No. The Sound Lab offers bounded comfort sessions and a descriptive personal A/B; sound-therapy claims were tempered after a 2026 RCT — no efficacy is claimed.
12 · Research prototype vs clinical validation (required separation)
- Prototype capability (real): repeatable within-person relationships — adaptive thresholds with uncertainty, pitch/loudness/masking/residual-inhibition characterisation, speech-in-noise SRT, and the pitch-vs-loss geometry — all self-referenced and local.
- Clinical validation (explicitly absent): no calibrated dB HL, no booth/transducer calibration, no validated questionnaires (the impact index is original wording "modelled on" validated instruments), no automated/independent test suite, no regulatory status. The product's own copy states this throughout.
13 · Supporting "notched-sound research" (entry 13, repo = none)
Entry 13 ("research") has no separate repository; it is the embedded evidence strand that shaped the panel's notched-noise/Sound-Lab and tinnitus features — a literature review (via Consensus) cited inline in README.md and the Methods page: Bayesian audiometry [13–15]; Digits-in-Noise [4–6]; extended highs [8,9]; tinnitus battery/impact/dB SL/MRIL [10–12]; and the notched-sound-therapy evidence that was deliberately tempered — a 2026 RCT finding notched therapy no better than amplification [16], with tailored notched-music residual-inhibition effects [17,18]. Conclusion: this is supporting research embedded in the hearing panel, not a separate shippable product. The standalone notched-sound therapy app (NoiseColour) is a different deliverable owned by another agent (requests slug noisecolour, entry 14) and is out of scope here.