<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://joelcodja.com/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://joelcodja.com/"/>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://joelcodja.com/"/>
  </url>
  <url>
    <loc>https://joelcodja.com/projects/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/projects/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/projects/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://joelcodja.com/projects/"/>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/projects/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/projects/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/projects/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://joelcodja.com/projects/"/>
  </url>
  <url>
    <loc>https://joelcodja.com/blog/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://joelcodja.com/blog/"/>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/blog/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://joelcodja.com/blog/"/>
  </url>
  <url>
    <loc>https://joelcodja.com/blog/the-best-transactional-email-services-in-2026/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/the-best-transactional-email-services-in-2026/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/the-best-transactional-email-services-in-2026/"/>
    <lastmod>2026-10-23</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/blog/the-best-transactional-email-services-in-2026/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/the-best-transactional-email-services-in-2026/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/the-best-transactional-email-services-in-2026/"/>
    <lastmod>2026-10-23</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/blog/validating-api-input-with-zod-in-typescript/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/validating-api-input-with-zod-in-typescript/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/validating-api-input-with-zod-in-typescript/"/>
    <lastmod>2026-09-18</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/blog/validating-api-input-with-zod-in-typescript/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/validating-api-input-with-zod-in-typescript/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/validating-api-input-with-zod-in-typescript/"/>
    <lastmod>2026-09-18</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/blog/why-i-use-drizzle-for-every-typescript-backend/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/why-i-use-drizzle-for-every-typescript-backend/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/why-i-use-drizzle-for-every-typescript-backend/"/>
    <lastmod>2026-09-04</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/blog/why-i-use-drizzle-for-every-typescript-backend/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/why-i-use-drizzle-for-every-typescript-backend/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/why-i-use-drizzle-for-every-typescript-backend/"/>
    <lastmod>2026-09-04</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/blog/aes-256-gcm-encryption-at-rest-in-nodejs/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/aes-256-gcm-encryption-at-rest-in-nodejs/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/aes-256-gcm-encryption-at-rest-in-nodejs/"/>
    <lastmod>2026-07-15</lastmod>
  </url>
  <url>
    <loc>https://joelcodja.com/fr/blog/aes-256-gcm-encryption-at-rest-in-nodejs/</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://joelcodja.com/blog/aes-256-gcm-encryption-at-rest-in-nodejs/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://joelcodja.com/fr/blog/aes-256-gcm-encryption-at-rest-in-nodejs/"/>
    <lastmod>2026-07-15</lastmod>
  </url>
</urlset>
