<?xml version="1.0" encoding="UTF-8"?>
<!--
  Generated by hand to match the routes in src/app.

  Every page carries xhtml:link alternates so Google associates the English and
  Japanese versions of each URL rather than treating them as duplicates. The
  project pages are listed individually because they target long-tail queries
  that the homepage cannot rank for.

  Keep this in sync when adding a route. `pnpm verify` does not check it.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <!-- Homepage -->
  <url>
    <loc>https://rubyansh.com/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://rubyansh.com/"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://rubyansh.com/"/>
  </url>

  <!-- Projects index -->
  <url>
    <loc>https://rubyansh.com/projects</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja/projects</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects"/>
  </url>

  <!-- Project case studies -->
  <url>
    <loc>https://rubyansh.com/projects/browser-detective</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/browser-detective"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/browser-detective"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja/projects/browser-detective</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/browser-detective"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/browser-detective"/>
  </url>
  <url>
    <loc>https://rubyansh.com/projects/black-hole-simulator</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/black-hole-simulator"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/black-hole-simulator"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja/projects/black-hole-simulator</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/black-hole-simulator"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/black-hole-simulator"/>
  </url>
  <url>
    <loc>https://rubyansh.com/projects/blind-vision-assistant</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/blind-vision-assistant"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/blind-vision-assistant"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja/projects/blind-vision-assistant</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/blind-vision-assistant"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/blind-vision-assistant"/>
  </url>
  <url>
    <loc>https://rubyansh.com/projects/ai-telegram-bot</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/ai-telegram-bot"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/ai-telegram-bot"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja/projects/ai-telegram-bot</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/projects/ai-telegram-bot"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/projects/ai-telegram-bot"/>
  </url>

  <!-- CV -->
  <url>
    <loc>https://rubyansh.com/cv</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/cv"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/cv"/>
  </url>
  <url>
    <loc>https://rubyansh.com/ja/cv</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://rubyansh.com/cv"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://rubyansh.com/ja/cv"/>
  </url>

  <!-- Freelance (English only, so no alternates) -->
  <url>
    <loc>https://rubyansh.com/freelance</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>
