Archivemusic 10th May 2026Making More MusicI want to explore different styles, and play whatever it is I feel like playing. This time: soundtrack style music.music 2nd May 2026Hey, I wrote a songI've been recording a few bits over the last while, and I've finally put together a song.ai 20th Feb 2026What's next for SwatcherThe journey so far, and what's coming next. Is it successful?javascript 15th Jan 2026Swatcher UpdatesWhat has been going on with Swatcher since launch, what's working, what's changing?seo 29th Sept 2025Single Page Application SEO with Edge FunctionsHow to use Netlify Edge Functions to enhance your single-page application SEO.api 24th Sept 2025How To: Build and Deploy an APIHow to build and deploy an API using Express, TypeScript and Fly.iojavascript 17th Aug 2025ServedCollect recipes from Instagram, TikTok and the web. Build meal plans and shopping lists and compare prices in some Irish stores.javascript 4th Aug 2025Swatcher Homepage RedesignPlaying around with the Swatcher homepage to simplify things and entice people to explore.javascript 21st Jul 2025SwatcherCapture colours from the real world with your camera, explore thousands of paint colours, create palettes and collections.javascript 22nd Jun 2025Swatch This: June 22nd UpdatesYou can now use text prompts, check colour contrast and view previous results.javascript 19th Jun 2025Swatcher: ExportsExporting colour palettes to different formats like JSON, Tailwind, CSS...javascript 14th Jun 2025Injecting PersonalityA couple of minor tweaks to add some personality to this website.javascript 11th Jun 2025Working with Claude and ImagesSending images to Claude for analysis.javascript 7th Jun 2025Swatch ThisAn image analysis tool to generate a colour scheme for you.17th Oct 2024Video: Home-cooked Feed ReaderLittle walkthrough of my local feed reader and some thoughts.7th Aug 2024DNS PropagationThe weight of waiting.16th Jun 2024Got MarriedGreat days. Great rest required.regex 17th Apr 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.css 3rd Mar 2024Tailwind Is...I don't get all this hate for Tailwind. It's not going anywhere, so it's probably time to move on.html 20th Feb 2024Using the Least Amount of JavaScriptApplying minimal JavaScript by resorting to less than standard ways of doing things.html 10th Feb 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.html 28th Jan 2024Rediscovering the Joy in CodingGoing back to basics by putting aside the typical frameworks and making my own rules.7th Jan 2024The Year AheadWhat's the plan for the year? Thinking about what I want to achieve.html 7th Jan 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.5th Jan 2024New Year, New DesignIt's a brand new year full of the same old stuff, but hey look, a new design for the site!10th Dec 2023Visiting Family & FriendsVisiting the family and their pets back home in Limerick.javascript 4th Dec 2023Scrollable Container Controls with React HooksRevisiting some old code to convert it to using hooks.react 4th Dec 2023Multi-Select Checkboxes with React HooksAn old code demo revised to use React Hooks.28th Nov 2023Lenore and the new routineLenore's routine and how it fits around the other two cats.cats 25th Nov 2023New KittenA new kitten joins the crewjavascript 13th Apr 2023Distant SoundSmall experiment with sound based on scroll distance.17th Sept 2022Fixing MS Edge Battery Drain on M1 MacEdge was destroying the battery life on my Macbook Air M122nd Aug 2022Vue TimelineAn infinite scroll timeline component written for Vue 3.1st Jul 2022New Job 🎉Interesting times when it comes to career progression. Back to React.22nd Dec 2020My 2020A recap of the year.javascript 25th Oct 2020Vue Data TableExploring how to tackle a data table in Vue without relying on third-party solutions.javascript 3rd Oct 2020Coping with Bad DatesDeriving multiple date ranges from a single one when presented with unavailable dates.css 7th May 2020IE11 Placeholder Transition IssueA combination of autoprefixer and transitions styles broke an input in IE11.javascript 4th May 2020DraftJS: Mentions Plugin with Scrolling and Keyboard NavigationSolving the problem of a scrolling results list with the DraftJS mentions plugin.javascript 22nd Mar 2020Text Selection Particle EffectsCreating particle effects based on text selection using the Web Animations API.javascript 22nd Jun 2019Building an Appreciation SystemUsing Google Sheets as a back-end, we can record likes on anything we want on a static site.9th Jun 2019Self-Host Google FontsSelf-hosting Google Fonts gives you more control over performance and loading of your fonts.javascript 28th May 2019Image Parallax and Blur with TornisUsing the Tornis library to create a parallax and blur effect on a cover image while scrolling.22nd May 2019Task ManagementHow I handle task management - a combination of software with pen and paper depending on the context.react 20th May 2019Multi-Select Checkboxes with ReactListen for hotkeys to select multiple checkboxes in a few clicks.19th May 2019Web CloaksA few observations on techniques that are used to disguise a problem with a website.inspiration 17th May 2019Clever LogosA collection of clever logos. Great for getting the brain going when you're looking for inspiration.javascript 15th May 2019Derived Stores With SvelteGetting up to speed with derived stores in Svelte and how they compare to something like computed properties in Vue.javascript 3rd May 2019Scrollable Container Controls with ReactManaging a scrollable container with React by adding button controls, and seeing when they should be enabled or disabled.cms 28th Sept 2018Vapid 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.design 27th Sept 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.javascript 15th Sept 2018HTML Imports & Component-Driven DevelopmentPlaying around with HTML Imports before deprecation, pining for a native, relatively hassle-free way of building a component library.performance 9th Sept 2018Improving Client-Side PerformanceA few ways in which we can improve client-side performance focusing on images, third-party scripts and more.javascript 8th Sept 2018Building a Table of Contents with the Intersection Observer APIHow to build a live-updating table of contents using Intersection Observer.analytics 24th Aug 2018Fathom AnalyticsInstalling Fathom analytics, an open-source alternative to traditional web analytics, on Heroku.external-links 21st Aug 2018Avatars.ioAvatars.io lets you quickly grab a URL to an avatar of yours from a few different servicescms 19th Aug 2018A Signal in the StaticMoving from Craft CMS to Hugo and Netlifylife 24th Jul 2018What Do I Know?The web moves fast, but it doesn't invalidate what you already know.javascript 29th May 2018Create an RSS Feed Readerjavascript 12th May 2018Upgrading to webpack 4Moving from Laravel Mix to webpack 4, and the performance benefits.javascript 15th Apr 2018Do Not TrackHow to use window.doNotTrack to decide when to use tracking.20th Mar 2018My Local Environment Timelinewordpress 8th Mar 2018The Weary WordPress Devcss 2nd Mar 2018Theming with CSS Custom Propertiesjavascript 23rd Feb 2018Page Visibility API19th Feb 2018Use AppleScript to Automate with iTermjavascript 12th Feb 2018DIY RSS Feed ReaderBuilding your own Feed Reader with Vue.js and Nodejavascript 4th Feb 2018Craft Plugins BrowserA small project to browse Craft CMS plugins by popularity.css 2nd Feb 2018Variable Fontsjavascript 9th Jan 2018Client-Side Search with AlgoliaAdding client-side search with Algolia.javascript 8th Jan 2018Building My Site Part III: Fine TuningFinal tweaks and performance improvements for my website.cms 7th Jan 2018Building My Site Part II: SetupSetting up my new website with Craft CMS.craft 6th Jan 2018Building My Site Part I: DecisionsBuilding my website with Craft CMS.javascript 18th Dec 2017Building a 'Now Playing' FeatureShow the world what you're listening to because it's important.javascript 19th Jul 2017Tip for React PropTypes with Storybook6th Aug 2016First Seven Jobs10th Apr 2016Resourceful Learningjavascript 14th Feb 2016Vue.js and Spotify Experiment12th Sept 2015Up and Atomcss 25th Aug 2015The (Clip) Path of Least Resistancephp 23rd Aug 2015Timber and Twig Reignited My Love for WordPressjavascript 27th Jul 2015Expanding menu with GSAPjavascript 25th Jul 2015Lightweight Utility Object19th Jul 2015Responsibilities of a Web Personphp 9th Jul 2015Getting Started with WordPress and Unit Testing26th Jun 2015Pace Yourselfjavascript 5th Apr 2015Building a full-screen overlayA JavaScript approach to a full-screen overlaycss 17th Mar 2015Quickly build a simple grid with Sass8th Feb 2015Wait, what am I meant to be doing again?javascript 9th Jan 2015Web Project Boilerplate - Browserify with ES6javascript 14th Dec 2014Foundation 5.5javascript 13th Dec 2014Front-end Strategy with a sprinkling of ExpressionEngine
music 10th May 2026Making More MusicI want to explore different styles, and play whatever it is I feel like playing. This time: soundtrack style music.
music 2nd May 2026Hey, I wrote a songI've been recording a few bits over the last while, and I've finally put together a song.
ai 20th Feb 2026What's next for SwatcherThe journey so far, and what's coming next. Is it successful?
javascript 15th Jan 2026Swatcher UpdatesWhat has been going on with Swatcher since launch, what's working, what's changing?
seo 29th Sept 2025Single Page Application SEO with Edge FunctionsHow to use Netlify Edge Functions to enhance your single-page application SEO.
api 24th Sept 2025How To: Build and Deploy an APIHow to build and deploy an API using Express, TypeScript and Fly.io
javascript 17th Aug 2025ServedCollect recipes from Instagram, TikTok and the web. Build meal plans and shopping lists and compare prices in some Irish stores.
javascript 4th Aug 2025Swatcher Homepage RedesignPlaying around with the Swatcher homepage to simplify things and entice people to explore.
javascript 21st Jul 2025SwatcherCapture colours from the real world with your camera, explore thousands of paint colours, create palettes and collections.
javascript 22nd Jun 2025Swatch This: June 22nd UpdatesYou can now use text prompts, check colour contrast and view previous results.
javascript 19th Jun 2025Swatcher: ExportsExporting colour palettes to different formats like JSON, Tailwind, CSS...
javascript 14th Jun 2025Injecting PersonalityA couple of minor tweaks to add some personality to this website.
17th Oct 2024Video: Home-cooked Feed ReaderLittle walkthrough of my local feed reader and some thoughts.
regex 17th Apr 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.
css 3rd Mar 2024Tailwind Is...I don't get all this hate for Tailwind. It's not going anywhere, so it's probably time to move on.
html 20th Feb 2024Using the Least Amount of JavaScriptApplying minimal JavaScript by resorting to less than standard ways of doing things.
html 10th Feb 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.
html 28th Jan 2024Rediscovering the Joy in CodingGoing back to basics by putting aside the typical frameworks and making my own rules.
html 7th Jan 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.
5th Jan 2024New Year, New DesignIt's a brand new year full of the same old stuff, but hey look, a new design for the site!
javascript 4th Dec 2023Scrollable Container Controls with React HooksRevisiting some old code to convert it to using hooks.
react 4th Dec 2023Multi-Select Checkboxes with React HooksAn old code demo revised to use React Hooks.
17th Sept 2022Fixing MS Edge Battery Drain on M1 MacEdge was destroying the battery life on my Macbook Air M1
javascript 25th Oct 2020Vue Data TableExploring how to tackle a data table in Vue without relying on third-party solutions.
javascript 3rd Oct 2020Coping with Bad DatesDeriving multiple date ranges from a single one when presented with unavailable dates.
css 7th May 2020IE11 Placeholder Transition IssueA combination of autoprefixer and transitions styles broke an input in IE11.
javascript 4th May 2020DraftJS: Mentions Plugin with Scrolling and Keyboard NavigationSolving the problem of a scrolling results list with the DraftJS mentions plugin.
javascript 22nd Mar 2020Text Selection Particle EffectsCreating particle effects based on text selection using the Web Animations API.
javascript 22nd Jun 2019Building an Appreciation SystemUsing Google Sheets as a back-end, we can record likes on anything we want on a static site.
9th Jun 2019Self-Host Google FontsSelf-hosting Google Fonts gives you more control over performance and loading of your fonts.
javascript 28th May 2019Image Parallax and Blur with TornisUsing the Tornis library to create a parallax and blur effect on a cover image while scrolling.
22nd May 2019Task ManagementHow I handle task management - a combination of software with pen and paper depending on the context.
react 20th May 2019Multi-Select Checkboxes with ReactListen for hotkeys to select multiple checkboxes in a few clicks.
19th May 2019Web CloaksA few observations on techniques that are used to disguise a problem with a website.
inspiration 17th May 2019Clever LogosA collection of clever logos. Great for getting the brain going when you're looking for inspiration.
javascript 15th May 2019Derived Stores With SvelteGetting up to speed with derived stores in Svelte and how they compare to something like computed properties in Vue.
javascript 3rd May 2019Scrollable Container Controls with ReactManaging a scrollable container with React by adding button controls, and seeing when they should be enabled or disabled.
cms 28th Sept 2018Vapid 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.
design 27th Sept 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.
javascript 15th Sept 2018HTML Imports & Component-Driven DevelopmentPlaying around with HTML Imports before deprecation, pining for a native, relatively hassle-free way of building a component library.
performance 9th Sept 2018Improving Client-Side PerformanceA few ways in which we can improve client-side performance focusing on images, third-party scripts and more.
javascript 8th Sept 2018Building a Table of Contents with the Intersection Observer APIHow to build a live-updating table of contents using Intersection Observer.
analytics 24th Aug 2018Fathom AnalyticsInstalling Fathom analytics, an open-source alternative to traditional web analytics, on Heroku.
external-links 21st Aug 2018Avatars.ioAvatars.io lets you quickly grab a URL to an avatar of yours from a few different services
life 24th Jul 2018What Do I Know?The web moves fast, but it doesn't invalidate what you already know.
javascript 12th May 2018Upgrading to webpack 4Moving from Laravel Mix to webpack 4, and the performance benefits.
javascript 4th Feb 2018Craft Plugins BrowserA small project to browse Craft CMS plugins by popularity.
javascript 8th Jan 2018Building My Site Part III: Fine TuningFinal tweaks and performance improvements for my website.
javascript 18th Dec 2017Building a 'Now Playing' FeatureShow the world what you're listening to because it's important.