Releases: elkimek/get-based
v1.7.7 — Oura RHR matches Oura app + zero-sentinel cleanup
RHR now matches what your Oura app shows. Resting Heart Rate on the dashboard used the night-long average from Oura's sleep payload, which runs 5–10 bpm higher than the true RHR. The Oura app's "Resting Heart Rate" card and trend graph use the lowest 5-min average during sleep (typically hit in deep sleep) — we now source from the same field. Existing rows refresh on the next sync.
Bad-night zeros render as gaps instead of floor dots. Oura emits a literal 0 for HRV/HR scalars when a sleep session has no usable data (ring not worn, signal lost, sub-threshold session). Those zeros used to flow through to the history chart as a dot at the floor and drag the weekly mean down. Now treated as missing across HR, HRV, weight, body composition, and sleep durations — legitimate zeros (rest-day steps, no high-stress minutes, perfect-sleep awake time, body-temp deviation centered at 0) still display normally.
Oura Rest Mode still gets its dedicated hint. When Rest Mode is on, activity_score is 0 every day by design — the card stays visible and the detail modal shows a short explanation pointing you to the Steps card for raw movement data.
PRs: #195 (RHR sleep-window minimum), #196 (zero-sentinel filter)
v1.7.6 — MyHeritage Low-pass WGS: strand-aware SNP matching
- The "Genotype not in lookup" group is gone. MyHeritage's 2025 Low-pass WGS export reports every SNP on the build37 forward strand, but our catalog stored a handful of variants keyed on the opposite strand — so calls like
ACfor PCSK9 R46L orTTfor UGT1A1 G71R silently missed the table and ended up labeled "not in lookup" even though they're standard, well-characterized genotypes. SNP lookups now try the reverse-complement as a fallback when the direct read misses, so MyHeritage forward-strand calls resolve to the right catalog entry across all eight affected loci (PCSK9, MTR, UGT1A1, MTRR, BHMT, FADS1 coding, LIPC -514, MC1R). Palindromic A/T and C/G SNPs (where strand flipping is ambiguous) keep the strict lookup to avoid false positives. - Mild-effect SNPs now appear in their own group. Two protective heterozygotes — CETP I405V (AG) and *CYP1A2 1F (AC) — were correctly matched against the catalog but bucketed into "not in lookup" because the import preview only recognized three impact tiers. They're now rendered as 🟠 Mild findings, between Moderate and Normal.
- Honest coverage count. Imputation-noise calls (alleles that aren't valid for the variant under either strand — e.g. a
CGread at a C/T SNP) are now dropped at parse time instead of inflating the "not in lookup" group. The "X of Y health-relevant SNPs found" line reflects actually-curated matches.
v1.7.5 — Accessibility polish across the dark theme
- Better readability in dark mode. The muted grays used for footers, hints, and reference text were brightened to clear WCAG AA contrast on every background. A handful of small-text labels (footer trademarks, recommendation disclaimers) had a faint extra opacity layer that dragged them below threshold — that's gone now.
- Form labels and screen reader names. The chat onboarding fields, the Compare Dates picker, and several form selects now properly announce their purpose to screen readers. Marker-group expand/collapse buttons in the sidebar announce their open/closed state correctly as you toggle them.
- Visible link cues. The "primary study" / "more studies" links in the supplements card now carry a persistent underline so they're distinguishable without color alone.
- Sidebar marker-group rows. Mouse click-anywhere-on-row to toggle still works; keyboard navigation now lands on a real button rather than a div pretending to be one. The AI-context toggle stayed where it was, next to the flag count.
v1.7.4 — Multi-unit display, manual-entry picker, MyHeritage Low-pass WGS fix
- Alternate Units toggle (Settings → Display). When on, the marker detail modal shows each value in both the active system AND the other one — 5.20 mmol/L · ≈ 93.7 mg/dL for glucose, 140 mmol/L · ≈ 140 mEq/L for sodium, 8.5 mU/L · ≈ 8.5 µIU/mL for insulin. Off by default to keep the modal uncluttered for single-locale users. Reference + optimal ranges also render in both systems so a US user reading a Quest report (in
µIU/mL) can match it against the app's EU SI numbers (inmU/L) without flipping the global toggle. Per-profile preference, persists across sessions. - Type values in either unit on manual entry. The "+ Add Value Manually" form now offers a small unit picker next to the value field for markers with a known conversion. Default is the current display unit; flip it to type a value straight from a lab report printed in the other system, and the app converts to canonical SI before storage. Round-trip stays exact (5 mmol/L in, 5 mmol/L back out via the alt unit and home). The range sanity-check now uses alt-unit ranges so typing 90 mg/dL in EU mode doesn't spuriously flag against the SI ref range.
- Expanded unit coverage. Added real conversions for eGFR (mL/s → mL/min), GFR Cystatin, Cystatin C, hs-CRP, and CRP (all now gain mg/dL displays alongside SI). Added label-only entries for markers where the number is the same but the printed label differs on US reports: insulin (mU/L = µIU/mL), TSH, LH, FSH, sodium / potassium / chloride (mmol/L = mEq/L), WBC / RBC / platelets / differential absolute counts (×10⁹/L = K/µL, ×10¹²/L = M/µL). Total coverage: 81 of 124 markers (was 66). Truly universal markers like homocysteine and percentages stay no-toggle since the label is the same in both systems.
- MyHeritage Low-pass WGS imports work again. MyHeritage's 2025 raw-data export prepends a
##fileformat=MyHeritagecomment block before the column header, which the detector was reading as the first line and failing on. The CSV now imports normally. - Bugfix: stale marker after switching unit systems. If you flipped EU↔US while the manual-entry form was prepared, the form could carry the old display unit forward and convert your input through the wrong factor on save. The form now re-resolves every marker on open and on save, picking up the current display unit each time.
v1.7.2 — Readable changelog links + forceShow shadowing fix
- Hyperlinks in the What's New modal are now visible. Links rendered as the browser-default blue and disappeared into the dark-theme background. They now use the same accent-blue + underline as chat-message and summary-modal links.
- forceShow shadowing fix (internal). The "important entry" override that ensures the v1.7.1 "re-export your encrypted backup" notice reaches everyone now scans all changelog entries instead of just the topmost one, so future routine patches can't accidentally suppress a critical earlier notice.
Includes everything from v1.7.1 (not separately released as a GH release page — full notes are visible in-app via the What's New modal):
- Apple Health ZIP imports work again (lazy-load JSZip on first ZIP drop)
- Encrypted backups, fixed — please re-export (silently shipped
profiles: []since v1.6.x; manual export, auto-backup, folder-backup all affected) - Security hardening (marker-key allowlist at inline-onclick interpolation sites)
v1.7.0 — Medical History, per-value notes, smoother manual entry
Headline
- The Medical Conditions card is now Medical History — same place, broader scope. Beneath your own diagnoses, a new Family history subsection captures first-degree relatives plus grandparents (mother, father, sibling, child, maternal/paternal grandmothers and grandfathers). Each entry takes a condition, optional age of onset, and an optional note. Family history reframes risk interpretation — a father's heart attack at 52 makes a borderline LDL more actionable, and the AI sees both your own diagnoses and what runs in the family.
- The conditions list nearly tripled. Was 27 entries (mostly metabolic / endocrine / GI). Now ~117, covering neuro (Alzheimer's, Parkinson's, Epilepsy, MS, migraine), 19 cancer categories (breast, prostate, colorectal, lung, melanoma, pancreatic, ovarian, lymphoma, leukemia, …), skin (Psoriasis, eczema, rosacea), mental health (bipolar, ADHD, autism, PTSD, OCD), additional autoimmune, musculoskeletal, eye, hearing, infectious / chronic, and several genetic / congenital conditions. Autocomplete-clickable conditions with apostrophes (Alzheimer's, Hashimoto's, Crohn's, Graves', Sjögren's, Cushing's, Parkinson's, Huntington's) — previously broken from the dropdown — are clickable again.
- Notes on individual lab values. Every reading in the marker detail modal now has a small + note on hover. Attach context tied to a single date/marker: "fasted 14h", "retook because cuff felt loose", "different lab", "post-workout". Notes show as an italic line beneath the value; click to edit, × to remove. The AI sees these notes grouped by marker so a single reading's context can change how it's interpreted.
- Manual entry is much faster for paper lab reports. The marker modal's "+ Add Value" button moved above the Note section and is renamed + Add Value Manually. The form gained a Save & Add Another button that keeps the date and clears the value, an optional Note field, a range sanity check that flags values >10× the upper bound or <1/10 the lower bound (catches decimal/unit slips), a duplicate-date confirm that shows the existing value before overwriting, and a session-remembered last date. Enter to save, Esc to cancel, no future dates.
- Click any empty cell in Table view to add a value with that column's date pre-filled. The view mode (Charts / Table / Heatmap) now sticks across navigation and survives saves.
- Blood pressure renders as one card ("120/80 mmHg") instead of two. Storage stays unchanged — sys and dia are still tracked separately under the hood — but the card face and detail view present them paired like every other BP app.
- Manual BP entry, fixed. Tapping the diastolic field no longer kicks the cursor back to systolic. The idempotency fix also stops the form from rebuilding on every click inside it.
- Table and Heatmap views hide markers you have no data for. A 50-row category with values in 8 markers no longer scrolls past 42 rows of dashes. Empty categories show a one-line "import a PDF or use the sidebar" hint instead of an empty table.
- Sticky header in Compare Dates. Scroll long tables and the dates header stays on screen. Single page scrollbar.
- Inline value editing now uses a full-width input instead of an 80px cell that clipped multi-digit values, refreshes the underlying table/heatmap on save (was showing stale values), and treats Escape as a real cancel (no longer flips your imported value to "manual" if you press Esc without changing anything).
- PDF import accepts extensionless files — magic-byte sniff catches files exported with no extension (common with OCRFeeder on Linux).
- Wearable manual entry got chip + note parity. The "+ Add reading" form in the detail modal now offers the same context chips (resting / morning-fasted / post-workout / stress for BP and RHR) and a freeform note field that the dashboard empty-card form has had. Notes show up under the reading in the entries list, and feed the AI alongside the numbers.
- Category navigation no longer bounces to Dashboard. Clicking 3M / 6M / 1Y range buttons, deleting a value, or saving a PDF import — anywhere the sidebar rebuilds in response — used to read a stale "active" state and redirect you to Dashboard. Fixed across all 10 places that had the pattern.
- Bugfixes & improvements. Family-history relative picker is grouped into Parents / Siblings & Children / Maternal grandparents / Paternal grandparents. Each family-history entry shows a small relative chip with emoji so a long list reads scannably by "who" before "what". Mobile-stacked add-entry form. Manual-entry value input width is responsive (was clipping 6+ digit values like cholesterol or testosterone). Friendlier empty-state hints throughout Table / Heatmap / Family-history sections. Cross-device sync covers the new per-value notes and family history under the same per-row CRDT path everything else uses — no migration needed.
PR: #179
v1.6.19 — Airplane-mode resilience + identity recovery
- "Push committed but never arrived" — a small fraction of Evolu sync owners hit a state where the relay acked every push but never persisted anything, so a freshly-imported PDF would simply never show up on another device. Diagnose modal now flags this case explicitly (red dot, "your relay storage is empty despite recent pushes") and offers a one-click Rotate identity to recover. Server-side detection landed in the relay too.
- Sun & weather data on airplane. CAMS / Open-Meteo fetches now time out cleanly, fall back gracefully, and don't freeze the UV strip when you're offline. AI streams + requests gained timeouts so a wedged provider can't hang the chat panel.
- Scroll-anchor stability. Rapid navigation through AI-verdict cards no longer jumps around — the page restores to the element you focused, not a guessed pixel offset.
- Measurement retention redesign. Light & Sun room measurements now keep only the latest reading per (room, tool) instead of every historical sample. Walkthrough audits stay full-history.
- Sessions list compaction on the Light & Sun page — older sessions collapse so the page stays readable at 100+ sessions.
PR: #178
v1.6.2 — Silent-reject detector foundation
- Chart-modal cleanup — chart instances are now destroyed when the modal closes (small memory leak fix).
- Foundation for the silent-reject detector that landed in v1.6.19.
PR: #177
v1.6.1 — Bugfixes & improvements
PDF image import: clicking Cancel on the AI-provider privacy warning aborts cleanly now (was hanging).
Internal: unified the two confirm-dialog helpers under a single Promise-based API. 36 callsites migrated; same UX, fewer footguns for future contributors. Greptile reviewed: 5/5 safe to merge.
v1.6.0 — ☀ Light & Sun — the lens for everything sunlight does to you
☀ Light & Sun lens. Sunlight does a lot more than make vitamin D. Track your exposure across six biological channels — Vitamin D, Body clock, Cardiovascular, Mood & hormones, Cellular repair, and Outdoor eye light — and correlate them with your labs and wearable data over time. One-tap session logging. Plain-English summary on stop with computed vit-D yield and burn-dose status.
Sun-safety guardrails. Live alert at 70% + 100% of your daily burn dose. Photosensitizing-medication checkbox drops your threshold. Cumulative carry-over warning. High-altitude flag (>1500m).
Light therapy devices, first-class. 19 presets (Joovv, Mito Red, Sperti UVB, Verilux, full-spectrum bulbs) plus custom devices. Therapy sessions feed the same channels as outdoor sun.
Indoor light + screens. Map rooms and screens; per-question photobiology explainers; deficits feed back into the channel mix.
Eight on-device measurement tools. Lux meter, flicker detector, color-temp, classifier, glass transmission, sleep darkness, sunrise/sunset logger, eye-level audit. Camera frames stay on device.
AI sees your sun. Every chat carries active deficits, device library, week's per-channel exposure, and burn-dose state. After ≥4 weeks of overlap, channel-by-biomarker correlations join automatically.
Faster cross-device sync. Per-row deltas (gzipped) instead of fat blobs. Concurrent edits from phone + desktop merge cleanly. Self-serve relay-storage compaction in the Sync diagnose modal.
Five Lenses framing. getbased is organized around 🩸 Labs, 🧬 Genome, ⌚ Body, ☀ Light, 🧠 Insight. Every lens informs every other; the AI synthesizes across all of them.
Also includes prior v1.5.4 fixes (optional wearables + editable import dates, region-aware date parsing) which never got their own release tag.