<?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://mahdi-mortazavi.github.io/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mahdi-mortazavi.github.io/timeline/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/relay/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/relay/relay-demo-poster.webp</image:loc><image:title>Pairing end to end, in twelve seconds — no account, no cable.</image:title><image:caption>Screen recording of Relay pairing: the PC recognises the phone and its two-digit code, one click connects, and the phone reports one device connected.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/relay/android.webp</image:loc><image:title>The phone side: live traffic, a two-digit code, and a QR for the PC to scan.</image:title><image:caption>Relay on Android: one device connected, 4.2 GB up and 3.0 GB down, the two-digit pairing code, and a QR code.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/relay/windows.webp</image:loc><image:title>The PC side stays out of the way — it lives in the system tray.</image:title><image:caption>Relay on Windows: a compact window offering Scan QR or Enter Code Manually.</image:caption></image:image></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/flow/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/flow/today.webp</image:loc><image:title>Today asks for one boulder — not a list you will never finish.</image:title><image:caption>Flow's Today screen in Persian: the day's single boulder with a start-focus button, habits, and free time.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/flow/focus.webp</image:loc><image:title>One target on screen, and a ring that only counts down.</image:title><image:caption>A focus session running against the day's target, a ring counting down from twenty-five minutes.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/flow/interrupt.webp</image:loc><image:title>When focus breaks, Flow captures why instead of losing it.</image:title><image:caption>A sheet asking what broke the session, with chips for tiredness, people, phone, and intrusive thoughts.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/flow/mirror.webp</image:loc><image:title>The Mirror shows the week as it was — including the zero-hour days.</image:title><image:caption>A weekly review: deep-work hours over seven days and a thirty-day pattern of what interrupts most.</image:caption></image:image></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/sooda/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/sooda/sooda-demo-poster.webp</image:loc><image:title>Purchase price in, profit percentage in, selling price out — in one screen.</image:title><image:caption>Screen recording of Sooda: choosing Persian, typing a purchase price and a profit percentage, and the selling price counting up to the result.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/sooda/sooda-mobile-fa.webp</image:loc><image:title>Persian numerals throughout, right to left, with the result laid out to be read aloud.</image:title><image:caption>Sooda in Persian on a phone: 850,000 at 35 percent gives a selling price of 1,147,500 and a profit of 297,500.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/sooda/sooda-mobile-en.webp</image:loc><image:title>The same app in English — one build, two languages.</image:title><image:caption>The same calculation in English on a phone, showing a selling price of 1,147,500 and a profit of 297,500.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/sooda/sooda-desktop-fa.webp</image:loc><image:title>Three modes — profit, sell price, discount — behind one set of tabs.</image:title><image:caption>Sooda in a desktop browser in Persian, with tabs for profit percentage, sell price, and discount.</image:caption></image:image></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/nava/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/nava/home-light.webp</image:loc><image:title>Every task carries the one number that matters: how long it takes.</image:title><image:caption>Nava's task list in light mode: a focus ring at two of three, tasks with durations, and a completed section.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/nava/home-dark.webp</image:loc><image:title>Dark mode is a real theme, not an inverted screenshot.</image:title><image:caption>The same task list in dark mode, with identical layout and contrast.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/nava/focus.webp</image:loc><image:title>Start a task and it becomes a timer — the estimate is the session.</image:title><image:caption>A forty-five minute focus timer for a study task, with plus-five and minus-five controls.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/nava/task-form.webp</image:loc><image:title>Adding a task takes one sheet and no navigation.</image:title><image:caption>The new-task sheet: title, tags for personal and twenty-five minutes, pin, reminder, and subtasks.</image:caption></image:image></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/purify/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/purify/product-preview.svg</image:loc><image:title>A product preview of the desktop window — disk usage by category, safe to clean.</image:title><image:caption>Purify's product preview: a desktop window showing disk usage broken down by category with a safe-clean action.</image:caption></image:image></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/overrun/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/00-title.webp</image:loc><image:title>The menu: three modes, and a code box for joining a friend's room.</image:title><image:caption>The OVERRUN title screen: the wordmark over a dark arena, with three mode cards below it.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/01-coop-swarm.webp</image:loc><image:title>Wave 14, and the banner says THEY LEARN. The director composes the wave against your build.</image:title><image:caption>Wave 14 of co-op: dozens of enemies converging on a single player in a pale concrete arena.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/02-explosion.webp</image:loc><image:title>A 10x combo. The ladder starts decaying 3.2 seconds after the last kill.</image:title><image:caption>Two explosions going off at once, damage numbers rising, a ten times combo counter on screen.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/03-boss.webp</image:loc><image:title>Wave 20, a boss. Every rose ring is a telegraphed attack — rose is never decorative.</image:title><image:caption>A boss twice the height of everything else, telegraphed slam rings marked in rose across the floor.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/04-tdm.webp</image:loc><image:title>Team deathmatch, 22–19. Team colour is gameplay information, so it lives in the shared package.</image:title><image:caption>Team deathmatch at 22 to 19, blue and orange players trading fire across a symmetric arena.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/05-squad.webp</image:loc><image:title>Squad royale with 29 seconds left. Rose means the floor is being taken away from you.</image:title><image:caption>Squad royale with four scores on the HUD and the arena's rose closing zone eating the left half of the floor.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/06-upgrades.webp</image:loc><image:title>Wave 7, and the arena is briefly empty. The relief valley is deliberate; it is what makes the next spike land.</image:title><image:caption>A quiet moment on wave 7: one player alone on a wide concrete floor, the arena tinted rose on one side.</image:caption></image:image>
    <image:image><image:loc>https://mahdi-mortazavi.github.io/assets/shots/overrun/07-mobile.webp</image:loc><image:title>On a phone, landscape and fullscreen. The HUD stays at the edges because the centre is where you are staying alive.</image:title><image:caption>The same game on a phone in landscape, with a floating dash pad and thumb controls at the edges.</image:caption></image:image></url>
  <url><loc>https://mahdi-mortazavi.github.io/p/mova/</loc><lastmod>2026-09-14</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url>
</urlset>
