Switching between favorite albums now animates: the old cover returns to its spot, the new one flies into place, and the album you clicked stays where you clicked it.
Internal: Spotify popularity syncs now back off when Spotify refuses and keep partial progress, and the one-off backfill script is removed (the regular sync already fills in older songs).
Zooming the Big map on /activities with the scroll wheel, a trackpad pinch or the zoom buttons now keeps the map and your routes moving together, with no jump when the zoom settles. The zoom buttons now animate.
Unified rounded corners across all homepage and activities page maps so outer paper cards and inner map frames stay consistent across light and dark modes and during map zoom and pan.
Opening and closing a favorite album now animates smoothly in Firefox, including the cover flying between the grid and the album, with the same code in every browser.
Plays per year on Music stats now has a line showing how popular the songs I played were each year, from Spotify. Years from before tracking began are dashed and use each song's current popularity.
Favorite albums no longer shows a popularity bar in the album details.
Favorite albums start loading as you hover or reach them, then open in one smooth motion, with the tracklist still and the background stickers unmoved.
Album links from anywhere on the site land right on that album, and its cover stays beside the tracklist as you scroll.
The New! tag now only marks artists in artist and album lists, not under every song.
On the music stats page, Depth and loyalty now counts days when set to this week or this month, and months for a year or all time, with bars measured against the days or months the range could have had.
The loyalty stamp now reads naturally ("Loyal for 6 days") and is hidden when it would say nothing.
Thinned route lines on the Big map and added a paper-cased cobalt-to-icy frequency heatmap across all sports so heavily traveled streets and trails glow brighter than single-pass routes (#740, #745).
Fixed map tiles shifting on initial load across desktop, tablet, and mobile screen sizes on the homepage and activities page.
The "This month" listening stats on the music stats page now cover the calendar month: the daily grid runs from the 1st to the month's last day, and the peak day and active days count only this month.
Spotify and Strava access tokens are now saved after each refresh instead of being fetched again and again, so the site makes fewer requests to both services.
The homepage now flows in an S-curve: Now playing, your latest ride, this year's miles and SF street coverage, and a wider Big map run down the left, with Watershed centered beside the Big map.
Hovering neighborhoods with long names on the Big map street coverage card now keeps the header on a single line so the map never shifts under the cursor.
Replaced the browser Basic Auth popup on the dev console with Sign in with Vercel, removed unused feature-flag packages, and upgraded Next.js, React, Biome, and Turbo.
Restored the Now playing album bounce (~91 BPM) and floating music notes across both the homepage card and the header player at 60 frames per second in Firefox, Chrome, and Safari.
Unified corner rounding and border thickness across homepage project cards, removed the outer boxes and effects around side-project app icons so each icon renders untouched on its card, simplified the mobile Now playing header pill to show the track title with breathing room below the navigation bar, matched the homepage's top spacing to the rest of the site, and ordered Genera before Jumpstart.
Books on Reading that were shelved on Goodreads without a finish date (like The Outsiders and The Golden Compass) now use an explicit reading status in Contentful and appear under an Earlier section at the bottom of the page instead of the year they were added to Goodreads.
Photos, book covers, and album art now load directly from Contentful and Spotify at the right display size instead of proxying through the site server.
Clarified the Big map moving-time postage stamp to read "nonstop days in the saddle" and "nonstop days on the move" so 24-hour cumulative moving time is distinct from ride count.
Sized mobile footer navigation pills proportionally to their labels so longer page names like Favorite albums and Listening stats have balanced horizontal padding.
Improved mobile layout across every page, pinning the header bar above Now playing, keeping the footer paper texture stationary during scroll, and adapting the footer curtain reveal to shorter screens with a clean grid of page links.
Fixed rank badges, star-rating stamps, and tags that rendered with low contrast across Listening stats, Reads, Changelog, and Site map, and clamped long book titles and authors on Reads to three lines.
Enlarged the header logo and aligned it vertically with the Now Playing card and navigation bar and flush with the page's left content margin across desktop and mobile.
Filtering by sport on Big map now updates Recent routes to the newest activities of that sport and zooms the map to the latest location, deselecting the Bay Area and San Diego toggle when the activity is outside both cities.
The San Francisco and San Diego switcher now sits in the top-left corner of the neighborhood coverage map card as its title, the homepage Big map card frames the Bay Area route network with lifetime distance, street coverage, a sport-specific Latest ride or Latest ski sticker, and an Explore big map callout, and zooming in and out on route maps is much smoother.
The music card now glows with vivid colors pulled from the album art, and its text stays easy to read on every cover. Mostly white covers keep their clean look with just a hint of accent color.
The header, music card, and footer all show the same playback status: "Now playing" or when the track was last played.
Background paper cutouts and sheets now repeat all the way down long pages like Changelog and Reads, the header logo is larger to match the navigation strip and Now Playing card, and the blurry band behind filter buttons is gone.
Restored header logo and typography sizing, card spacing, beat-synced Now playing bounce, and floating music notes across the homepage and header player, and balanced the footer spacing and social link dividers.
On phones, the logo and the main nav now share one row that stays pinned while you scroll. The now playing card tucks away above them, and each filter bar fits on one row, with extra choices in a menu.
Pinned filter pills stay sharp instead of blurring under the header, on every screen size.
Sport filters on Big map now read Rides, Skiing, Hikes, Runs, on every screen size.
The region switcher on the Big map now starts with Bay Area selected, matches the header's paper strip, and stays in sync with the street coverage city switcher below.
Rebalanced the bike odometer cards on the activities page. Each bike's name, active years, and mileage are grouped on the left, with a larger illustration on the right.
Redrew both bikes to match the real frames: Prince keeps its signature wavy fork and stays, and Cruz gets its sloping gravel frame. Prince's pink handlebars now have a dark outline.
Kept the header Music dropdown above pinned filter bars while scrolling, extended the soft blur scrim behind pinned filter pills across the site, and grouped the San Francisco and San Diego city toggle buttons beside the street coverage heading on Big map.
Exercise route maps and lifetime stats on the homepage and Big map now load from a precomputed summary table for faster page loads and much lower database bandwidth.
Reduced database network transfer across Listening stats and Big map by over 85% and kept all pages loading cleanly when the database is temporarily unavailable.
Added 15 historical site snapshots from 2016 through 2026 to the Changelog page as tilted polaroid photo prints alongside milestone releases, and restored pull request links on recent releases.
Expanded song and artist titles in On repeat on Listening stats so names read without heavy truncation, and removed resting link underlines across stats cards and the footer so links only underline on hover.
Fixed the homepage location map zoom controls layout and mouse drag-panning, and kept activity atlas routes locked to the map tiles during active panning and zooming.
Smoothed scrolling, filter transitions, and hover animations across Safari, Chrome, and Firefox by promoting rotated paper cards to GPU-composited layers and eliminating redundant background work during hover.
Added a Top playlists card to Listening stats with playlist cover art, play counts, hours listened, track coverage, and the #1 song from each playlist across every time range.
Kept text on circular seals and stickers comfortably inside their dashed borders across Listening stats and Big map, and simplified the Changelog summary and filter bar with a year dropdown menu.
Moved header navigation and footer links into Contentful, anchored the footer Now bar halfway across the bottom edge of the page sheet, and aligned the Elsewhere social icons.
Cut page weight and JavaScript download sizes by 40–60% across the homepage, Big map, Favorite albums, and Reading for faster loads on slow connections.
Kept tooltips floating above neighboring cards, locked album thumbnails to a 1:1 square, and eliminated hover layout shifts and corner-tag text overlaps across the site.
Backfilled the full 10-year release history on the changelog back to v0.0.0 in March 2016 and rewrote release notes in plain, human-readable English.
Stored all changelog releases in Postgres with automatic dual-writing on new releases so the changelog loads immediately without depending on the GitHub API.
Moved Big map to the Activities page with permanent redirects from Strava, added a Skiing filter grouping ski and snowboard activities, and added custom Pinarello Prince and Santa Cruz Stigmata ("Cruz") bike illustrations with interactive per-year odometer bars.
Added Bay Area and San Diego map zoom buttons, a San Francisco and San Diego street and neighborhood coverage toggle, physical comparison callouts (Everests climbed, trips around Earth, days in the saddle), and sticky filter bars across Activities, Listening stats, Favorite albums, and Reads.
Added cross-navigation between Listening history, Listening stats, and Favorite albums, clickable Spotify and Favorite album links across Listening stats, and "New!" badges on newly discovered artists.
Added album cover art to On repeat tracks, defaulted Favorite albums to sort by release date, and refined filter ranges and multi-line title clamping.
Project tags on the homepage now list every platform for multi-platform work (such as Desktop app, Website, and iOS app on Cursor) and pair wide project frames with wide grid slots.
Markdown twins for all eight public pages are now pre-rendered at build time, and Spotify track metadata requests automatically retry when rate-limited.
Listening stats now shows top genres from Spotify, switches between All time, Last week, Last month, and Year filters immediately, and adapts its timeline and soundtrack cards to the selected range.
Added streak, daily pace, and album-depth stamps in the open collage pockets.
Tightened seal and stamp text padding across Listening stats and Big map so numbers and labels stay clear of every ring and scallop edge, and fixed mobile layout on Big map.
Added All time, Last week, Last month, and Year filters to Listening stats, a two-row collage totals mosaic, and Top songs, Top artists, Every month, and Soundtrack by year cards.
Updated header and footer navigation with Plays, Reads, and Big map links.
Added a San Francisco street coverage map and neighborhood leaderboard to Big map showing the percentage and miles of city streets ridden, run, and hiked.
Unified the Listening history, Favorite albums, and Listening stats page headers and grouped time-of-day listening into Morning, Afternoon, Evening, and Late night.