This is an RSS-only post, thank you for subscribing :) If you’re only here for web and tech talk you can skip this one! I rescued an animal today! Probably… The UK has its fair share of canals. I like canals. They cut through urban life offering an escape back to nature and are t … | Continue reading
Apple’s WWDC 2026 keynote was a snoozefest but one section left me rather perplexed. Early in the show Apple gave a performance about “child safety”. Apple ended the show with their new AI photo mangler. That’s some serious cognitive dissonance! […] | Continue reading
Standard.site provides shared AT Protocol lexicons. Atproto is just spicy JSON and asymmetric cryptography. I’ve tried to explain atproto in more detail before. Bluesky has always supported a few open graph meta tags which I use to generated images for blog posts. […] | Continue reading
I am back! Ten days “offline”. For me that just means online without talking to anyone. My break came at a time of high industry (and personal) stress. “Seeing talented people lose motivation bums me the hell out. Reach out and say thanks - Kevin Powell”Thank you to those who rea … | Continue reading
It’s Google I/O week and this year’s theme is performative slop. Budding Googlers battle it out on stage vying for executive eyeballs. The prize? Exemption from the next culling. As you might know AI isn’t my cup of tea and my AI policy explains why. […] | Continue reading
How do you stay sharp as a web developer and/or designer? I’ll share my advice below. I’m also looking for front-end folk to advise me too. What are your whetstones? That is to say: sources of news and knowledge to level up professionally. Does that metaphor work? […] | Continue reading
The web and tech industry is a veritable sausage party. We don’t need surveys to prove it but we have surveys to prove it. State of surveys have been running for a decade now. Let’s look at the 2025 survey demographics: Yes I think “sausage party” is accurate. Weißwurstfest even. … | Continue reading
Giving lightbulbs a MAC address was a mistake that I’m living with. “I’m literally unscrewing lightbulbs to renew their DHCP lease @dbushell.com - Bluesky”Instead of enjoying the bank holiday Monday I updated my homelab software. I was ‘inspired’ by the Copy Fail Linux bug to run … | Continue reading
TL;DR: GitHub used to be cool and now it’s a lame slop graveyard. GitHub is racing towards the mythical zero nines of uptime. Users are starting to notice that GitHub is now a Microsoft product. Eww! Official uptime paints a concerning chart. The missing status page tell a far wo … | Continue reading
My regular schedule of CSS and HTML tips will return after this brief look at the sorry state of the web and tech industry. It’s grim. “Our press secretary, Sean Spicer, gave alternative facts to that… Alternative facts - Kellyanne Conway (Wikipedia)”Following the 2017 inaugurati … | Continue reading
Today Sabastian Sawe ran an historic sub-two-hour marathon in a competitive race. A marathon is around 42 kilometres, aka 26 miles in freedom units (we use miles in the UK too but not for running distances). I feel the record is a little unfair on Kipchoge who achieved the milest … | Continue reading
My website has a new page! The /uses URL pathname is an “official” slash page. I’m only listing web tools I use for now. My default apps change too frequently. The list is an evolution of an old post I was secretly maintaining. Web tools Web tools are web-based tools, obviously. … | Continue reading
CSS cascade layers are the ultimate tool to win the specificity wars. Used alongside the :where selector, specificity problems are a thing of the past. Or so I thought. Turns out cascade layers are leakier than a xenonite sieve. Cross-layer shenanigans can make bad CSS even badde … | Continue reading
This year I’ve been asked more than ever before what web development “stack” I use. I always respond: none. We shouldn’t have a go-to stack! Let me explain why. What stack? My understanding is that a “stack” is a choice of software used to build a website. […] | Continue reading
I’m all aboard the CSS subgrid train. Now I’m seeing subgrid everywhere. Seriously, what was I doing before subgrid? I feel like I was bashing rocks together. Consider the follower HTML: The content could be simple headings and paragraphs. […] | Continue reading
… is what I’m reading far too often! Some of you are losing faith! A growing sentiment amongst my peers — those who haven’t already resigned to an NPC career path† — is that blogging is over. Coding is cooked. What’s the point of sharing insights and expertise when the Cognitive … | Continue reading
Figma is the industry standard for painting pretty pictures of websites. It’s where designers spend my designated dev time pushing pixels around one too many artboards. Figma promises to remove the proverbial fence between design and development. […] | Continue reading
This is an RSS-only post, which I like to do sporadically! Thank you for subscribing :) Today’s question Am I burning out? Let me know what you think, internet doctors. I work a four day week and I have done so for many years. Fridays are mine to have fun. […] | Continue reading
I should build a game! I feel like that’s a common dream, right? Game development is what got me interested in design and programming to begin with. I learnt ECMAScript via Flash ActionScript many moons ago. Some time later “Thoughts on Flash” brought a swift demise and ruined le … | Continue reading
I visited deno.com yesterday. I wanted to know if the hundreds of hours I’d spent mastering Deno was a sunk cost. Do I continue building for the runtime, or go back to Node? Well I guess that pretty much sums up why a good chunk of Deno employees left the company over the last we … | Continue reading
Disclaimer: this post includes my worst idea yet! Until now my contact form submissions were posted to a Cloudflare worker. The worker encrypted the details with PGP encryption. It then used the Amazon AWS “Simple Email Service” API to send an email to myself. […] | Continue reading
Below is a parody of Simon Willison’s What is agentic engineering? I use the term agentic engineering to describe the practice of casino gambling with the assistance of random superstitions. What are random superstitions? They’re superstitions that can both write and execute entr … | Continue reading
Perhaps my favourite JavaScript APIs live within the Internationalization namespace. A few neat things the Intl global allows: Natural alphanumeric sorting Relative date and times Currency formatting It’s powerful stuff and the browser or runtime provides locale data for free! [… … | Continue reading
At Protocol has got me! I’m morphing into an atmosphere nerd. AT Protocol — atproto for short — is the underlying tech that powers Bluesky and new social web apps. Atproto as I understand it is largely an authorization and data layer. Atproto data All atproto data is inherently p … | Continue reading
Whilst moving projects off Cloudflare and migrating to Bunny I discovered a neat ‘Bunny hack’ to make life easier. I like to explicitly say “no” to AI bots using AI robots.txt†. Updating this file across multiple websites is tedious. With Bunny it’s possible to use a single file. … | Continue reading
Bluesky is a “Twitter clone” that runs on the AT Protocol. I have to be honest, I’d struggle to explain how atproto works. I think it’s similar to Nostr but like, good? When atproto devs talk about The Atmosphere they sound like blockchain bros. The marketing needs consideration. … | Continue reading
Croissant is my home-cooked RSS reader. I wish it was only a progressive web app (PWA) but due to missing CORS headers, many feeds remain inaccessible. My RSS feeds have the Access-Control-Allow-Origin: * header and so should yours! Blogs Are Back has a guide to enable CORS for y … | Continue reading
Nobody asked for it but nevertheless, I present to you my definitive “it depends” tome on visually-hidden web content. I’ll probably make an amendment before you’ve finished reading. If you enjoy more questions than answers, buckle up! I’ll start with the original premise, even t … | Continue reading
When I rebuilt my website I took great care to optimise fonts for both performance and aesthetics. Fonts account for around 50% of my website (bytes downloaded on an empty cache). I designed and set a performance budget around my font usage. […] | Continue reading
The off-canvas menu — aka the Hamburger, if you must — has been hot ever since Jobs’ invented mobile web and Ethan Marcott put a name to responsive design. My journey Making an off-canvas menu free from heinous JavaScript has always been possible, but not ideal. […] | Continue reading
I’ve only gone and done it again! I redesigned my website. This is the eleventh major version. I dare say it’s my best attempt yet. There are similarities to what came before and plenty of fresh CSS paint to modernise the style. You can visit my time machine to see the ten previo … | Continue reading
Mozilla published a new State of Mozilla. It’s absolute slopaganda. A mess of trippy visuals and corpo-speak that’s been through the slop wringer too many times. I read it so you don’t have to. ⚠️ Warning: the State of Mozilla website has flashing graphics and janky animations. [ … | Continue reading
I’ve made minor updates to my AI Policy but you probably don’t care because you’re tired of reading criticism. You’ve dismissed all that because AI is inevitable. If you do care, and you should, you are not taking crazy pills! Billions pumped into the relentless marketing machine … | Continue reading
On Jan 14th Proton sent out an email newsletter with the subject line: “Introducing Projects - Try Lumo’s powerful new feature now” Lumo is Proton’s “AI” offering. There is a problem with this email. And I’m not talking about the question of how exactly AI aligns with Proton’s co … | Continue reading
Everyone has an opinion on markdown but why stop there? Write your own parser, make those opinions reality! That’s what I did with Hmmarkdown — my HTML-aware markdown library. It has built my website content for the past year. Turns out parsing markdown (with HTML) isn’t easy. [… … | Continue reading
Last week my router almost died! Disaster was averted but it dawned on me how fragile my home network was. I have all manner of VLANs and firewall rules so I can’t just plug in my ISP-provided router. With no redundancy in place a real disaster would mean panic buying an expensiv … | Continue reading
My spring 2025 update ended with a to-do list, apparently. I totally forgot but I happened to complete the tasks anyway. Then disaster struck! Quick recap before the disaster. To-dones GitHub’s death spiral led me to finally self-host Forgejo publicly at git.dbushell.com. […] | Continue reading
I didn’t intend for my RSS-only posts to be video game reviews but that’s what you’re getting again today! I had big plans for my holiday break but I spent it gaming. If you subscribed for web dev stuff don’t worry these off-topic posts are rare :) Warning: there will be spoilers … | Continue reading
Scroll fade is that oh so wonderful web design experience where elements fade in as they scroll into view. Often with a bit of transform on the Y-axis. If you’re reading this via RSS you’ve been spared. Done subtly and in moderation scroll fade can look fine†. […] | Continue reading
Shoutout to Robb Knight! I was struggling for time and a topic to kick-start the year. I don’t think the title is trademarked so I stole it :) Robb also has a /uses page. I genuinely thought I had one but it’s a 404. I am reminded that I have an outdated /now page. […] | Continue reading
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 … | Continue reading
I wrote about Advent of Code in January and I was keen to return for AoC 2025 . This year I upped my game by attempting all puzzles in JavaScript, Zig, and Rust. I had plenty of time due to a work project falling through… Oh well, time to brute force some puzzles! […] | Continue reading
My website is built with a home-cooked static site generator (don’t look, it’s a mess). I wrote a half-baked markdown parser I haven’t touched in a year. Until now! It’s time to under-engineer Hmmarkdown! De-sync I coded my markdown parser to be “optimistically async”. […] | Continue reading
Apple’s anti-competitive practices are well documented. This has allowed Apple to maintain a paltry mobile web experience with minimal effort. iOS Safari is a pathetic offering. Regardless, I’ve never bothered until recently with other iOS web browsers because they’re all Safari … | Continue reading
Svelte(Kit) keeps pulling me back in! The remote function stuff is looking tasty. Wish I had that for my client work last year. I’ve got a personal project I’m tempted to refactor but I’ll wait for the API to stabilise. In the meantime, I’m playing with a small SvelteKit app to r … | Continue reading
Croissant v0.5 has been released! I have improved the favicon fetcher from the last update. Croissant will now go HTML spelunking because not enough blogs have a default favicon.ico. I have added a “Close as Unread” button to the end of the reader view. […] | Continue reading
I just read an opinion piece on a tech company blog. I have a general rule not to do that. Corpo blogs are biased, thinly veiled ads that are too quick to jump the gun with: “And that’s why we built [crapware]”, without justification. I gave this blog a chance because the author … | Continue reading
Wayyyyy back in 2012 I created the best date picker in the world! Pikaday on GitHub revels in 8k braggadocious stars but this year we decided to archive the project. Pikaday was old and tired. Personally I had successfully ignored it for years. […] | Continue reading