<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>elboudali</title>
    <link>https://elboudali.com</link>
    <description>Sr. Software Engineer writing about web development, AI, and building things that matter.</description>
    <language>en-us</language>
    <atom:link href="https://elboudali.com/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title><![CDATA[Why I Moved From Vercel to a VPS - 6 min read]]></title>
      <link>https://elboudali.com/blog/why-i-moved-from-vercel-to-vps</link>
      <guid isPermaLink="true">https://elboudali.com/blog/why-i-moved-from-vercel-to-vps</guid>
      <description><![CDATA[The managed-everything approach is great for getting started, but at some point the fragmentation adds up. Here is why I moved my project to a self-hosted VPS and what I gained.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <category>6 min read</category>
    </item>
    <item>
      <title><![CDATA[React2Shell (CVE-2025-55182): A Real Incident on Azure App Service and How I Fixed It - 9 min read]]></title>
      <link>https://elboudali.com/blog/react2shell-incident-report</link>
      <guid isPermaLink="true">https://elboudali.com/blog/react2shell-incident-report</guid>
      <description><![CDATA[A first-hand incident report of attempted React2Shell exploitation against a Next.js 15 + React 19 app hosted on Azure App Service, what we saw, what actually happened under the hood, and exactly how we remediated it.]]></description>
      <pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate>
      <category>9 min read</category>
    </item>
    <item>
      <title><![CDATA[How to set up Next.js with TypeScript - 4 min read]]></title>
      <link>https://elboudali.com/blog/how-to-setup-next-js-with-typescript</link>
      <guid isPermaLink="true">https://elboudali.com/blog/how-to-setup-next-js-with-typescript</guid>
      <description><![CDATA[Next.js is a React framework to build fast and high-performance applications. It provides an integrated TypeScript experience, including zero-configuration set up and built-in types for Pages, APIs, and more.]]></description>
      <pubDate>Fri, 01 Apr 2022 00:00:00 GMT</pubDate>
      <category>4 min read</category>
    </item>
    <item>
      <title><![CDATA[Add blog posts dynamically to your GitHub README - 3 min read]]></title>
      <link>https://elboudali.com/blog/add-blog-posts-dynamically-to-your-github-readme</link>
      <guid isPermaLink="true">https://elboudali.com/blog/add-blog-posts-dynamically-to-your-github-readme</guid>
      <description><![CDATA[You can share information about yourself with the community on GitHub by creating a profile README. You can also decide what information to include in this file, so you have full control over how you present yourself on GitHub.]]></description>
      <pubDate>Wed, 20 Oct 2021 00:00:00 GMT</pubDate>
      <category>3 min read</category>
    </item>
    <item>
      <title><![CDATA[How to set up Gatsby with TypeScript - 6 min read]]></title>
      <link>https://elboudali.com/blog/how-to-set-up-gatsby-with-typescript</link>
      <guid isPermaLink="true">https://elboudali.com/blog/how-to-set-up-gatsby-with-typescript</guid>
      <description><![CDATA[Last year I started integrating TypeScript into all of my projects and workflows. It helped me write better and more predictable code. In this tutorial we will take a look on how to set up our Gatsby website and support it fully with TypeScript.]]></description>
      <pubDate>Fri, 15 Oct 2021 00:00:00 GMT</pubDate>
      <category>6 min read</category>
    </item>
    <item>
      <title><![CDATA[Connecting to GitHub with SSH - 2 min read]]></title>
      <link>https://elboudali.com/blog/connecting-to-github-with-ssh</link>
      <guid isPermaLink="true">https://elboudali.com/blog/connecting-to-github-with-ssh</guid>
      <description><![CDATA[With SSH keys, you can connect to GitHub without supplying your email and password every time you push. When you set up SSH, you will need to generate a new SSH key and add it to the ssh-agent.]]></description>
      <pubDate>Tue, 12 Oct 2021 00:00:00 GMT</pubDate>
      <category>2 min read</category>
    </item>
  </channel>
</rss>