Tag: WebDev

47 posts

Deep Purple, jQuery and the role of legacy

·
Jun 21, 2026

The Programmer's Fulcrum: 12 June, 2026

Welcome to your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.

·
Jun 12, 2026

The Programmer's Fulcrum: 5 June, 2026

Welcome to your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.

·
Jun 6, 2026

The Programmer's Fulcrum: 29 May, 2026

Welcome to your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.

·
May 31, 2026

Cloudflare for Families DNS resolver and miscategorisation

today iain learned: How to report a miscategorisation of a site/domain in the Cloudflare for Families DNS resolver service.


today iain learned icon
today iain learned
til.iainsimmons.com
·
May 25, 2026

The Programmer's Fulcrum: 22 May, 2026

Welcome to your your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.

·
May 23, 2026

The Programmer's Fulcrum: 15 May, 2026

TPF is your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.

·
May 16, 2026

Adding an animated card border glow with CSS

today iain learned: How to add an animated card border glow with CSS


today iain learned icon
today iain learned
til.iainsimmons.com
·
Apr 20, 2026

Personal site infrastructure, diagrammed

That I even need and have made a diagram of the infrastructure for this site speaks to how over-engineered it is. Yet, while it is ostensibly a personal site, it's a personal site that's replaced many services that I previously used.

·
Apr 7, 2026

Battling bots

I've already blocked entire countries to combat scrapers , I update my robots.txt for well-behaved bots (and 403 any included in the list that access anything other than my robots.txt ). In addition to these steps, I've started blocking traffic from IPs contained in Spamhaus ' DROP and DROPv6 lists.

·
Apr 6, 2026

Better code blocks with the Astro Expressive Code integration

today iain learned: How to build better and more accessible code blocks with the Astro Expressive Code integration


today iain learned icon
today iain learned
til.iainsimmons.com
·
Apr 2, 2026

Migrating infrastructure off Coolify

I've spent a while recently migrating my personal infrastructure off Coolify . Coolify 's an excellent tool and one that helped manage the initial learning curve of managing and deploying things when I started to self host things. As I got more comfortable with the process, issues and details I found myself wanting to remove it as an abstraction on top of what I had become comfortable managing.

·
Mar 27, 2026

Owning your data

Owning your own data is hard . I've been trying to own as much as I can, and my site has become a reflection of that process, both in what I display and discuss. As difficult as it is, there's a freedom in owning as much as you can.

·
Feb 18, 2026

Content-Security-Policy Reporting endpoint

today iain learned: How to use the Content-Security-Policy Reporting endpoint for automatically logging/receiving CSP violations


today iain learned icon
today iain learned
til.iainsimmons.com
·
Feb 14, 2026

Screenshot DOM nodes to create favicon and Open Graph images

today iain learned: How to screenshot HTML DOM nodes and their CSS styles in the browser to create favicon and Open Graph images


today iain learned icon
today iain learned
til.iainsimmons.com
·
Jan 24, 2026

Pinning homebrew dependencies

You learn something new every day. I've been using Homebrew for over a decade and, up until a few weeks ago, hadn't hit a case where I would not want to update something.

·
Jan 23, 2026

Blocking entire countries because of scrapers

I use Goatcounter for analytics primarily to see where things I post might get mentioned. I don't get a ton of traffic, nor should I expect to.

·
Jan 14, 2026

Why React Router v7 Doesn't Have A Good PWA Solution

It's tradeoffs, all the way down.

·
Jan 8, 2026

React Server Components: Do They Really Improve Performance?

·
Jan 6, 2026

Building My 2025 Year in Review Page with Astro

How I built an interactive year-in-review page using Astro's content collections, pulling together blog posts, movies, books, music, and more into a single retrospective. Plus: polaroid selfies, goals for 2026, and lessons about actually tracking things throughout the year.


K
keith.is
keith.is
·
Dec 31, 2025

Using Calibri on .gov sites

The US government is run by petty morons that are threatened by a font. But because the web is the web, you can at least force .gov sites to render all text using Calibri.

·
Dec 11, 2025

App selection criteria

The last app I bought through Apple's app store was a client for my Audiobookshelf instance and this reminded me why I'd built a Navidrome client . I wanted to use the web application as a PWA, but Apple doesn't support continuous audio playback in PWAs or Safari on iOS. Audio plays, but it never advances to the next track.

·
Dec 11, 2025

Turning my reading list into podcasts

linkding is one of my favorite applications that I self-host and the place where I save everything I want to read later. The catch being that what little time I can dedicate to actually reading is spent on books. What I do have is time where I can listen to things while doing chores around the house, out on walks or otherwise engaged in an activity that doesn't demand my full, undivided attention.

·
Dec 4, 2025

Deploy on push with Forgejo and Coolify

All of my projects are now stored on my Forgejo instance rather than GitHub as the latter continues to speed run the enshittification curve. I've implemented a manual deploy button in my site's admin but for other, lighter-weight projects, I prefer to deploy changes whenever I push them up.

·
Nov 28, 2025

Automating my reading progress updates

I've tracked my reading progress on my site for a bit now. I'd originally done this by fetching my progress from external APIs and sources on platforms like Oku , fetching and parsing the DOM on the StoryGraph and eventually importing and managing my own data. For years I've been reading and listening to audiobooks in Apple's Books app. Much like Apple's other media apps (music and TV, namely), Books has slowly moved in a direction that makes impor

