Things I've written

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… Pro Software for the iPad May 26, 2024 – I've complained about it before, but I still don't understand the Apple pundits that come out every year when new iPads are released to… 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. My Second Day on the California Zephyr April 23, 2024 – I woke up at around 6am after my first night's sleep on the train. It took me a few hours to get to sleep, but once my body was used to… My First Day on the California Zephyr April 22, 2024 – Our train left Emeryville (just outside San Francisco, a 15 minute Uber from my hotel) a few minutes late. The train attendant, Mike, that… Upgrading Your AWS Lambdas to Node 20 February 19, 2024 – The Node 16 runtime on Lambda will be deprecated in June. Showing a Manage Subscriptions Button in React Native December 29, 2023 – If you implement in-app purchases in your app, you might want to show users a way to manage that subscription by showing links to the App… 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… A Mental Framework for Debugging December 11, 2023 – Engineers spend a lot of their time debugging issues. It's a skill you acquire over time, and something that each engineer does in a… Building a Serverless Search Engine Using Fuse.js December 3, 2023 – Using AWS S3 and Lambda to build a cheap and simple search engine. 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. The iPad as a Platform November 27, 2023 – I've used an iPad since the very first year it was introduced. Me and my co-founder Dante managed to convince our school's headmaster that… 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… Running ESBuild in the Browser September 16, 2023 – So, I found out the other day that it’s possible to run ESBuild – that tool you usually use for bundling Javascript and Typescript code… 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… Setting Default Font Family in React Native July 30, 2023 – Here's the right, albeit hacky, way to set a default font in React Native 0.72. Allowing ACLs for S3 Objects in CloudFormation July 25, 2023 – AWS has added a few new defaults for new S3 buckets to make it harder to create leaky buckets that put all of your company’s data out there… Don't Use React Props for Theming July 24, 2023 – So we all know that in most cases, using the style prop is considered back practice in React: 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… Setting Up Code Coverage Tracking in a Monorepo July 23, 2023 – There’s a lot of tools like Codecov to track code coverage. I don’t personally like these tools too much for simpler projects, where I just… Getting Better at Holidays July 21, 2023 – I feel like im getting better at going on holiday and properly switching off from work. Watching Lives Unfold July 18, 2023 – It is amazing that this age of media has made it easier than ever to see what the lives of other people are like. Learning About the Tragedy of the Commons July 16, 2023 – I've been reading a few different things recently that have mentioned the concept of the Tragedy of the Commons. 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… Now that the Trust is Over July 15, 2023 – I long back to an age of the internet I have never fully experienced myself. Processing MDX into an OpenAPI specification July 15, 2023 – Last night, I realised I wanted to set up a Postman collection for an API we have built. The easiest way to do this seemed to be to import… Producing PDF files in AWS Lambda July 9, 2023 – Something I’ve had to do a few times now is to generate PDF files in AWS Lambda. This could be anything from reports to invoices. My… Conventional Commits and Comments Cheat Sheet July 6, 2023 – A quick overview of the Conventional Commits and Conventional Comments standards. 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... FTP: Active vs Passive Mode June 10, 2023 – I know the basics of how FTP works, but only this week I made sure I actually fully understand how the different modes of FTP work. Let’s… Goodbye, Apollo June 8, 2023 – About a month or two ago, Reddit announced that they are going to start charging for their API, in a move that seems if not inspired by… 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. Why only Apple can pull this off June 5, 2023 – The device announced today by Apple is a very niche device. A first generation, something that – even with its Apple-classic polished… Rough consensus June 3, 2023 – I’m reading the wonderful book Working In Public by Nadia Eghbal, and there is a reference in there to a note from the Internet Engineering… Preparing for Apple WWDC 2023 June 3, 2023 – I wonder how Monday’s event will make me feel about Apple as a whole. The power of `.toString()` June 2, 2023 – Using `.toString` on functions in JavaScript is a powerful way to create reflection-like behaviours. Setting up GitHub Actions to have access to your AWS account May 28, 2023 – OIDC AWS access in GitHub Actions allows you to do credential-less AWS auth. 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. High-rise August 11, 2021 – "I fear the moment I'm truly happy with myself, I won't be myself anymore," he said quietly. Slackin' Amazing August 5, 2021 – Here are some of my favourite hidden features of Slack. From a talk by Elle Tattersall and myself as part of the NearSt "Lunch & Learn"… Enginears podcast April 15, 2021 – I got the opportunity to talk with Elliot Kipling about NearSt, the journey from prototype to product market fit, and how we decided to… Interceptors in Axios April 5, 2021 – Interceptors in Axios are a great tool to simplify your management of network requests. 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… Serverless magic links with AWS Cognito July 27, 2020 – I've written before about what I consider to be best practices for magic links from a UX perspective. Recently, I got a chance to apply… Practical regular expressions July 26, 2020 – Regular expressions (regex) are one of those topics that a lot of developers find difficult to get started with. I think that's not because… 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… Undivided attention July 19, 2020 – My granddad passed away earlier this week at age 95. It didn’t come as much of a surprise, he had not been anywhere close to well in the… Fighting for a cause June 3, 2020 – I was thinking the other day about the fact that I haven’t really fought for a cause since I was in primary school. Good software May 22, 2020 – A lot has been written on this subject, and if you want the definitive guide on product design and software development (if there is such a… Transactional emails at scale March 15, 2020 – At every tech startup I've created, we've had a need for transactional emails. You know, the ones that welcome you after you created your… Standing strong February 16, 2020 – Tonight I’m standing strongLike that willow tree across the streetAll alone on my balconyThe wind moving past meGusts of cold air hitting… The anti-bullying day February 9, 2020 – Almost exactly 13 years ago today was my day. A few months earlier, as a 10-year-old, I had started an anti-bullying club. Not because I… The 'why' February 7, 2020 – I’ve been kind of running all of the past few years, even sprinting maybe. Now that I’m not running as much anymore, now that I’m just… Renting in London November 4, 2019 – When I first lived in London about four years ago, I lived with housemates. That was pretty fun: I was able to help my housemate who was… Better all the time November 27, 2018 – I’ve been extremely lucky in life so far. I’ve been given so many great opportunities, and I’ve received most of them with open arms and… Twenty-one March 11, 2018 – This is it. Tomorrow is the start of a new life, of a new chapter, a new section with a new rhythm, a new feel, a new baseline. We’ve just… Twenty thieves May 9, 2014 – There once were twenty thieves, sitting in the shade of a giant blade of grass. They had a leader, a strong, but little man. He stood up…