Used Fable 5 to connect my @ouraring with my Google calendar to see which people stress me out the most. ๐คฃ
Saw this yesterday and had to build my own. It was as easy as screenshotting the X post and letting it do its thing.
Here's the prompt if you want to steal this:
Build me a "meeting stress leaderboard": which meetings and coworkers spike
my heart rate, using my Oura Ring and Google Calendar.
My setup (I'll put these in a .env file, never in code):
- OURA_TOKEN = my Oura personal access token
- CALENDAR_ICS_URL = my Google Calendar secret iCal address
- OWNER_EMAIL = <your email>
- Timezone: <your timezone, e.g. America/Los_Angeles>
Build a single Python script (stdlib only, no pip installs) that:
1. Pulls the last 60 days of heart-rate data from the Oura API v2
/usercollection/heartrate endpoint (chunk requests by 7 days, follow
next_token pagination, drop samples where source == "sleep").
2. Parses my calendar from the iCal URL: expand daily/weekly recurring
events, honor cancellations and overrides, and skip all-day events,
events I declined, and events with no other human attendees.
3. Scores each meeting against a PRE-MEETING baseline: the median HR in
the 30 minutes before the meeting starts (widen to 60 min if too few
samples; fall back to that day's 8am-7pm median). Report avg and peak
HR delta vs that baseline. A meeting "spikes" when peak HR >= baseline
+ 10 bpm. Skip meetings with fewer than 2 HR samples or more than 8
attendees. Do NOT use a whole-day baseline โ it makes every meeting
look calming, because sitting still beats a median that includes
walking and workouts.
4. Filters noise attendees: notetaker/scheduler bots (Gong, Otter,
Fireflies, https://t.co/dV9YeCgvss, Reclaim, Clockwise), meeting-room resources, and
company-wide aliases like team@/operations@ at my domain. Ask me if
anyone invites me from two different email addresses, and fold those
into one identity.
5. Builds TWO leaderboards:
- People: 1:1 meetings only (2+ scoreable 1:1s to qualify), ranked by
avg HR delta. Group meetings must not count toward people โ everyone
in the room would inherit the same score.
- Recurring meetings: grouped by title (2+ occurrences), ranked by avg
HR delta, with spike ratio and average attendee count. This is the
actionable table for calendar cleanup.
6. Writes a markdown report: both leaderboards, my 5 most stressful
individual meetings, and a methodology section with honest caveats
(Oura samples daytime HR every ~3-5 min; exercise during a calendar
event looks like stress; correlation != causation โ use for laughs,
not performance reviews).
Privacy rules: tokens only in .env; gitignore the .env, data files, and
report; never put real names in anything that gets committed.
Include a --demo mode with synthetic data, and unit tests for the
calendar parsing, baseline logic, and leaderboard aggregation.
Then run it on my real data, show me the report, and explain how to read
it โ including which numbers are signal and which are noise.