·
Nov 16, 2025

Updating forgejo's robots.txt

I've moved all of my personal, private projects over to my own forgejo instance . It's been reliable and an altogether simple transition — I even have it mirroring the ai.robots.txt repo.

·
Nov 15, 2025

No JavaScript necessary

One of my ongoing efforts in building this site has been to embrace progressive enhancement and make it every bit as functional without JavaScript as it is with JavaScript. This has become much easier now that I've rebuilt the site using Laravel .

·
Nov 3, 2025

Analyzing the domains (and sites) of an authoritarian regime

If you've ever wondered what domains the US federal government has registered, there's a rather exhaustive list over in the dotgov-data repository on GitHub, which is maintained by CISA . You can see the raw CSV here . They don't include the registration date, but you can derive that from public WHOIS records or by examining the repository's git histor

·
Oct 13, 2025

A changelog

I've made a ton of changes to this site that I haven't yet written about. I likely will write about at least some of the changes given enough time, but I wanted to spit out a rough changelog in the meantime.

·
Sep 30, 2025

Importing artist and album data from Navidrome

Since adopting Navidrome to stream my own music I've been tracking my listening activity from my instance and have recently added pages for all of the albums in my collection, with a record for each track and the track list and track duration displayed on the album page.

·
Aug 31, 2025

My preferred GitHub alternative

GitHub's now former CEO went in for some bold absolutes on software development as a career last week: Either you have to embrace the Al, or you get out of your career. And, this week, resigned. : GitHub and its leadership team will continue its mission as part of Microsoft’s CoreAI organization, with more details shared soon. Terrifying stuff!

·
Aug 11, 2025

This site runs on Laravel

As I've continued to over-engineer this site, there's been a mounting tension between what is and isn't dynamic. What should be dynamic, what needs to be dynamic, how often a given page or element is updated.

·
Jul 28, 2025
why I removed my self-healing URLs

why I removed my self-healing URLs

the act of removing my self healing URLs


isabelroses.com icon
isabelroses.com
isabelroses.com
·
Jul 6, 2025

Who writes the documentation?

If the future is AI writing code (or writing much of it) — who writes the documentation? Is it the developers reviewing the code?

·
Jun 6, 2025

Another AI company lying about their user agent

While digging around for AI crawler (read: scraper) user agents to block I found another company, platform, tool — whatever — that's using an altogether generic user agent.

·
Jun 4, 2025

The 'agentic' web is nothing more than a moat

Copilot in Edge. Gemini in Chrome. AI chatbots in Firefox. Opera becomes an 'AI agentic browser'. The Browser Company announces Dia and declares that 'traditional browsers' will die. Perplexity is building an 'agentic' search browser.

·
May 30, 2025

A year of tracking my music listening activity

I've spent the better part of a year tracking the music I listen to day in and day out. The implementation has changed and the players have changed but the data collection, storage and display has been reliable throughout.

·
May 29, 2025

Despite the warnings, I tried self-hosting my email

I've been moving more and more of the infrastructure I run and host on to my own servers. One thing led to another and nearly all of what I used was there: analytics, photo storage, music, RSS, saved links and on and on. I got the itch to try this with email.

·
May 27, 2025

A clarified stance on blocking AI crawlers

My clarified stance on blocking AI crawlers is this: block all of them . I won't speak for everyone on the matter (I can't), but feel ok walling them all off .

·
May 23, 2025

Building an oEmbed endpoint

For reasons that elude me I cannot get Open Graph tags to work when anything from this site is posted on Mastodon. I've fiddled with server configs, my aggressive robots.txt and still — nothing. They work everywhere else . So I built an oEmbed endpoint.

·
May 18, 2025

Managing music with rclone

I've been listening to my music via Navidrome for a bit now and it's working quite well. To manage my music, I use rclone locally and on my host machine.

·
May 14, 2025

Running 11ty and PHP concurrently

Now that I have several sections of this site served dynamically using PHP I've finally put together a single command to work on the site locally.

·
May 7, 2025

Using a Docker for deployments on Coolify

I have Coolify building my site and rsync -ing the build output to a separate LAMP server. There was a recent bug in a release that broke compatibility with Nixpacks that broke my previous deployment configuration. To the Coolify team's credit they pushed out a fix within hours (and noted that Nixpacks often has issues where it may break).

·
May 4, 2025

JAMstack is an entirely unnecessary term

Boom! Lead with the hot take. JAMstack : JavaScript, API and Markup — it's not novel, it was never new and it incorporates foundational parts of the web. JavaScript? Yep — always had that. Markup? You betcha. APIs? We've written those for a long time. We still can and still do. In this context though? You're not writing the API, you're paying for the convenience of someone else hosting it and papering over complexity.

·
May 1, 2025

Tracking listens from Navidrome

Migrating from Plex to Jellyfin to Navidrome has meant refactoring how I record listens at each step. Much of the code architecture has remained the same — error reporting, inserting tentative artist and album records, but the data retrieval and recording has shifted.

·
Apr 24, 2025

A site setup script

I wrote a setup script for this site All of the secrets necessary to run it are in a 1Password entry and this script leverages their CLI in order to populate the configs necessary to run this site locally when it's been freshly cloned.

·
Apr 18, 2025

Amazon breaks compatibility with third-party S3 providers in JS SDK

Amazon issued a recent update to their S3 JavaScript SDK that breaks compatibility with many third-party S3 providers.

·
Mar 27, 2025