Show HN: bikemap.nyc – visualization of the entire history of Citi Bike
https://github.com/freeman-jiang/bikemap.nyc
Each moving arrow represents a real bike ride. There are 291 million rides in total, covering 12 years of history from June 2013 to December 2025, based on public data published by Lyft.If you've ever taken a Citi Bike ride before, you are included in this massive visualization! You can search for your ride using Cmd + K and your Citi Bike receipt, which should give you the time of your ride and start/end station.
Some technical details:
- No backend! Processed data is stored in parquet files on a CDN, and queried directly by DuckDB WASM
- deck.gl w/ Mapbox for GPU-accelerated rendering of thousands of concurrent animated bikes
- Web Workers decode polyline routes and do as much precomputation as possible off the main thread
- Since only (start, end) station pairs are provided, routes are generated by querying OSRM for the shortest path between all 2,400+ station pairs
Legend:
- Blue = E-Bike
- Purple = Classic Bike
- Red = Bike docked
- Green = Bike unlocked
What strikes me most is how this visualizes patterns that probably weren't immediately obvious in the raw data. You can likely see seasonal usage patterns, the expansion of the network over time, and how station availability evolved. These kinds of temporal spatial visualizations are often more insightful than traditional dashboards because they make patterns immediately perceivable.
One question: with 291 million rides spanning 12 years, does the animation maintain responsiveness when rendering, or do you throttle the rendering in certain zoom levels? GPU acceleration helps but that's still a massive dataset to push through the rendering pipeline.
Great work - this is exactly the kind of thing that makes public datasets actually useful to the broader community.