<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://kbmjj123.cc/</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
    </url>
    <url>
        <loc>https://kbmjj123.cc/68k-impressions-8-clicks-image-sitemap-blind-spot</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/tools-workflow/68k-impressions-8-clicks-image-sitemap-blind-spot/image-sitemap-blind-spot-cover.webp</image:loc>
            <image:title>68,000 Impressions, 8 Clicks: The Image Sitemap Blind Spot I Didn&apos;t Know I Had</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/tools-workflow/68k-impressions-8-clicks-image-sitemap-blind-spot/image-sitemap-blind-spot-aifindr-video-discovered.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/tools-workflow/68k-impressions-8-clicks-image-sitemap-blind-spot/image-sitemap-blind-spot-gsc-image-performance.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/about</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
    </url>
    <url>
        <loc>https://kbmjj123.cc/archive</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
    </url>
    <url>
        <loc>https://kbmjj123.cc/building-pixel-email-subscription</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/email-verification-screenshot-cover.webp</image:loc>
            <image:title>Building a Pixel Email Subscription System for kbmjj123.cc with Resend and D1</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/d1-migration-output.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/email-verification-screenshot.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/sidebar-widget-states.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/dashboard-env-vars.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/email-in-spam.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/building-pixel-email-subscription/gmail-dmarc-warning.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/fixing-adsense-responsive-mobile-square</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/fixing-adsense-responsive-mobile-square/fixing-adsense-responsive-mobile-square-cover.webp</image:loc>
            <image:title>Why My Responsive AdSense Ad Went Square on Mobile (and Tall on Desktop) — and How I Fixed It With a Reusable Vue Component</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/fixing-adsense-responsive-mobile-square/fixing-adsense-responsive-mobile-square-mobile-broken.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/fixing-adsense-responsive-mobile-square/fixing-adsense-responsive-mobile-square-desktop-height-broken.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/fixing-adsense-responsive-mobile-square/fixing-adsense-responsive-mobile-square-desktop-fixed.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/fixing-adsense-responsive-mobile-square/fixing-adsense-responsive-mobile-square-mobile-fixed.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/from-zero-to-2-dollar-6-months-tool-site</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/indie-mindset/from-zero-to-2-dollar-6-months-tool-site/from-zero-to-2-dollar-6-months-tool-site-cover.webp</image:loc>
            <image:title>From Zero to $2/Day: 6 Months of Running a Tool Site as an Indie Developer</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/indie-mindset/from-zero-to-2-dollar-6-months-tool-site/ai-garbage-email.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/indie-mindset/from-zero-to-2-dollar-6-months-tool-site/adsense-rejection.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/indie-mindset/from-zero-to-2-dollar-6-months-tool-site/buymeacoffee-earn.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/indie-mindset/from-zero-to-2-dollar-6-months-tool-site/gsc-clicks-june-2026.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/going-serverless-part-1-why-cloudflare</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/tools-workflow/part-1-why-cloudflare/going-serverless-part-1-cover.webp</image:loc>
            <image:title>Why I Bet My Indie Project on Cloudflare Instead of a Server</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/going-serverless/part-1-why-cloudflare/going-serverless-part-1-stack-diagram.svg</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/going-serverless-part-2-github-oauth-local-callback</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/tools-workflow/part-2-going-serverless/going-serverless-part-2-cover.webp</image:loc>
            <image:title>Why GitHub OAuth Login Failed Locally (And How I Faked My Way Around It)</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/going-serverless/part-2-github-oauth-local-callback/going-serverless-part-2-oauth-flow-diagram.svg</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/going-serverless-part-3-macos-upgrade-wrangler</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/tools-workflow/part-3-going-serverless/going-serverless-part-3-cover.webp</image:loc>
            <image:title>Two Days, One Broken Monitor, and a Forced macOS Upgrade Just to Run Wrangler</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/going-serverless/part-3-macos-upgrade-wrangler/going-serverless-part-3-monitor-broken.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/going-serverless/part-3-macos-upgrade-wrangler/going-serverless-part-3-apple-supported-devices.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/platform-agnostic-ad-component-nuxt4-ssg</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/platform-agnostic-ad-component-nuxt4-ssg/ad-platform-both-filled.webp</image:loc>
            <image:title>A Platform-Agnostic Ad Component for Nuxt 4 SSG: Swapping AdSense and wwads Without Touching Page Code</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/platform-agnostic-ad-component-nuxt4-ssg/platform-agnostic-ad-architecture-diagram.svg</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/platform-agnostic-ad-component-nuxt4-ssg/ad-platform-zh-wwads-filled.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/dev-practice/platform-agnostic-ad-component-nuxt4-ssg/ad-platform-en-adsense-filled.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/projects</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
    </url>
    <url>
        <loc>https://kbmjj123.cc/self-hosting-umami-part-1</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/part-1-usage-exceeded-cover.webp</image:loc>
            <image:title>When Your Free Analytics Hit the Ceiling: Why I Left Umami Cloud</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/self-hosting-umami-part-1-usage-exceeded.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/self-hosting-umami-part-2</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/part-2-prisma-config-cover.webp</image:loc>
            <image:title>Deploying Umami on Vercel + Supabase: The Connection String Traps</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-umami/self-hosting-umami/supabase_connection_paths_diagram.svg</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-umami/self-hosting-umami/self-hosting-umami-part-2-supabase-connect-page.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/self-hosting-umami-part-2-local-login.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/self-hosting-umami-part-3</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/part-3-vercel-deploy-success-cover.webp</image:loc>
            <image:title>The Last Two Blockers: GeoIP Download and Manual Migration on Vercel</image:title>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/self-hosting-umami-part-3-migration-bypass-diagram.svg</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/self-hosting-umami-part-3-umami-dashboard.webp</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-umami/self-hosting-umami/self-hosting-umami-part-3-vercel-deploy-success.webp</image:loc>
        </image:image>
    </url>
    <url>
        <loc>https://kbmjj123.cc/self-hosting-umami-part-4</loc>
        <lastmod>2026-07-07T16:32:54Z</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-umami/self-hosting-umami/self-hosting-umami-part-4-gfw-domain-paths.svg</image:loc>
        </image:image>
        <image:image>
            <image:loc>https://kbmjj123.cc/images/startup-diary/self-hosting-umami/self-hosting-umami-part-4-china-data-restored.webp</image:loc>
        </image:image>
    </url>
</urlset>
<!-- XML Sitemap generated by @nuxtjs/sitemap v8.2.2 at 2026-07-07T16:33:32.678Z -->