Blog
Building an Interactive Markdown Textarea
June 29, 2024 – Re-creating some of the features of the GitHub markdown editor, especially image pasting and file dropping.
Creating Awesome Embeddable Scripts
June 23, 2024 – I was looking at a video about the new version of Apple's MapKit JS, their web maps library, and they showed how to initialise the SDK by loading the...
Switching My Blog to Zola
June 8, 2024 – Switching from Next.js on Vercel to a much simpler site generated using Zola.
Building Composable React Components
May 26, 2024 – Imagine you're building a component. You might add some props to control the appearance, like variant or size. You end up with a component…
Writing JSDoc for React Components
May 22, 2024 – I'm starting to get into the habit of consistently writing JSDoc comments for our front-end components, which helps with explaining usage…
Tags - From UX to Implementation
May 20, 2024 – Recently, I've become a really massive fan of tags and attributes as ways of allowing users on the platforms I build to structure data.
Upgrading Your AWS Lambdas to Node 20
February 19, 2024 – The Node 16 runtime on Lambda will be deprecated in June.
Launching Flexible Feed
December 20, 2023 – I released my first Shopify app a few years ago. It’s called Flexible Fulfillment, and it helps store owners distribute orders to…
Going back to Obsidian
December 2, 2023 – Back in 2020 and 2021, I was a heavy user of personal knowledge management (PKMS) tools. Initially Roam Research, where I built up a graph…
Advent of Code 2023
December 2, 2023 – Trying some new tool combinations this year with Jupyter Notebooks and Node.js.
Comparing Cypress and Playwright
October 22, 2023 – Cypress and Playwright are both end-to-end testing frameworks, usually used to simulate user behaviour in front-end applications.
Hybrid Encryption in Node.js
October 21, 2023 – I recently learned how to implement what is called hybrid encryption in Node.js.
Finding a Direct Link to a Google Business Profile
October 6, 2023 – The other day, I was trying to find a way to link directly to a business listing in Google. There’s a lot of information available about…
Learning Some Vim
September 3, 2023 – I finally decided to start learning some of the basics of vim, something that always seemed elusive to my focus.
Building a RSS Customizer Tool
September 1, 2023 – Vercel makes buying domains and deploying apps way too simple, which is how I end up building things like **feedfixer.xyz** as soon as the idea enters my brain.
Communicate, Navigate, Aviate
August 10, 2023 – Pilots learn a thing very early on in their training. It’s the phrase “aviate, navigate, communicate”. It teaches them to focus first on…
Improving Content Quality by Using EXIF Image Data
July 23, 2023 – Last week, we implemented some functionality in Street Art Cities where we’re reading the EXIF metadata from JPEG files uploaded to the…
Digital Archival with RClone
July 16, 2023 – I got a notification the other day that my Dropbox storage was full. Weird, because I haven’t used my Dropbox account in about 5 years, but…
Moving to Visual Studio Code
July 1, 2023 – Replacing my trusty workhorse PhpStorm, which I've been using for about a decade now.
Changing my Relationship with Email
July 1, 2023 – In the last year, I’ve switched from a partnerships-related role to a role that solely involves engineering leadership. Together with that,…
Some Ideas from Get Together
June 30, 2023 – I've recently been reading the book Get Together. It's all about building communities around a hobby, habit or a product.
Exploring Folksonomies
June 26, 2023 – I've been getting very obsessed with tagging systems around the internet in the last couple of weeks. It all started with me thinking about a new tagging system for artworks on Street Art Cities, and...
Moving over Street Art Cities to PMtiles and MapLibreGL
June 8, 2023 – Street Art Cities is basically one big map. Well, lot’s of individual maps.
The power of `.toString()`
June 2, 2023 – Using `.toString` on functions in JavaScript is a powerful way to create reflection-like behaviours.
What Good Looks Like
May 21, 2023 – When I think of a successful company, I imagine a team of about 10 to 20 people who earn good wages, love working together and do work…
Processing Incoming Email with AWS SES
May 9, 2023 – AWS Simple Email Service is a service I've never been that big of a fan of, because it feels like a bit of a black box. Things have…
Building Social Features Using DynamoDB and Lambda
April 8, 2023 – How we built a personalised feeds service and following using serverless on AWS.
Returning to slower social media
February 6, 2023 – No more algorithmically generated feeds with something new every time you refresh, no companies fighting for your attention.
Creating a Production-Ready Public API Using Serverless
January 1, 2023 – How to build an API using Lambda and API Gateway for use by external developers.
Memories: The Relative Score
December 28, 2022 – Lessons learned as a 16-year old entrepreneur about how simple product features can have a big impact.
The Craft
October 3, 2020 – There’s something unique about creating something from scratch, with nothing but your own vision of what it should be like, with no…
Digital gardens
July 24, 2020 – Something that I recently came across is the concept of a digital garden. It's not a new concept, although this terminology for it seems to…