Blog

Premature Abstraction of Entity Names November 9, 2025 – It’s easy to name your entities something too abstract too early when designing data structures. Creating Modern Wordpress Themes August 19, 2025 – The Wordpress ecosystem has changed a lot in recent years. Here's how to create modern themes that leverage the full-site editing experience. Building AI Workflows Using Alfred August 10, 2025 – Alfred has long been my launcher of choice, and I have dozens of custom workflows built for it, including lots of internal tools that help me quickly... Building a Plugin System for a React App July 30, 2025 – Examplary is a new tool we're building to help teachers create better tests and exams. One of my philosophies about product development is that the... Using Gemini in My Todo Flow June 17, 2025 – Maybe it's taken too long, but I more and more am actually integrating little LLM tools into my daily workflows, other than coding and chat. This... Integrating Safe Exam Browser June 1, 2025 – Safe Exam Browser is an app that can be installed on Mac, Windows and iOS to create a safe test taking environment for students that prevents some... Keeping Your Environments Distinct with Separate Favicons May 26, 2025 – When you're working on a web app that runs in multiple environments (dev, staging, production), it's easy to get confused and get frustrated about a... Staying in Control Using Remote Config May 25, 2025 – Apple and Google's app review process for getting a new version of an app released into the App Store and Google Play is pretty fast these days,... Building Dynamic GraphQL Queries in Flexible Feed May 16, 2025 – Flexible Feed is a small Shopify app I built a few years ago. It helps merchants create XML and CSV feeds to use with Google Shopping and other... Using AI in GitHub Pull Requests May 16, 2025 – We've been talking for a while about how we can be better at informing the Street Art Cities community about new features and changes to our... TraceStack: Building an Open-Source Serverless Observability Tool March 29, 2025 – Last summer, I started building TraceStack: A serverless observability tool for AWS Lambda. Lazy Loading Routes with Vite and React Router v7 January 19, 2025 – Recently, we switched the Street Art Cities dashboard (where users upload artworks, create routes, view insights, etc.) from a massive monolithic... 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. Using AWS S3 as a Simple Cache Service December 6, 2021 – S3 is great for file storage, but it does so much more as well. I love using S3 as a simple caching mechanism for any stateless functions that need... User Impersonation in AWS Cognito March 17, 2021 – Impersonating users in AWS Cognito (for customer support purposes) is not something that is supported out of the box, but it's possible to implement it. 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… The Summer that Started Everything April 9, 2020 – Working from home while the weather is so beautiful (the weather’s been amazing the past few days here in London — feels like God is taunting the... Looking Back on 2019 December 22, 2019 – Reflecting on the past 12 months of my life as an entrepreneur. Buy Your Friend a Book August 29, 2019 – I’m a workaholic. That causes me to not spend as much time as I want to with my friends. And I feel shitty about that from time to time. Life’s busy,... Goodbye, Amsterdam August 18, 2019 – If everything goes according to plan, I'll be leaving Amsterdam at the end of November and moving back to London. That is, of course, if Boris... What I Learned This Week (Week 14, 2019) April 5, 2019 – It can be frustrating as an entrepreneur that your personal wellbeing is often so entangled with how well your company and team are doing. Structuring My Communication with Office Hours December 12, 2018 – Running a small development agency, one my my tasks is being available for my customers — past, present and future ones — to field questions, give... How I Manage Agency Projects November 16, 2018 – I’ve both worked in classic startup environments, where you typically work on one or two big products, and agency environments where there’s anywhere... Programming as Second Language November 16, 2018 – Recently, a friend asked what languages I spoke. Dutch, English, a passable amount of German. “And programming languages!”, she remarked. I was quick... Microservice Forensics 101 June 19, 2018 – Recently we were brought in by a customer to investigate a problem with their microservices architecture where specific transactions weren’t yielding... The Debrief - RChain Developer Conference April 26, 2018 – Earlier this month, some members of the Includable and Moonshot.Expressteams were invited to Boulder, a small town near Denver, CO, to join the... Fuck It, Ship It March 29, 2018 – Investors (and startups looking for investment) know this as no other: the team is what makes or breaks a tech company, or any company for that... My Materialistic Life August 1, 2016 – I’d like to think that we live two types of lives: a idealistic one, and a materialistic one. And we live those two lives simultaneously, always... How Colorado University Helps Students Build the Next Generation of Startups May 20, 2016 – This morning, we spoke at Colorado University with Brad Bernthal, professor of law and Techstars mentor. He has spent the last few years researching...