I have survived another year of self-employment! Business has changed over that time. Gone are the days I can freely share a neat case study online. Clients demand confidentiality. I front-end develop and I refuse to prompt and everything else is a secret!
Can I survive next year? Let’s discuss your project… when I return in January!
What follows is my year in review.
The Business
Did I mention I work a four day week, Monday through Thursday? Highly recommended! This can be incomprehensible to anyone managing a schedule. Including myself. Indeed, I typically quote “1–2 weeks” without specifying 8 or 10 days because “it depends” — and what it depends on is not readily available, or subject to change.
Whatever the final timeline, clients are always delighted with the work I deliver. It’s never me who delays. Other than being good at my job, I credit this to my flexibility. If I invoice for 10 days that can be spread over 2–4 weeks. I only take on one big project at a time. If I’m waiting on a client I’ll work on a personal project.
This work balance means my annual income is less than the potential for my competitive rate. If I were to pack in the hours I’d be better off financially. But also miserable. I like that I have time for blogging and personal development. This allows me to enjoy my work and remain ahead of others in my field.
I am always a little concerned where the next job will come from. I rely heavily on referrals and repeat work from agencies. I get the occasional lead through my contact form. I don’t promote or network. I suppose my blog is indirect promotion. I remain optimistic despite so many factors working to ruin the web industry.
The Website
Early in the year I redesigned my blog to give text more focus. Behind the scenes I migrated to Bunny and cleaned up my static site generator (twice). I now publish multiple RSS feeds. I even built my own Wasm search index for no better reason than I could.
On the surface I added a copy code button. I made a glossary component for very serious purposes only. I improved alt text. I added a forgotten details element. I added text-to-speech playback using built-in browser APIs. I updated my contact form again, and again!
Many of these improvements were directly inspired by other developers who blogged their experience. It’s good to share.
The Blog
I ended last year with a series of posts on why I weblog. I charted the number of posts pers year from 2009 onwards. I’ve appended 2025 which has been my most prolific of 16 years. Unexpected but pleasing!
| Year | |
|---|---|
| Post count | |
| 2009–2023… | |
| 2024 | 55 |
| 2025 | 66 |
That doesn’t include the 200+ notes I published to my microblog. I’ve had fun writing this year! I continue to update JSX.lol with high quality React criticism.
I wrote about SVG basics, the flaw of big cursors, and date pickers. These practical posts are the ones I’m most proud of. More of that next year I hope. Rants on modern specs, frameworks, and features suggest I may have been fed up this year. In actual fact it’s been rather fun. At least when a browser bug hasn’t taken me to wits’ end…
Spicy drama — what accounts for spice in this industry — has never been far from my blog. I don’t purposefully go looking for it. I just write about what interests me. There were plenty of hot topics in 2025.
I recap my four hottest topic below.
Grammarly
Thanks to kind bug reporters I discovered a hostile entity in my midst. Grammarly, purveyors of slopware, are bad web citizens. Grammarly broke my website with their broken extension. If I were litigious, I’d argue loss of income and reputation. Who hires a developer who’s website looks broken?
I wrote up my findings with a well crafted title — “Eu Tu, Grammarly?” — which shot to the top of Hacker News. Whistleblowers informed me this made the rounds internally. This got the desired result and Grammarly added my domain to a block list. I’ve no idea if they fix their bad code, nor do I care.
Deno
Speaking of Hacker News bait, my report on Deno’s Decline was another hit. This prompted an official response which I’m not sure had anyone convinced.
Later when I checked in on JSR & Deno — wasn’t looking good — I discovered an NPM malware vulnerability on deno.com. This led to a fun call where I disclosed the issue and then tested their patience asking questions. To their credit the issue was fixed immediately and they were very open discussing future plans.
Deno 2.6, released last week, rounds off another year of dull updates. Deno’s best selling feature remains that Deno is not whatever Bun is? I’m just not that interested in JavaScript runtimes anymore.
XSLT
The Chrome XSLT deprecation is a spicy topic. My Interop 2026 XSLT proposal was expectedly a lead balloon. It may have done more harm than good because one popularity contest ranked it poorly. If I knew we’d be voting I’d have jazzed it up.
It’s not that I care massively for XSLT. But I struggle to sit back and watch my websites break when the richest companies in history dictate the web. Google has conflicts of interest around every corner. Crazy pills, anyone? I vented my ire for trillion dollar elephants in relation to this and other web platform issues.
I parodied the Blink dev group because what else can I do? “I use XSLT” was met with “that doesn’t count, take this 1.35 MB JavaScript polyfill” — thanks?
Oh, and I made XSLT.rip — my greatest achievement! And another HN smash hit. If you can’t smell a joke that site is entirely satire. Or fact, depending whom you ask.
XSLT will be removed. My websites will be broken. Google’s influence on the web will grow ever larger. Not enough people will care until it’s too late.
React & Next.js
React scored a perfect 10.0 CVE and followed up with more critical vulnerabilities. Will 2026 be the year developers accept that React is legacy technology? (No.)
The Bubble
In May I observed the sloppery slope to ensloppification. By the summer I decided: you can’t pay me to prompt! I drafted an AI policy that remains unchanged.
Ignoring the enormous ethical quandaries, LLM generated code is terrible. The hallucination and prompt injection issues show no signs of ever being fixed. The workflows I hear described sound hellish. Who in their right mind enjoys code reviewing slop? All the demos I see are failure after failure.
What’s the endgame here?
The Alternative
By August GitHub ensloppification had forced me off the platform. GitHub’s fall is being noticed and discussed (YouTube) elsewhere; I suspect a bigger topic for 2026.
Fortunately, I’ve been self-hosting for years. Self-hosted software is not immune to general enshittification — incredible book btw — see Plex for example, but there are typically more choices. I escaped GitHub to my own Forgejo instance. I now publish public code to git.dbushell.com. It took a while but I figured out action runners and action releases. I still roll my own Git LFS server despite Forgejo having its own.
I dread to think what “AI” has done to the “smart home” ecosystem. Is that still a thing? Anyway, I programmed a Zig daemon to control my lights. It’s been so reliable I have no recollection of what VM or server it’s running on.
In September I flirted with a public SMTP server but I quickly came to my senses.
With the cost of RAM skyrocketing I’m unlikely to upgrade my hardware any time soon. Raspberry Pi’s are luxury items these days. My NAS is struggling with a dated CPU but it’ll have to chug along for another year.
The App
I built Croissant RSS to control how I consume blog feeds. This was an experiment in no build step and web components. It’s disheartening to see PWAs are still crippled by Apple. I’ve built a few and the iOS issues never end. Tauri allowed me to publish a desktop app but not without troubles. Nevertheless, building Croissant has taught me valuable lessons!
The End
I ended the year testing my skills by solving Advent of Code in JavaScript, Zig, and Rust. Three languages was exhausting! So with that I’ll be taking annual leave.
What an eventful year. See you in 2026! Have a lovely Christmas and New Year!
Thanks for reading! Follow me on Mastodon and Bluesky. Subscribe to my Blog and Notes or Combined feeds.