Skip to content

Apologies for the appearance of the site. I'm designing in public!


A football sits on a pitch

Poor proofing or deliberate tactic?

Could this misspelling be on purpose? Let's find out!

A stethoscope on a pink background surrounds scrabble tiles spelling out C. M. S.

Deciding against a Content-Management System

I have decided to not use a CMS for this site. If you're wondering why, read on...

A lovely Daschund

Heading tags - From H1 to H6

I've seen a lot of headings related horrors in my time building websites. Let's learn how to do it properly.

Read more

#html #development #basics #semantic html

Some code on a laptop screen

Using html-parser for when an API returns HTML

It's nice when your API returns JSON because JSON. But what do you do when you get HTML back instead…?

Several table and chair sets in a Greek courtyard

Scrolling tables

Using table is very good and right for displaying data. But what if you have too much data?

Mobile phone showing the Twitter logo. The phone is on a cardboard box.

Shitposting to Twitter

Before Twitter literally burns down…

Some code on a laptop screen

Naming your boolean variables better

A bike, for no reason

Using Zustand to manage application state in React

One of the downsides to Controller/Reducer-based state management is that a single piece of state needs to be passed from Component to Component up and down the cascade - regardless of whether that component needs the state or not. Zustand promises to alleviate that.

Read more

#react #development #state management

Screaming lego minifig wearing blue overalls sat on a white floor against a white background

Manually copying VS Code extensions

Sometimes you can't use the inbuild sync to transfer your extensions from one VS Code to another. Learn how to do it programatically.

A python

Quick and dirty server 2

Sometimes you just want to serve a static site without installing all kinds of stuff (2022 Edition)

Read more

#development #python #productivity

silver scissors on pink surface

Trim trailing slash

Sometimes a URL has a trailing slash, sometimes it doesn't. If we can't be certain, we need to handle either eventuality.

Read more

#development #javascript #utility

claw hammer and nails

The three rules of engineering

Command line terminal

Dotenv for bash

Sometimes you need to access process.env in a bash script…

GitHub's Octocat logo

Global .gitignore

How to create a global .gitignore file to define a list of rules for ignoring files in every single Git repository on your computer

Gloved hand holding a baseball

Catch your errors

If there's one thing I've learned, it's that your code will go wrong. You need to accept that and catch your damn errors!

Computer monitor display HTML code

Semantic HTML

Semantic HTML is the process of using HTML5 tags to reinforce the meaning of the information contained within a webpage or application.

Read more

#development #html #semantic html

A leet hacker bypasses security. Probably.

WordPress forgotten password localhost hack

Forgotten the password to your local CMS? Can't email a password reset? Here's my tried-and-tested solution.

Read more

#development #wordpress #password #security #database #cms

Thrash metal band Overkill performing live at Party.San Open Metal 2017

Your codez is overkill

We all love writing code - that's why we're doing this - but sometimes we can seriously over-engineer things.

Diverted Traffic

I am a lazy developer or How to write 438 lines of nginx redirects

I don't mean to imply that I cut corners and churn out shoddy code. I just hate doing repetitive tasks that bore the bejesus out of me.

Read more

#development #nginx #javascript #productivity

Silver MacBook Pro on white table

You have a better laptop than your users

I have a decent laptop and I'm lucky enough to have a strong, reliable internet connection. Not everyone does.

8-bit Jason Voorhees

Formatting JSON.stringify()

I occasionally find myself dumping stringified JSON into a <pre/> tag in my markup. It inevitably looks horrible. Here's how to prettify your JSON.stringify() output.

Brown rope on grass

Generate a random alphanumeric string using JavaScript

Today I had to send an "ID" in the body of my POST request. It turns out that the API doesn't care what the value is - it just needs to be alphanumeric, exactly 18 characters long, and not already in the system.

pedestrian signage displaying wait


Why the rush? Whether you're faking an API response, introducing deliberate cognitive drain, or simply want to slow things down this function has got you, baby!

Read more

#development #javascript #utility

people riding carousel during daytime

Quick and dirty carousel

AKA Move the first item in an array to the end repeatedly

A stack of VHS cassettes

Increase WordPress maximum upload limit in Docker

"filename exceeds the maximum upload size for this site" 🙄

Read more

#development #devops #wordpress #cms

A python

Quick and dirty server

Sometimes you just want to serve a static site without installing all kinds of stuff

Read more

#development #python #productivity

A series of digits

Numberize a value

If you get a CSS value but you want to do maths with it, what do you do? Let's find out!

Blind man using a braille screen reader

Inclusive Design is more important than Accessibility

We tend to think of accessibility as being something we add to websites to help the disabled. This is a mindset we need to get out of.

Slot machines

Using slots in React

Having multiple almost identical components is just very bad and wrong - let's fix it properly!

A jumble of foam numbers

Human-readable Numbers

Convert a JavaScript number to a human-readable number the easy way.

A landscape of a lake between two hills

Pre- and Post- NPM Scripts

I'm not a fan of chaining together lots of commands and, it turns out, neither are NPM!

A hand-drawn example of a git flow

Alternatives to master

In an effort to remove unnecessary references to slavery and replace them with more inclusive terms, many companies are opting to replace the term `master` as their main git branch name.

