<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>James Ives</title>
        <link>https://jamesiv.es</link>
        <description>Writing about design systems, web architecture, and everything else I explore along the way.</description>
        <lastBuildDate>Wed, 24 Jun 2026 02:24:33 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Feed for Node.js</generator>
        <image>
            <title>James Ives</title>
            <url>https://jamesiv.es/images/logo.png</url>
            <link>https://jamesiv.es</link>
        </image>
        <copyright>All rights reserved 2026, James Ives</copyright>
        <item>
            <title><![CDATA[Welcome to Mars. Your LCP is 6 Seconds.]]></title>
            <link>https://jamesiv.es/blog/welcome-to-mars-your-lcp-is-6-seconds/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/welcome-to-mars-your-lcp-is-6-seconds/</guid>
            <pubDate>Fri, 19 Jun 2026 20:00:00 GMT</pubDate>
            <description><![CDATA[Measuring web performance without lying to yourself.]]></description>
        </item>
        <item>
            <title><![CDATA[Your Design System Needs An MCP Server]]></title>
            <link>https://jamesiv.es/blog/your-design-system-needs-an-mcp-server/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/your-design-system-needs-an-mcp-server/</guid>
            <pubDate>Mon, 25 May 2026 20:00:00 GMT</pubDate>
            <description><![CDATA[One of the best investments you can make for your design system right now is a Model Context Protocol (MCP) server. As AI models evolve they are becoming increasingly more capable, but using them effectively comes at a cost.]]></description>
        </item>
        <item>
            <title><![CDATA[Gathering Hyrox Race Insights with Python]]></title>
            <link>https://jamesiv.es/blog/gathering-hyrox-race-insights-with-python/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/gathering-hyrox-race-insights-with-python/</guid>
            <pubDate>Thu, 19 Mar 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[Using Python to analyse Hyrox race data and gain performance insights.]]></description>
        </item>
        <item>
            <title><![CDATA[Headless Storybook with Lit]]></title>
            <link>https://jamesiv.es/blog/headless-storybook-with-lit/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/headless-storybook-with-lit/</guid>
            <pubDate>Fri, 13 Mar 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[Using the Component Story Format and the Custom Elements Manifest to mirror Storybook stories in Next.js for server-side rendering validation.]]></description>
        </item>
        <item>
            <title><![CDATA[Connecting the Custom Elements Manifest to Figma Code Connect]]></title>
            <link>https://jamesiv.es/blog/custom-elements-manifest-and-figma-code-connect/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/custom-elements-manifest-and-figma-code-connect/</guid>
            <pubDate>Sun, 21 Sep 2025 21:00:00 GMT</pubDate>
            <description><![CDATA[Automating the generation of Figma Code Connect files using the Custom Elements Manifest and Figma's REST API.]]></description>
        </item>
        <item>
            <title><![CDATA[F45 Broke Their Strava Integration So I Wrote My Own]]></title>
            <link>https://jamesiv.es/blog/f45-broke-my-beloved-strava-integration/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/f45-broke-my-beloved-strava-integration/</guid>
            <pubDate>Fri, 14 Mar 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[They broke my beloved Strava integration, and I'm not happy about it. Let's fix it.]]></description>
        </item>
        <item>
            <title><![CDATA[Documenting Web Components With Storybook]]></title>
            <link>https://jamesiv.es/blog/documenting-web-components-with-storybook/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/documenting-web-components-with-storybook/</guid>
            <pubDate>Wed, 19 Feb 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[In this article, I want to discuss how you can easily document your Web Components with Storybook so that your documentation provides a good user and developer experience.]]></description>
        </item>
        <item>
            <title><![CDATA[Improving Code Quality with Linting]]></title>
            <link>https://jamesiv.es/blog/improving-code-quality-with-linting/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/improving-code-quality-with-linting/</guid>
            <pubDate>Fri, 11 Oct 2024 14:00:00 GMT</pubDate>
            <description><![CDATA[Code linting is a great way to ensure that your codebase is consistent and that you're following best practices.]]></description>
        </item>
        <item>
            <title><![CDATA[Figma Config 2024]]></title>
            <link>https://jamesiv.es/blog/figma-config-2024/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/figma-config-2024/</guid>
            <pubDate>Sat, 29 Jun 2024 18:00:00 GMT</pubDate>
            <description><![CDATA[My experience at the 2024 Figma Config conference and some pictures I took there.]]></description>
        </item>
        <item>
            <title><![CDATA[Half-Life Dedicated Server With Docker]]></title>
            <link>https://jamesiv.es/blog/half-life-dedicated-server-with-docker/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/half-life-dedicated-server-with-docker/</guid>
            <pubDate>Thu, 20 Jun 2024 11:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to create a Half-Life Dedicated Server instance using Docker including the ability to add custom configurations, mods and plugins.]]></description>
        </item>
        <item>
            <title><![CDATA[Demystifying Web Components]]></title>
            <link>https://jamesiv.es/blog/demystifying-web-components/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/demystifying-web-components/</guid>
            <pubDate>Sat, 23 Mar 2024 11:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to build Web Components and why they're a great choice for your next project.]]></description>
        </item>
        <item>
            <title><![CDATA[Visual Testing Storybook with Playwright]]></title>
            <link>https://jamesiv.es/blog/visual-testing-storybook-with-playwright/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/visual-testing-storybook-with-playwright/</guid>
            <pubDate>Mon, 11 Mar 2024 11:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to setup visual regression tests with Playwright and Storybook.]]></description>
        </item>
        <item>
            <title><![CDATA[Let's Chat About Design System Tokens]]></title>
            <link>https://jamesiv.es/blog/lets-chat-about-design-system-tokens/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/lets-chat-about-design-system-tokens/</guid>
            <pubDate>Mon, 25 Sep 2023 11:00:00 GMT</pubDate>
            <description><![CDATA[This article will focus on Design Tokens, one of the core elements of a design system. The hope is that if you're not familiar with the concept, you'll walk away with a better understanding of what they are and how they can be used.]]></description>
        </item>
        <item>
            <title><![CDATA[Syncing Figma Variables and Style Dictionary with GitHub Actions]]></title>
            <link>https://jamesiv.es/blog/syncing-figma-variables-with-github-actions-and-styledictionary/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/syncing-figma-variables-with-github-actions-and-styledictionary/</guid>
            <pubDate>Tue, 01 Aug 2023 11:00:00 GMT</pubDate>
            <description><![CDATA[Supporting your design system with Figma Variables.]]></description>
        </item>
        <item>
            <title><![CDATA[Fostering Positive Change with Innovation Week]]></title>
            <link>https://jamesiv.es/blog/fostering-positive-change-with-innovation-week/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/fostering-positive-change-with-innovation-week/</guid>
            <pubDate>Fri, 21 Jul 2023 11:00:00 GMT</pubDate>
            <description><![CDATA[Innovation Week is a week-long event that brings together teams to work on new ideas and projects to help us grow and improve ourselves and our products.]]></description>
        </item>
        <item>
            <title><![CDATA[Add your GitHub Sponsors to your project README with Actions]]></title>
            <link>https://jamesiv.es/blog/add-your-github-sponsors-to-your-project-readme/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/add-your-github-sponsors-to-your-project-readme/</guid>
            <pubDate>Fri, 30 Jun 2023 11:00:00 GMT</pubDate>
            <description><![CDATA[A simple way to add some value to your GitHub Sponsorship tiers with the help of GitHub Actions.]]></description>
        </item>
        <item>
            <title><![CDATA[Virtually Infinite Scrolling with Angular]]></title>
            <link>https://jamesiv.es/blog/virtually-infinite-scrolling-with-angular/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/virtually-infinite-scrolling-with-angular/</guid>
            <pubDate>Tue, 14 Feb 2023 11:00:00 GMT</pubDate>
            <description><![CDATA[In this article we will take a look at some common patterns to improve performance when implementing an infinite scroller with Angular.]]></description>
        </item>
        <item>
            <title><![CDATA[Engineering Design Systems In 2022]]></title>
            <link>https://jamesiv.es/blog/engineering-design-systems-in-2022/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/engineering-design-systems-in-2022/</guid>
            <pubDate>Fri, 04 Mar 2022 11:00:00 GMT</pubDate>
            <description><![CDATA[In this article I will break down some of the things I have learned over the years of working with design systems and some tooling you can use to help build your own.]]></description>
        </item>
        <item>
            <title><![CDATA[When Package Dependencies Become Problematic]]></title>
            <link>https://jamesiv.es/blog/when-package-dependencies-become-problematic/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/when-package-dependencies-become-problematic/</guid>
            <pubDate>Sun, 13 Feb 2022 22:00:00 GMT</pubDate>
            <description><![CDATA[In this article we explore some common security holes caused by npm packages.]]></description>
        </item>
        <item>
            <title><![CDATA[Deploying to GitHub Pages using GitHub Actions]]></title>
            <link>https://jamesiv.es/blog/deploying-to-github-pages-with-github-actions/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/deploying-to-github-pages-with-github-actions/</guid>
            <pubDate>Sun, 23 Jan 2022 22:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to deploy your web application to GitHub Pages with the help of GitHub Actions.]]></description>
        </item>
        <item>
            <title><![CDATA[Rendering 3D Models in the Browser]]></title>
            <link>https://jamesiv.es/blog/rendering-3d-models-in-the-browser/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/rendering-3d-models-in-the-browser/</guid>
            <pubDate>Fri, 26 Nov 2021 22:00:00 GMT</pubDate>
            <description><![CDATA[In this article we'll explore different ways to create 3D models, along with some of the options available when it comes to displaying them in a web browser.]]></description>
        </item>
        <item>
            <title><![CDATA[Animating Sprite Sheets with CSS]]></title>
            <link>https://jamesiv.es/blog/animating-sprite-sheets-with-css/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/animating-sprite-sheets-with-css/</guid>
            <pubDate>Sun, 13 Dec 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Sprite Sheets are used in everything from video games, physical devices and even the web. In this post we will explore their use cases on the web.]]></description>
        </item>
        <item>
            <title><![CDATA[Generating Last Word Cocktail Variations]]></title>
            <link>https://jamesiv.es/blog/the-algorithmic-word/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/the-algorithmic-word/</guid>
            <pubDate>Sat, 27 Jun 2020 18:10:00 GMT</pubDate>
            <description><![CDATA[A look into how we can use algorithms to generate a list of Last Word cocktail variations.]]></description>
        </item>
        <item>
            <title><![CDATA[Programming an Elevator]]></title>
            <link>https://jamesiv.es/blog/programming-an-elevator/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/programming-an-elevator/</guid>
            <pubDate>Sun, 31 May 2020 18:00:00 GMT</pubDate>
            <description><![CDATA[Join me as I put far too much time into solving a question about programming elevators.]]></description>
        </item>
        <item>
            <title><![CDATA[Fetching Authenticated API Data with GitHub Actions]]></title>
            <link>https://jamesiv.es/blog/fetching-authenticated-api-data/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/fetching-authenticated-api-data/</guid>
            <pubDate>Sat, 07 Mar 2020 09:00:00 GMT</pubDate>
            <description><![CDATA[I created a GitHub Action that requests arbitrary authenticated API data on a schedule!]]></description>
        </item>
        <item>
            <title><![CDATA[Analysing My Google Music Library]]></title>
            <link>https://jamesiv.es/blog/analyzing-my-google-music-library/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/analyzing-my-google-music-library/</guid>
            <pubDate>Wed, 11 Dec 2019 09:00:00 GMT</pubDate>
            <description><![CDATA[Let's analyse my Google Music library and see what genres I listen to the most without using an API.]]></description>
        </item>
        <item>
            <title><![CDATA[Creating the United Income Component Library]]></title>
            <link>https://jamesiv.es/blog/creating-our-component-library/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/creating-our-component-library/</guid>
            <pubDate>Mon, 03 Jun 2019 09:00:00 GMT</pubDate>
            <description><![CDATA[This article will cover the process of creating the United Income component library, and the best practices we've introduced along the way.]]></description>
        </item>
        <item>
            <title><![CDATA[Google Assistant Action for the DC Metro]]></title>
            <link>https://jamesiv.es/blog/dc-metro-google-assistant-action/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/dc-metro-google-assistant-action/</guid>
            <pubDate>Wed, 05 Dec 2018 09:00:00 GMT</pubDate>
            <description><![CDATA[Navigating the DC Metro with Google Assistant.]]></description>
        </item>
        <item>
            <title><![CDATA[Google I/O 2018]]></title>
            <link>https://jamesiv.es/blog/google-io-18/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/google-io-18/</guid>
            <pubDate>Sat, 12 May 2018 09:00:00 GMT</pubDate>
            <description><![CDATA[A write up of my experience at Google I/O 2018]]></description>
        </item>
        <item>
            <title><![CDATA[Unveiling ArcAds]]></title>
            <link>https://jamesiv.es/blog/unveiling-arc-ads/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/unveiling-arc-ads/</guid>
            <pubDate>Mon, 23 Apr 2018 09:00:00 GMT</pubDate>
            <description><![CDATA[Learn about ArcAds, a new library that simplifies and standardizes advertisement logic in a way that makes sense in the context of large-scale publishers.]]></description>
        </item>
        <item>
            <title><![CDATA[Building a Robot with NodeJS]]></title>
            <link>https://jamesiv.es/blog/building-a-robot-with-nodejs/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/building-a-robot-with-nodejs/</guid>
            <pubDate>Fri, 04 Aug 2017 09:00:00 GMT</pubDate>
            <description><![CDATA[Apparently you can build robots with NodeJS. Who knew?]]></description>
        </item>
        <item>
            <title><![CDATA[AMP Validator Slack Bot]]></title>
            <link>https://jamesiv.es/blog/amp-validator-cat/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/amp-validator-cat/</guid>
            <pubDate>Thu, 16 Mar 2017 07:00:00 GMT</pubDate>
            <description><![CDATA[Automating AMP validation with a Slack bot]]></description>
        </item>
        <item>
            <title><![CDATA[Google AMPConf 2017]]></title>
            <link>https://jamesiv.es/blog/google-amp-conf/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/google-amp-conf/</guid>
            <pubDate>Fri, 10 Mar 2017 07:00:00 GMT</pubDate>
            <description><![CDATA[I was in Manhatten for Googles AMPConf on behalf of Alaska Dispatch News.]]></description>
        </item>
        <item>
            <title><![CDATA[Steam Dev Days 2016]]></title>
            <link>https://jamesiv.es/blog/steam-devdays/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/steam-devdays/</guid>
            <pubDate>Sun, 16 Oct 2016 07:00:00 GMT</pubDate>
            <description><![CDATA[I attended the Steam Dev Days conference in Seattle, Washington hosted by Valve Software.]]></description>
        </item>
        <item>
            <title><![CDATA[Alaska Dispatch News 2.0]]></title>
            <link>https://jamesiv.es/blog/alaska-dispatch-news/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/alaska-dispatch-news/</guid>
            <pubDate>Mon, 30 May 2016 07:00:00 GMT</pubDate>
            <description><![CDATA[A look at the new Alaska Dispatch News website]]></description>
        </item>
        <item>
            <title><![CDATA[What I Learned at RenderConf 2016]]></title>
            <link>https://jamesiv.es/blog/what-i-learned-at-renderconf2016/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/what-i-learned-at-renderconf2016/</guid>
            <pubDate>Mon, 02 May 2016 07:00:00 GMT</pubDate>
            <description><![CDATA[I got to spend a couple of days in Oxford for the Render Conference. Here's what I learned!]]></description>
        </item>
        <item>
            <title><![CDATA[Back to Valve Software to Try the Vive]]></title>
            <link>https://jamesiv.es/blog/back-to-valve-to-try-the-vive/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/back-to-valve-to-try-the-vive/</guid>
            <pubDate>Thu, 03 Sep 2015 07:00:00 GMT</pubDate>
            <description><![CDATA[I was invited back to Valve Software, this time to try the Vive dev kit.]]></description>
        </item>
        <item>
            <title><![CDATA[Testing Valves Prototype Steam Hardware]]></title>
            <link>https://jamesiv.es/blog/steam-hardware/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/steam-hardware/</guid>
            <pubDate>Sun, 01 Dec 2013 07:00:00 GMT</pubDate>
            <description><![CDATA[Valve Software sent me a prototype Steam Machine and Controller to test out. Here's what I thought.]]></description>
        </item>
        <item>
            <title><![CDATA[Visit to Valve Software]]></title>
            <link>https://jamesiv.es/blog/visit-to-valve-software/</link>
            <guid isPermaLink="false">https://jamesiv.es/blog/visit-to-valve-software/</guid>
            <pubDate>Sat, 21 Apr 2012 07:00:00 GMT</pubDate>
            <description><![CDATA[I was invited to Valve for an office tour and to playtest an upcoming update for Team Fortress 2.]]></description>
        </item>
    </channel>
</rss>