>ArchiveSwatch This: June 22nd UpdatesYou can now use text prompts, check colour contrast and view previous results.22nd June 2025Swatch This: ExportsExporting colour palettes to different formats like JSON, Tailwind, CSS...19th June 2025Injecting PersonalityA couple of minor tweaks to add some personality to this website.14th June 2025Working with Claude and ImagesSending images to Claude for analysis.11th June 2025Swatch ThisAn image analysis tool to generate a colour scheme for you.7th June 2025Video: Home-cooked Feed ReaderLittle walkthrough of my local feed reader and some thoughts.17th October 2024DNS PropagationThe weight of waiting.7th August 2024Got MarriedGreat days. Great rest required.16th June 2024Tidy Up with RegexUsing regex to quickly tidy up all the areas in my site where I'm using a shortcode instead of markdown links.17th April 2024Tailwind Is...I don't get all this hate for Tailwind. It's not going anywhere, so it's probably time to move on.3rd March 2024Using the Least Amount of JavaScriptApplying minimal JavaScript by resorting to less than standard ways of doing things.20th February 2024The Web Should Be SimpleWe sure know how to overcomplicate things. Or maybe we don't understand the building blocks of what makes a website accessible.10th February 2024Rediscovering the Joy in CodingGoing back to basics by putting aside the typical frameworks and making my own rules.28th January 2024The Year AheadWhat's the plan for the year? Thinking about what I want to achieve.7th January 2024Popover APIFor many years, we had to do this manually or rely on third-party solutions. Now, though, it's a different world. In this post we'll take a quick look at how it works with a demo.7th January 2024New Year, New DesignIt's a brand new year full of the same old stuff, but hey look, a new design for the site!5th January 2024Visiting Family & FriendsVisiting the family and their pets back home in Limerick.10th December 2023Scrollable Container Controls with React HooksRevisiting some old code to convert it to using hooks.4th December 2023Multi-Select Checkboxes with React HooksAn old code demo revised to use React Hooks.4th December 2023Lenore and the new routineLenore's routine and how it fits around the other two cats.28th November 2023New KittenA new kitten joins the crew25th November 2023Distant SoundSmall experiment with sound based on scroll distance.13th April 2023Fixing MS Edge Battery Drain on M1 MacEdge was destroying the battery life on my Macbook Air M117th September 2022Vue TimelineAn infinite scroll timeline component written for Vue 3.22nd August 2022New Job 🎉Interesting times when it comes to career progression. Back to React.1st July 2022My 2020A recap of the year.22nd December 2020Vue Data TableExploring how to tackle a data table in Vue without relying on third-party solutions.25th October 2020Coping with Bad DatesDeriving multiple date ranges from a single one when presented with unavailable dates.3rd October 2020IE11 Placeholder Transition IssueA combination of autoprefixer and transitions styles broke an input in IE11.7th May 2020DraftJS: Mentions Plugin with Scrolling and Keyboard NavigationSolving the problem of a scrolling results list with the DraftJS mentions plugin.4th May 2020Text Selection Particle EffectsCreating particle effects based on text selection using the Web Animations API.22nd March 2020Building an Appreciation SystemUsing Google Sheets as a back-end, we can record likes on anything we want on a static site.22nd June 2019Self-Host Google FontsSelf-hosting Google Fonts gives you more control over performance and loading of your fonts.9th June 2019Image Parallax and Blur with TornisUsing the Tornis library to create a parallax and blur effect on a cover image while scrolling.28th May 2019Task ManagementHow I handle task management - a combination of software with pen and paper depending on the context.22nd May 2019Multi-Select Checkboxes with ReactListen for hotkeys to select multiple checkboxes in a few clicks.20th May 2019Web CloaksA few observations on techniques that are used to disguise a problem with a website.19th May 2019Clever LogosA collection of clever logos. Great for getting the brain going when you're looking for inspiration.17th May 2019Derived Stores With SvelteGetting up to speed with derived stores in Svelte and how they compare to something like computed properties in Vue.15th May 2019Scrollable Container Controls with ReactManaging a scrollable container with React by adding button controls, and seeing when they should be enabled or disabled.3rd May 2019Vapid CMSVapid is a content management system that has a very smart way of letting you focus on the code, while constructing a dashboard based on your templates.28th September 2018Website InspirationA few things that got me excited to try my hand at redesigning my website. That's not to say I'm a designer, cause I'm not.27th September 2018HTML Imports & Component-Driven DevelopmentPlaying around with HTML Imports before deprecation, pining for a native, relatively hassle-free way of building a component library.15th September 2018Improving Client-Side PerformanceA few ways in which we can improve client-side performance focusing on images, third-party scripts and more.9th September 2018Building a Table of Contents with the Intersection Observer APIHow to build a live-updating table of contents using Intersection Observer.8th September 2018Fathom AnalyticsInstalling Fathom analytics, an open-source alternative to traditional web analytics, on Heroku.24th August 2018Avatars.ioAvatars.io lets you quickly grab a URL to an avatar of yours from a few different services21st August 2018A Signal in the StaticMoving from Craft CMS to Hugo and Netlify19th August 2018What Do I Know?The web moves fast, but it doesn't invalidate what you already know.24th July 2018Create an RSS Feed Reader29th May 2018Upgrading to webpack 4Moving from Laravel Mix to webpack 4, and the performance benefits.12th May 2018Do Not TrackHow to use window.doNotTrack to decide when to use tracking.15th April 2018My Local Environment Timeline20th March 2018The Weary WordPress Dev8th March 2018Theming with CSS Custom Properties2nd March 2018Page Visibility API23rd February 2018Use AppleScript to Automate with iTerm19th February 2018DIY RSS Feed ReaderBuilding your own Feed Reader with Vue.js and Node12th February 2018Craft Plugins BrowserA small project to browse Craft CMS plugins by popularity.4th February 2018Variable Fonts2nd February 2018Client-Side Search with AlgoliaAdding client-side search with Algolia.9th January 2018Building My Site Part III: Fine TuningFinal tweaks and performance improvements for my website.8th January 2018Building My Site Part II: SetupSetting up my new website with Craft CMS.7th January 2018Building My Site Part I: DecisionsBuilding my website with Craft CMS.6th January 2018Building a 'Now Playing' FeatureShow the world what you're listening to because it's important.18th December 2017Tip for React PropTypes with Storybook19th July 2017First Seven Jobs6th August 2016Resourceful Learning10th April 2016Vue.js and Spotify Experiment14th February 2016Up and Atom12th September 2015The (Clip) Path of Least Resistance25th August 2015Timber and Twig Reignited My Love for WordPress23rd August 2015Expanding menu with GSAP27th July 2015Lightweight Utility Object25th July 2015Responsibilities of a Web Person19th July 2015Getting Started with WordPress and Unit Testing9th July 2015Pace Yourself26th June 2015Building a full-screen overlayA JavaScript approach to a full-screen overlay5th April 2015Quickly build a simple grid with Sass17th March 2015Wait, what am I meant to be doing again?8th February 2015Web Project Boilerplate - Browserify with ES69th January 2015Foundation 5.514th December 2014Front-end Strategy with a sprinkling of ExpressionEngine13th December 2014
Swatch This: June 22nd UpdatesYou can now use text prompts, check colour contrast and view previous results.22nd June 2025
Swatch This: ExportsExporting colour palettes to different formats like JSON, Tailwind, CSS...19th June 2025
Video: Home-cooked Feed ReaderLittle walkthrough of my local feed reader and some thoughts.17th October 2024
Tidy Up with RegexUsing regex to quickly tidy up all the areas in my site where I'm using a shortcode instead of markdown links.17th April 2024
Tailwind Is...I don't get all this hate for Tailwind. It's not going anywhere, so it's probably time to move on.3rd March 2024
Using the Least Amount of JavaScriptApplying minimal JavaScript by resorting to less than standard ways of doing things.20th February 2024
The Web Should Be SimpleWe sure know how to overcomplicate things. Or maybe we don't understand the building blocks of what makes a website accessible.10th February 2024
Rediscovering the Joy in CodingGoing back to basics by putting aside the typical frameworks and making my own rules.28th January 2024
Popover APIFor many years, we had to do this manually or rely on third-party solutions. Now, though, it's a different world. In this post we'll take a quick look at how it works with a demo.7th January 2024
New Year, New DesignIt's a brand new year full of the same old stuff, but hey look, a new design for the site!5th January 2024
Scrollable Container Controls with React HooksRevisiting some old code to convert it to using hooks.4th December 2023
Multi-Select Checkboxes with React HooksAn old code demo revised to use React Hooks.4th December 2023
Lenore and the new routineLenore's routine and how it fits around the other two cats.28th November 2023
Fixing MS Edge Battery Drain on M1 MacEdge was destroying the battery life on my Macbook Air M117th September 2022
Vue Data TableExploring how to tackle a data table in Vue without relying on third-party solutions.25th October 2020
Coping with Bad DatesDeriving multiple date ranges from a single one when presented with unavailable dates.3rd October 2020
IE11 Placeholder Transition IssueA combination of autoprefixer and transitions styles broke an input in IE11.7th May 2020
DraftJS: Mentions Plugin with Scrolling and Keyboard NavigationSolving the problem of a scrolling results list with the DraftJS mentions plugin.4th May 2020
Text Selection Particle EffectsCreating particle effects based on text selection using the Web Animations API.22nd March 2020
Building an Appreciation SystemUsing Google Sheets as a back-end, we can record likes on anything we want on a static site.22nd June 2019
Self-Host Google FontsSelf-hosting Google Fonts gives you more control over performance and loading of your fonts.9th June 2019
Image Parallax and Blur with TornisUsing the Tornis library to create a parallax and blur effect on a cover image while scrolling.28th May 2019
Task ManagementHow I handle task management - a combination of software with pen and paper depending on the context.22nd May 2019
Multi-Select Checkboxes with ReactListen for hotkeys to select multiple checkboxes in a few clicks.20th May 2019
Web CloaksA few observations on techniques that are used to disguise a problem with a website.19th May 2019
Clever LogosA collection of clever logos. Great for getting the brain going when you're looking for inspiration.17th May 2019
Derived Stores With SvelteGetting up to speed with derived stores in Svelte and how they compare to something like computed properties in Vue.15th May 2019
Scrollable Container Controls with ReactManaging a scrollable container with React by adding button controls, and seeing when they should be enabled or disabled.3rd May 2019
Vapid CMSVapid is a content management system that has a very smart way of letting you focus on the code, while constructing a dashboard based on your templates.28th September 2018
Website InspirationA few things that got me excited to try my hand at redesigning my website. That's not to say I'm a designer, cause I'm not.27th September 2018
HTML Imports & Component-Driven DevelopmentPlaying around with HTML Imports before deprecation, pining for a native, relatively hassle-free way of building a component library.15th September 2018
Improving Client-Side PerformanceA few ways in which we can improve client-side performance focusing on images, third-party scripts and more.9th September 2018
Building a Table of Contents with the Intersection Observer APIHow to build a live-updating table of contents using Intersection Observer.8th September 2018
Fathom AnalyticsInstalling Fathom analytics, an open-source alternative to traditional web analytics, on Heroku.24th August 2018
Avatars.ioAvatars.io lets you quickly grab a URL to an avatar of yours from a few different services21st August 2018
Upgrading to webpack 4Moving from Laravel Mix to webpack 4, and the performance benefits.12th May 2018
Building My Site Part III: Fine TuningFinal tweaks and performance improvements for my website.8th January 2018
Building a 'Now Playing' FeatureShow the world what you're listening to because it's important.18th December 2017