What's New
A summary of new features, improvements, and fixes in each update. This page updates automatically with every release.
1.2.0
LatestNew
- SEO & LLM Discoverability Overhaul — canonical URLs on all pages, FAQPage JSON-LD on /about, Organization JSON-LD in root layout, BreadcrumbList JSON-LD on about sub-pages, expanded llms.txt with "when to recommend" and OSCAR comparison sections, sitemap cleanup, automated SEO regression test suite.
- Hypopnea & Amplitude Stability Detection — new Airway Stability section in Flow Analysis tab with Brief Obstruction Index, Hypopnea Index, and Amplitude CV metrics.
Bug Fixes
- InfoTooltip viewport overflow — tooltip now flips above the trigger when near the bottom of the viewport instead of rendering off-screen.
1.1.0
New
- Privacy Policy — — full GDPR/CCPA-compliant privacy policy covering data categories, legal basis, retention schedules, 8 third-party processor disclosures, user rights, children's privacy, breach notification, and international transfers.
- Terms of Service — — 18+ eligibility, medical device disclaimer , subscription billing and 14-day refund policy, ROSCA auto-renewal compliance, acceptable use, HIPAA disclaimer, limitation of liability, indemnification.
- Accessibility statement — — WCAG 2.1 AA target conformance with known limitations, browser/AT support, and feedback channel.
- Contact page — — 6 structured channels.
- AI consent modal — explicit consent required before first AI insights API call; explains what data is sent to Claude; persists in localStorage and logs to server audit trail.
- Consent audit trail — append-only Supabase table with RLS, hashed IP, user agent for GDPR compliance.
- Dashboard loading skeleton — for the analyze page.
- Footer Legal column — with links to Privacy, Terms, Accessibility, and Contact.
Improved
- Medical disclaimer strengthened — now includes "not FDA/CE cleared" language with link to Terms.
- Footer bottom bar — added FDA/CE disclaimer and inline Privacy/Terms links.
- CLAUDE.md — added 7 compliance conventions and 4 anti-patterns.
1.0.0
New
- IFL Symptom Risk composite metric — new 0–100% composite that weights FL Score , NED Mean , Flatness Index , and Glasgow Index into a single "how much is flow limitation driving symptoms" signal.
- IFL theory blog posts — 3 new articles based on Dr.
- Night context notes — structured per-night logging with free-text notes, persisted to localStorage, correlated by AI insights.
- Actionable AI insights — AI prompt now analyses all machine settings, correlates user-reported night context, and generates concrete investigation suggestions.
- Extended settings extraction — pulls all STR.edf machine settings plus catch-all for remaining signals.
- Metric methodology explanations — every key metric now has a "How is this calculated?" expandable section in its info tooltip.
- Progressive persistence — when localStorage exceeds 4MB, oldest nights are dropped via binary search instead of losing everything, with warning banner.
- Analysis complete banner — shows night count and date range after processing.
- Machine event parsing — EVE.edf parser extracts machine-recorded events from ResMed EVE files using EDF+ TAL format.
- Per-type event toggles — all event types now have individual toggle buttons on Graphs and Waveform tabs.
- Provider-grade chart browser — synced stacked charts with shared toolbar, touch gestures, and minimap.
- SA2 EDF oximetry parsing — auto-detects pulse oximetry from ResMed files, prioritised over CSV when both exist.
- Waveform data contribution — opted-in users contribute raw breathing patterns alongside analysis scores, with engine version tracking and incremental upload.
- Share link MVP — 30-day share links for analysis results with consent flow.
- For Providers page — marketing page for sleep consultants at with contact form.
- Night Summary Hero card — glanceable traffic-light therapy status above metrics.
- Auto-fix Sentry errors — GitHub Actions workflow for automated error fixes via Claude Code.
- Real EDF test fixtures — 3 representative nights with integration tests and Playwright E2E tests.
- Brand voice guide — with voice attributes, tone, and terminology reference.
- Centralised chart theme — as single source of truth for all chart styles.
- Contribution nudge social proof — live counter of contributors and total nights.
- AI credits synced from server — community tier credit count now reflects actual server-side usage.
- Unlimited data contribution — removed 1095-night cap; chunked batches of 1000.
Improved
- Reframed arousal-centric language — metric explanations, insights, and AI prompt now reflect that flow limitation itself may drive symptoms independently of arousals.
- Glasgow thresholds updated
- Typography upgrade — Plus Jakarta Sans for body text.
- Two-tone wordmark — "Airway" bold white + "Lab" brand-teal.
- Device-agnostic upload flow — removed ResMed-specific language; ResMed mentioned only in compatibility note.
- Dashboard density — tighter spacing, Device Settings collapsed by default, beginner-friendly progressive disclosure.
- Tab bar redesign — variant with visible underline indicator; primary tabs show full words on mobile.
- Chart UX — zoom presets as pill buttons, interaction hints near toolbar, minimap hover state.
- Improved event detection — flatness-based FL detection replacing amplitude-based.
- Consolidated Supabase clients — single module import.
- Shared rate limiter — replaced 5 inline implementations with class.
Bug Fixes
- Critical engine bugs — Glasgow weighted averaging, NED H1/H2 split, WAT FFT zero-padding, oximetry buffer-zone trimming, night-grouper date extraction.
- Security hardening — CSRF validation, rate limiting on all API routes, Stripe webhook verification, Zod validation, CSP headers.
- Accessibility — skip-to-content, ARIA labels, keyboard chart navigation, semantic heading hierarchy, screen reader announcements.
- UX quick wins — loading skeletons, error boundaries with retry, empty states, toast notifications.
- Glasgow radar chart scaling — axis domain corrected from to.
- Oximetry-only upload — no longer re-processes entire SD card.
- Heatmap/metrics table date sort — newest-first default, visible sort button.
- Demo exit preserves data — no longer clears persisted real analysis data.
Removed
- ~85 macOS duplicate files — removed Finder-created copies with " 2", " 3" suffixes.
0.6.0
New
- Auth + Stripe subscription system — full authentication flow with Supabase Auth , Stripe checkout for Supporter and Champion tiers, customer portal, and webhook-driven tier sync.
- Cloud storage system — raw SD card file upload with consent, deduplication, and waveform loading from cloud when local files unavailable.
- Flow waveform browser — interactive waveform viewer with scroll-zoom, drag-pan, keyboard navigation, pressure overlay, and event markers.
- Changelog page — user-facing route parsed from this file.
- Feedback widget — floating feedback form stored in Supabase.
- Data contribution opt-in — anonymised breathing scores contributed to research dataset with explicit consent.
- 20 Plausible analytics events — conversion funnel , engagement , and retention signals.
- Build-time version check — fails the build if version has no matching CHANGELOG entry.
Improved
- Generalised CPAP → PAP — all user-facing references updated to cover BiPAP/ASV users.
- Pricing page CRO improvements — yearly monthly-equivalent pricing, value-oriented copy, FAQ section.
- Demo AI insights — static pre-generated insights for demo mode with support CTA.
Bug Fixes
- Browser freeze on large SD cards — raised night cap to 3 years, added chunked processing.
- Synthetic waveforms — show synthetic waveform when SD files unavailable instead of dead end; don't show for real data.
- Checkout error handling — graceful fallback when Stripe price IDs are missing.
- Combined metric explanations — render as separate paragraphs instead of merged text.
- GitHub stars rate limiting — proxied through server API to avoid client-side 403s.
Security
- Auth hardening — account deletion, health check endpoint, deployment safeguards.
- RLS enforcement — enabled on and tables.
- API logging — on all 4xx rejections for audit trail.
0.5.0
New
- AI Insights MVP — optional AI-powered therapy recommendations via Claude Haiku API route.
- AI key input component — "Unlock AI-powered insights" card with API key input, stored in localStorage.
- Skip-to-content link — keyboard accessibility improvement for screen reader users.
- Medical disclaimer on forum exports — "Not medical advice — discuss results with your clinician".
Improved
- Renamed SleepScope → AirwayLab — full codebase rename including all metadata, localStorage keys, OG images, JSON-LD, sitemap, and documentation.
- Anonymized codebase — removed all personal identifiers, author set to "AirwayLab".
- AI insights route hardened — added max 90-night limit on request payload validation.
- Traffic light accessibility — metric values now include with status text.
0.4.0
New
- Custom thresholds — power users can override all 15 traffic-light threshold levels via a settings modal.
- Comparison mode — new "Compare" tab for side-by-side two-night comparison with delta badges, traffic-light indicators, and a secondary night picker dropdown.
- Enhanced PDF report — multi-page layout with:.
0.3.0
New
- Glasgow component breakdown on Overview tab — collapsible section showing all 9 Glasgow components (Skew, Spike, Flat Top, Top Heavy, Multi-Peak, No Pause, Insp.
- Heatmap metric toggles — toggle buttons in the Night-by-Night Heatmap header to show/hide individual metric rows.
- Heatmap column sorting — click date header to sort chronologically , click metric row labels to sort nights by that metric's values.
- Heatmap sparklines — optional "Trends" toggle adds a mini SVG sparkline column at the end of each metric row.
- Clickable oximetry upload from results — "No Oximetry Data" card on the Overview tab is now clickable , opens a file picker for CSV upload and re-runs analysis with oximetry data.
- Inline email opt-in in controls bar — email signup moved from bottom of results page to the controls bar.
Improved
- "Try Demo" → "See Demo" — updated button text on landing page and analyze page.
Bug Fixes
- Page wider than viewport — added to in and class to in , preventing horizontal scroll caused by wide heatmap tables or other overflowing content.
0.2.1
Bug Fixes
- Critical: Glasgow scores always 0 on real SD card uploads — ResMed BRP.edf files store flow data in L/s , but the Glasgow engine thresholds are calibrated for L/min.
0.2.0
New
- Root error boundary — — catches unhandled runtime errors with a user-friendly recovery page.
- Test suite — 6 test files with 105 passing tests covering:.
- Clipboard error handling — visual error state when clipboard write fails.
- Vitest configuration — with jsdom environment and path aliases.
Improved
- Parallelised file I/O
- Memoised derived state
- Memoised settings diff
- Memoised metrics array
- O(1) tooltip lookups
- Wrapped components in `React.memo` — , , now skip re-renders when props are unchanged.
- Wrapped callbacks in `useCallback`
- Standardised traffic-light colours
Bug Fixes
- Export crash resilience — all export functions wrapped in try-catch to prevent unhandled exceptions.
- Clipboard API fallback — graceful degradation when is rejected.
Accessibility
- Added `aria-hidden="true"` to decorative hero dashboard on landing page
- Added `aria-label="Machine settings per night"` to settings timeline table
- Added `scope="col"` to all table header cells in settings timeline
- Added `aria-hidden="true"` to decorative AlertTriangle icons in settings timeline
- Added `sr-only` text ("Settings changed") for screen reader users on change indicators
Security
- Persistence layer — — 7-day auto-expiry, 4MB size guard, bulk signal data stripped before storage, JSON parse wrapped in try-catch with corruption recovery.
- Upload validation — — file type allowlist, 500MB per-file size limit, folder structure validation, max 365 files guard.
0.1.0
New
- Initial MVP release
- Glasgow Index engine — 9-component breath-by-breath flow limitation scoring.
- WAT engine — FL Score , Regularity Score , Periodicity Index.
- NED engine — breath segmentation, NED calculation, flatness index, M-shape detection, RERA sequence detection.
- Oximetry engine — 17-metric framework: ODI3/4, T<90/T<94, HR clinical surges, coupled events, H1/H2 splits.
- EDF parser — binary EDF reader for ResMed SD card files.
- Settings extractor — STR.edf parser for daily machine settings with AirCurve/AirSense detection.
- Night grouper — date-based file grouping with session merging.
- Oximetry CSV parser — Viatom/Checkme O2 Max format support.
- Web Worker architecture — all analysis runs off the main thread.
- Analysis orchestrator — manages worker lifecycle, file grouping, result collection.
- Dashboard UI — 5-tab layout.
- Charts — Glasgow radar, trend lines, night heatmap, flow waveform, oximetry timeline.
- Export — CSV, JSON, printable PDF report, forum post formatting.
- Session persistence — localStorage with automatic restore on revisit.
- Landing page — hero section, 4-engine feature cards, privacy callout, demo CTA.
- Demo mode — 5-night sample dataset for instant exploration.
- Email opt-in — post-analysis waitlist capture.
- Privacy-first design — all processing client-side, zero data transmission.
- Dark-only theme with shadcn/ui components
- Responsive mobile-first layout
- GPL-3.0 license