DSC 106 · Spring 2026 · Final Project

The Sky
Has a Pulse

Twenty white storks were tagged with accelerometers and tracked for six years across Europe and Africa. Most data stories show their journey as a line on a map. This one reads it differently — as the rhythm of a living body.

If a bird’s body is a drumbeat, can you hear when it stops?

Scroll to listen ↓

The flock / Scrub the seasons

Every bird is a row. Every month is a tile.

Each row is one tagged stork, each column a month from 2013 to 2019, and each tile’s color is that bird’s median motion pulse — an activity index derived from the tri-axial accelerometer. As a rule of thumb, a pulse near 1.0 is a calm, settled month; 1.5 is active foraging; and 2.0 and above is the sustained, full-body effort of long-distance migratory flight. Dark gaps are months with no signal at all.

Drag the month scrubber to move a beam of attention through the study period, or click any bird row to open that individual’s story below. Hover any tile for the exact value.

Month:
no sample recorded death
What to notice: read down any winter column and the wall goes dim — the whole flock quiets in the same months. Then read the red dots: nearly all of them fall in the bird’s first autumn or winter, the first migration a young stork ever attempts.

One life / Enter a single bird

One stork is not a row. It is a rhythm.

Selecting a bird folds the flock down to a single life. The timeline shows that stork’s median monthly pulse across the whole study; the clock shows its average activity by hour of day. The month under the scrubber is marked on both, so the wall and the individual stay linked.

Monthly pulse timeline

24-hour rhythm

The cost / Feel disappearance

Some rhythms end.

Of the 20 birds in this sample, 12 deployments end in recorded death. Below, every stork is a single horizontal lifeline running across the six-year study. The lit part is the span where the body was still sending a pulse; the dot is the moment it stopped. Hover a lifeline to read the ending.

What to notice: the gold lifelines stretch to the right edge — those birds outlived the study. The red ones cluster short and early, most ending in the same first autumn–winter window. In this archive, danger is not spread evenly across a life; it is front-loaded onto the first journey.

The whole / Return to the flock

Zoom back out, and the flock behaves like weather.

Averaged across every bird and every year, the pulse rises and falls with the seasons almost like a climate signal. Spring and summer — breeding and the long flights — run hot. Winter, spent on wintering grounds, runs quiet. The bars below are the flock-wide mean pulse for each season.

What to notice: the same seasonal shape you saw as dim winter columns in the wall, and as dips in a single bird’s timeline, survives all the way up to the flock average. One rhythm runs through every level of this data — the individual, the cohort, and the years.

The one thing

Migration isn’t a map. It’s a heartbeat.

The same seasonal pulse beats at every scale — one bird’s day, the cohort’s years, the whole flock’s climate — and for a third of these storks, that pulse ends on the very first journey.

A route on a map can only ever tell you where a bird went. By encoding bodily motion over time instead of position over space, this explorable lets you feel how alive a bird was in any month — and makes the moment a rhythm stops impossible to miss. That is something no migration map can show.

Watch / Two-minute tour

The project in two minutes.

Demo video: paste your YouTube link here.
See the README for the one-line edit, or link it directly.

Project writeup

About this project.

Question 1

What did we build, and why this design?

The Sky Has a Pulse is an explorable explanation built in D3.js and deployed on GitHub Pages. We took the public Movebank LifeTrack White Stork SW Germany dataset and processed its tri-axial accelerometer files into a per-bird, per-month motion “pulse” index plus a 24-hour rhythm and seasonal averages, exported as a single JSON asset the page loads at runtime.

The article moves from the whole flock to a single bird and back again. The pulse wall is a heatmap of 20 birds by 70 months with a month scrubber, click-to-select rows, hover tooltips, and an outcome filter; selecting a bird drives a linked monthly timeline and 24-hour radial clock. The lifelines view encodes where each deployment ends, and a seasonal synthesis closes the loop by showing the same rhythm at the flock scale. We chose motion-over-time rather than a route map because the story we found — a shared seasonal pulse and early-journey mortality — lives in when bodies move, not where they go.

Question 2

What was most challenging to design, and why?

The hardest problem was making a derived, abstract quantity feel honest and legible. The pulse is not a directly observed value — it is an activity index computed from accelerometer bursts on a systematic sample of the raw files. A reader cannot intuitively check it the way they could check a dot on a map, so the color scale, legend, and annotations had to make the metric understandable without implying a precision the sample does not have.

The second challenge was the disappearance encoding. Recorded death is central to the story, but it had to inform without becoming morbid or decorative, and its red marks and the lifelines had to stay clearly distinct from the activity color scale so the two systems are never confused. Tuning the scrubber, hover targets, and layout so the whole piece reads as calm rather than busy — on both a laptop and a phone — was the final pass.

DSC 106, Spring 2026 — Final Project. Team: Roxanne Wang, Ryan Zhang, Keith Gong. Data: Movebank Data Repository, LifeTrack White Stork SW Germany (2013–2019), DOI 10.5441/001/1.ck04mn78. Built with D3.js. Pulse values are a derived activity index from a systematic acceleration sample.