<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Jay Freestone</title><description>I’m Jay, a product engineer based in East London. A polyglot at heart, I&apos;m a Rust lover, a Go skeptic and a TypeScript apologist. Right now I’m helping shape the future of procurement software at Omnea.</description><link>https://www.jayfreestone.com/</link><language>en-gb</language><item><title>When React parent components need to know their children</title><link>https://www.jayfreestone.com/writing/updating-react-parents-in-response-to-changes-in-children/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/updating-react-parents-in-response-to-changes-in-children/</guid><description>In React, it’s always preferable to maintain a linear data flow. If a parent needs something, lift the state instead of smuggling it back up. All rules are made to be broken, though.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Module System Dependency Injection in React &amp; Friends</title><link>https://www.jayfreestone.com/writing/module-level-dependency-injection-react/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/module-level-dependency-injection-react/</guid><description>What does &apos;use the module system for global dependency injection&apos; actually mean, and is it a good substitute for real DI?</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Vitest async fixture destructuring</title><link>https://www.jayfreestone.com/notes/vitest-fixture-destructuring/</link><guid isPermaLink="true">https://www.jayfreestone.com/notes/vitest-fixture-destructuring/</guid><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>GitHub&apos;s Ace with Maggie Appleton</title><link>https://www.jayfreestone.com/links/github-ace/</link><guid isPermaLink="true">https://www.jayfreestone.com/links/github-ace/</guid><description>Link: https://maggieappleton.com/zero-alignment/</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Progressive enhancement options for traditional server-rendered sites</title><link>https://www.jayfreestone.com/writing/web-component-libraries/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/web-component-libraries/</guid><description>What&apos;s the best way to progressively enhance a traditional server-rendered application with client-side JavaScript in 2023? Despite their glacial adoption, web components remain the closest we have to a platform-native solution.</description><pubDate>Fri, 03 Mar 2023 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Stubbing GraphQL using Playwright</title><link>https://www.jayfreestone.com/writing/stubbing-graphql-playwright/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/stubbing-graphql-playwright/</guid><description>A more ergonomic solution to stubbing out multiple GraphQL responses using Playwright.</description><pubDate>Sun, 29 Jan 2023 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Locking body scroll for modals on iOS</title><link>https://www.jayfreestone.com/writing/locking-body-scroll-ios/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/locking-body-scroll-ios/</guid><description>Revisiting old solutions for preventing background scrolling from within modal dialogs &amp; overlays.</description><pubDate>Tue, 24 Jan 2023 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Leveraging extends to infer return types</title><link>https://www.jayfreestone.com/writing/type-inference/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/type-inference/</guid><description>In many statically typed languages, once we accept a generalised interface as a parameter we lose the ability to retrieve concrete values from our return type. Not so in TypeScript.</description><pubDate>Mon, 22 Aug 2022 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Defining &apos;integration&apos; tests</title><link>https://www.jayfreestone.com/writing/integration-tests/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/integration-tests/</guid><description>What is an integration test? Everyone uses the term, but few seem to agree on the definition. Does the awkward filling of the testing pyramid still have value today, or is it too murky to be of real value?</description><pubDate>Tue, 09 Aug 2022 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>An Opinionated Guide to Unit Testing</title><link>https://www.jayfreestone.com/writing/opinionated-guide-to-unit-tests/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/opinionated-guide-to-unit-tests/</guid><description>A language-agnostic guide on how to write maintainable, loosely-coupled unit tests which provide confidence and reduce fragility.</description><pubDate>Mon, 28 Mar 2022 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Frontend Predictions for 2022</title><link>https://www.jayfreestone.com/writing/frontend-predictions-2022/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/frontend-predictions-2022/</guid><description>Thoughts on what we might see in the coming year, including the return of micro-frontends, functional JavaScript &amp; the demise of the Jamstack as we know it.</description><pubDate>Thu, 20 Jan 2022 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Wrapping text inside an SVG using CSS</title><link>https://www.jayfreestone.com/writing/wrappping-text-inside-svg-css/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/wrappping-text-inside-svg-css/</guid><description>Using two SVGs and shape-outside to wrap text inside a shape.</description><pubDate>Wed, 22 Dec 2021 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Stubbing GraphQL using Cypress</title><link>https://www.jayfreestone.com/writing/stubbing-graphql-cypress/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/stubbing-graphql-cypress/</guid><description>A more ergonomic solution to stubbing out multiple GraphQL responses using Cypress.</description><pubDate>Sun, 12 Dec 2021 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Avoiding FOUT with Async CSS</title><link>https://www.jayfreestone.com/writing/avoiding-repeat-async-fout/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/avoiding-repeat-async-fout/</guid><description>Fighting blocking resources and the fabled flash-of-unstyled-text with Adobe Fonts.</description><pubDate>Sat, 04 Sep 2021 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>The jest.mock() escape hatch</title><link>https://www.jayfreestone.com/writing/jest-module-mocks/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/jest-module-mocks/</guid><description>Mocking concrete dependencies is a code-smell.</description><pubDate>Wed, 11 Aug 2021 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Follow the Grain</title><link>https://www.jayfreestone.com/writing/follow-the-grain/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/follow-the-grain/</guid><description>Spend less time trying to fix things, and more time trying to understand them.</description><pubDate>Tue, 25 May 2021 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Cutouts with CSS Masks</title><link>https://www.jayfreestone.com/writing/cutouts-css-masks/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/cutouts-css-masks/</guid><description>Creating a button with a notch cut out using composited CSS masks.</description><pubDate>Tue, 23 Mar 2021 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Bulletproof flag components</title><link>https://www.jayfreestone.com/writing/bulletproof-flag/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/bulletproof-flag/</guid><description>A resilient take on a flag-like media object.</description><pubDate>Thu, 31 Dec 2020 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Contained aspect-ratio boxes</title><link>https://www.jayfreestone.com/writing/contained-aspect-ratio-boxes/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/contained-aspect-ratio-boxes/</guid><description>A modern attempt at creating a CSS-only aspect-ratio box that fills its wrapper.</description><pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>React Portals with Hooks</title><link>https://www.jayfreestone.com/writing/react-portals-with-hooks/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/react-portals-with-hooks/</guid><description>Since Hooks have just been introduced into the latest stable build of React, it&apos;s a great time to play around with them and think about how previous component structures and paradigms (including classes and HOC&apos;s) can fit within them.</description><pubDate>Wed, 20 Feb 2019 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Text Wrapping &amp; Inline Pseudo Elements</title><link>https://www.jayfreestone.com/writing/wrapping-and-inline-pseudo-elements/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/wrapping-and-inline-pseudo-elements/</guid><description>A really common pattern on the web is adding an icon or indicator using a pseudo element so it appears before or after an element, such as an external link indicator.</description><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>ES6 Proxies</title><link>https://www.jayfreestone.com/writing/es6-proxies/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/es6-proxies/</guid><description>I recently discovered ES6 proxies, essentially a means to intercept properties accessors and methods and either override or extend them.</description><pubDate>Mon, 14 Jan 2019 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Entanglement</title><link>https://www.jayfreestone.com/writing/entanglement/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/entanglement/</guid><description>Starting the design process nowadays is overwhelming. There are dozens of methodologies and hundreds of &apos;best-practices&apos;.</description><pubDate>Wed, 03 Feb 2016 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Perils of Atomic Design</title><link>https://www.jayfreestone.com/writing/perils-of-atomic-design/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/perils-of-atomic-design/</guid><description>Modular design methodologies, such as Brad Frost&apos;s Atomic Design, offer consistency and maintainability. But do they also foster fragmentation?</description><pubDate>Mon, 28 Sep 2015 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Extremes</title><link>https://www.jayfreestone.com/writing/extremes/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/extremes/</guid><description>Print often encourages us to design around everyman data, while the web forces us to do the opposite.</description><pubDate>Fri, 05 Dec 2014 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Masking Bitmaps with SVG</title><link>https://www.jayfreestone.com/writing/masking-bitmaps-with-svg/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/masking-bitmaps-with-svg/</guid><description>Peter’s trick involves leveraging SVG’s support for masking to provide JPEGs with a means to transparency, and therefore the best of both worlds.</description><pubDate>Fri, 05 Dec 2014 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Design Differently</title><link>https://www.jayfreestone.com/writing/design-differently/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/design-differently/</guid><description>MengTo&apos;s article on how designers approach code made me wonder about how my coding affects the way I design.</description><pubDate>Thu, 20 Nov 2014 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Tree Felling</title><link>https://www.jayfreestone.com/writing/tree-felling/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/tree-felling/</guid><description>At Responsive Day Out Oliver Reichenstein introduced the Container Model, a new means of information architecture that recalls the origins of the web.</description><pubDate>Mon, 10 Nov 2014 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item><item><title>Access</title><link>https://www.jayfreestone.com/writing/access/</link><guid isPermaLink="true">https://www.jayfreestone.com/writing/access/</guid><description>Good design, UX and otherwise, has always been about improving the content&apos;s accessibility. The difference is that in designing a box to fit any object we have failed to design anything at all.</description><pubDate>Tue, 28 Oct 2014 00:00:00 GMT</pubDate><author>mail@jayfreestone.com (Jay Freestone)</author></item></channel></rss>