Skip to content

v1.5.0 — Periodic Breathing, Session Waveforms & Persistent Cache

Choose a tag to compare

@GChavez0210 GChavez0210 released this 19 May 19:35
· 37 commits to main since this release

What's new in v1.5.0

Added

  • Periodic Breathing Detection — AASM-compliant algorithm detects Cheyne-Stokes / periodic breathing from tidal volume waveform. Tracks episode count, total time, PB%, and average cycle length per night. Nights with ≥5% PB time are flagged as clinically significant.
  • Periodic Breathing Card — New Insights page card showing aggregated PB stats with a colour-coded significance flag and a hover tooltip explaining Cheyne-Stokes respiration and management options.
  • Session Waveform Viewer — Click any night on the calendar or sessions list to open high-resolution EDF signal charts: Flow Rate, Breathing Amplitude, Flagged Events, Flow Limitation, Leak, and Pressure. Periodic breathing episodes are overlaid as highlight regions on the amplitude chart.
  • Persistent Session Cache — EDF files are now cached locally during every import so session waveform graphs remain accessible after the SD card is removed. No re-import needed on subsequent app launches.
  • Flow Limitation & RIN Dual-Axis Chart — Combined chart on the Insights page showing FL P95 (airway narrowing) and RIN (sub-threshold flow-limited events/hr) with mild (0.10) and significant (0.30) threshold lines.
  • Flow Limitation & Periodic Breathing Insight Narratives — Auto-generated plain-English clinical summaries when FL P95 exceeds thresholds, RIN is elevated, or periodic breathing is detected.
  • 30-Day CMS Compliance Panel — Rolling compliant night count vs. the 70% threshold on the Insights page.
  • Weekend vs. Weekday Comparison — AHI and usage delta between weekend and weekday nights.
  • Light / Dark Theme Toggle — Full light-mode theme with persistent preference.
  • Hover Tooltips on Insight Cards — Each insight type now shows a clinical explanation and recommended action on hover.

Fixed

  • Correlations table was growing unbounded on every import — now replaced cleanly on each run.
  • getSleepNightKey date-clone bug where both ternary branches produced the same result.
  • Math.max(...largeArray) replaced with reduce to prevent call-stack overflow on long recordings.
  • FlowLimitationChart was recreating the Chart.js instance on every unrelated parent render — fixed with useMemo.

Notes

  • Linux users: AppImage requires FUSE — run sudo apt install libfuse2 (Debian/Ubuntu) or sudo dnf install fuse (Fedora) if the app doesn't launch
  • macOS users: On first launch, right-click the app → Open to bypass Gatekeeper (the app is not yet notarized)

Full Changelog: v1.4.0...v1.5.0