James

Hello! I'm James (he/him/his) ✨ I'm a writer, art history student, and Taylor Swift fan.

61 followers0 following80 stories

Longform Stories

Bringing people together with the web

At Homebrew Website Club this evening we had a conversation about how to encourage people to make things together using the web. This could mean writing a blog post with someone, responding to someone…

1d ago·1 min read·110 words

Wonders of Web Weaving, Episode 5

The fifth episode of Wonders of Web Weaving is out:. [...]

2d ago·1 min read·28 words

Morning coffee

The familiar sounds of the espresso machine never cease to calm me – the joy of the familiar, but also the potential of the variable: of sounds at new tones, of different cadences. Watching as the bar…

4d ago·1 min read·110 words

Aether-draft

Today I attended my first Magic the Gathering (MtG) draft: a “secret draft,” where players did not know ahead of time what series of the trading card game would be played. The event was held in a brea…

5d ago·1 min read·95 words

Moments; time

One of my favourite parts of writing – and, by extension, blogging – is that I can document a moment: I can, in words, capture a little bit of a day.. [...]

6d ago·1 min read·66 words

Clouds

“No way,” I exclaim with wonder and glee and surprise. I look up and stare for a few moments, transfixed by the delicate wisps of cloud that rest side by side. [...]

6d ago·1 min read·65 words

Hiding a list with no items in CSS

The Artemis reading interface consists of a section tag for each day for which there are blog posts to show. Each section contains a h2 denoting the date the posts were published, and a ul that lists …

Jun 4·1 min read·96 words

Is there a power law of category use?

I have been thinking a lot about categories over the last week or so. It started by Thomas sharing the work he has been doing to build a category index page. [...]

Jun 4·1 min read·72 words

The story of MJ

This is amazing. I could hardly contain my excitement. [...]

Jun 4·1 min read·24 words

Chat community for web writers?

I have several ideas swirling around for projects I would like to see happen. Sometimes, these ideas manifest as a project. [...]

Jun 3·1 min read·49 words

Digital minimalism

This is my entry for this month’s Bear Blog Carnival, on the topic of staying connected while practicing digital minimalism. Thank you Juni for hosting the Carnival, and for choosing such a fascinatin…

Jun 3·1 min read·72 words

Wonders of Web Weaving, Episode 4

The fourth episode of Wonders of Web Weaving is out:. [...]

Jun 2·1 min read·28 words

Creative spaces

In her love letter to creative spaces, Britt appreciates “anywhere that is welcoming to the big table full of slightly chaotic artists who might make a mess of their carpet from time to time.” Reading…

Jun 1·1 min read·118 words

Flagging suspicious websites in Artemis

Artemis now has a feature to flag websites that you have subscribed to as suspicious. This feature appears in two places:. [...]

Jun 1·1 min read·49 words

JUnited 2026

In recent weeks, I have been talking with a lot of people about personal websites. In so many of my discussions, I mention that one of the reasons I love coming back to my personal website is the comm…

Jun 1·1 min read·136 words

Distinguishing user and system content

When I was designing the inline message to indicate a link in a user’s Artemis reader has been flagged as malicious, I intentionally designed the system message and state to be distinguished from the …

Jun 1·1 min read·81 words

Home

I remember I was on a trip a few years ago to a place I had wanted to visit for years. Toward the end of the trip, I said to someone that I “missed the poetry” of home. [...]

May 31·1 min read·79 words

The caramel log

I have been a long-time lover of Tunnocks Caramel Wafers, made in Uddingston (near Glasgow), Scotland. Made with alternating thin layers of caramel and wafer and chocolate, Caramel Wafers are among my…

May 31·1 min read·73 words

Waiting; writing

I love to write while I am walking around in the world. I keep a digital notebook in which I write down what I observe: sights, sounds, scents; emotions, hopes, dreams. [...]

May 31·1 min read·66 words

Milk chews

Since I am thinking about delicious Scottish treats this evening, I thought this would be an apt time to write about another of my favourite Scottish sweets: milk chews.. [...]

May 31·1 min read·62 words

Mitigating floods of posts in Artemis

Note: The logic described in this post may be a stepping stone to a more robust system in the future. Please keep that in mind as you read and know that my solution may not be optimal, rather a start …

May 30·1 min read·96 words

Views; between

There is beauty in the moments between arriving and reaching your destination. I felt this yesterday in the moments before attending an event in Edinburgh last night. [...]

May 27·1 min read·58 words

The Timeless Way of Building

The book for this month’s IndieWeb Book Club, hosted by Nick, is Christopher Alexander’s book The Timeless Way of Building.. [...]

Mar 18·1 min read·47 words

Artemis changelog #8

I have been working on a few new features for Artemis, the calm web reader I maintain. You can read a summary of what’s new below.. [...]

Mar 6·1 min read·58 words

Take two

Trafalgar Square is a special place. The architecture and views are breathtaking. [...]

Mar 5·1 min read·29 words

Museum memories

This is my entry for this month’s IndieWeb Carnival on the topic “Museum memories”.. [...]

Mar 5·1 min read·33 words

