<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sam Dawson's Blog]]></title><description><![CDATA[Web Frontend Design and Development]]></description><link>https://www.samdawson.dev</link><generator>GatsbyJS</generator><lastBuildDate>Fri, 08 May 2026 22:51:34 GMT</lastBuildDate><item><title><![CDATA[Talking to the computer]]></title><description><![CDATA[Communicating ideas and exploring them quickly While the term vibe coding has been controversial, I do think the sentiment hints towards a way you might want to work with these tools. Leaving aside…]]></description><link>https://www.samdawson.devtalking-to-the-computer</link><guid isPermaLink="false">https://www.samdawson.devtalking-to-the-computer</guid><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Archiving Robust UI]]></title><description><![CDATA[Robust UI E-book Cover Long overdue, I've archived my Robust UI e-book landing page. While the content about React component testing strategies might be useful to some, I never got it to a final state…]]></description><link>https://www.samdawson.devarchiving-robust-ui</link><guid isPermaLink="false">https://www.samdawson.devarchiving-robust-ui</guid><pubDate>Tue, 08 Jul 2025 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[AI coding - prototyping]]></title><description><![CDATA[Planning Using a model like o3 in ChatGPT can be useful to flesh out an idea and iterate before building anything. Once you are happy with the plan you can even ask o3 for an initial prompt to put…]]></description><link>https://www.samdawson.devai-coding-prototyping</link><guid isPermaLink="false">https://www.samdawson.devai-coding-prototyping</guid><pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[AI coding - context]]></title><description><![CDATA[A large differentiator in the quality of output you will receive from AI coding tools depends on the quality of the AI model and the framework which it can act within, together often called an “Agent…]]></description><link>https://www.samdawson.devai-coding-context</link><guid isPermaLink="false">https://www.samdawson.devai-coding-context</guid><pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Do you need unit and end-to-end tests?]]></title><description><![CDATA[You might have a suite of end-to-end tests that cover your application well and you might be thinking do we need to duplicate our tests at a unit or integration test level also? Putting aside that end…]]></description><link>https://www.samdawson.devdo-you-need-unit-tests</link><guid isPermaLink="false">https://www.samdawson.devdo-you-need-unit-tests</guid><pubDate>Fri, 17 Dec 2021 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Private and public functions in React]]></title><description><![CDATA[With Frontend libraries like React, we often don't use classes. But the same public/private differentiation can be made through the  keyword. Anything that has an  is public and anything that doesn't…]]></description><link>https://www.samdawson.devprivate-and-public-functions-in-react</link><guid isPermaLink="false">https://www.samdawson.devprivate-and-public-functions-in-react</guid><pubDate>Sat, 02 Oct 2021 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Redux selector test duplication]]></title><description><![CDATA[When writing integration tests (tests that do minimal mocking) I often find myself duplicating test cases. In scenarios like this where I might have two functions that do similar things and share code…]]></description><link>https://www.samdawson.devredux-selector-test-duplication</link><guid isPermaLink="false">https://www.samdawson.devredux-selector-test-duplication</guid><pubDate>Tue, 13 Jul 2021 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Sharing code between gatsby-node and components]]></title><description><![CDATA[To share code between gatsby-node files and other components the shared file must use CommonJS syntax. For example: The exported stuff can then be used in gatsby-node.js with a require import and…]]></description><link>https://www.samdawson.devgatsby-node-sharing-code</link><guid isPermaLink="false">https://www.samdawson.devgatsby-node-sharing-code</guid><pubDate>Fri, 29 Jan 2021 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Testing Hooks - Hooks for mass consumption]]></title><description><![CDATA[This is part three in a series on Testing Hooks The final category of hook usage is one of utility. These are hooks from libraries or hooks that are used widely throughout your code. They often have a…]]></description><link>https://www.samdawson.devhow-to-test-react-hooks-4</link><guid isPermaLink="false">https://www.samdawson.devhow-to-test-react-hooks-4</guid><pubDate>Mon, 23 Nov 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Testing Hooks - Hooks for code reuse]]></title><description><![CDATA[This is part two in a series on Testing Hooks In the last section where we shuffled around some code to make it more readable, we were not taking full advantage of the benefits of hooks which is to…]]></description><link>https://www.samdawson.devhow-to-test-react-hooks-3</link><guid isPermaLink="false">https://www.samdawson.devhow-to-test-react-hooks-3</guid><pubDate>Sun, 15 Nov 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Testing Hooks - Hooks for code organization]]></title><description><![CDATA[This is part one in a series on Testing Hooks The first category of hook usage is code organization to make our code easier to read. This is usually in the form of breaking a component into smaller…]]></description><link>https://www.samdawson.devhow-to-test-react-hooks-2</link><guid isPermaLink="false">https://www.samdawson.devhow-to-test-react-hooks-2</guid><pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How to test React Hooks]]></title><description><![CDATA[The primary category of React hook usage is code reuse between components. When trying to determine a testing strategy for a particular hook a few more categories appear. One of code organization…]]></description><link>https://www.samdawson.devhow-to-test-react-hooks</link><guid isPermaLink="false">https://www.samdawson.devhow-to-test-react-hooks</guid><pubDate>Fri, 13 Nov 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How to test Compound Components]]></title><description><![CDATA[For a quick overview on Compound Compounds check out this article. Compound components are made up of many component parts. The most effective way to test them is together, holistically. To achieve…]]></description><link>https://www.samdawson.devhow-to-test-compound-components</link><guid isPermaLink="false">https://www.samdawson.devhow-to-test-compound-components</guid><pubDate>Wed, 11 Nov 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How not to GraphQL]]></title><description><![CDATA[If you're here you're probably second-guessing your usage of GraphQL. It's a great tool but if your not deliberate about your schema design it can create complexity. A misuse of it can happen in the…]]></description><link>https://www.samdawson.devhow-not-to-graphql</link><guid isPermaLink="false">https://www.samdawson.devhow-not-to-graphql</guid><pubDate>Sun, 23 Aug 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How to test React Context]]></title><description><![CDATA[React Context is a tool for designing flexible Component APIs. How we test it depends on the situation, we are going to explore some of the situations you might find yourself in and the best way to…]]></description><link>https://www.samdawson.devreact-context-testing</link><guid isPermaLink="false">https://www.samdawson.devreact-context-testing</guid><pubDate>Fri, 17 Jul 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How to test gatsby-node]]></title><description><![CDATA[This article will be enough to get you started with unit testing gatsby-node.js, we are not going to deep dive into every possible test you might need to make. First of all, you need to ask yourself…]]></description><link>https://www.samdawson.devgatsby-node-unit-tests</link><guid isPermaLink="false">https://www.samdawson.devgatsby-node-unit-tests</guid><pubDate>Sun, 21 Jun 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How to test SVG Graphs]]></title><description><![CDATA[This article is walk-through of testing a React Bar Graph with Jest and React Testing Library. The style of tests documented here could also be called integration tests. The gold standard for UI…]]></description><link>https://www.samdawson.devsvg-graph-testing</link><guid isPermaLink="false">https://www.samdawson.devsvg-graph-testing</guid><pubDate>Sat, 13 Jun 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Least effort feedback]]></title><description><![CDATA[A few months ago I added a feedback textbox to the bottom of every article. I wanted to know when someone finds there way to an article do they solve their problem. I think the textbox was too much…]]></description><link>https://www.samdawson.devleast-effort-feedback</link><guid isPermaLink="false">https://www.samdawson.devleast-effort-feedback</guid><pubDate>Tue, 26 May 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Transforming data for simpler components]]></title><description><![CDATA[Often we can end up with complex logic in components because the shape of the data determines how we write our component code. Sometimes we are not in control of that data at all. If we can simplify…]]></description><link>https://www.samdawson.devdata-massaging</link><guid isPermaLink="false">https://www.samdawson.devdata-massaging</guid><pubDate>Thu, 21 May 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[How to make a dynamic interlocking image grid with CSS]]></title><description><![CDATA[tells CSS grid to slot in items where there is space. This shuffles around the visual order of the elements, the DOM tree remains in the original order. A dense layout can look something like this…]]></description><link>https://www.samdawson.devauto-flow-dense-varying-image-sizes</link><guid isPermaLink="false">https://www.samdawson.devauto-flow-dense-varying-image-sizes</guid><pubDate>Sun, 10 May 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Goodbye presentational and container components?]]></title><description><![CDATA[I had been following the Presentational and Container pattern invented by Dan Abramov, although it seems that even Dan has changed his views on the usefulness of this pattern with the introductions of…]]></description><link>https://www.samdawson.devcontainer-components</link><guid isPermaLink="false">https://www.samdawson.devcontainer-components</guid><pubDate>Wed, 22 Apr 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[The snapshot testing tool]]></title><description><![CDATA[Kent C Dodds mentions in his article about snapshot testing when referring to a particular snapshot. "What makes this snapshot good is it can communicate the intent by the title of the snapshot" I…]]></description><link>https://www.samdawson.devthe-snapshot-testing-tool</link><guid isPermaLink="false">https://www.samdawson.devthe-snapshot-testing-tool</guid><pubDate>Fri, 17 Apr 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Union type from an array of strings]]></title><description><![CDATA[Sometimes typescript can feel like duplication, describing code that is already static (constant). Heres one trick to mitigate that by generating a string literal union type from an array. The…]]></description><link>https://www.samdawson.devunion-type-from-array</link><guid isPermaLink="false">https://www.samdawson.devunion-type-from-array</guid><pubDate>Thu, 16 Apr 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[A less addictive slack experience]]></title><description><![CDATA[To some extent, it is the design of tools like slack that makes them addictive. To avoid the point of diminishing returns with slack usage, we can nudge ourselves to become less addicted by making…]]></description><link>https://www.samdawson.devless-addictive-slack</link><guid isPermaLink="false">https://www.samdawson.devless-addictive-slack</guid><pubDate>Fri, 27 Mar 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Don't make assumptions about JS performance]]></title><description><![CDATA[After re-reading YDKJS: Async and Performance. I had the realization that I have been making over-optimizations. I had not taken into consideration JS engine optimizations. Iterators Like always using…]]></description><link>https://www.samdawson.devjs-perf-assumptions</link><guid isPermaLink="false">https://www.samdawson.devjs-perf-assumptions</guid><pubDate>Wed, 11 Mar 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[React Component API Design]]></title><description><![CDATA[This article will go over some component API design patterns at a high level without getting into implementation details of specific components. A Component API is the props of a component. When we…]]></description><link>https://www.samdawson.devreact-component-api-design</link><guid isPermaLink="false">https://www.samdawson.devreact-component-api-design</guid><pubDate>Sat, 15 Feb 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Compound Components: What, Why and When.]]></title><description><![CDATA[What are Compound Components? It's a base component that expects to be combined with other component parts. Below the  is the base component and the  and  components are the composable parts. It…]]></description><link>https://www.samdawson.devcompound-components-what-why-when</link><guid isPermaLink="false">https://www.samdawson.devcompound-components-what-why-when</guid><pubDate>Sun, 02 Feb 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[useSelector vs connect (react-redux)]]></title><description><![CDATA[React-redux hooks like  and the  can have the same outcomes. The main difference between them is their ability to nudge (guide) the way you write your components. Understanding what each of them…]]></description><link>https://www.samdawson.devreact-redux-use-selector-vs-connect</link><guid isPermaLink="false">https://www.samdawson.devreact-redux-use-selector-vs-connect</guid><pubDate>Tue, 24 Dec 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[When utility classes get out of control]]></title><description><![CDATA[Tailwinds utility classes make styling lighting fast (for me at least) but I have found there is a point where conditional styling can become hard to maintain because it concentrates the complexity in…]]></description><link>https://www.samdawson.devtailwind-css-components</link><guid isPermaLink="false">https://www.samdawson.devtailwind-css-components</guid><pubDate>Sun, 08 Dec 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Compiling NPM packages with typescript]]></title><description><![CDATA[Update: You might be better off using TSDX "TSDX is a zero-config CLI that helps you develop, test, and publish modern TypeScript packages with ease" There are so many options for bundling javascript…]]></description><link>https://www.samdawson.devtypescript-npm-packages</link><guid isPermaLink="false">https://www.samdawson.devtypescript-npm-packages</guid><pubDate>Sat, 30 Nov 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Reacts missing conditional class utility]]></title><description><![CDATA[AngularJS has ng-class for conditionally applying classes. This is a replacement for that in React. At accelo we are in the process of transitioning from AngularJS to React. We are not using a CSS-in…]]></description><link>https://www.samdawson.devreacts-missing-conditional-class-utility</link><guid isPermaLink="false">https://www.samdawson.devreacts-missing-conditional-class-utility</guid><pubDate>Sun, 17 Nov 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Some handy git aliases]]></title><description><![CDATA[This is a list of git aliases I commonly use, mainly this is just a reference for myself for when I change computers or when someone sees me typing them and wants to know more. If you have any more…]]></description><link>https://www.samdawson.devgit-bash-aliases</link><guid isPermaLink="false">https://www.samdawson.devgit-bash-aliases</guid><pubDate>Tue, 05 Nov 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Creating a chrome extension with parcel]]></title><description><![CDATA[This article is not a tutorial on how to build a chrome extension from scratch. Maybe you know how to make an extension with vanilla JS and now want to build it with your favorite frontend library. We…]]></description><link>https://www.samdawson.devparceljs-chrome-extension</link><guid isPermaLink="false">https://www.samdawson.devparceljs-chrome-extension</guid><pubDate>Thu, 24 Oct 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Tailwind theming with CSS variables]]></title><description><![CDATA[This is a solution for implementing color themes with tailwind. It makes use of CSS variables which are great providing that you don't need to support IE11. Those CSS variables that are referenced in…]]></description><link>https://www.samdawson.devtailwind-theming</link><guid isPermaLink="false">https://www.samdawson.devtailwind-theming</guid><pubDate>Mon, 14 Oct 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Guidelines for css utility classes]]></title><description><![CDATA[Never override them Avoid CSS where the utility class is overridden. For example, overriding with a child selector. You want them to be predictable everywhere you use them. A warning sign for breaking…]]></description><link>https://www.samdawson.devguidelines-for-css-utility-classes</link><guid isPermaLink="false">https://www.samdawson.devguidelines-for-css-utility-classes</guid><pubDate>Wed, 04 Sep 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[z-index strategies]]></title><description><![CDATA[Let's go over some ways to keep your z-index usage sane. All in one place Keeping all of your z-indexes in one place, in order. That way you can easily see what sits on top of what. The global file is…]]></description><link>https://www.samdawson.devz-index-strategies</link><guid isPermaLink="false">https://www.samdawson.devz-index-strategies</guid><pubDate>Sat, 24 Aug 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Things I learned about media queries from Tailwind]]></title><description><![CDATA[I learned some things about media queries while looking into how they are used in Tailwind. It's a CSS library that generates utility classes, no prior knowledge about it is needed to follow along…]]></description><link>https://www.samdawson.devmedia-queries-tailwind</link><guid isPermaLink="false">https://www.samdawson.devmedia-queries-tailwind</guid><pubDate>Mon, 19 Aug 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[A gotcha when using gatsby, tailwind and purgecss]]></title><description><![CDATA[A problem I came across when using a mix-match of tailwind, purgecss and Gatsby is that selectors used in the generated pages were being stripped from the CSS. Tailwinds docs recommend using purgecss…]]></description><link>https://www.samdawson.devgatsby-tailwind-purgecss</link><guid isPermaLink="false">https://www.samdawson.devgatsby-tailwind-purgecss</guid><pubDate>Fri, 09 Aug 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Creating category pages for gatsby markdown blogs]]></title><description><![CDATA[This article contains a strategy for creating category list pages from categories defined in a markdown article. There is an assumption of some basic knowledge of gatsby. Our end goal is to generate…]]></description><link>https://www.samdawson.devgatsby-categories</link><guid isPermaLink="false">https://www.samdawson.devgatsby-categories</guid><pubDate>Sat, 03 Aug 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Inheritance media queries and css variables]]></title><description><![CDATA[This article aims to show an alternative to overriding properties directly. Instead we can use CSS variables with the help of inheritance and media queries. I think that this approach leads to CSS…]]></description><link>https://www.samdawson.devcss-variables-inheritance-media-queries</link><guid isPermaLink="false">https://www.samdawson.devcss-variables-inheritance-media-queries</guid><pubDate>Sat, 27 Jul 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Theming with current color]]></title><description><![CDATA[This article explores using the currentColor property to theme elements, to avoid writing extra CSS to override color. In cases where you have an element that needs to have a few different colors the…]]></description><link>https://www.samdawson.devcurrent-color</link><guid isPermaLink="false">https://www.samdawson.devcurrent-color</guid><pubDate>Thu, 25 Jul 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Magic numbers in css]]></title><description><![CDATA[A magic number is a number or value in code that does not have an explicit meaning. In CSS maybe we don't have to be too strict and not every number usage needs to be a variable. But I think the more…]]></description><link>https://www.samdawson.devmagic-numbers-css</link><guid isPermaLink="false">https://www.samdawson.devmagic-numbers-css</guid><pubDate>Wed, 24 Jul 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[My css color system]]></title><description><![CDATA[My approach to color usage is similar to a "no magic numbers" rule that you might find in javascript, where colors are always referenced from a variable. It's useful to think about color usage…]]></description><link>https://www.samdawson.devcolor-system</link><guid isPermaLink="false">https://www.samdawson.devcolor-system</guid><pubDate>Mon, 22 Jul 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item><item><title><![CDATA[Moving elements on hover pattern]]></title><description><![CDATA[I like elements that move on hover to convey interactivity. A problem with this pattern is "flickering" that can happen when hovering over the space left behind. First lets make the button move up on…]]></description><link>https://www.samdawson.develements-that-move-on-hover</link><guid isPermaLink="false">https://www.samdawson.develements-that-move-on-hover</guid><pubDate>Sat, 20 Jul 2019 00:00:00 GMT</pubDate><content:encoded></content:encoded><webfeeds:icon>https://samdawson.dev/icon.png</webfeeds:icon><webfeeds:cover>https://samdawson.dev/icon.png</webfeeds:cover></item></channel></rss>