This is really nicely done, the log zoom makes 4M events feel navigable instead of like a wall. How are you serving a viewport at that scale: precomputed levels of detail, or a query against the raw events on each pan and zoom?

Thank you ! It's indeed precomputed levels of detail, the backend serves a key-value store: for each bucket a top 10 events that start or end in this bucket. A bucket is described by its zoom level (from 1 day to 2^34 days) and time coordinates.

Makes sense, thanks. The fixed 10-per-bucket cap is what keeps every viewport the same size no matter the zoom, that's the elegant bit.