Night time; walking

I had spent half of the day travelling and the other half looking at art. Whenever I am going anywhere, I like to arrive as early as I can and either walk around or go to an art gallery; ideally, I li…

Mar 4·1 min read·96 words

Guitar; sunset

The days are getting longer and brighter. The bite of the winter air is being replaced by a delicate breeze. [...]

Mar 4·1 min read·45 words

Offline mode

My blog has an offline mode that lets you view articles you have previously read on my website. This mode allows you to read something on my website even if you don’t have an internet connection. [...…

Mar 4·1 min read·77 words

The Church at Varengeville by Monet

I am writing about a few paintings to help me build my description skills. My analyses are not formal or comprehensive. [...]

Mar 3·1 min read·51 words

State of the Browser 2026

State of the Browser was electric. This is how I summarised my experience at the annual State of the Browser event in London in my notes. [...]

Mar 3·1 min read·60 words

Girl on a Divan by Berthe Morisot

Berthe Morisot’s Girl on a Divan, displayed in the National Gallery, London, caught my eye as soon as I saw it. The painting was the last one I saw in the Impressionist room in the Gallery, but despit…

Mar 3·1 min read·126 words

How to change the Duolingo app icon

I am using Duolingo to learn a bit of German. I have been using the app for a while and enjoy the exercises. [...]

Mar 3·1 min read·56 words

I wish there was a (simpler) way to highlight text in inputs

When I was building the search engine for my blog, one feature I wanted to implement was syntax highlighting within the search input field. I wanted special operators (i.e. [...]

Mar 3·1 min read·73 words

IndieWeb Carnival March 2026: Museum memories

Museums and galleries are places we can go to learn about the past, think about the present, and consider the future. Museums are places we can connect: with times, people, and place. [...]

Mar 1·1 min read·73 words

Pens, sleeves, and whiteboards

When I was in high school, I used to keep a pencil or pen up my sleeve. I don’t remember anyone else doing it, or why I started. [...]

Feb 24·1 min read·63 words

Dopplr colours

Last year I was introduced to the idea of “Dopplr colours” in the IndieWeb community. This refers to an accent colour assigned to cities on the now-defunct travel website Dopplr. [...]

Feb 24·1 min read·65 words

Brainstorming search engine ranking introspection

Search is one of my favourite disciplines in computing. In 2024 I spent a lot of time working on a NoSQL engine that I called JameSQL. [...]

Feb 23·1 min read·60 words

Preserving calm in software over time

When I announced Artemis in 2024, I titled the announcement “Artemis, a calm web reader, is available (in beta)”. So central to the philosophy of how I build the software is the principle “calm” that,…

Feb 23·1 min read·119 words

Artemis “via”

Recently, a feed a few users – including myself – were following with Artemis published a “bookmark”-like post. The markup in the corresponding feed was a bit different than expected, so Artemis ended…

Feb 23·1 min read·99 words

Artemis dense layout

This evening I added an idea I have had for a while to Artemis: a dense layout.. [...]

Feb 22·1 min read·40 words

Grouping threaded posts in Artemis

Feb 22·3 min read·553 words

Grouping threaded posts in Artemis

Artemis lets you subscribe to ActivityPub feeds (i.e. accounts on Mastodon). [...]

Feb 22·1 min read·30 words

Graduating between mediums of communication

The IndieWeb community chat has a feature that lets you create a wiki page from a chat interaction. You can say “what is {term}?” in the chat and, if there is a definition on the community wiki, the d…

Feb 22·1 min read·98 words

Thinking; walking

Earlier this week I started to feel something I haven’t felt in a while: I felt lost. I started to look ahead and feel disoriented. [...]

Feb 21·1 min read·55 words

A perfect day

Jo and I are trading blog post titles. The title Jo chose for me is “A perfect day.”. [...]

Feb 19·1 min read·42 words

Scotland’s brightness levels

I am trading blog post titles with Joe. He gave me a few suggestions for what to write about. [...]

Feb 19·1 min read·44 words

Rhythm

I have been thinking about the rhythm of my writing recently. I wrote in my drafts:. [...]

Feb 18·1 min read·36 words

IndieWeb wiki pages I really like

I visit the IndieWeb wiki almost every day. The wiki is maintained by the IndieWeb community, documenting everything from interfaces for creating posts to POSSE.. [...]

Feb 18·1 min read·59 words

Test post

This is a test post.. [...]

Feb 17·1 min read·15 words

Calendar Messaging

Sending messages.. [...]

Feb 14·1 min read·9 words

Calendar Messaging

Sending messages.. [...]

Feb 14·1 min read·9 words

A piece of art I would love to see in person

Britt and I are trading blog post titles. The topic Britt chose for me is “A piece of art you would like to see in person”.. [...]

Feb 14·1 min read·66 words

Clear sky

I love winter mornings when the sky is clear. Looking out the window, the sky is a clear blue, interspersed with the occasional white cloud so faint that it is almost invisible. [...]

Feb 14·1 min read·69 words

Snow

I wondered if it would snow again this season. The weather has been persistently cloudy, but there has been little snow. [...]

Feb 13·1 min read·46 words

Adding multiple h-feeds to the same web page

I maintain a web page that lists notes from IndieWeb events. Entries are added to the page when notes from meet-ups are archived to the community wiki.. [...]

Feb 13·1 min read·65 words

What I associate with my name

Ava and I are trading blog post titles. The topic Ava chose for me to write about was “What I associate with my name”.. [...]

Feb 13·1 min read·57 words

Proust’s questionnaire

Zachary’s website introduced me to “Proust’s questionnaire”, a series of questions by Marcel Proust. I thought it would be fun to try and respond to them!. [...]

Feb 12·1 min read·57 words

A sandwich questionnaire, part two

Ruben, after responding to the sandwich questionnaire that Zachary blogged about, added a few more questions. When I saw the blog post, I thought: these questions are exactly what I need today. [...]

Feb 12·1 min read·72 words

The inverted index pattern

In “Build a search index in Python”, I walked through how to create a search index using the “inverted index” structure. This structure is commonly used in document search.. [...]

Feb 11·1 min read·65 words

Designing for inactive users: Account check-ins and deletion

Artemis has been open for registration with an invite code for over a year. In that time, many people have signed up. [...]

Feb 11·1 min read·55 words

Redesigning the Artemis account deletion back-end

As I have been building Artemis, I have learned that the account deletion flow requires constant review. For example, whenever I add a new database table, I need to make sure that table is in the acco…

Feb 11·1 min read·87 words

Notifying users of page updates

Some time in January, I was going through my browser tabs and came across an Artemis tab that had been opened a while ago. But it took me a moment to realise that the tab might be out of date. [...]

Feb 11·1 min read·88 words

Brainstorming source code editing for web applications

Last year, I worked on a bookmarklet for editing pages on my website. When clicked, the bookmarklet would open the page in GitHub that corresponded with the page I was viewing. [...]

Feb 10·1 min read·72 words

Drawing and hand-written fonts

I have been thinking about hand-writing and websites in the background for a little while.. [...]

Feb 10·1 min read·37 words

Sandwich Questionnaire

I love sandwiches. Earlier today I was thinking about how you can eat a sandwich at any time of the day. [...]

Feb 8·1 min read·47 words

Why I love my favourite words

Every so often, I use the word delightful in conversation. That is delightful! I try not to use “delightful” too often, but I do like to bring it into a discussion every now and again. [...]

Feb 8·1 min read·79 words

Design and missing categories

Ever since I moved to using Ghost as the tool for publishing my blog posts [1], I have forgotten to add categories to some of my blog posts. My old system had a few if statements that would automatica…

Feb 8·1 min read·91 words

Noticing

Last weekend, I went to the National Gallery of Scotland. This time, I started my trip on the bottom floor where all the Scottish art is on display. [...]

Feb 8·1 min read·60 words

Clouds

I have been waking up with anticipation every morning recently. I say “good morning, world”, and then anxiously peek through the edge of the curtains. [...]

Feb 8·1 min read·54 words

Debug mode

One of the areas of the Artemis codebase that I update the most is the logic that relates to the list of posts published by authors to which a user is subscribed. Because Artemis works with so many di…

Feb 7·1 min read·135 words

Staging banners

When I run the Artemis codebase, one of the first things it does is look for an environment variable that indicates what “environment” the application is running in. There are two modes: development a…

Feb 7·1 min read·75 words

Redirecting YYYY-MM-DD-slug.md to /YYYY/MM/DD/slug with Nginx

Earlier this week a reader pointed out that posts listed on my date archive pages were linking to the wrong URLs. For example, the link for /2026/01/25/kind-software would instead be /2026-01-25-kind-…

Feb 7·1 min read·71 words

Reducing Artemis’ deployment downtime with blue-green deployments

Artemis, the calm web reader I maintain, runs as a systemd process. When I want to update the software, I deploy the new code to the server and then restart the systemd process. [...]

Feb 6·1 min read·76 words

Does your website run on green energy?

A few weeks ago I did a day-long training Carbon Literacy Project training course through my university. When I was taking the course and considering ways I can reduce my carbon footprint, I started t…

Feb 6·1 min read·84 words

Background technology

A while ago, I purchased an Aranet 4 indoor CO2 monitor. The device has sat on my desk ever since. [...]

Feb 6·1 min read·45 words

Calendars and web readers

For the last few weeks I have been thinking about the intersection of calendars and web readers.. [...]

Feb 6·1 min read·41 words

The expanse of web weaving

Last year, one of my goals was to learn more about design. I wanted to apply what I learned to making web pages. [...]

Feb 6·1 min read·54 words

Build the web you want to see

The Autumn/Winter 2025 edition of the good internet magazine is out! I contributed a piece, Build the web you want to see, in which I reflect on the last five years of James' Coffee Blog and some of w…

Feb 6·1 min read·100 words

Software Design Meetup [Feb. 11th]

On Wednesday, February 11th at 7pm - 8:30pm UK time I am hosting an event I’m calling the “Software Design Meetup” online.. [...]

Feb 5·1 min read·52 words