LeeWard
Sheltered Side · Steady Course

Chart a steadier
course through rough water.

WardStock is a personal health log for anxiety, cardiac symptoms, sleep, and everything that steadies a hard day — built to be exact when it matters and simple enough to reach for in the moment.

LEEWARD, N. — the side sheltered from the wind. Where a ship finds its steadiest water.

LeeWard emblem
Bearing

Anxiety and cardiac episodes don't wait for a calm moment to happen. WardStock is built to be opened one-handed, mid-squall, and to hold everything steady until you can look back and see the pattern.

Ship's Manifest

Everything aboard

HOLD 1
Incident Log
Anxiety and cardiac episodes, logged the moment they happen — symptoms, duration, what helped, whether it matched the usual pattern. Multiple entries a day, no limit, because real episodes don't schedule themselves.
HOLD 2
Daily Log
Sleep, exercise, caffeine, alcohol, medication, and mood — the daily readings that put every incident in context. Sleep tracked the way you actually think about it: hours and minutes, not decimals.
HOLD 3
Medications
Full dosage history, not just a current list — every change preserved, every due date calculated correctly, whether it's daily, weekly, or once a fortnight.
HOLD 4
Therapy
Session notes, a recurring schedule with its own reminders, and a "since last time" report — incident counts, averages, and totals — ready before you sit down.
HOLD 5
Oura Ring Sync
Sleep, resting heart rate, and HRV pulled in automatically — one less thing to type in by hand on a day that's already asking a lot.
HOLD 6
Export & Import
Your log is always yours — a complete, portable export, restorable anywhere. Nothing locked to one vessel.
Two Vessels, One Fleet

At sea, and at harbor.

WardStock is built in two pieces, deliberately. One is the vessel you sail — always reachable, wherever you are. The other stays at harbor, at home, doing the deeper work in private. Nothing about how it's split is an accident: the thing you need to always be able to open stays simple and open; the thing doing the heavy analysis runs quietly ashore, on hardware you own — never shipped out to someone else's cloud.

At Sea — WardStock

The vessel you sail

  • Reachable from anywhere, any time — the app you actually open
  • Incident log, daily log, medications, therapy, dashboard
  • Built to be exact in the moment, not just after the fact
At Harbor — The wherewhen Engine

The work done ashore

  • Runs privately on your own home server — not a shared cloud
  • High-resolution readings and long-range trend analysis
  • Raw data and analytics never leave your house
Reading The Deck

Signal flags, at a glance

All clear
Worth a look
Needs attention
Nothing logged

The seven-day dashboard reads like a deck of signal flags — color carries the meaning, so a glance tells you more than a paragraph could. Every flag opens straight into the log behind it.

Sample Log Entry
DATE — Tuesday, 06:42
CATEGORY — Anxiety
DURATION — 14 min
PATTERN — Consistent with prior
SLEEP (7 days) — 6h 51m avg
STATUS — Logged, steady

Built to be exact when it matters most.

Not a dashboard for its own sake — a steadier way to hold the details, so the pattern is there to see when you need it, and out of the way when you don't.

Personal use only. One vessel, one crew, one log.

The Chart Room

What the wherewhen engine reads.

Every analysis below runs quietly at harbor, on the wherewhen engine — never in the cloud. Reference numbers and names match the Analysis page exactly, so a chart on screen and an entry here are always the same thing. "Input" is what feeds it; "Reads" is what it actually computes from that input — a trend, a correlation, a count, or (for a few) just a clean record with nothing computed at all.

