Working with Shopify in 2026
I've been building a complex integration with Shopify. It has been a journey.
Benjamin Read's code garden.
I've been building a complex integration with Shopify. It has been a journey.
Seismic shifts in my life have meant this blog is becoming more about my personal interests. And I'm happy about that. I hope you will be along for the ride.
I've spent the last 2 years living and working around Welsh language speakers. I still find it amazing that a whole culture existed here without my ever encountering it before.
As the Temporal API is now stable, and a specification compatible polyfill is available, I thought I would use Temporal to build a countdown timer in a React project.
If you have an application which makes many requests to the same API you can use a key to cache and de-duplicate requests. Here's how to do it.
Over the past few months I've been refactoring a large application. I learned a few things from doing it, and thought they might help someone else.
For the past 3 years I've been working at a company that is heavily invested in Drupal as a platform. We've gone through a massive iteration with JavaScript and believe we've arrived at a solution that might help other teams.
I find it fascinating that in spite of many advances in modern psychology certain myths and downright errors still persist. Micro expressions are one of these, and learning to notice them has helped me to understand people better.
I've found the details element superbly useful lately. I added only one or two things to make this useful element suit two very different use cases
In a well established team, personality traits often come into play. Here we group three main types that, when recognised and supported, can help the business and the technology team to thrive.
Dates in JavaScript are changing forever: The Temporal API is now at Stage 4, which means it's stable, and there's a polyfill available. It's time to start getting familiar with the API.
I enjoy times when I'm gleefully happy. But I also enjoy being melancholy, which quite often comes out in my musical tastes. Here are some of my favourite melancholy songs, and why I like them.
With everything else we need to remember, checking formatting and linting is easy to forget. If this sounds like you, there are some great solutions out there. Here's how to use Git Hooks.
This past year I've been involved in replatforming our media player to use media-chrome from Mux instead of JWPlayer. Here's how that went.
An asynchronous solution which waits for elements to appear in the document. Covers both a normal Document and the Shadow DOM.
I recently decided to delve a little deeper into Kubernetes by building my own multitenant platform using Capsule.
I'm getting asked this question a lot lately, so I made a few charts that I hope explains the choices people face when they are thinking about switching, and the effort that might take.
Professional software development at an enterprise scale is inherently, and at every level, social. How does comprehension of this fact help teams to perform better?
Many years ago I moved away from building things with WordPress. But it's time I tried to help people understand what I think the current situation means for people still in the ecosystem.
Last year I built a carousel project and showcased it here. I've just updated the code I used so that you can implement a carousel by only adding the class name to the parent element. Here's a breakdown.
This is a follow-up article to one I wrote a few months ago, and which quickly became the most popular article on my blog. I've learned a few more tricks, including how to ensure that types in events are respected.
DOM content isn't always loaded in top-to-bottom. Custom elements sometimes need to wait for API calls, and sometimes you might instantiate some of the DOM elements via JavaScript. Here's a handy function to observe those changes
This is a trick that wasn't on any of the articles I found using the old search engines. So I'm posting it here. It's about how you can use an aluminium coffee moka pot on an induction hob.
I've been taking a deep dive into Web Components recently: building a complex application. I have really enjoyed it. However, as with any project I want to deliver something that is proven to work by means of static, unit and end-to-end tests. I've run in to some issues with existing test suites.
A system to allow visitors to comment on my blog posts has just gone live.
I've slowly begun to realise something about my taste in poetry, and I wonder how much this is because of my Welsh heritage. As a result, I'm diving more into traditional Welsh poetry, and really enjoying what I find.
I very rarely write personal articles on this blog. But with the demise of social media I've decided to share a little more of my personal thoughts here.
SendGrid remains a popular tool for routing emails in today's applications. But it isn't without pitfalls. Here's my setup.
I was playing around with the :has selector recently and noticed it's got a pretty awesome feature: relative selectors.
Having a structured plan for the codebases in your project will help keep them in good shape. I've written this document as a guideline of sorts, feel free to adopt it, adapt it or use it as a basis your own.
The scope of this project was to track how much of a video has been watched periodically, send the data to an API at regular intervals. Here's how I achieved that in a developer-friendly way.
When I first saw this method of being able to progressively hide individual navigation items instead of all of them, and to do so without the use of JavaScript, I was impressed with the idea. Here's a remix using Tailwind.
A few times during the past year I've caught myself advocating for iterative changes. Both in software and in terms of our processes I've found that I far prefer smaller, incremental improvements over stressful, complicated and far-reaching changes that may or may not improve fulfilment, delivery and other metrics.
I made a collection of loading states for Tailwind. It was relatively easy exercise, and I'm surprised I didn't find anything like it out there already.
Sorry to those people who subscribe to my RSS feed, I had a bug which I couldn't fix before I re-launched deliciousreverie.co.uk, but which I've resolved now. Yes, I've rebuilt my site again. This is the fifth iteration. Here's why.
Monorepos with Nx on Netlify has been my stack of choice over the past few years. I really enjoy using both tools to publish an ever-growing series of websites for my hobbies. But there have been a few changes to both Nx and Netlify in that time. This article updates one on the Netlify blog that's a little out of date.
I've become an avid fan of TypeScript in recent years as it's improved my output, tightened up my appreciation for JavaScript's type coercion, and generally reduced my anxiety levels at work. However recently I've come into a place of work where JavaScript is written and often maintained by software engineers for whom JavaScript isn't their speciality. Not wanting to go back to the wild west of…
Carousels are a staple of web development life. And thankfully, there are a lot of good off-the-shelf ones ready to build into your project. But it's a good challenge to see if you can build one yourself.
I've wanted to have the ability on my blog to render poetry in a way that was conducive to reading, and I think I've finally managed to achieve that with my current tech stack, and some repurposing of tools I already use.
I had the opportunity to integrate a callback function with a module I was building recently. But what is a callback? How do you use them? Let's take a closer look.
I'm building a component library in Astro, and one of the things I needed to do was to build a component that could render as either a button or an anchor tag. Here's how I achieved that.
Time is a funny thing. Whilst modern science has helped us to see it's not as constant as we might have imagined, we still rarely are able to see it and our experiences within it from different perspectives. Although I really enjoy these few poems that seem to be able to step outside of the flow in one way or another.
I'm particularly proud of this piece of artwork and messaging I came up with for the Webiny community, not only because of the message it conveys to our community, but also because it also has a hidden message.
I've just relaunched my website with an entirely new stack, here's what it consists of and why I've made these technical decisions.
This post was written for Webiny's technical documentation portal. Learn how to roll back the data in your Webiny project by restoring from DynamoDB backups and Elastic Search / OpenSearch snapshots.
Originally published on the Webiny blog. We want to provide the easiest way for developers to get started when building a new Webiny project. So we have a create-webiny-project command line interface (CLI) that creates a new user project with their chosen AWS region and some other preferences they need.
Originally published for the Webiny community and Product Hunt launch. It introduces a new marketing term that was conjured up to provoke discussions about what value Webiny brings to organizations apart from the CMS aspect, and because of it's serverless nature.
Originally written for the Webiny blog and was written at a time when Gatsby was experiencing a bit of a resurgence. By writing it, I was hoping to tap into this renewed interest and provide value by highlighting the differences and advantages to each tool.
I appeared on the podcast 20 Min JS with Fernando Doglio to talk about Serverless as a concept, and how developers can maximize their time and ship deliverables faster by adopting serverless.
Originally written for the Webiny blog. Heroku announced that it's extremely popular free tier plans were being phased out and I saw an opportunity to provide some high value content that could capture the audience and attract them to Webiny as a product.