Changelog

An AI-generated summary of milestones, features, and releases — built from commit history and cross-referenced against the codebase.

Feb 25, 2026

A long-form retrospective covering three years of coding with AI — from first experiments with ChatGPT's API in Rust to building production apps daily with Claude Code. Traces the journey project by project, charting how the tools, the workflows, and the nature of the work itself have shifted. The post ships with a custom scroll-synced timeline sidebar built specifically for it.

Feb 25, 2026

FrictionList — a habit-tracking iOS app for reducing daily friction — launched on the App Store. Added a dedicated showcase page at /apps/frictionlist with phone mockups, a privacy policy, and support documentation. The App Store link is now live and linked from the site.

Hero photo rotationfeature
Feb 24, 2026

The hero now cycles through a curated set of photos by theme and screen size — Diamond Beach and Connemara landscapes for dark mode, Salthill Promenade for mobile. Each image shows GPS coordinates, altitude, and camera metadata in an animated glitch-text overlay. Selection logic accounts for both the active theme and the current viewport.

GitHub Actions CIdev
Feb 24, 2026

Added a build-check workflow that runs on every pull request. PRs can't merge without a clean Next.js build, catching TypeScript errors and broken imports before they reach production. The workflow uses Node 20 with npm caching to keep run times short.

Feb 23, 2026

A custom IntersectionObserver-driven timeline sidebar for long-form articles — floats fixed on both sides of the content, fills a progress track as you scroll, and highlights the current section label. Built without scroll listeners for performance. Deployed first on Three Years of AI.

Feb 23, 2026

Dedicated showcase pages for the FrictionList iOS app at /apps/frictionlist, including a PhoneMockup component with a 3D tilt effect — gyroscope-driven on mobile, mouse-tracked on desktop — with a dynamic island cutout and a screen shine overlay. The mockup is built entirely in CSS with no external libraries.

Fistbump buttonfeature
Feb 22, 2026

A fistbump reaction on writing posts, backed by Upstash Redis for cross-session persistence. Each post tracks its own count independently, with optimistic UI updates and debounced writes to keep the Redis usage lean. The count survives page reloads and different browsers.

Vignette overlay systemfeature
Feb 22, 2026

A layered vignette system for hero and post pages — soft atmospheric edges that vary by theme and page type, giving each hero image more presence and depth. The overlays are composited as pseudo-elements so they don't interfere with text legibility or pointer events.

Feb 20, 2026

Launched /photography with Pine Island as the first entry — a Lightroom-sourced gallery in a masonry layout. Powered by a new multi-section content system shared with writing, so photos and articles live in a unified data model and can be mixed in feeds and sitemaps.

Feb 20, 2026

A combined RSS feed at /feed.xml covering both writing and photography. Also added canonical URLs, per-post OpenGraph images generated at build time, JSON-LD structured data (Person, WebSite, BlogPosting schemas), and a custom 404 page. The sitemap now auto-generates from all content.

Jan 16, 2026

Added /resume with a full work history across 11 companies, built on the same golden ratio grid as the rest of the site. Work experience and education sit in the primary column; social and contact links in the secondary. The layout adapts to a single column on mobile without losing hierarchy.

Header redesignfeature
Jan 16, 2026

Rebuilt the nav with Phosphor icons and section-aware active states. Added a font size toggle with four presets (Small through XL) that scale the entire em-based design system proportionally — one root font-size change cascades through every spacing and typography token. Preferences persist in localStorage.