<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Axel Isouard | Freelance Software Engineer for Web Apps &amp; AI | axel.dev</title><description>I help teams launch web apps and AI features, and keep them running. Freelance, available for new projects. TypeScript, React, Next.js, Node.js and AWS.</description><link>https://axel.dev/</link><item><title>Optimizing an Astro Site for 100 PageSpeed</title><link>https://axel.dev/blog/optimizing-astro-site-for-100-pagespeed/</link><guid isPermaLink="true">https://axel.dev/blog/optimizing-astro-site-for-100-pagespeed/</guid><description>A practical guide to pushing an Astro site to a 100 PageSpeed score: CSS budgets, fonts, images, and the Speed Index fixes that actually matter.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Post-quantum JWT signing: ML-DSA is here</title><link>https://axel.dev/blog/post-quantum-jwt-signing/</link><guid isPermaLink="true">https://axel.dev/blog/post-quantum-jwt-signing/</guid><description>What RFC 9964 adds for JWS, when ML-DSA actually matters versus keeping ES256, and why post-quantum JWE encryption is further off than you think.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Visual Regression Testing with Cypress and Storybook</title><link>https://axel.dev/blog/react-visual-regression-testing-cypress-storybook/</link><guid isPermaLink="true">https://axel.dev/blog/react-visual-regression-testing-cypress-storybook/</guid><description>Use Cypress and Storybook to catch visual regressions in React apps and keep every UI update consistent across browsers and screen sizes.</description><pubDate>Sat, 20 May 2023 00:00:00 GMT</pubDate></item><item><title>Streaming a video with Media Source Extensions</title><link>https://axel.dev/blog/streaming-webm-video-over-html5-with-media-source/</link><guid isPermaLink="true">https://axel.dev/blog/streaming-webm-video-over-html5-with-media-source/</guid><description>Learn how Media Source Extensions let you inject partial WebM video into an HTML5 player—useful for streaming and progressive playback.</description><pubDate>Tue, 24 May 2016 00:00:00 GMT</pubDate></item><item><title>Timing-safe equal: comparing secrets without leaking them</title><link>https://axel.dev/blog/timing-safe-equal-comparing-secrets/</link><guid isPermaLink="true">https://axel.dev/blog/timing-safe-equal-comparing-secrets/</guid><description>Why a normal string comparison can leak confirmation tokens byte by byte, how timingSafeEqual fixes it, and a live benchmark you can run in the browser.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Unicode usernames without homoglyph attacks</title><link>https://axel.dev/blog/unicode-usernames-safe-international-validation/</link><guid isPermaLink="true">https://axel.dev/blog/unicode-usernames-safe-international-validation/</guid><description>Zod username validation for Japanese, Korean, and Cyrillic names, with homoglyph, impersonation and script-mixing checks.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Meet WebTransport: The Future of WebSockets</title><link>https://axel.dev/blog/webtransport-future-of-websockets/</link><guid isPermaLink="true">https://axel.dev/blog/webtransport-future-of-websockets/</guid><description>How WebTransport overcomes WebSockets and WebRTC limits using QUIC, datagrams, and bidirectional streams—for games and real-time apps.</description><pubDate>Thu, 20 Jul 2023 00:00:00 GMT</pubDate></item><item><title>When postMessage is too slow: Shared Memory patterns for Web Workers</title><link>https://axel.dev/blog/when-postmessage-too-slow-shared-memory-patterns/</link><guid isPermaLink="true">https://axel.dev/blog/when-postmessage-too-slow-shared-memory-patterns/</guid><description>An overview of Web Worker communication: Comlink for control, transferables for big handoffs, and SharedArrayBuffer patterns for high-frequency updates.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate></item></channel></rss>