The Polish Pass

3.2.1 · 9/6/2026

Tidied up the space between things and made the small stuff easier to read. Seven font weights felt like a lot for a site that’s mostly paragraphs. Three survived.

  • Spacing and typeGaps and padding settle onto an 8px scale, with 4px for the small gaps. Regular, medium, and semibold handle the type.
  • Finding your wayBigger mobile nav links, an underline on the current section, and pleiground stays lit while browsing books, recipes, or TFT.
  • Reading the small printBrighter secondary text in dark mode, underlined links in paragraphs, and larger book covers with authors tucked beneath titles on phones.
  • TFThandbookGets a little more room at the top of the pleiground.
  • Activity widgetsLarger labels, fewer month labels on phones, and Spotify rows that fit the screen. Spotify and Strava get retry buttons for when the APIs need another nudge.

The Writing Section

3.2.0 · 8/21/2026

The site learns longform. A writing section joins the nav, opening with the story of how this website got like this — all five redesigns, with screenshots pulled from the git archive.

  • Writing index/writing — longer thoughts that outgrew a patch note, listed newest first.
  • First post“how my website got like this” — the chips-bag grid, the dashboard, the spinning records, and the paragraph that replaced them all, with era screenshots rebuilt from old commits.
  • Light on the wireAll eight era screenshots ship as webp for ~360kB total.

The Plei on Words

3.1.1 · 8/21/2026

The playground is now the pleiground. That’s it. That’s the patch.

  • PleigroundThe playground page is renamed everywhere it appears — nav, title, /pleiground URL — with the old /playground and /projects links redirecting to it.

The Type Swap

3.1.0 · 8/20/2026

Retyped the site: Figtree carries the reading, Cabin takes the small labels the mono used to hold. A serif audition for the label slot did not survive the screenshots.

  • Figtree for bodyReplaces DM Sans on everything you actually read — bio, headings, entries, links.
  • Cabin for labelsReplaces JetBrains Mono on section labels, years, meta rows, and tab buttons — a rounder humanist sans in the small sizes.
  • Self-hosted variable fontsBoth families ship as latin-subset variable woff2 from public/fonts (~28kB each), so the @fontsource packages are gone.
  • Clock stopped twitchingThe clock uses Figtree, whose tabular figures hold their width, so the seconds no longer nudge the row on every tick.
  • Social card followsThe og:image generator shares the site’s faces, so link previews match.

The Minimal Redesign

3.0.0 · 8/19/2026

Archived the View-Master reel homepage and rebuilt the site as a text-first single column, in the spirit of the small personal sites I keep coming back to.

  • Single-column layoutOne 42rem column, three small pages (home, work, projects) with a tiny history router and view transitions.
  • TypographyDM Sans + JetBrains Mono, self-hosted, plus the Lont handwriting font (built from my own handwriting) on page titles.
  • Activity tabsGitHub and Strava heatmaps combined into one toggled panel; Strava loads only when opened.
  • Rewritten bioHome is now a short personal bio with live widgets, instead of a hero and card grids.
  • Book bar/bookbar — the reading shelf returns as collapsible sections with every cover fetched at build time and self-hosted.
  • TFT match history/tft — rank, per-set match history, and a search box so anyone can look up their own NA riot id through the worker.
  • Recipes and eats/recipes — the random recipe generator returns with all nine recipes, and the food photos went from 31MB to under 1MB.
  • Patch notes revivedThis page — history recovered from the old site so the changelog survives the rewrite.

TypeScript Migration!

2.0.1 · 10/7/2025

Captured the TypeScript migration commit alongside the JavaScript cleanup, Tailwind tweaks, and Jest smoke-test fix.

  • Legacy JavaScript removalDeleted redundant .js files now backed by TypeScript implementations.
  • Tailwind content scopeRestricted the content glob to .ts and .tsx sources.
  • App styles cleanupRemoved stale App.css imports after consolidating styling into styled-components.
  • App test import fixRestored the App import so the render smoke test executes.

Major Codebase Refactoring & Organization

2.0.0 · 9/18/2025

Complete codebase overhaul with comprehensive refactoring, performance improvements, accessibility enhancements, and backend organization.

  • Shared styled-components systemCentralized design tokens and layouts; eliminated ~200 lines of duplicate styling code.
  • Navigation modernizationReplaced window.location.href calls with React Router’s useNavigate().
  • Prop validationAdded PropTypes validation across components.
  • Utility organizationCreated shared formatters and API endpoint helpers to remove duplicates.
  • AccessibilityDescriptive alt text, ARIA labels, and semantic HTML throughout.

MCP Integration & Resume Update

1.1.2 · 9/17/2025

Added a playground page for the Poke MCP Server project, updated the resume, and made Strava styling consistent.

  • Poke MCP Server pageNew playground tile for the Twitter-metrics and reminders MCP server, with auto-redirect to GitHub.
  • Resume updateLatest professional experience, skills, and achievements.
  • Lowercase month stylingConsistent lowercase month names across the Strava page.
  • Playground gridExpanded the grid to six tiles while staying responsive.

Strava Activity Links & Twitter Integration

1.1.1 · 9/13/2025

Quality-of-life improvements: clickable activity links and Twitter/X social integration.

  • Clickable activity linksStrava activity names open the full activity in a new tab, with external-link icons.
  • Twitter/X integration@ujustgotleid added to the footer and contact dialog.
  • Contact dialogLinkedIn entry shows the handle leiwuhoo instead of generic text.
  • Bug fixesRemoved a duplicate footer on the recipes page; fixed home-page tile alignment.

Major Strava Integration Update

1.1.0 · 9/12/2025

Complete real-time Strava integration in the playground: webhooks, monthly organization, and heart-rate monitoring.

  • Strava integrationActivities sync automatically via webhooks and are organized by month and year.
  • Monthly dashboardCurrent-month stats: activities, distance, time in motion, and heart rate.
  • Activity color codingDistinct colors per activity type for at-a-glance reading.
  • Heart-rate analyticsAverage and max heart rate per activity and per month.
  • Cloudflare Workers backendServerless backend with KV storage, token refresh, and caching to respect rate limits.

TFT Match History Update

1.0.2 · 8/4/2025

Added win/loss and placement data to the TFT page, plus caching and rate limiting on the worker to survive Riot’s API limits.

  • TFT match historyMatch history now works, with placements pulled through the worker.

The First Update

1.0.1 · 7/28/2025

The first update to the patch notes system.

  • Book barA simple bar in the playground showing the books I’m reading and my progress, via the Google Books API.

The Inaugural Patch

1.0 · 7/27/2025

The very first version of the patch notes.

  • Patch notes systemA dedicated changelog page for all future updates, big and small. I’ve definitely missed the first 2 years of patches but it starts now.