Changelog

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

Mar 3, 2026

The PhoneMockup component now has a video variant — PhoneMockupVideo — that plays video inside the same 3D-tilting iPhone frame. Paired with a ScrollVideo controller and invisible VideoChapter markers in MDX, the sidebar phone seeks to different video segments as the reader scrolls through article sections. Deployed first on Fixing domain-specific speech recognition. Also added a restingTilt prop so the phone can sit at a natural angle (tilted toward the content) instead of flat, while still responding to mouse interaction.

Mar 1, 2026

A scannable one-page companion to the full iOS 26 FoundationModels reference — key types, session patterns, token budget formula, and the 10 anti-patterns to avoid. Links into the full reference for every section.

Mar 1, 2026

Implemented the llms.txt spec across three routes: /llms.txt (site index), /llms-full.txt (full content dump), and /llm/[slug] (per-post clean markdown). All routes are statically generated at build time with 1h/24h caching. Makes the site natively readable by AI tools and agents.

Google Analytics 4dev
Mar 1, 2026

Added GA4 (G-JQ1W3E5HF7) alongside existing GTM, loaded with the afterInteractive strategy so it doesn't block page render.

Brand colour refined to LCH valuesdev
Mar 1, 2026

Replaced HSL brand tokens with perceptually precise LCH values — lch(53 95.45 136.93) in light mode, lch(84 81.5 89.1) in dark. Also updated category tag chips: removed the blue background tint, switched active state to brand-colour border, bumped font size from xs to sm.

Mar 1, 2026

Added a featured post card to the home page and writing archive — pinned via a featured: true frontmatter flag. Currently highlighting "Three Years of AI". Any post can be promoted by setting the flag; only one is shown at a time.

Inline list metadatafeature
Mar 1, 2026

Replaced the right-aligned date column on writing list items with an inline metadata row: category, exact date, and relative time (e.g. Reflection · 22 Feb 2026 · 8 days ago). Cleaner hierarchy, more information density.

Hero parallaxfeature
Mar 1, 2026

Added a subtle parallax effect to the hero background image — translating at 30% of scroll speed using the existing --scroll-y CSS variable. No new scroll listeners; a 20% vertical overscan prevents gaps at the image edges.

Header nav unified and labelleddev
Feb 28, 2026

House icon and [conor] label added to the home link to match the section nav pattern. Font size and theme buttons wrapped in a flex container with labels (Small/Medium/Large and Light/Dark/Auto). Icon size reduced from 20 to 18px. Hover state moved from inline JS handlers to CSS. Intro copy added to /apps and /open-source pages.

XL font size preset removeddev
Feb 28, 2026

Removed the XL preset (16px fixed) — it was redundant alongside Large (16px mobile → 18px desktop). The font size cycle is now Small → Medium → Large → Small.

Hero image library expandedfeature
Feb 28, 2026

Added five new hero images — Diamond Beach, Connemara landscapes, a Defender portrait, and Salthill variants — each tagged with GPS coordinates, altitude, and camera metadata. The glitch-text overlay now displays this EXIF data on rotation, giving each image a sense of place and provenance.

Feb 28, 2026

Launched /open-source — a showcase of libraries, tools, and experiments published on GitHub. Pulls live star counts and metadata from the GitHub API at build time, with each repo displayed using the same AppMeta glitch-text block as the apps section.

Google Tag Managerdev
Feb 28, 2026

Added GTM (GTM-K6M37NW6) for analytics and event tracking. Loaded via Next.js Script with the afterInteractive strategy so it doesn't block page render.

Feb 27, 2026

A step-by-step walkthrough of how the FrictionList phone mockup is built — bevel gradients, layered shadows, glass shine, dynamic island cutout, and mouse-reactive 3D tilt — all in CSS with no external libraries. The article was 90% AI-written; the component itself was an iterative collaboration.

Feb 27, 2026

Expanded /apps with richer content for each app — a glitch-text meta block (platform, stack, category, widgets, release status), a punchy origin line in the author's voice, and a three-point feature list per app. Phone mockups now break out of the reading column using the wide grid layout, matching the treatment in long-form articles.

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.