<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Valentin Besse’s Blog</title><description>Tech thoughts, Astro, and legacy code explorations.</description><link>https://vbesse.com/</link><language>en-us</language><item><title>When AI Turns Off the Light: Autopsy of a Ghost Generative Bug</title><link>https://vbesse.com/en/blog/ai-ghost-bug/</link><guid isPermaLink="true">https://vbesse.com/en/blog/ai-ghost-bug/</guid><description>I asked an AI to enlarge my logo. The result? An almost completely black image. A look back at a spectacular fail to understand how generative models think.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate></item><item><title>From Idea to Production: The Tech Stack Behind This Blog</title><link>https://vbesse.com/en/blog/building/</link><guid isPermaLink="true">https://vbesse.com/en/blog/building/</guid><description>Why I chose Astro and Vercel over Hugo or WordPress, and how I set up this site from A to Z.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate></item><item><title>No More 10 MB Images: My Automated Optimization Pipeline with Astro</title><link>https://vbesse.com/en/blog/automated-image-optimization-pipeline/</link><guid isPermaLink="true">https://vbesse.com/en/blog/automated-image-optimization-pipeline/</guid><description>How I went from tedious manual management to a fully automated workflow thanks to Content Collections and Astro Assets.</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Astro Architecture: Why I Shattered My Monolithic Layout</title><link>https://vbesse.com/en/blog/astro-architecture/</link><guid isPermaLink="true">https://vbesse.com/en/blog/astro-architecture/</guid><description>Discover why separating your main Layout into specialized sub-layers is the key to a maintainable and scalable Astro blog.</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate></item><item><title>The Perfect Illusion: Transforming a Static Site into a Smooth SPA with Astro ClientRouter</title><link>https://vbesse.com/en/blog/astro-clientrouter-smooth-spa/</link><guid isPermaLink="true">https://vbesse.com/en/blog/astro-clientrouter-smooth-spa/</guid><description>Discover how Astro&apos;s ClientRouter component uses the View Transitions API to transform your static site into an ultra-smooth application without the weight of a JavaScript framework.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Backendless Forms: Intercepting Formspree with AJAX for a Seamless UX</title><link>https://vbesse.com/en/blog/backendless-forms-ajax/</link><guid isPermaLink="true">https://vbesse.com/en/blog/backendless-forms-ajax/</guid><description>Stop letting Formspree redirect your users! Discover how to use AJAX to send your contact forms in the background on your Astro site.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Astro &amp; SEO: Fixing the [object Object] URL Error on Your OpenGraph Images</title><link>https://vbesse.com/en/blog/astro-seo-object-object-url-error/</link><guid isPermaLink="true">https://vbesse.com/en/blog/astro-seo-object-object-url-error/</guid><description>Have your social images disappeared on LinkedIn or Bluesky? Discover why Astro sometimes generates an [object Object] in your meta tags and how to fix it for good.</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate></item><item><title>No More Sad Links: Generating Automatic Social Images (OG) with Astro</title><link>https://vbesse.com/en/blog/automatic-og-images/</link><guid isPermaLink="true">https://vbesse.com/en/blog/automatic-og-images/</guid><description>Tired of creating an image on Figma for every article? Discover how to generate your OpenGraph images dynamically at build time with Astro and Satori.</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Accessibility by Example: Making Your Blog Inclusive Effortlessly</title><link>https://vbesse.com/en/blog/accessibility-by-example/</link><guid isPermaLink="true">https://vbesse.com/en/blog/accessibility-by-example/</guid><description>Why and how I made this blog accessible (a11y), from contrast ratios to ARIA attributes, with practical advice.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Astro ClientRouter: The Persistent Mobile Menu Trap</title><link>https://vbesse.com/en/blog/astro-clientrouter-mobile-menu-trap/</link><guid isPermaLink="true">https://vbesse.com/en/blog/astro-clientrouter-mobile-menu-trap/</guid><description>Just enabled View Transitions in Astro, but your hamburger menu is acting crazy? Discover why and how to fix your JavaScript lifecycle.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Dare to Change: Why You Must Seize Opportunities (and Leave Your Comfort Zone)</title><link>https://vbesse.com/en/blog/dare-to-change-seize-opportunities/</link><guid isPermaLink="true">https://vbesse.com/en/blog/dare-to-change-seize-opportunities/</guid><description>Changing companies is not a betrayal; it is often a necessity for growth. A look back at the importance of movement in a career.</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Flashless Dark Mode: The Perfect Implementation with Astro and CSS Variables</title><link>https://vbesse.com/en/blog/flashless-dark-mode/</link><guid isPermaLink="true">https://vbesse.com/en/blog/flashless-dark-mode/</guid><description>Tired of burning your visitors&apos; retinas with a white flash on load? Discover how to create a perfect, persistent Dark Mode with Astro.</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Cmd+K for Everyone: Integrating Instant Search with Pagefind</title><link>https://vbesse.com/en/blog/instant-search-pagefind-cmdk/</link><guid isPermaLink="true">https://vbesse.com/en/blog/instant-search-pagefind-cmdk/</guid><description>Offer your users a premium navigation experience with a global Cmd+K search bar on your Astro static site, powered by Pagefind.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Speaking Google&apos;s Language: Automated Technical SEO with JSON-LD</title><link>https://vbesse.com/en/blog/json-ld-automated-technical-seo/</link><guid isPermaLink="true">https://vbesse.com/en/blog/json-ld-automated-technical-seo/</guid><description>Stop letting Google guess your page content. Learn how to automatically generate JSON-LD structured data with Astro to boost your SEO.</description><pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate></item><item><title>3 Micro-Features for a Perfect Reading UX</title><link>https://vbesse.com/en/blog/micro-features-reading-ux/</link><guid isPermaLink="true">https://vbesse.com/en/blog/micro-features-reading-ux/</guid><description>Content is king, but user experience is queen. Discover how to implement a progress bar, a table of contents, and a copy button on your Astro blog.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Modern CSS: Transforming Amateur Buttons into Pro Components</title><link>https://vbesse.com/en/blog/modern-css-buttons/</link><guid isPermaLink="true">https://vbesse.com/en/blog/modern-css-buttons/</guid><description>A button is not just a link with a border. A step-by-step tutorial to create accessible, aesthetic, and responsive buttons using modern CSS.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Giving Power Back to Readers: Adding a Native RSS Feed in 5 Minutes</title><link>https://vbesse.com/en/blog/native-rss-feed/</link><guid isPermaLink="true">https://vbesse.com/en/blog/native-rss-feed/</guid><description>Escape the algorithms! Discover how to generate a valid RSS feed in a few lines of code on your Astro blog.</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Taming Legacy Code: Turning Debt into Opportunity</title><link>https://vbesse.com/en/blog/taming-legacy-code/</link><guid isPermaLink="true">https://vbesse.com/en/blog/taming-legacy-code/</guid><description>Legacy code is not an inevitability. Strategies, testing, and refactoring: how to regain control of a project without rewriting everything.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Welcome to vbesse.com</title><link>https://vbesse.com/en/blog/welcome/</link><guid isPermaLink="true">https://vbesse.com/en/blog/welcome/</guid><description>This is my very first article published with Astro and Vercel.</description><pubDate>Mon, 22 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Astro &amp; i18n: Making a bilingual blog without sacrificing View Transitions</title><link>https://vbesse.com/en/blog/astro-i18n-view-transitions/</link><guid isPermaLink="true">https://vbesse.com/en/blog/astro-i18n-view-transitions/</guid><description>How I implemented a native multilingual system on my Astro blog, with clean URLs and a dynamic language picker that survives the ClientRouter. Thanks Cristian!</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate></item><item><title>3 UX Details That Make a Difference on an Astro Blog</title><link>https://vbesse.com/en/blog/3-ux-details-astro-blog/</link><guid isPermaLink="true">https://vbesse.com/en/blog/3-ux-details-astro-blog/</guid><description>How I polished the user experience of my bilingual blog with smart redirection, a click-away mobile menu, and dynamic icons.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate></item><item><title>From 40 VO2Max to Injury: My Half-Marathon Prep Year Decoded Through Data</title><link>https://vbesse.com/en/blog/from-vo2max-to-injury-half-marathon-data-prep/</link><guid isPermaLink="true">https://vbesse.com/en/blog/from-vo2max-to-injury-half-marathon-data-prep/</guid><description>How I trained for the 2026 Nancy half-marathon. An analysis of my data (Garmin, Polar H10, Karvonen Zones), my nutrition strategy, and the training load error that cost me my race.</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Inside My Watch: 385 Hours of Sports and an Injury Decoded by Data</title><link>https://vbesse.com/en/blog/deep-dive-garmin-data-385-hours-sports/</link><guid isPermaLink="true">https://vbesse.com/en/blog/deep-dive-garmin-data-385-hours-sports/</guid><description>A technical deep dive into my Garmin and Polar H10 data: proof of the 80/20 rule, aerobic efficiency evolution, and the overload that led to my tendinopathy.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate></item></channel></rss>