The Polish Pass
3.2.1 · 9/6/2026Tidied 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 type — Gaps and padding settle onto an 8px scale, with 4px for the small gaps. Regular, medium, and semibold handle the type.
- Finding your way — Bigger mobile nav links, an underline on the current section, and pleiground stays lit while browsing books, recipes, or TFT.
- Reading the small print — Brighter secondary text in dark mode, underlined links in paragraphs, and larger book covers with authors tucked beneath titles on phones.
- TFThandbook — Gets a little more room at the top of the pleiground.
- Activity widgets — Larger 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/2026The 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 wire — All eight era screenshots ship as webp for ~360kB total.
The Plei on Words
3.1.1 · 8/21/2026The playground is now the pleiground. That’s it. That’s the patch.
- Pleiground — The 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/2026Retyped 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 body — Replaces DM Sans on everything you actually read — bio, headings, entries, links.
- Cabin for labels — Replaces JetBrains Mono on section labels, years, meta rows, and tab buttons — a rounder humanist sans in the small sizes.
- Self-hosted variable fonts — Both families ship as latin-subset variable woff2 from public/fonts (~28kB each), so the @fontsource packages are gone.
- Clock stopped twitching — The clock uses Figtree, whose tabular figures hold their width, so the seconds no longer nudge the row on every tick.
- Social card follows — The og:image generator shares the site’s faces, so link previews match.
The Minimal Redesign
3.0.0 · 8/19/2026Archived 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 layout — One 42rem column, three small pages (home, work, projects) with a tiny history router and view transitions.
- Typography — DM Sans + JetBrains Mono, self-hosted, plus the Lont handwriting font (built from my own handwriting) on page titles.
- Activity tabs — GitHub and Strava heatmaps combined into one toggled panel; Strava loads only when opened.
- Rewritten bio — Home 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 revived — This page — history recovered from the old site so the changelog survives the rewrite.
TypeScript Migration!
2.0.1 · 10/7/2025Captured the TypeScript migration commit alongside the JavaScript cleanup, Tailwind tweaks, and Jest smoke-test fix.
- Legacy JavaScript removal — Deleted redundant .js files now backed by TypeScript implementations.
- Tailwind content scope — Restricted the content glob to .ts and .tsx sources.
- App styles cleanup — Removed stale App.css imports after consolidating styling into styled-components.
- App test import fix — Restored the App import so the render smoke test executes.
Major Codebase Refactoring & Organization
2.0.0 · 9/18/2025Complete codebase overhaul with comprehensive refactoring, performance improvements, accessibility enhancements, and backend organization.
- Shared styled-components system — Centralized design tokens and layouts; eliminated ~200 lines of duplicate styling code.
- Navigation modernization — Replaced window.location.href calls with React Router’s useNavigate().
- Prop validation — Added PropTypes validation across components.
- Utility organization — Created shared formatters and API endpoint helpers to remove duplicates.
- Accessibility — Descriptive alt text, ARIA labels, and semantic HTML throughout.
MCP Integration & Resume Update
1.1.2 · 9/17/2025Added a playground page for the Poke MCP Server project, updated the resume, and made Strava styling consistent.
- Poke MCP Server page — New playground tile for the Twitter-metrics and reminders MCP server, with auto-redirect to GitHub.
- Resume update — Latest professional experience, skills, and achievements.
- Lowercase month styling — Consistent lowercase month names across the Strava page.
- Playground grid — Expanded the grid to six tiles while staying responsive.
Strava Activity Links & Twitter Integration
1.1.1 · 9/13/2025Quality-of-life improvements: clickable activity links and Twitter/X social integration.
- Clickable activity links — Strava 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 dialog — LinkedIn entry shows the handle leiwuhoo instead of generic text.
- Bug fixes — Removed a duplicate footer on the recipes page; fixed home-page tile alignment.
Major Strava Integration Update
1.1.0 · 9/12/2025Complete real-time Strava integration in the playground: webhooks, monthly organization, and heart-rate monitoring.
- Strava integration — Activities sync automatically via webhooks and are organized by month and year.
- Monthly dashboard — Current-month stats: activities, distance, time in motion, and heart rate.
- Activity color coding — Distinct colors per activity type for at-a-glance reading.
- Heart-rate analytics — Average and max heart rate per activity and per month.
- Cloudflare Workers backend — Serverless backend with KV storage, token refresh, and caching to respect rate limits.
TFT Match History Update
1.0.2 · 8/4/2025Added 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 history — Match history now works, with placements pulled through the worker.
The First Update
1.0.1 · 7/28/2025The first update to the patch notes system.
- Book bar — A 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/2025The very first version of the patch notes.
- Patch notes system — A dedicated changelog page for all future updates, big and small. I’ve definitely missed the first 2 years of patches but it starts now.