Chain links

The semantics of interaction vs navigation

It is commonplace for designers to style both links and buttons to look like “buttons”. But just because something looks like a button, doesn’t mean it is a <button>.

A subway train waits in Torrent Avinguda Station, Valencia

Crafting the ideal line-length

How to achieve the ideal line length using css.

A error message in React console

Each child in a list should have a unique "key" prop

Fix this common React error without dependencies

Read more

#development #react #error message

Pile of smartphones

For modern development, Desktop and Mobile are not enough

Different devices have different capabilities, using mobile to describe both narrow screens and touch screens is confusing and leads to assumptions that come back to bite us.

A jumble of foam numbers

Gutenberg Components - "I only need one"

Gutenberg comes with an awful lot of default components most of which will never be used in our websites. Here's how to disable the ones you won't use.

Read more

#development #wordpress #gutenberg

An iPhone, Magic Mouse, iPad, Apple Watch, and a wireless Mac keyboard sit neatly on a desk.

The Applesphere is the actual worst for experience designers

The "Cinematic Experience" is a myth.

McDonald&#8217;s Sauce Dispenser is the greatest product ever

McDonald’s Sauce Dispenser is the greatest product ever

OK, that’s a bold statement! I guess I should elaborate. Like a lot of teenagers, I worked in a Maccies one summer and I was struck by how awesome the sauce dispenser was. Basically, it’s a funnel attached to a handle with a trigger. Pulling the trigger releases 5 dots of ketchup in a quincunx

&#8220;Stop Being a Douchebag&#8221;: Ego and the development crew

“Stop Being a Douchebag”: Ego and the development crew

At the end of my third year of high school, the lockers were cleared out and any unclaimed stuff was up for grabs. I inherited a copy of Use Your Illusion II on vinyl – only one of the two LPs (I still have it today) and I bloody loved it. I was 13 years

Read more

#wellbeing #work #communication #soft skills

5 Reasons People Read Articles with Numbers in the Title

5 Reasons People Read Articles with Numbers in the Title

Using numbers in the title of a blog post is an excellent way of giving the (potential) reader an estimate of article length. 6 reasons… will take less time to read than 22 reasons… The nerds behind blogging platform Medium determined that the ideal blog post length is 7 minutes.

Why is a soap bubble round? Or: When and where to use square bubbles

Why is a soap bubble round? Or: When and where to use square bubbles

The laws of physics, those undeniable laws of the universe that we can’t help but abide by, make round soap bubbles. They make green grass and wet water and rainbows that can only be seen between 40 and 42 degrees. These are templates crafted over millennia that just simply work. Flippantly, websites are the same.

Micro-interactions to delight and annoy

Micro-interactions to delight and annoy

Can your UI harm your UX? Let’s find out…

The Build Triangle: Understanding Limitations

The Build Triangle: Understanding Limitations

In an ideal world, everything we build would be perfect – gorgeous code, on time, and under budget but most of us don’t live in a Disney utopia. Unfortunately, the real world chips away at our resolve and something has to give. Part of good stakeholder management is managing expectations and part of managing expectations

Read more

#development #design #communication #soft skills

Can&#8217;t see the wood for the trees

Can’t see the wood for the trees

Long, long ago in a galaxy far, far away, websites ran the gamut from the bland to the Flash™-y and everyone wanted to make them better. Way back in them olden days, there were so many ways to improve the hideousness that some websites were, and so the web design industry flourished. Everyone clamoured for

MNMLSM: Simplify, simplify some more, then start simplifying

MNMLSM: Simplify, simplify some more, then start simplifying

Minimalism is an interesting thing – far from meaning as stark as possible, minimalism is the idea of removing anything unnecessary for base level functionality. Imagine a human face. Now remove all of the details you can until it still resembles a human face. If, for example, you took the eyes out and it looks

Read more

#development #productivity #design

Backdoor Action: The Death of the Homepage?

Backdoor Action: The Death of the Homepage?

Google (other search engines are available) loves content. There’s a whole industry (or at least a facet of digital marketing) that has sprung up around Content Marketing that puts emphasis on copy-rich pages to draw consumers in. Content marketing is a strategic marketing approach focused on creating and distributing valuable, relevant, and consistent content to

The more you are of the moment, the quicker you are of the past

The more you are of the moment, the quicker you are of the past

Everyone who ever got that haircut in high school just wanted to be cool. Look back at photos of some of the decisions you made in the name of “fashion” and you’ll understand the title of this article. We’re talking about the downside of cutting-edge technology. Bleeding-edge tech is cool! As a self-confessed tech nerd,

Design Fatigue: When bored doesn&#8217;t mean boring

Design Fatigue: When bored doesn’t mean boring

Jakob’s Law states that visitors to your website spend most of their online time on other peoples websites. Who spends the most time on your website? – you do. Whether you’re the developer, designer, or MD, no-one spends as much time on your site as you think they do (or wish they would). This leads

Mobile-first is the future of web design

Mobile-first is the future of web design

One of the main issues I have come across in the last three years of building marketing emails is that mobile responsive versions of emails are treated as an after-thought. Often a highly talented designer draws up a beautiful desktop version and then it is left to the interactive developer to whittle away at the