<?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://insomnius.dev/</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/about</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/services</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/blog</loc>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/portfolio</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/returning-fast</loc>
    <lastmod>2026-05-04T17:01:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/returning-fast-background-jobs.webp</image:loc>
      <image:title>Removing Bottlenecks: Returning Fast</image:title>
      <image:caption>Why your /register endpoint shouldn</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/large-file-upload</loc>
    <lastmod>2026-05-04T17:01:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/large-file-upload-presigned-url.webp</image:loc>
      <image:title>Removing Bottlenecks: Uploading Large Files</image:title>
      <image:caption>Why streaming an 8 GB file through your app server is the wrong shape, and how presigned URLs and multipart uploads let the client send straight to the bucket.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/kafka-hot-partition</loc>
    <lastmod>2026-05-04T17:00:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/kafka-hot-partition-problem.webp</image:loc>
      <image:title>Removing Bottlenecks: The Hot Partition Problem</image:title>
      <image:caption>Your Kafka producer is at 100k msg/s. Your consumer fleet is at 12k. Adding more consumers does nothing — and your dashboard is trying to tell you why.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/n-plus-one-problem</loc>
    <lastmod>2026-05-01T17:00:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/n-plus-one-query-problem.webp</image:loc>
      <image:title>Removing Bottlenecks: The N+1 Problem</image:title>
      <image:caption>The single most common bottleneck in backend code, and three ways to remove it.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/low-level-go-architecture</loc>
    <lastmod>2026-04-11T17:00:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/go-perf-cover.webp</image:loc>
      <image:title>Under the Hood: Go Architecture &amp; Concurrency</image:title>
      <image:caption>A walk through the G-M-P scheduler, escape analysis, false sharing, and the GC — from the CPU up. With interactive demos and benchmarks you can run yourself.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/how-unicorn-scale-company-detect-millions-of-violated-ecommerce-product-every-day</loc>
    <lastmod>2025-04-01T17:00:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/unicorn.webp</image:loc>
      <image:title>How Unicorn Scale Company Detect Millions of Violated Ecommerce Product Everyday</image:title>
      <image:caption>How we built a scalable image detection system using perceptual hashing to catch policy-violating products—processing millions daily and catching manipulated images that traditional hashing misses.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/building-go-wallet-app-with-redis-like-single-threaded-event-loop</loc>
    <lastmod>2024-12-01T11:05:07.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/go-wallet-event-loop-cover.webp</image:loc>
      <image:title>Building a Go Wallet App with a Redis-like Single-Threaded Event Loop Concept</image:title>
      <image:caption>Build a concurrent wallet app in Go using Redis-inspired serial execution. Learn how a single-threaded event loop prevents lost updates and write skew while maintaining high throughput.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/securing-image-with-signed-url</loc>
    <lastmod>2024-11-16T17:00:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/securing-image-signed-url.webp</image:loc>
      <image:title>Securing Image With Signed URL in Golang</image:title>
      <image:caption>Secure your private images with signed URLs in Go. Learn how to generate time-limited, cryptographically signed access links that expire automatically—preventing unauthorized hotlinking and access.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/why-testing-matters</loc>
    <lastmod>2024-11-15T16:31:27.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/why-testing-matters-cover.webp</image:loc>
      <image:title>Why Testing Matters: A Software Engineering Perspective</image:title>
      <image:caption>A personal reflection on why testing isn</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/blog/golang-generic-for-value-to-pointer-function</loc>
    <lastmod>2023-12-22T17:00:00.000Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.85</priority>
    <image:image>
      <image:loc>https://insomnius.dev/resources/golang-generic-cover.webp</image:loc>
      <image:title>Golang Generic for Value to Pointer Function</image:title>
      <image:caption>Learn how Go generics eliminate repetitive helper functions. Create one reusable function that converts any value to a pointer—from strings to custom structs—replacing dozens of type-specific implementations.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://insomnius.dev/portfolio/goami</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/portfolio/rubicons</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/portfolio/altair</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/portfolio/kanjiverse</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://insomnius.dev/portfolio/lagoe</loc>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
</urlset>
