Writing

What broke, what I measured, what changed.

Now and then I indulge the conceit that I can write. What follows is the evidence: engineering notes from client work and my own products, in which every figure traces to a commit, a log, or a doc.

A fuse down the sidebar
  • jodriscoll.com
  • Animation
  • Performance
A red pulse now burns down the 1px right border of this site's sidebar as you read. When the footer's border meets Let's Collaborate, it falls the last 90 px and splashes along both lines as a stepped pixel wave, then stops drawing anything at all.
From the chat app to the terminal
  • Claude Code
  • Workflow
  • Tooling
Halfway through a big UI job, the coding agent in my desktop app lost its shell on my Mac. Moving the building to Claude Code in the terminal kept the work going, and taught me which of its controls actually matter.
No more loading screen
  • GameKal
  • Performance
  • UX
GameKal opened behind a full-screen loader, then flashed sample games before your own. Now every section loads in place as a skeleton, and the main pages measure a layout shift of 0.
Held and loaded, side by side
  • GameKal
  • Tooling
  • Testing
A skeleton is on screen for a fraction of a second, which makes it nearly impossible to check by eye. So GameKal got a mode that freezes it, and a view that lays it over the loaded page.
The setting only production had
  • GameKal
  • Debugging
  • Testing
Refresh a GameKal game page a few times while signed in and the whole gallery could vanish. Every test passed, because none of them had my account's settings.
A sign-in that only looked like it worked
  • GameKal
  • Auth
  • Supabase
Google sign-in on gamekal.com went all the way through and left you signed out. Discord worked every time. The cause was one shared slot, one missing redirect URL, and a lot of trust in a default.
The calendar that scrolled itself back to 1600
  • GameKal
  • Safari
  • Debugging
On iPhone Safari, GameKal's calendar paged itself backward 17 months a second with nobody touching it. A 9,612-month list and scroll snapping were fighting each other.
Two names for one temp folder
  • GameKal
  • Testing
  • macOS
537 passes on a Mac, 538 in Linux. One temp folder with two names, and a one-line fix.
The AI that ate my file handles
  • GameKal
  • Debugging
  • macOS
A Mac said it was out of open files. The cause was the coding agent, and three commands proved it.
Locked out by my own fortress
  • GameKal
  • Performance
  • Infrastructure
GameKal's Home page went from about 20 seconds to 1.8 by serving a public catalog as files instead of guarding every read.
Icons are a performance budget too
  • Performance
  • SVG
  • CSS
  • Accessibility
Switching to SVG is where icon performance starts, not where it ends. Ten small fixes, sorted by what they actually cost you, and the one rule that decides which of them to use.
Measure before you restyle
  • jodriscoll.com
  • Performance
  • Measurement
A redesign made the portfolio's Work page 653 KB of HTML. Measuring it found one decoration responsible for 37% of that, and one change cut the page by 29%.
A redirect is not a DNS record
  • Cloudflare
  • DNS
  • Infrastructure
www.jodriscoll.com returned Cloudflare error 522 while the bare domain worked. The fix was one Redirect Rule, after a detour through Wrangler error 100117.
One source, many front ends
  • jodriscoll.com
  • Architecture
  • Content
The portfolio keeps a single record of the work and translates it for nine front ends: WordPress, Drupal, React, Angular and more. Drafts and private notes never leave.
The cookie sits in the corner
  • WordPress
  • Privacy
  • SQL
Setting up Complianz for a US-only WordPress site straight from phpMyAdmin, before there was a license key. Every statement, what its row count meant, and how a full-width bar became a button in the corner.

5 more

I'm listening if you're talking

A bug, a new build, a data question, a site that needs to be faster or a full rebuild. Tell me what's going on.

Let's see how to collaborate.