<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/</loc>
    <lastmod>2026-08-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/og-image.png</image:loc>
      <image:title>James M — software portfolio</image:title>
      <image:caption>Software projects shipped continuously by James M</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/projects</loc>
    <lastmod>2026-08-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/releases</loc>
    <lastmod>2026-08-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/handbook</loc>
    <lastmod>2026-08-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/about</loc>
    <lastmod>2026-08-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/lrge</loc>
    <lastmod>2026-07-20</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/ffmpeg-util</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/ffmpeg-util.gif</image:loc>
      <image:title>ffmpeg-util — animated demo</image:title>
      <image:caption>A media toolkit whose dependency-free core builds the exact ffmpeg command — library, CLI &amp; desktop app</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/smol</loc>
    <lastmod>2026-07-18</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/adk-sandbox</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/adk-sandbox.gif</image:loc>
      <image:title>adk-sandbox — animated demo</image:title>
      <image:caption>A sandbox of runnable Google ADK agents that pick a tool and answer from the result</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/go-labs</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/go-labs.gif</image:loc>
      <image:title>go-labs — animated demo</image:title>
      <image:caption>A hands-on Go playground you learn by running — one module, a live browser sandbox</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/token-validator-service</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/token-validator-service.gif</image:loc>
      <image:title>Token Validator — animated demo</image:title>
      <image:caption>A stateless Flask token-validation service and the Electron desktop app that fronts it</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/cloud-portfolio</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/cloud-portfolio.gif</image:loc>
      <image:title>cloud-portfolio — animated demo</image:title>
      <image:caption>A React/TypeScript personal portfolio that ships itself to Cloud Run on every pull request</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/cicd-frontend-react-ts</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/recall</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/recall.gif</image:loc>
      <image:title>Recall — animated demo</image:title>
      <image:caption>A zero-dependency flashcards app that reviews each card right before you forget it</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/gcp-terraform-labs</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/terraform-aws</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/ashenreach</loc>
    <lastmod>2026-07-17</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/ue5-experiments</loc>
    <lastmod>2026-07-16</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/netsentry</loc>
    <lastmod>2026-08-01</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/netsentry.gif</image:loc>
      <image:title>NetSentry — animated demo</image:title>
      <image:caption>A defensive-security sentry for one household&apos;s LAN, PC, and Cloud Run apps</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/spinnaker-sandbox</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <image:image>
      <image:loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/gifs/spinnaker-sandbox.gif</image:loc>
      <image:title>Spinnaker Sandbox — animated demo</image:title>
      <image:caption>Master Spinnaker through small runnable labs — pipelines-as-code with a local Lab Console</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/nebula-drift</loc>
    <lastmod>2026-08-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/pipeworks</loc>
    <lastmod>2026-07-19</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/processing-sandbox</loc>
    <lastmod>2026-07-18</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://jm-portfolio-5afqr6ijoq-uc.a.run.app/#/project/orrery</loc>
    <lastmod>2026-07-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
</urlset>