Headline — the core function of this page
#17
Full correlation matrix
Input — incidents, alcohol, caffeine, weight, mood, sleep efficiency, HRV, exercise minutes.
Reads — every pairwise combination of those eight, correlation coefficient plus how many paired days it's based on. The one chart meant to surface a link nothing else would think to check.
#18
Unreported-anxiety detection
Input — HRV, resting heart rate, and sleep efficiency, split into "days with a logged incident" vs. "days without."
Reads — flags a day with nothing logged whose HRV/resting-HR/sleep-efficiency all sit on the wrong side of the incident-day averages at once — a pattern match, not a diagnosis.
#19
Bedtime / wake-time trend
Input — Oura's own bedtime timestamp and time-in-bed per session.
Reads — one connected bar per night, bedtime to wake time, in real clock time — not duration, just when.
#20
Sleep-stage timeline (hypnogram)
Input — Oura's sleep stage every 15 minutes (deep/light/REM/awake), the longest session in range.
Reads — a colored timeline of one full night, not a statistic.
Automatic — Oura, scale, medication schedule
#1
Sleep duration trend
Input — Oura total sleep duration.
Reads — day-by-day trend, hours.
#2
Sleep efficiency trend
Input — Oura sleep efficiency.
Reads — day-by-day trend, percent. Kept separate from duration — a full-but-fragmented night and a short-but-efficient one are different problems.
#3
HRV trend
Input — Oura average HRV during sleep.
Reads — day-by-day trend, milliseconds. Watched for upward movement specifically — higher HRV generally reads as better recovery.
#4
Resting heart rate trend
Input — Oura lowest heart rate during sleep.
Reads — day-by-day trend, bpm. The other core autonomic marker alongside HRV.
#5
Body composition trend
Input — weight plus whatever else the scale reports (body fat%, muscle mass, visceral fat%).
Reads — day-by-day trend, one per field tracked.
#6
Exercise / activity trend
Input — steps, exercise minutes, standing minutes.
Reads — three separate day-by-day trends.
#7
Weight vs. medication cadence
Input — weight, plus every weekly/bi-weekly medication dose.
Reads — average weight in the 3 days before vs. 3 days after each dose.
#8
Medication dosage-change correlation
Input — dosage-change history, plus weight, HRV, mood, and incidents.
Reads — 14-day average of each, before vs. after every dosage change.
#9
Medication adherence vs. incidents
Input — "all medications taken?" from the Daily Log, plus incidents.
Reads — incident rate on missed-dose days vs. full-adherence days.
Reported — incidents + Daily Log + therapy
#10
Alcohol & caffeine vs. sleep
Input — Daily Log alcohol/caffeine counts, plus Oura sleep efficiency.
Reads — correlation coefficient, each factor against sleep efficiency.
#11
Mood / state-of-mind trend
Input — Daily Log mood rating and state of mind, plus sleep efficiency, alcohol, caffeine, and incidents.
Reads — trend for mood and state of mind, plus a correlation of mood against each of the other four.
#12
Symptom & category clustering
Input — incident category (anxiety/cardiac/medical) and symptom checkboxes.
Reads — count by category, and the most common symptom pairs seen together.
#13
Day-of-week / time-of-day incident clustering
Input — incident timestamps.
Reads — count by day of week and by hour of day, looking for a pattern in when episodes happen.
#14
Incident intensity/duration trend
Input — logged anxiety intensity and duration, per incident.
Reads — two day-by-day trends — the most direct "getting better or worse" view in the whole set.
#15
Therapy session effects
Input — mood before/after each therapy session, plus incidents.
Reads — average mood change per session, and incident counts in the 7 days before vs. after each one.
#16
Night-waking context
Input — free-text night-waking notes from the Daily Log.
Reads — a chronological list, not a statistic — why Ward woke, in his own words, alongside Oura's own sleep-stage record of when.
How sleep time is actually calculated

Sleep duration, sleep efficiency, HRV, resting heart rate, and the bedtime/wake-time chart (#1-4 and #19) all come from the same underlying idea, worth spelling out since it isn't obvious: a wearable ring or watch doesn't hand over one clean "you slept from X to Y" answer — it reports sessions, and wherewhen has to decide which session is actually last night.

This build reads an Oura ring, but nothing about the approach is specific to Oura — any device that reports a session's start and end time, whether it was real sleep or a false alarm, and roughly how long it lasted would fit the same model. Oura happens to be what Ward wears.

Oura itself already sorts sessions into a few kinds: a real overnight sleep, a shorter confirmed nap, a late-evening nap credited to the next day, and — usefully — sessions Ward reviewed and rejected as a false alarm (the ring mainly tracks movement on the hand it's worn on, so sitting still at a desk for long enough can occasionally get misread as a nap). Only the real-overnight kind counts as "the night" for these charts; false alarms and short naps are left out, and if more than one real overnight session somehow exists for one calendar night, the longer one wins.

Bedtime is simply when that session started. Wake time is Oura's own answer for when it truly ended — sustained time out of bed, not just the first stir — used directly whenever the device provides it. A brief middle-of-the-night wake-up that leads right back to sleep is the device's own call, not something wherewhen merges or splits; it just reads whatever boundaries the device already decided on. Any reading clearly outside what's physically possible (a negative duration, an efficiency over 100%) is dropped before it's ever considered, on any device.