811 Followers
116 Following
255 Posts

New blog in the series about building SightRead.org

https://www.phpied.com/quick-and-dirty-linting/

Quick and dirty linting

This post is another installment of the series dedicated to building sightread.org. Parts 1, 2, 3, 4, 5, 6. I've been using TypeScript (actually JSDoc + tsc --noEmit) as my linter for a while. Well, TBH, I didn't do it intentionally, it's just something Claude does outta the box. I saw some linting

phpied.com

New blog post about an experiment in measuring how rendering times are affected by the size of SVGs

https://www.phpied.com/measuring-svg-rendering-time/

Measuring SVG rendering time

The questions Is rendering large SVGs significantly slower than smaller ones? Is there a cut-off size above which things are terrible? And what if these SVGs were PNGs, just for giggles. To answer this let's generate a bunch of test images and render them! The code is here Test images A Python sc

phpied.com
I don't think there are many music dictation apps out there, but here's v1 of mine. Rhythm-only for now, part of the sightread.org project.
To try https://sightread.org/?rhythm-dictation
To read the blog post https://sightread.org/blog/quests-rhythm-dictation/
SightRead.org - Free Sight Reading Practice

Practice sight reading with customizable exercises. Generate random rhythmic patterns, use the metronome, and improve your music reading skills. Free, no login required.

New blog post https://www.phpied.com/type-checking-without-the-muck/
This is now part 4 of something I thought will be a quick note. Installment 4 talks about type checking without TypeScript. Hello JSDoc!
And so the DIY-ing continues until morale improves!
new blog post https://www.phpied.com/do-it-yourself-code-coverage-and-testing/ part 3 (of 3, so far) about going package.json-free
Do It Yourself: code coverage and testing

This is what turns out to be a part 3 of a series about building sightread.org with minimal tooling: Part 1: Import JavaScript like it's 2026 Part 2: Maximally Minimal Build Process The previous posts covered how I structure js modules for parallel loading and how to build a production-ready a

phpied.com

Huge congrats and kudos to @stoyan for running it and to all the authors for writing articles for this year's Web Performance calendar.

https://calendar.perfplanet.com/2025/

The quality was very high, and it feels like every second post was a banger!

2025 Archives

The speed geek's favorite time of year

Web Performance Calendar
New blog post: https://www.phpied.com/maximally-minimal-build-process/
It's about staying away from most everything the JS ecosystem has to offer and stick close to the web platform. A build is still necessary because of long lived caches and updates but it can be tiny and simple. Time will tell how this strategy plays out
Maximally Minimal Build Process

In my previous post I described how I set up sightread.org with no build process and modern JavaScript. The goal was raw ES modules, no transpilation, no bundling, just <script type="module"> and we're off. That worked great for a minute but I wanted just one more thing: long-lived immutabl

phpied.com

Web Performance Calendar day 31 article 5/5: @slightlyoff investigates SPA usage patterns showing that users often trigger only ~1 soft navigation per page load. Heavy upfront JS costs aren’t being amortized, which challenges our assumptions about SPA performance benefits.

https://calendar.perfplanet.com/2025/the-curious-case-of-the-shallow-session-spas/

The Curious Case of the Shallow Session SPAs

Buried at the end of this year's instalment of my semi-annual series on network and device reality is a mystery: multiple, independent data sets from the Web Performance community indicate sites built as Single-Page Applications ("SPAs") receive, on average, only one (1) "soft navigation" for every

Web Performance Calendar