Science, Swagger, and the 3.7 Average Rating

Range
Buckets

Drag across any chart to zoom into that span · scroll to zoom · double-click to reset. Every chart and the totals below always show the same window.

Messages

Messages by sender

Not stacked — every line starts from zero, so the highest line is whoever sent the most in that bucket. Same buckets and same window as the chart above.

Share of the thread

Each bar is one bucket at 100%. Buckets with no messages are left blank.

Time of day

Clock
Scale
Periods

Milestones

Edit milestones.json and re-run python3 visualize.py to add more. Click one to zoom to it. Faded entries are outside the current window.

    The numbers

    Every year of the thread. Rows outside the current window are dimmed.

    How this was counted

    Built from the local Messages database. Only timestamps and sender identities were read — no message content. A "message" is a real message: tapbacks/reactions and group events (renames, joins) are excluded. The thread was renamed several times and Messages spread it across six chat rows, all of which are included; each participant used more than one handle over the years, and the phone/email pairings were resolved against Contacts.