<?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" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.matthewswong.com/en/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/experience/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/experience/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/experience/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/experience/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/education/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/education/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/education/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/education/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/" />
<image:image>
<image:loc>https://www.matthewswong.com/AiFeeds.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/ReviewCI.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/jid-web.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/parcel-cirebon.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/tiktok-agency.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/shibui-lp.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/STADPASS%2520Project.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/Observer%2520KPU%2520Project.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/hackathons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/hackathons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/hackathons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/hackathons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/PWC-Hackathon.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/web3-training-documentation.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/AI-Hackathon1.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/Pwc-hackathon-2024.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/commsult-software-workshop.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/web3-networking-event.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/Blockchain1.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/Symposium1.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/case-studies/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/case-studies/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/case-studies/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/case-studies/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/architecture/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/contact/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/contact/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/contact/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/contact/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/biznet-gio-vs-idcloudhost-indonesia-cloud.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/coretax-djp-tax-integration-indonesia-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/coretax-djp-tax-integration-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/coretax-djp-tax-integration-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/coretax-djp-tax-integration-indonesia-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/coretax-djp-tax-integration-indonesia-developer.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/midtrans-payment-gateway-integration-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/midtrans-payment-gateway-integration-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/midtrans-payment-gateway-integration-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/midtrans-payment-gateway-integration-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/midtrans-payment-gateway-integration-nextjs.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nik-ktp-dukcapil-verification-api-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nik-ktp-dukcapil-verification-api-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nik-ktp-dukcapil-verification-api-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nik-ktp-dukcapil-verification-api-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nik-ktp-dukcapil-verification-api-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/qris-dynamic-payment-integration-nodejs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/qris-dynamic-payment-integration-nodejs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/qris-dynamic-payment-integration-nodejs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/qris-dynamic-payment-integration-nodejs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/qris-dynamic-payment-integration-nodejs.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/sewa-vps-murah-indonesia-panduan/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sewa-vps-murah-indonesia-panduan/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sewa-vps-murah-indonesia-panduan/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sewa-vps-murah-indonesia-panduan/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sewa-vps-murah-indonesia-panduan.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/tokopedia-shopee-marketplace-api-integration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tokopedia-shopee-marketplace-api-integration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tokopedia-shopee-marketplace-api-integration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tokopedia-shopee-marketplace-api-integration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tokopedia-shopee-marketplace-api-integration.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/whatsapp-business-api-integration-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/whatsapp-business-api-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/whatsapp-business-api-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/whatsapp-business-api-integration-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/whatsapp-business-api-integration-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/xendit-vs-midtrans-payment-gateway-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/xendit-vs-midtrans-payment-gateway-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/xendit-vs-midtrans-payment-gateway-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/xendit-vs-midtrans-payment-gateway-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/xendit-vs-midtrans-payment-gateway-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/sumopod-cheap-indonesian-vps-review/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sumopod-cheap-indonesian-vps-review/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sumopod-cheap-indonesian-vps-review/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sumopod-cheap-indonesian-vps-review/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sumopod-cheap-indonesian-vps-review.jpg</image:loc>
</image:image>
<lastmod>2026-07-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/argo-rollouts-progressive-delivery-canary/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/argo-rollouts-progressive-delivery-canary/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/argo-rollouts-progressive-delivery-canary/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/argo-rollouts-progressive-delivery-canary/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/argo-rollouts-progressive-delivery-canary.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/bun-vs-nodejs-production-runtime/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/bun-vs-nodejs-production-runtime/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/bun-vs-nodejs-production-runtime/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/bun-vs-nodejs-production-runtime/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/bun-vs-nodejs-production-runtime.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloudflare-tunnel-zero-trust-homelab/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-tunnel-zero-trust-homelab/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-tunnel-zero-trust-homelab/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-tunnel-zero-trust-homelab/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-tunnel-zero-trust-homelab.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/debouncing-throttling-react-hooks-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/debouncing-throttling-react-hooks-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/debouncing-throttling-react-hooks-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/debouncing-throttling-react-hooks-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/debouncing-throttling-react-hooks-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-bake-multi-platform-builds/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-bake-multi-platform-builds/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-bake-multi-platform-builds/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-bake-multi-platform-builds/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-bake-multi-platform-builds.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/drizzle-orm-vs-prisma-typescript/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/drizzle-orm-vs-prisma-typescript/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/drizzle-orm-vs-prisma-typescript/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/drizzle-orm-vs-prisma-typescript/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/drizzle-orm-vs-prisma-typescript.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ebpf-observability-cilium-tetragon/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ebpf-observability-cilium-tetragon/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ebpf-observability-cilium-tetragon/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ebpf-observability-cilium-tetragon/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ebpf-observability-cilium-tetragon.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/effect-ts-functional-error-handling/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/effect-ts-functional-error-handling/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/effect-ts-functional-error-handling/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/effect-ts-functional-error-handling/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/effect-ts-functional-error-handling.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/expand-contract-schema-migration-pattern/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/expand-contract-schema-migration-pattern/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/expand-contract-schema-migration-pattern/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/expand-contract-schema-migration-pattern/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/expand-contract-schema-migration-pattern.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/feature-flag-driven-trunk-based-development/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/feature-flag-driven-trunk-based-development/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/feature-flag-driven-trunk-based-development/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/feature-flag-driven-trunk-based-development/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/feature-flag-driven-trunk-based-development.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/github-actions-reusable-workflows-composite-actions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-reusable-workflows-composite-actions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-reusable-workflows-composite-actions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-reusable-workflows-composite-actions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-reusable-workflows-composite-actions.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/github-actions-runner-autoscaling-arc/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-runner-autoscaling-arc/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-runner-autoscaling-arc/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-runner-autoscaling-arc/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-runner-autoscaling-arc.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/grafana-alloy-opentelemetry-collector-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/grafana-alloy-opentelemetry-collector-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/grafana-alloy-opentelemetry-collector-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/grafana-alloy-opentelemetry-collector-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/grafana-alloy-opentelemetry-collector-migration.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/hono-edge-api-framework-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hono-edge-api-framework-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hono-edge-api-framework-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hono-edge-api-framework-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hono-edge-api-framework-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/idempotent-consumer-pattern-message-queue/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/idempotent-consumer-pattern-message-queue/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/idempotent-consumer-pattern-message-queue/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/idempotent-consumer-pattern-message-queue/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/idempotent-consumer-pattern-message-queue.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/incus-lxc-system-containers-vs-docker/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/incus-lxc-system-containers-vs-docker/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/incus-lxc-system-containers-vs-docker/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/incus-lxc-system-containers-vs-docker/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/incus-lxc-system-containers-vs-docker.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/kubernetes-gateway-api-vs-ingress/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-gateway-api-vs-ingress/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-gateway-api-vs-ingress/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-gateway-api-vs-ingress/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-gateway-api-vs-ingress.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nats-jetstream-vs-kafka-lightweight/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nats-jetstream-vs-kafka-lightweight/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nats-jetstream-vs-kafka-lightweight/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nats-jetstream-vs-kafka-lightweight/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nats-jetstream-vs-kafka-lightweight.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nestjs-request-scoped-providers-di-gotchas/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nestjs-request-scoped-providers-di-gotchas/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nestjs-request-scoped-providers-di-gotchas/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nestjs-request-scoped-providers-di-gotchas/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nestjs-request-scoped-providers-di-gotchas.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/openapi-typescript-end-to-end-types/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/openapi-typescript-end-to-end-types/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/openapi-typescript-end-to-end-types/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/openapi-typescript-end-to-end-types/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/openapi-typescript-end-to-end-types.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/opentelemetry-tracing-nestjs-auto-instrumentation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/opentelemetry-tracing-nestjs-auto-instrumentation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/opentelemetry-tracing-nestjs-auto-instrumentation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/opentelemetry-tracing-nestjs-auto-instrumentation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/opentelemetry-tracing-nestjs-auto-instrumentation.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/opentofu-vs-terraform-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/opentofu-vs-terraform-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/opentofu-vs-terraform-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/opentofu-vs-terraform-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/opentofu-vs-terraform-migration.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pgbouncer-connection-pooling-modes/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pgbouncer-connection-pooling-modes/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pgbouncer-connection-pooling-modes/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pgbouncer-connection-pooling-modes/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pgbouncer-connection-pooling-modes.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-explain-analyze-reading-query-plans/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-explain-analyze-reading-query-plans/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-explain-analyze-reading-query-plans/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-explain-analyze-reading-query-plans/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-explain-analyze-reading-query-plans.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-generated-columns-computed-data/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-generated-columns-computed-data/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-generated-columns-computed-data/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-generated-columns-computed-data/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-generated-columns-computed-data.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-logical-replication-zero-downtime-upgrade/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-logical-replication-zero-downtime-upgrade/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-logical-replication-zero-downtime-upgrade/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-logical-replication-zero-downtime-upgrade/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-logical-replication-zero-downtime-upgrade.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-skip-locked-job-queue/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-skip-locked-job-queue/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-skip-locked-job-queue/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-skip-locked-job-queue/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-skip-locked-job-queue.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/prometheus-remote-write-mimir-scaling/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prometheus-remote-write-mimir-scaling/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prometheus-remote-write-mimir-scaling/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prometheus-remote-write-mimir-scaling/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prometheus-remote-write-mimir-scaling.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/react-server-components-vs-islands-architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-server-components-vs-islands-architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-server-components-vs-islands-architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-server-components-vs-islands-architecture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-server-components-vs-islands-architecture.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/restic-vs-borg-encrypted-backups/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/restic-vs-borg-encrypted-backups/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/restic-vs-borg-encrypted-backups/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/restic-vs-borg-encrypted-backups/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/restic-vs-borg-encrypted-backups.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/server-sent-events-vs-websockets-realtime/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/server-sent-events-vs-websockets-realtime/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/server-sent-events-vs-websockets-realtime/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/server-sent-events-vs-websockets-realtime/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/server-sent-events-vs-websockets-realtime.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/sqlite-litestream-replication-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sqlite-litestream-replication-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sqlite-litestream-replication-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sqlite-litestream-replication-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sqlite-litestream-replication-production.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/systemd-hardening-sandboxing-services/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/systemd-hardening-sandboxing-services/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/systemd-hardening-sandboxing-services/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/systemd-hardening-sandboxing-services/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/systemd-hardening-sandboxing-services.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/tanstack-router-type-safe-routing/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tanstack-router-type-safe-routing/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tanstack-router-type-safe-routing/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tanstack-router-type-safe-routing/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tanstack-router-type-safe-routing.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/terraform-import-blocks-existing-infra/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/terraform-import-blocks-existing-infra/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/terraform-import-blocks-existing-infra/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/terraform-import-blocks-existing-infra/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/terraform-import-blocks-existing-infra.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/typescript-satisfies-operator-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/typescript-satisfies-operator-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/typescript-satisfies-operator-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/typescript-satisfies-operator-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/typescript-satisfies-operator-patterns.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/valibot-vs-zod-bundle-size/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/valibot-vs-zod-bundle-size/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/valibot-vs-zod-bundle-size/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/valibot-vs-zod-bundle-size/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/valibot-vs-zod-bundle-size.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/valkey-vs-redis-fork-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/valkey-vs-redis-fork-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/valkey-vs-redis-fork-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/valkey-vs-redis-fork-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/valkey-vs-redis-fork-migration.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/web-workers-offload-main-thread-react/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/web-workers-offload-main-thread-react/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/web-workers-offload-main-thread-react/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/web-workers-offload-main-thread-react/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/web-workers-offload-main-thread-react.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/zod-4-schema-validation-performance/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zod-4-schema-validation-performance/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zod-4-schema-validation-performance/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zod-4-schema-validation-performance/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zod-4-schema-validation-performance.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/branchid-scoping-idor-multi-branch-erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/branchid-scoping-idor-multi-branch-erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/branchid-scoping-idor-multi-branch-erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/branchid-scoping-idor-multi-branch-erp/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/branchid-scoping-idor-multi-branch-erp.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/building-pos-mobile-indonesian-sme-carwash/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-pos-mobile-indonesian-sme-carwash/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-pos-mobile-indonesian-sme-carwash/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-pos-mobile-indonesian-sme-carwash/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/building-pos-mobile-indonesian-sme-carwash.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/derived-cash-book-union-view-postgres/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/derived-cash-book-union-view-postgres/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/derived-cash-book-union-view-postgres/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/derived-cash-book-union-view-postgres/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/derived-cash-book-union-view-postgres.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/flutter-offline-outbox-sync-field-app/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/flutter-offline-outbox-sync-field-app/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/flutter-offline-outbox-sync-field-app/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/flutter-offline-outbox-sync-field-app/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/flutter-offline-outbox-sync-field-app.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/integer-money-idr-avoid-float-errors/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/integer-money-idr-avoid-float-errors/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/integer-money-idr-avoid-float-errors/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/integer-money-idr-avoid-float-errors/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/integer-money-idr-avoid-float-errors.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/kasbon-employee-cash-advance-payroll-deduction/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kasbon-employee-cash-advance-payroll-deduction/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kasbon-employee-cash-advance-payroll-deduction/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kasbon-employee-cash-advance-payroll-deduction/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kasbon-employee-cash-advance-payroll-deduction.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/mock-real-repository-adapter-offline-parity/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mock-real-repository-adapter-offline-parity/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mock-real-repository-adapter-offline-parity/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mock-real-repository-adapter-offline-parity/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mock-real-repository-adapter-offline-parity.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pos-cash-session-reconciliation-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pos-cash-session-reconciliation-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pos-cash-session-reconciliation-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pos-cash-session-reconciliation-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pos-cash-session-reconciliation-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pos-payment-settlement-idempotency-keys/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pos-payment-settlement-idempotency-keys/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pos-payment-settlement-idempotency-keys/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pos-payment-settlement-idempotency-keys/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pos-payment-settlement-idempotency-keys.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/stock-movement-source-of-truth-vs-cached-qty/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/stock-movement-source-of-truth-vs-cached-qty/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/stock-movement-source-of-truth-vs-cached-qty/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/stock-movement-source-of-truth-vs-cached-qty/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/stock-movement-source-of-truth-vs-cached-qty.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nestjs-terminus-health-checks/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nestjs-terminus-health-checks/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nestjs-terminus-health-checks/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nestjs-terminus-health-checks/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nestjs-terminus-health-checks.jpg</image:loc>
</image:image>
<lastmod>2026-06-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-daemon-socket-backend-control/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-daemon-socket-backend-control/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-daemon-socket-backend-control/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-daemon-socket-backend-control/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-daemon-socket-backend-control.jpg</image:loc>
</image:image>
<lastmod>2026-06-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nestjs-custom-decorators-metadata-reflection/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nestjs-custom-decorators-metadata-reflection/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nestjs-custom-decorators-metadata-reflection/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nestjs-custom-decorators-metadata-reflection/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nestjs-custom-decorators-metadata-reflection.jpg</image:loc>
</image:image>
<lastmod>2026-06-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-buildkit-cache-mounts-faster-builds/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-buildkit-cache-mounts-faster-builds/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-buildkit-cache-mounts-faster-builds/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-buildkit-cache-mounts-faster-builds/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-buildkit-cache-mounts-faster-builds.jpg</image:loc>
</image:image>
<lastmod>2026-06-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/testing-nestjs-applications-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/testing-nestjs-applications-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/testing-nestjs-applications-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/testing-nestjs-applications-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/testing-nestjs-applications-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-swarm-load-testing-replicas-throughput/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-swarm-load-testing-replicas-throughput/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-swarm-load-testing-replicas-throughput/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-swarm-load-testing-replicas-throughput/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-swarm-load-testing-replicas-throughput.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-swarm-custom-autoscaler-cpu/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-swarm-custom-autoscaler-cpu/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-swarm-custom-autoscaler-cpu/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-swarm-custom-autoscaler-cpu/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-swarm-custom-autoscaler-cpu.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-row-lock-bottleneck-prometheus-influxdb/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-row-lock-bottleneck-prometheus-influxdb/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-row-lock-bottleneck-prometheus-influxdb/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-row-lock-bottleneck-prometheus-influxdb/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-row-lock-bottleneck-prometheus-influxdb.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/slo-quality-gate-bitbucket-pipeline/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/slo-quality-gate-bitbucket-pipeline/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/slo-quality-gate-bitbucket-pipeline/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/slo-quality-gate-bitbucket-pipeline/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/slo-quality-gate-bitbucket-pipeline.jpg</image:loc>
</image:image>
<lastmod>2026-07-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/dokploy-self-hosted-paas-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/dokploy-self-hosted-paas-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/dokploy-self-hosted-paas-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/dokploy-self-hosted-paas-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/dokploy-self-hosted-paas-vps.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/coolify-vs-dokploy-self-hosted-paas/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/coolify-vs-dokploy-self-hosted-paas/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/coolify-vs-dokploy-self-hosted-paas/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/coolify-vs-dokploy-self-hosted-paas/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/coolify-vs-dokploy-self-hosted-paas.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-partial-prerendering-ppr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-partial-prerendering-ppr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-partial-prerendering-ppr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-partial-prerendering-ppr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-partial-prerendering-ppr.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/server-sent-events-nextjs-streaming/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/server-sent-events-nextjs-streaming/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/server-sent-events-nextjs-streaming/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/server-sent-events-nextjs-streaming/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/server-sent-events-nextjs-streaming.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/react-19-use-hook-actions-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-19-use-hook-actions-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-19-use-hook-actions-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-19-use-hook-actions-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-19-use-hook-actions-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/tanstack-query-nextjs-app-router/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tanstack-query-nextjs-app-router/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tanstack-query-nextjs-app-router/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tanstack-query-nextjs-app-router/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tanstack-query-nextjs-app-router.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/shadcn-ui-component-architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/shadcn-ui-component-architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/shadcn-ui-component-architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/shadcn-ui-component-architecture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/shadcn-ui-component-architecture.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/web-vitals-inp-optimization-2026/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/web-vitals-inp-optimization-2026/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/web-vitals-inp-optimization-2026/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/web-vitals-inp-optimization-2026/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/web-vitals-inp-optimization-2026.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-streaming-suspense-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-streaming-suspense-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-streaming-suspense-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-streaming-suspense-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-streaming-suspense-patterns.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/zustand-vs-redux-toolkit-state/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zustand-vs-redux-toolkit-state/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zustand-vs-redux-toolkit-state/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zustand-vs-redux-toolkit-state/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zustand-vs-redux-toolkit-state.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/react-hook-form-zod-type-safe-forms/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-hook-form-zod-type-safe-forms/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-hook-form-zod-type-safe-forms/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-hook-form-zod-type-safe-forms/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-hook-form-zod-type-safe-forms.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-dynamic-og-image-generation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-dynamic-og-image-generation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-dynamic-og-image-generation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-dynamic-og-image-generation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-dynamic-og-image-generation.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/kamal-2-docker-deployment-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kamal-2-docker-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kamal-2-docker-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kamal-2-docker-deployment-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kamal-2-docker-deployment-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-fixed-asset-depreciation-module/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-fixed-asset-depreciation-module/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-fixed-asset-depreciation-module/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-fixed-asset-depreciation-module/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-fixed-asset-depreciation-module.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-manufacturing-bom-mrp-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-manufacturing-bom-mrp-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-manufacturing-bom-mrp-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-manufacturing-bom-mrp-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-manufacturing-bom-mrp-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-general-ledger-double-entry-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-general-ledger-double-entry-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-general-ledger-double-entry-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-general-ledger-double-entry-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-general-ledger-double-entry-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-batch-serial-number-traceability/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-batch-serial-number-traceability/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-batch-serial-number-traceability/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-batch-serial-number-traceability/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-batch-serial-number-traceability.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-e-faktur-tax-integration-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-e-faktur-tax-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-e-faktur-tax-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-e-faktur-tax-integration-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-e-faktur-tax-integration-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-consignment-inventory-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-consignment-inventory-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-consignment-inventory-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-consignment-inventory-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-consignment-inventory-workflow.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-multi-company-intercompany-transactions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-multi-company-intercompany-transactions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-multi-company-intercompany-transactions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-multi-company-intercompany-transactions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-multi-company-intercompany-transactions.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-quotation-to-cash-sales-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-quotation-to-cash-sales-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-quotation-to-cash-sales-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-quotation-to-cash-sales-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-quotation-to-cash-sales-workflow.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-landed-cost-import-calculation-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-landed-cost-import-calculation-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-landed-cost-import-calculation-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-landed-cost-import-calculation-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-landed-cost-import-calculation-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-stock-opname-cycle-count-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-stock-opname-cycle-count-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/github-actions-oidc-keyless-cloud-auth/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-oidc-keyless-cloud-auth/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-oidc-keyless-cloud-auth/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-oidc-keyless-cloud-auth/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-oidc-keyless-cloud-auth.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/llm-structured-output-json-schema/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-structured-output-json-schema/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-structured-output-json-schema/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-structured-output-json-schema/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-structured-output-json-schema.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/llm-evaluation-testing-ci-pipeline/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-evaluation-testing-ci-pipeline/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-evaluation-testing-ci-pipeline/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-evaluation-testing-ci-pipeline/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-evaluation-testing-ci-pipeline.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/embedding-model-selection-benchmark/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/embedding-model-selection-benchmark/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/embedding-model-selection-benchmark/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/embedding-model-selection-benchmark/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/embedding-model-selection-benchmark.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/hybrid-search-reranking-rag/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hybrid-search-reranking-rag/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hybrid-search-reranking-rag/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hybrid-search-reranking-rag/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hybrid-search-reranking-rag.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/claude-agent-sdk-building-agents/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-agent-sdk-building-agents/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-agent-sdk-building-agents/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-agent-sdk-building-agents/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-agent-sdk-building-agents.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/semantic-caching-llm-cost-reduction/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/semantic-caching-llm-cost-reduction/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/semantic-caching-llm-cost-reduction/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/semantic-caching-llm-cost-reduction/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/semantic-caching-llm-cost-reduction.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/multimodal-llm-document-data-extraction/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/multimodal-llm-document-data-extraction/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/multimodal-llm-document-data-extraction/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/multimodal-llm-document-data-extraction/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/multimodal-llm-document-data-extraction.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/groq-nextjs-streaming-chatbot/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/groq-nextjs-streaming-chatbot/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/groq-nextjs-streaming-chatbot/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/groq-nextjs-streaming-chatbot/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/groq-nextjs-streaming-chatbot.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/transactional-outbox-pattern-postgres/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/transactional-outbox-pattern-postgres/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/transactional-outbox-pattern-postgres/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/transactional-outbox-pattern-postgres/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/transactional-outbox-pattern-postgres.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/saga-pattern-distributed-transactions-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/saga-pattern-distributed-transactions-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/saga-pattern-distributed-transactions-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/saga-pattern-distributed-transactions-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/saga-pattern-distributed-transactions-nestjs.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-distroless-image-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-distroless-image-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-distroless-image-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-distroless-image-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-distroless-image-optimization.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-row-level-security-multitenant/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-row-level-security-multitenant/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-row-level-security-multitenant/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-row-level-security-multitenant/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-row-level-security-multitenant.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/zero-downtime-database-migrations-prisma/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zero-downtime-database-migrations-prisma/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zero-downtime-database-migrations-prisma/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zero-downtime-database-migrations-prisma/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zero-downtime-database-migrations-prisma.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/feature-flags-nestjs-progressive-rollout/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/feature-flags-nestjs-progressive-rollout/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/feature-flags-nestjs-progressive-rollout/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/feature-flags-nestjs-progressive-rollout/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/feature-flags-nestjs-progressive-rollout.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/webhooks-reliable-delivery-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/webhooks-reliable-delivery-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/webhooks-reliable-delivery-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/webhooks-reliable-delivery-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/webhooks-reliable-delivery-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/passkeys-webauthn-nextjs-authentication/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/passkeys-webauthn-nextjs-authentication/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/passkeys-webauthn-nextjs-authentication/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/passkeys-webauthn-nextjs-authentication/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/passkeys-webauthn-nextjs-authentication.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/software-supply-chain-sbom-sigstore/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/software-supply-chain-sbom-sigstore/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/software-supply-chain-sbom-sigstore/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/software-supply-chain-sbom-sigstore/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/software-supply-chain-sbom-sigstore.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/automated-secrets-rotation-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/automated-secrets-rotation-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/automated-secrets-rotation-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/automated-secrets-rotation-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/automated-secrets-rotation-strategy.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/sops-age-encrypted-secrets-git/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sops-age-encrypted-secrets-git/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sops-age-encrypted-secrets-git/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sops-age-encrypted-secrets-git/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sops-age-encrypted-secrets-git.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/building-in-public-indonesia-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-in-public-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-in-public-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-in-public-indonesia-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/building-in-public-indonesia-developer.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/engineering-blog-seo-growth-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/engineering-blog-seo-growth-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/engineering-blog-seo-growth-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/engineering-blog-seo-growth-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/engineering-blog-seo-growth-developer.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/prometheus-recording-rules-cardinality/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prometheus-recording-rules-cardinality/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prometheus-recording-rules-cardinality/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prometheus-recording-rules-cardinality/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prometheus-recording-rules-cardinality.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/victoriametrics-vs-prometheus-long-term/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/victoriametrics-vs-prometheus-long-term/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/victoriametrics-vs-prometheus-long-term/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/victoriametrics-vs-prometheus-long-term/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/victoriametrics-vs-prometheus-long-term.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/renovate-automated-dependency-updates/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/renovate-automated-dependency-updates/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/renovate-automated-dependency-updates/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/renovate-automated-dependency-updates/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/renovate-automated-dependency-updates.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/tailscale-mesh-vpn-self-hosted/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tailscale-mesh-vpn-self-hosted/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tailscale-mesh-vpn-self-hosted/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tailscale-mesh-vpn-self-hosted/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tailscale-mesh-vpn-self-hosted.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/opentelemetry-collector-pipeline-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/opentelemetry-collector-pipeline-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/opentelemetry-collector-pipeline-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/opentelemetry-collector-pipeline-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/opentelemetry-collector-pipeline-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/hierarchical-approval-npm-library/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hierarchical-approval-npm-library/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hierarchical-approval-npm-library/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hierarchical-approval-npm-library/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hierarchical-approval-npm-library.jpg</image:loc>
</image:image>
<lastmod>2026-06-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-compose-watch-local-dev/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-compose-watch-local-dev/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-compose-watch-local-dev/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-compose-watch-local-dev/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-compose-watch-local-dev.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/caddy-vs-nginx-automatic-https/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/caddy-vs-nginx-automatic-https/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/caddy-vs-nginx-automatic-https/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/caddy-vs-nginx-automatic-https/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/caddy-vs-nginx-automatic-https.jpg</image:loc>
</image:image>
<lastmod>2026-04-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/github-actions-caching-strategies/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-caching-strategies/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-caching-strategies/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-caching-strategies/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-caching-strategies.jpg</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/self-hosted-uptime-kuma-monitoring/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/self-hosted-uptime-kuma-monitoring/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/self-hosted-uptime-kuma-monitoring/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/self-hosted-uptime-kuma-monitoring/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/self-hosted-uptime-kuma-monitoring.jpg</image:loc>
</image:image>
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/blue-green-vs-canary-on-budget/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/blue-green-vs-canary-on-budget/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/blue-green-vs-canary-on-budget/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/blue-green-vs-canary-on-budget/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/blue-green-vs-canary-on-budget.jpg</image:loc>
</image:image>
<lastmod>2026-05-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/linux-cgroups-container-resource-limits/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/linux-cgroups-container-resource-limits/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/linux-cgroups-container-resource-limits/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/linux-cgroups-container-resource-limits/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/linux-cgroups-container-resource-limits.jpg</image:loc>
</image:image>
<lastmod>2026-05-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/backup-3-2-1-strategy-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/backup-3-2-1-strategy-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/backup-3-2-1-strategy-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/backup-3-2-1-strategy-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/backup-3-2-1-strategy-vps.jpg</image:loc>
</image:image>
<lastmod>2026-05-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/event-driven-architecture-when-not-to/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/event-driven-architecture-when-not-to/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/event-driven-architecture-when-not-to/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/event-driven-architecture-when-not-to/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/event-driven-architecture-when-not-to.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgres-indexing-practical-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-indexing-practical-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-indexing-practical-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-indexing-practical-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-indexing-practical-guide.jpg</image:loc>
</image:image>
<lastmod>2026-04-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/idempotency-keys-api-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/idempotency-keys-api-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/idempotency-keys-api-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/idempotency-keys-api-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/idempotency-keys-api-design.jpg</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/background-jobs-bullmq-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/background-jobs-bullmq-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/background-jobs-bullmq-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/background-jobs-bullmq-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/background-jobs-bullmq-nestjs.jpg</image:loc>
</image:image>
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/api-versioning-strategies-rest/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-versioning-strategies-rest/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-versioning-strategies-rest/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-versioning-strategies-rest/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-versioning-strategies-rest.jpg</image:loc>
</image:image>
<lastmod>2026-04-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-inventory-management-module-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-inventory-management-module-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-inventory-management-module-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-inventory-management-module-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-inventory-management-module-design.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-multi-currency-accounting/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-multi-currency-accounting/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-multi-currency-accounting/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-multi-currency-accounting/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-multi-currency-accounting.jpg</image:loc>
</image:image>
<lastmod>2026-04-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-approval-matrix-configuration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-approval-matrix-configuration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-approval-matrix-configuration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-approval-matrix-configuration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-approval-matrix-configuration.jpg</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-reporting-dashboard-architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-reporting-dashboard-architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-reporting-dashboard-architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-reporting-dashboard-architecture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-reporting-dashboard-architecture.jpg</image:loc>
</image:image>
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-user-training-adoption-playbook/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-user-training-adoption-playbook/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-user-training-adoption-playbook/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-user-training-adoption-playbook/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-user-training-adoption-playbook.jpg</image:loc>
</image:image>
<lastmod>2026-04-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/spreadsheet-to-erp-decision-framework/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/spreadsheet-to-erp-decision-framework/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/spreadsheet-to-erp-decision-framework/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/spreadsheet-to-erp-decision-framework/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/spreadsheet-to-erp-decision-framework.jpg</image:loc>
</image:image>
<lastmod>2026-05-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-procurement-purchase-order-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-procurement-purchase-order-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-procurement-purchase-order-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-procurement-purchase-order-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-procurement-purchase-order-workflow.jpg</image:loc>
</image:image>
<lastmod>2026-05-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-server-actions-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-server-actions-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-server-actions-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-server-actions-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-server-actions-production.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/react-server-components-mental-model/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-server-components-mental-model/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-server-components-mental-model/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-server-components-mental-model/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-server-components-mental-model.jpg</image:loc>
</image:image>
<lastmod>2026-04-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/self-hosting-web-fonts-performance/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/self-hosting-web-fonts-performance/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/self-hosting-web-fonts-performance/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/self-hosting-web-fonts-performance/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/self-hosting-web-fonts-performance.jpg</image:loc>
</image:image>
<lastmod>2026-04-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/design-tokens-tailwind-theme/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/design-tokens-tailwind-theme/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/design-tokens-tailwind-theme/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/design-tokens-tailwind-theme/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/design-tokens-tailwind-theme.jpg</image:loc>
</image:image>
<lastmod>2026-04-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-image-optimization-internals/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-image-optimization-internals/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-image-optimization-internals/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-image-optimization-internals/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-image-optimization-internals.jpg</image:loc>
</image:image>
<lastmod>2026-04-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/technical-seo-checklist-developers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/technical-seo-checklist-developers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/technical-seo-checklist-developers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/technical-seo-checklist-developers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/technical-seo-checklist-developers.jpg</image:loc>
</image:image>
<lastmod>2026-05-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/claude-fable-5-developers-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-fable-5-developers-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-fable-5-developers-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-fable-5-developers-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-fable-5-developers-guide.jpg</image:loc>
</image:image>
<lastmod>2026-06-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/llm-prompt-caching-cost-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-prompt-caching-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-prompt-caching-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-prompt-caching-cost-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-prompt-caching-cost-optimization.jpg</image:loc>
</image:image>
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/rag-vs-fine-tuning-decision/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/rag-vs-fine-tuning-decision/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/rag-vs-fine-tuning-decision/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/rag-vs-fine-tuning-decision/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/rag-vs-fine-tuning-decision.jpg</image:loc>
</image:image>
<lastmod>2026-04-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-agents-production-lessons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-agents-production-lessons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-agents-production-lessons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-agents-production-lessons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-agents-production-lessons.jpg</image:loc>
</image:image>
<lastmod>2026-05-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/mcp-model-context-protocol-explained/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mcp-model-context-protocol-explained/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mcp-model-context-protocol-explained/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mcp-model-context-protocol-explained/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mcp-model-context-protocol-explained.jpg</image:loc>
</image:image>
<lastmod>2026-04-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pgvector-semantic-search-postgres/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pgvector-semantic-search-postgres/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pgvector-semantic-search-postgres/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pgvector-semantic-search-postgres/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pgvector-semantic-search-postgres.jpg</image:loc>
</image:image>
<lastmod>2026-05-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloudflare-workers-vs-vercel-edge/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-workers-vs-vercel-edge/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-workers-vs-vercel-edge/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-workers-vs-vercel-edge/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-workers-vs-vercel-edge.jpg</image:loc>
</image:image>
<lastmod>2026-04-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/claude-opus-4-7-whats-new/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-opus-4-7-whats-new/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-opus-4-7-whats-new/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-opus-4-7-whats-new/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-opus-4-7.png</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/loki-prometheus-observability/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/loki-prometheus-observability/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/loki-prometheus-observability/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/loki-prometheus-observability/" />
<image:image>
<image:loc>https://www.matthewswong.com/monitoring-blog.jpg</image:loc>
</image:image>
<lastmod>2025-01-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/building-saas-ai-gymbro/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-saas-ai-gymbro/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-saas-ai-gymbro/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-saas-ai-gymbro/" />
<image:image>
<image:loc>https://www.matthewswong.com/my-product.jpg</image:loc>
</image:image>
<lastmod>2024-09-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/life-at-swiss-german-university/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/life-at-swiss-german-university/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/life-at-swiss-german-university/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/life-at-swiss-german-university/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/sgu-location.webp</image:loc>
</image:image>
<lastmod>2024-06-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pwc-capture-the-flag/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pwc-capture-the-flag/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pwc-capture-the-flag/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pwc-capture-the-flag/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/PWC-Hackathon.jpg</image:loc>
</image:image>
<lastmod>2024-08-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ci-cd-pipeline-github-actions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ci-cd-pipeline-github-actions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ci-cd-pipeline-github-actions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ci-cd-pipeline-github-actions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ci-cd-github-actions.jpg</image:loc>
</image:image>
<lastmod>2024-07-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/kubernetes-deployment-strategies/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-deployment-strategies/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-deployment-strategies/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-deployment-strategies/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-deployment.jpg</image:loc>
</image:image>
<lastmod>2024-08-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-containerization-best-practices/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-containerization-best-practices/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-containerization-best-practices/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-containerization-best-practices/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-best-practices.jpg</image:loc>
</image:image>
<lastmod>2024-08-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-swarm-orchestration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-swarm-orchestration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-swarm-orchestration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-swarm-orchestration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-swarm.jpg</image:loc>
</image:image>
<lastmod>2024-09-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ansible-automation-infrastructure/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ansible-automation-infrastructure/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ansible-automation-infrastructure/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ansible-automation-infrastructure/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ansible-automation.jpg</image:loc>
</image:image>
<lastmod>2024-09-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/infrastructure-as-code-terraform/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/infrastructure-as-code-terraform/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/infrastructure-as-code-terraform/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/infrastructure-as-code-terraform/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/terraform-iac.jpg</image:loc>
</image:image>
<lastmod>2024-10-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/gitops-argocd-flux/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/gitops-argocd-flux/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/gitops-argocd-flux/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/gitops-argocd-flux/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/gitops-argocd.jpg</image:loc>
</image:image>
<lastmod>2024-10-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/site-reliability-engineering-sre/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/site-reliability-engineering-sre/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/site-reliability-engineering-sre/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/site-reliability-engineering-sre/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sre-reliability.jpg</image:loc>
</image:image>
<lastmod>2024-11-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/devsecops-security-pipeline/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/devsecops-security-pipeline/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/devsecops-security-pipeline/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/devsecops-security-pipeline/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/devsecops.jpg</image:loc>
</image:image>
<lastmod>2024-11-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloudflare-r2-gcs-egress/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-r2-gcs-egress/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-r2-gcs-egress/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-r2-gcs-egress/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-r2.jpg</image:loc>
</image:image>
<lastmod>2024-12-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/clean-code-principles/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/clean-code-principles/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/clean-code-principles/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/clean-code-principles/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/clean-code.jpg</image:loc>
</image:image>
<lastmod>2024-12-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/microservices-vs-monolith/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/microservices-vs-monolith/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/microservices-vs-monolith/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/microservices-vs-monolith/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/microservices.jpg</image:loc>
</image:image>
<lastmod>2025-01-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/api-design-rest-graphql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-design-rest-graphql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-design-rest-graphql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-design-rest-graphql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-rest-graphql.jpg</image:loc>
</image:image>
<lastmod>2025-01-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/test-driven-development-tdd/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/test-driven-development-tdd/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/test-driven-development-tdd/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/test-driven-development-tdd/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/test-driven-dev.jpg</image:loc>
</image:image>
<lastmod>2025-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/software-architecture-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/software-architecture-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/software-architecture-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/software-architecture-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/software-architecture.jpg</image:loc>
</image:image>
<lastmod>2025-02-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/database-optimization-postgresql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/database-optimization-postgresql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/database-optimization-postgresql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/database-optimization-postgresql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-optimization.jpg</image:loc>
</image:image>
<lastmod>2025-03-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-performance-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-performance-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-performance-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-performance-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-performance.jpg</image:loc>
</image:image>
<lastmod>2025-03-18T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-implementation-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-implementation-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-implementation-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-implementation-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-implementation.jpg</image:loc>
</image:image>
<lastmod>2025-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-digital-transformation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-digital-transformation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-digital-transformation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-digital-transformation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-digital-transform.jpg</image:loc>
</image:image>
<lastmod>2025-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-integration-api-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-integration-api-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-integration-api-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-integration-api-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-integration-api.jpg</image:loc>
</image:image>
<lastmod>2025-05-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-customization-vs-configuration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-customization-vs-configuration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-customization-vs-configuration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-customization-vs-configuration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-customization.jpg</image:loc>
</image:image>
<lastmod>2025-05-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-data-migration-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-data-migration-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-data-migration-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-data-migration-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-data-migration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloudflare-email-inbound-smtp2go/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-email-inbound-smtp2go/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-email-inbound-smtp2go/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-email-inbound-smtp2go/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-email.jpg</image:loc>
</image:image>
<lastmod>2025-06-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pusat-data-nasional-pdn-cloud-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pusat-data-nasional-pdn-cloud-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pusat-data-nasional-pdn-cloud-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pusat-data-nasional-pdn-cloud-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pusat-data-nasional-pdn-cloud-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2025-10-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/azure-indonesia-central-region-deployment-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/azure-indonesia-central-region-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/azure-indonesia-central-region-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/azure-indonesia-central-region-deployment-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/azure-indonesia-central-region-deployment-guide.jpg</image:loc>
</image:image>
<lastmod>2025-11-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/indonesia-open-banking-snap-api-qris-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/indonesia-open-banking-snap-api-qris-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/indonesia-open-banking-snap-api-qris-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/indonesia-open-banking-snap-api-qris-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/indonesia-open-banking-snap-api-qris-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2025-12-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/uu-pdp-compliance-developer-guide-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/uu-pdp-compliance-developer-guide-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/uu-pdp-compliance-developer-guide-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/uu-pdp-compliance-developer-guide-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/uu-pdp-compliance-developer-guide-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-01-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/finops-cloud-cost-optimization-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/finops-cloud-cost-optimization-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/finops-cloud-cost-optimization-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/finops-cloud-cost-optimization-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/finops-cloud-cost-optimization-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-02-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/odoo-erp-custom-module-development-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/odoo-erp-custom-module-development-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/odoo-erp-custom-module-development-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/odoo-erp-custom-module-development-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/odoo-erp-custom-module-development-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/building-production-rag-llm-applications/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-production-rag-llm-applications/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-production-rag-llm-applications/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-production-rag-llm-applications/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/building-production-rag-llm-applications.jpg</image:loc>
</image:image>
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/kubernetes-k3s-production-lightweight-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-k3s-production-lightweight-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-k3s-production-lightweight-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-k3s-production-lightweight-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-k3s-production-lightweight-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-03-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/platform-engineering-internal-developer-platform/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/platform-engineering-internal-developer-platform/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/platform-engineering-internal-developer-platform/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/platform-engineering-internal-developer-platform/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/platform-engineering-internal-developer-platform.jpg</image:loc>
</image:image>
<lastmod>2026-04-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/zero-trust-security-architecture-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zero-trust-security-architecture-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zero-trust-security-architecture-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zero-trust-security-architecture-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zero-trust-security-architecture-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-05-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/production-landing-page-core-web-vitals/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/production-landing-page-core-web-vitals/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/production-landing-page-core-web-vitals/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/production-landing-page-core-web-vitals/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/production-landing-page-core-web-vitals.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/typescript-project-structure-real-world/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/typescript-project-structure-real-world/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/typescript-project-structure-real-world/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/typescript-project-structure-real-world/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/typescript-project-structure-real-world.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/figma-to-nextjs-component-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/figma-to-nextjs-component-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/figma-to-nextjs-component-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/figma-to-nextjs-component-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/figma-to-nextjs-component-workflow.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-i18n-next-intl-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-i18n-next-intl-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-i18n-next-intl-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-i18n-next-intl-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-i18n-next-intl-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/balancing-devops-erp-webdev-engineer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/balancing-devops-erp-webdev-engineer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/balancing-devops-erp-webdev-engineer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/balancing-devops-erp-webdev-engineer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/balancing-devops-erp-webdev-engineer.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/hermes-ai-agent-nousresearch-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hermes-ai-agent-nousresearch-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hermes-ai-agent-nousresearch-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hermes-ai-agent-nousresearch-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hermes-ai-agent-nousresearch-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/google-cloud-vs-digital-ocean/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/google-cloud-vs-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/google-cloud-vs-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/google-cloud-vs-digital-ocean/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/google-cloud-vs-digital-ocean.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/grafana-prometheus-monitoring-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/grafana-prometheus-monitoring-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/grafana-prometheus-monitoring-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/grafana-prometheus-monitoring-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/grafana-prometheus-monitoring-vps.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/zero-downtime-nginx-blue-green-deploy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zero-downtime-nginx-blue-green-deploy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zero-downtime-nginx-blue-green-deploy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zero-downtime-nginx-blue-green-deploy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zero-downtime-nginx-blue-green-deploy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/automate-ssl-certbot-nginx/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/automate-ssl-certbot-nginx/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/automate-ssl-certbot-nginx/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/automate-ssl-certbot-nginx/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/automate-ssl-certbot-nginx.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/self-hosted-observability-digital-ocean/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/self-hosted-observability-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/self-hosted-observability-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/self-hosted-observability-digital-ocean/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/self-hosted-observability-digital-ocean.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/kubernetes-solo-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-solo-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-solo-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-solo-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-solo-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-workflow-every-project/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-workflow-every-project/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-workflow-every-project/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-workflow-every-project/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-workflow-every-project.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/google-cloud-managed-services-vs-raw-compute/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/google-cloud-managed-services-vs-raw-compute/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/google-cloud-managed-services-vs-raw-compute/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/google-cloud-managed-services-vs-raw-compute/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/google-cloud-managed-services-vs-raw-compute.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-hr-leave-approval-flow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-hr-leave-approval-flow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-hr-leave-approval-flow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-hr-leave-approval-flow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-hr-leave-approval-flow.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/accounts-payable-multi-approval-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/accounts-payable-multi-approval-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/accounts-payable-multi-approval-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/accounts-payable-multi-approval-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/accounts-payable-multi-approval-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-invoice-pdf-generation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-invoice-pdf-generation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-invoice-pdf-generation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-invoice-pdf-generation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-invoice-pdf-generation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-email-automation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-email-automation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-email-automation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-email-automation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-email-automation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/why-erp-fails-indonesian-businesses/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/why-erp-fails-indonesian-businesses/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/why-erp-fails-indonesian-businesses/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/why-erp-fails-indonesian-businesses/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/why-erp-fails-indonesian-businesses.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/accounts-receivable-automation-erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/accounts-receivable-automation-erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/accounts-receivable-automation-erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/accounts-receivable-automation-erp/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/accounts-receivable-automation-erp.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/workflow-engine-react-nestjs-postgresql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/workflow-engine-react-nestjs-postgresql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/workflow-engine-react-nestjs-postgresql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/workflow-engine-react-nestjs-postgresql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/workflow-engine-react-nestjs-postgresql.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/excel-to-custom-erp-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/excel-to-custom-erp-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/excel-to-custom-erp-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/excel-to-custom-erp-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/excel-to-custom-erp-migration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-role-based-access-control/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-role-based-access-control/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-role-based-access-control/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-role-based-access-control/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-role-based-access-control.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-audit-trail-activity-log/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-audit-trail-activity-log/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-audit-trail-activity-log/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-audit-trail-activity-log/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-audit-trail-activity-log.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-project-structure-scalable/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-project-structure-scalable/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-project-structure-scalable/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-project-structure-scalable/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-project-structure-scalable.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/build-saas-30-days-nextjs-tailwind/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/build-saas-30-days-nextjs-tailwind/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/build-saas-30-days-nextjs-tailwind/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/build-saas-30-days-nextjs-tailwind/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/build-saas-30-days-nextjs-tailwind.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/type-safe-api-nestjs-prisma/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/type-safe-api-nestjs-prisma/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/type-safe-api-nestjs-prisma/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/type-safe-api-nestjs-prisma/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/type-safe-api-nestjs-prisma.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/seo-first-nextjs-checklist/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/seo-first-nextjs-checklist/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/seo-first-nextjs-checklist/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/seo-first-nextjs-checklist/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/seo-first-nextjs-checklist.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/react-query-vs-swr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-query-vs-swr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-query-vs-swr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-query-vs-swr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-query-vs-swr.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/mcp-auth-cerbos-authorization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mcp-auth-cerbos-authorization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mcp-auth-cerbos-authorization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mcp-auth-cerbos-authorization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mcp-auth-cerbos-authorization.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/real-user-monitoring-web-performance/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/real-user-monitoring-web-performance/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/real-user-monitoring-web-performance/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/real-user-monitoring-web-performance/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/real-user-monitoring-web-performance.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/image-optimization-nextjs-webp-avif/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/image-optimization-nextjs-webp-avif/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/image-optimization-nextjs-webp-avif/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/image-optimization-nextjs-webp-avif/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/image-optimization-nextjs-webp-avif.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-caching-isr-ssr-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-caching-isr-ssr-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-caching-isr-ssr-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-caching-isr-ssr-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-caching-isr-ssr-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/database-connection-pooling-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/database-connection-pooling-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/database-connection-pooling-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/database-connection-pooling-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/database-connection-pooling-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgresql-full-text-search-no-elasticsearch/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-full-text-search-no-elasticsearch/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-full-text-search-no-elasticsearch/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-full-text-search-no-elasticsearch/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-full-text-search-no-elasticsearch.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cursor-vs-offset-pagination/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cursor-vs-offset-pagination/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cursor-vs-offset-pagination/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cursor-vs-offset-pagination/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cursor-vs-offset-pagination.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/api-versioning-nestjs-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-versioning-nestjs-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-versioning-nestjs-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-versioning-nestjs-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-versioning-nestjs-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/graphql-vs-rest-2025/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/graphql-vs-rest-2025/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/graphql-vs-rest-2025/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/graphql-vs-rest-2025/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/graphql-vs-rest-2025.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/openapi-swagger-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/openapi-swagger-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/openapi-swagger-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/openapi-swagger-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/openapi-swagger-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/environment-variables-secrets-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/environment-variables-secrets-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/environment-variables-secrets-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/environment-variables-secrets-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/environment-variables-secrets-nextjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/e2e-testing-playwright-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/e2e-testing-playwright-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/e2e-testing-playwright-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/e2e-testing-playwright-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/e2e-testing-playwright-nextjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/accessibility-audit-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/accessibility-audit-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/accessibility-audit-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/accessibility-audit-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/accessibility-audit-nextjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/npm-dependency-management-audit/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/npm-dependency-management-audit/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/npm-dependency-management-audit/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/npm-dependency-management-audit/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/npm-dependency-management-audit.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/security-headers-nextjs-configuration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/security-headers-nextjs-configuration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/security-headers-nextjs-configuration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/security-headers-nextjs-configuration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/security-headers-nextjs-configuration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/dark-mode-nextjs-system-aware/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/dark-mode-nextjs-system-aware/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/dark-mode-nextjs-system-aware/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/dark-mode-nextjs-system-aware/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/dark-mode-nextjs-system-aware.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/event-driven-kafka-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/event-driven-kafka-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/event-driven-kafka-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/event-driven-kafka-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/event-driven-kafka-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/microservices-grpc-vs-rest-internal/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/microservices-grpc-vs-rest-internal/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/microservices-grpc-vs-rest-internal/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/microservices-grpc-vs-rest-internal/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/microservices-grpc-vs-rest-internal.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgresql-sharding-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-sharding-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-sharding-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-sharding-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-sharding-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/message-queue-rabbitmq-bullmq/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/message-queue-rabbitmq-bullmq/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/message-queue-rabbitmq-bullmq/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/message-queue-rabbitmq-bullmq/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/message-queue-rabbitmq-bullmq.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/api-gateway-pattern-nestjs-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-gateway-pattern-nestjs-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-gateway-pattern-nestjs-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-gateway-pattern-nestjs-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-gateway-pattern-nestjs-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/distributed-tracing-opentelemetry/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/distributed-tracing-opentelemetry/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/distributed-tracing-opentelemetry/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/distributed-tracing-opentelemetry/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/distributed-tracing-opentelemetry.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/circuit-breaker-nestjs-pattern/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/circuit-breaker-nestjs-pattern/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/circuit-breaker-nestjs-pattern/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/circuit-breaker-nestjs-pattern/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/circuit-breaker-nestjs-pattern.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cqrs-event-sourcing-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cqrs-event-sourcing-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cqrs-event-sourcing-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cqrs-event-sourcing-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cqrs-event-sourcing-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/websocket-scaling-redis-pubsub/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/websocket-scaling-redis-pubsub/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/websocket-scaling-redis-pubsub/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/websocket-scaling-redis-pubsub/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/websocket-scaling-redis-pubsub.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-testing-vitest-jest/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-testing-vitest-jest/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-testing-vitest-jest/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-testing-vitest-jest/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-testing-vitest-jest.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/storybook-component-documentation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/storybook-component-documentation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/storybook-component-documentation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/storybook-component-documentation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/storybook-component-documentation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/code-review-process-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/code-review-process-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/code-review-process-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/code-review-process-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/code-review-process-developer.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/technical-debt-management/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/technical-debt-management/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/technical-debt-management/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/technical-debt-management/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/technical-debt-management.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/developer-documentation-culture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/developer-documentation-culture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/developer-documentation-culture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/developer-documentation-culture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/developer-documentation-culture.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/open-source-license-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/open-source-license-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/open-source-license-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/open-source-license-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/open-source-license-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-purchase-order-approval/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-purchase-order-approval/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-purchase-order-approval/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-purchase-order-approval/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-purchase-order-approval.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-inventory-real-time-tracking/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-inventory-real-time-tracking/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-inventory-real-time-tracking/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-inventory-real-time-tracking/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-inventory-real-time-tracking.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-financial-reporting-automation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-financial-reporting-automation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-financial-reporting-automation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-financial-reporting-automation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-financial-reporting-automation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-multi-currency-implementation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-multi-currency-implementation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-multi-currency-implementation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-multi-currency-implementation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-multi-currency-implementation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-vendor-supplier-portal/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-vendor-supplier-portal/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-vendor-supplier-portal/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-vendor-supplier-portal/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-vendor-supplier-portal.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-project-costing-time-tracking/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-project-costing-time-tracking/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-project-costing-time-tracking/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-project-costing-time-tracking/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-project-costing-time-tracking.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-payroll-integration-hr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-payroll-integration-hr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-payroll-integration-hr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-payroll-integration-hr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-payroll-integration-hr.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-customer-portal-b2b/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-customer-portal-b2b/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-customer-portal-b2b/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-customer-portal-b2b/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-customer-portal-b2b.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-third-party-api-integration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-third-party-api-integration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-third-party-api-integration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-third-party-api-integration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-third-party-api-integration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-kpi-dashboard-executives/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-kpi-dashboard-executives/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-kpi-dashboard-executives/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-kpi-dashboard-executives/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-kpi-dashboard-executives.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-document-management/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-document-management/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-document-management/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-document-management/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-document-management.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-warehouse-barcode-scanning/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-warehouse-barcode-scanning/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-warehouse-barcode-scanning/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-warehouse-barcode-scanning/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-warehouse-barcode-scanning.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-tax-compliance-indonesia-ppn/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-tax-compliance-indonesia-ppn/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-tax-compliance-indonesia-ppn/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-tax-compliance-indonesia-ppn/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-tax-compliance-indonesia-ppn.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-budget-variance-analysis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-budget-variance-analysis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-budget-variance-analysis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-budget-variance-analysis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-budget-variance-analysis.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-crm-integration-sales/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-crm-integration-sales/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-crm-integration-sales/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-crm-integration-sales/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-crm-integration-sales.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/odoo-vs-sap-vs-custom-erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/odoo-vs-sap-vs-custom-erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/odoo-vs-sap-vs-custom-erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/odoo-vs-sap-vs-custom-erp/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/odoo-vs-sap-vs-custom-erp.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-implementation-timeline-reality/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-implementation-timeline-reality/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-implementation-timeline-reality/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-implementation-timeline-reality/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-implementation-timeline-reality.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-change-management-employees/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-change-management-employees/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-change-management-employees/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-change-management-employees/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-change-management-employees.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-data-quality-migration-prep/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-data-quality-migration-prep/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-data-quality-migration-prep/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-data-quality-migration-prep/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-data-quality-migration-prep.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-roi-real-numbers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-roi-real-numbers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-roi-real-numbers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-roi-real-numbers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-roi-real-numbers.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-customization-cost-benefit-analysis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-customization-cost-benefit-analysis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-customization-cost-benefit-analysis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-customization-cost-benefit-analysis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-customization-cost-benefit-analysis.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-go-live-checklist/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-go-live-checklist/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-go-live-checklist/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-go-live-checklist/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-go-live-checklist.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-user-training-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-user-training-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-user-training-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-user-training-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-user-training-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-post-go-live-90-days/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-post-go-live-90-days/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-post-go-live-90-days/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-post-go-live-90-days/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-post-go-live-90-days.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-process-mapping-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-process-mapping-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-process-mapping-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-process-mapping-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-process-mapping-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-security-permissions-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-security-permissions-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-security-permissions-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-security-permissions-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-security-permissions-design.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-mobile-pwa-field-workers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-mobile-pwa-field-workers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-mobile-pwa-field-workers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-mobile-pwa-field-workers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-mobile-pwa-field-workers.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-legacy-access-db-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-legacy-access-db-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-legacy-access-db-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-legacy-access-db-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-legacy-access-db-migration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-cloud-vs-on-premise-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-cloud-vs-on-premise-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-cloud-vs-on-premise-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-cloud-vs-on-premise-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-cloud-vs-on-premise-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-middleware-integration-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-middleware-integration-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-middleware-integration-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-middleware-integration-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-middleware-integration-design.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-app-router-migration-lessons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-app-router-migration-lessons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-app-router-migration-lessons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-app-router-migration-lessons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-app-router-migration-lessons.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/tailwindcss-vs-css-modules/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tailwindcss-vs-css-modules/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tailwindcss-vs-css-modules/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tailwindcss-vs-css-modules/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tailwindcss-vs-css-modules.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/prisma-vs-typeorm-nestjs-comparison/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prisma-vs-typeorm-nestjs-comparison/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prisma-vs-typeorm-nestjs-comparison/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prisma-vs-typeorm-nestjs-comparison/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prisma-vs-typeorm-nestjs-comparison.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextauth-vs-clerk-comparison/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextauth-vs-clerk-comparison/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextauth-vs-clerk-comparison/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextauth-vs-clerk-comparison/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextauth-vs-clerk-comparison.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/websockets-nestjs-realtime/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/websockets-nestjs-realtime/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/websockets-nestjs-realtime/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/websockets-nestjs-realtime/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/websockets-nestjs-realtime.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/file-upload-s3-nextjs-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/file-upload-s3-nextjs-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/file-upload-s3-nextjs-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/file-upload-s3-nextjs-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/file-upload-s3-nextjs-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/resend-vs-nodemailer-email/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/resend-vs-nodemailer-email/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/resend-vs-nodemailer-email/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/resend-vs-nodemailer-email/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/resend-vs-nodemailer-email.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-api-routes-vs-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-api-routes-vs-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-api-routes-vs-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-api-routes-vs-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-api-routes-vs-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/typescript-strict-mode-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/typescript-strict-mode-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/typescript-strict-mode-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/typescript-strict-mode-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/typescript-strict-mode-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/react-server-components-usage/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-server-components-usage/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-server-components-usage/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-server-components-usage/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-server-components-usage.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-middleware-real-use-cases/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-middleware-real-use-cases/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-middleware-real-use-cases/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-middleware-real-use-cases/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-middleware-real-use-cases.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/framer-motion-vs-css-animations/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/framer-motion-vs-css-animations/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/framer-motion-vs-css-animations/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/framer-motion-vs-css-animations/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/framer-motion-vs-css-animations.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/monorepo-turborepo-setup/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/monorepo-turborepo-setup/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/monorepo-turborepo-setup/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/monorepo-turborepo-setup/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/monorepo-turborepo-setup.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/api-rate-limiting-nestjs-redis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-rate-limiting-nestjs-redis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-rate-limiting-nestjs-redis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-rate-limiting-nestjs-redis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-rate-limiting-nestjs-redis.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nextjs-error-handling-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-error-handling-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-error-handling-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-error-handling-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-error-handling-patterns.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/llm-api-cost-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-api-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-api-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-api-cost-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-api-cost-optimization.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-agent-workflow-automation-2025/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-agent-workflow-automation-2025/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-agent-workflow-automation-2025/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-agent-workflow-automation-2025/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-agent-workflow-automation-2025.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/rag-pipeline-production-lessons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/rag-pipeline-production-lessons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/rag-pipeline-production-lessons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/rag-pipeline-production-lessons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/rag-pipeline-production-lessons.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/claude-api-tool-use-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-api-tool-use-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-api-tool-use-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-api-tool-use-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-api-tool-use-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/openai-vs-anthropic-vs-gemini-developers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/openai-vs-anthropic-vs-gemini-developers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/openai-vs-anthropic-vs-gemini-developers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/openai-vs-anthropic-vs-gemini-developers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/openai-vs-anthropic-vs-gemini-developers.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/langchain-vs-custom-llm/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/langchain-vs-custom-llm/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/langchain-vs-custom-llm/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/langchain-vs-custom-llm/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/langchain-vs-custom-llm.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-code-review-github-actions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-code-review-github-actions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-code-review-github-actions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-code-review-github-actions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-code-review-github-actions.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/pgvector-vs-pinecone-comparison/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pgvector-vs-pinecone-comparison/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pgvector-vs-pinecone-comparison/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pgvector-vs-pinecone-comparison/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pgvector-vs-pinecone-comparison.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/prompt-engineering-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prompt-engineering-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prompt-engineering-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prompt-engineering-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prompt-engineering-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-content-generation-quality/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-content-generation-quality/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-content-generation-quality/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-content-generation-quality/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-content-generation-quality.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/portfolio-junior-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/portfolio-junior-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/portfolio-junior-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/portfolio-junior-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/portfolio-junior-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/developer-productivity-tools-2025/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/developer-productivity-tools-2025/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/developer-productivity-tools-2025/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/developer-productivity-tools-2025/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/developer-productivity-tools-2025.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/learning-new-tech-stack-efficiently/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/learning-new-tech-stack-efficiently/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/learning-new-tech-stack-efficiently/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/learning-new-tech-stack-efficiently/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/learning-new-tech-stack-efficiently.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/open-source-contribution-career/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/open-source-contribution-career/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/open-source-contribution-career/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/open-source-contribution-career/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/open-source-contribution-career.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-prompt-injection-defense/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-prompt-injection-defense/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-prompt-injection-defense/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-prompt-injection-defense/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-prompt-injection-defense.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/mcp-server-development-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mcp-server-development-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mcp-server-development-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mcp-server-development-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mcp-server-development-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-agent-memory-persistence-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-agent-memory-persistence-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-agent-memory-persistence-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-agent-memory-persistence-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-agent-memory-persistence-patterns.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/local-llm-ollama-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/local-llm-ollama-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/local-llm-ollama-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/local-llm-ollama-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/local-llm-ollama-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ai-observability-llm-logging/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-observability-llm-logging/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-observability-llm-logging/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-observability-llm-logging/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-observability-llm-logging.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/function-calling-openai-anthropic/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/function-calling-openai-anthropic/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/function-calling-openai-anthropic/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/function-calling-openai-anthropic/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/function-calling-openai-anthropic.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/owasp-top-10-developer-checklist/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/owasp-top-10-developer-checklist/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/owasp-top-10-developer-checklist/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/owasp-top-10-developer-checklist/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/owasp-top-10-developer-checklist.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/jwt-vs-session-auth-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/jwt-vs-session-auth-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/jwt-vs-session-auth-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/jwt-vs-session-auth-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/jwt-vs-session-auth-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/sql-injection-orm-prevention/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sql-injection-orm-prevention/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sql-injection-orm-prevention/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sql-injection-orm-prevention/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sql-injection-orm-prevention.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cors-configuration-nextjs-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cors-configuration-nextjs-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cors-configuration-nextjs-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cors-configuration-nextjs-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cors-configuration-nextjs-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/https-tls-beyond-certbot/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/https-tls-beyond-certbot/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/https-tls-beyond-certbot/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/https-tls-beyond-certbot/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/https-tls-beyond-certbot.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/api-security-nestjs-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-security-nestjs-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-security-nestjs-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-security-nestjs-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-security-nestjs-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/secret-scanning-github-prevention/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/secret-scanning-github-prevention/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/secret-scanning-github-prevention/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/secret-scanning-github-prevention/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/secret-scanning-github-prevention.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-container-security-scanning/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-container-security-scanning/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-container-security-scanning/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-container-security-scanning/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-container-security-scanning.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/penetration-testing-developer-basics/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/penetration-testing-developer-basics/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/penetration-testing-developer-basics/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/penetration-testing-developer-basics/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/penetration-testing-developer-basics.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nginx-vs-traefik/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nginx-vs-traefik/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nginx-vs-traefik/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nginx-vs-traefik/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nginx-vs-traefik.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/linux-server-hardening/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/linux-server-hardening/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/linux-server-hardening/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/linux-server-hardening/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/linux-server-hardening.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/github-actions-vs-gitlab/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-vs-gitlab/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-vs-gitlab/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-vs-gitlab/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-vs-gitlab.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgresql-vs-mysql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-vs-mysql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-vs-mysql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-vs-mysql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-vs-mysql.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/redis-caching-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/redis-caching-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/redis-caching-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/redis-caching-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/redis-caching-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-compose-vs-k8s/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-compose-vs-k8s/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-compose-vs-k8s/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-compose-vs-k8s/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-compose-vs-k8s.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/monitoring-alerting-solo/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/monitoring-alerting-solo/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/monitoring-alerting-solo/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/monitoring-alerting-solo/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/monitoring-alerting-solo.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ssh-security-hardening/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ssh-security-hardening/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ssh-security-hardening/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ssh-security-hardening/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ssh-security-hardening.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/postgresql-backup-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-backup-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-backup-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-backup-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-backup-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/nginx-performance-tuning/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nginx-performance-tuning/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nginx-performance-tuning/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nginx-performance-tuning/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nginx-performance-tuning.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/fail2ban-vps-security/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/fail2ban-vps-security/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/fail2ban-vps-security/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/fail2ban-vps-security/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/fail2ban-vps-security.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/systemd-services-jobs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/systemd-services-jobs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/systemd-services-jobs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/systemd-services-jobs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/systemd-services-jobs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/wireguard-vpn-cloud/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/wireguard-vpn-cloud/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/wireguard-vpn-cloud/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/wireguard-vpn-cloud/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/wireguard-vpn-cloud.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/log-rotation-linux/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/log-rotation-linux/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/log-rotation-linux/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/log-rotation-linux/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/log-rotation-linux.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/docker-secrets-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-secrets-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-secrets-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-secrets-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-secrets-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloud-run-vs-functions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-run-vs-functions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-run-vs-functions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-run-vs-functions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-run-vs-functions.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/terraform-modules-reusable/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/terraform-modules-reusable/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/terraform-modules-reusable/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/terraform-modules-reusable/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/terraform-modules-reusable.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/ansible-playbooks-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ansible-playbooks-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ansible-playbooks-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ansible-playbooks-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ansible-playbooks-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloud-cost-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-cost-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-cost-optimization.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/multi-cloud-small-teams/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/multi-cloud-small-teams/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/multi-cloud-small-teams/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/multi-cloud-small-teams/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/multi-cloud-small-teams.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cdn-cloudflare-static/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cdn-cloudflare-static/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cdn-cloudflare-static/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cdn-cloudflare-static/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cdn-cloudflare-static.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/load-balancer-production-config/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/load-balancer-production-config/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/load-balancer-production-config/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/load-balancer-production-config/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/load-balancer-production-config.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/disaster-recovery-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/disaster-recovery-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/disaster-recovery-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/disaster-recovery-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/disaster-recovery-vps.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/container-registry-gcr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/container-registry-gcr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/container-registry-gcr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/container-registry-gcr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/container-registry-gcr.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/vpc-networking-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/vpc-networking-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/vpc-networking-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/vpc-networking-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/vpc-networking-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloud-storage-vs-minio/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-storage-vs-minio/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-storage-vs-minio/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-storage-vs-minio/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-storage-vs-minio.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/github-actions-runners/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-runners/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-runners/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-runners/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-runners.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/hashicorp-vault-secrets/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hashicorp-vault-secrets/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hashicorp-vault-secrets/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hashicorp-vault-secrets/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hashicorp-vault-secrets.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/prometheus-alertmanager/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prometheus-alertmanager/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prometheus-alertmanager/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prometheus-alertmanager/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prometheus-alertmanager.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/elastic-stack-self-hosted/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/elastic-stack-self-hosted/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/elastic-stack-self-hosted/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/elastic-stack-self-hosted/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/elastic-stack-self-hosted.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/tech-stack-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tech-stack-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tech-stack-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tech-stack-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tech-stack-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/remote-work-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/remote-work-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/remote-work-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/remote-work-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/remote-work-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/sgu-it-review/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sgu-it-review/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sgu-it-review/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sgu-it-review/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sgu-it-review.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/cloud-adoption-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-adoption-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-adoption-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-adoption-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-adoption-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/erp-market-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-market-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-market-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-market-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-market-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/bpjs-api-integration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/bpjs-api-integration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/bpjs-api-integration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/bpjs-api-integration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/bpjs-api-integration.jpg</image:loc>
</image:image>
<lastmod>2026-07-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/digital-transformation-sme/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/digital-transformation-sme/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/digital-transformation-sme/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/digital-transformation-sme/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/digital-transformation-sme.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/indonesia-tech-ecosystem/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/indonesia-tech-ecosystem/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/indonesia-tech-ecosystem/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/indonesia-tech-ecosystem/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/indonesia-tech-ecosystem.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/freelance-pricing-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/freelance-pricing-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/freelance-pricing-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/freelance-pricing-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/freelance-pricing-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/work-life-balance-dev/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/work-life-balance-dev/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/work-life-balance-dev/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/work-life-balance-dev/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/work-life-balance-dev.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/side-projects-full-time/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/side-projects-full-time/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/side-projects-full-time/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/side-projects-full-time/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/side-projects-full-time.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/technical-interview-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/technical-interview-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/technical-interview-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/technical-interview-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/technical-interview-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/devops/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/devops/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/devops/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/devops/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/erp/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/web-dev/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/web-dev/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/web-dev/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/web-dev/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/backend/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/backend/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/backend/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/backend/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/ai/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/ai/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/ai/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/ai/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/career/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/career/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/career/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/career/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/software-development/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/software-development/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/software-development/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/software-development/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/security/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/security/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/security/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/security/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/cloud/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/cloud/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/cloud/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/cloud/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/ai-ml/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/ai-ml/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/ai-ml/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/ai-ml/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/product/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/product/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/product/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/product/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/university/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/university/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/university/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/university/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/blog/category/hackathon/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/hackathon/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/hackathon/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/hackathon/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/devops-professional-certificate/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/devops-professional-certificate/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/devops-professional-certificate/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/devops-professional-certificate/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/devops-professional-certificate.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/network-defense-essentials/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/network-defense-essentials/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/network-defense-essentials/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/network-defense-essentials/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/network-defense-essentials.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/aws-academy-cloud-foundations/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/aws-academy-cloud-foundations/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/aws-academy-cloud-foundations/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/aws-academy-cloud-foundations/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/aws-academy-cloud-foundations.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/sql-advanced/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/sql-advanced/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/sql-advanced/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/sql-advanced/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/sql-advanced.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/ethical-hacking-essentials/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/ethical-hacking-essentials/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/ethical-hacking-essentials/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/ethical-hacking-essentials/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/ethical-hacking-essentials.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/certifications/cybersecurity-awareness-professional/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/cybersecurity-awareness-professional/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/cybersecurity-awareness-professional/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/cybersecurity-awareness-professional/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/cybersecurity-awareness-professional.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/ancorapro/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/ancorapro/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/ancorapro/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/ancorapro/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/ancorapro-poster.png</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/ai-feeds/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/ai-feeds/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/ai-feeds/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/ai-feeds/" />
<image:image>
<image:loc>https://www.matthewswong.com/AiFeeds.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/review-ci/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/review-ci/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/review-ci/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/review-ci/" />
<image:image>
<image:loc>https://www.matthewswong.com/ReviewCI.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/jakarta-intl-denso/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/jakarta-intl-denso/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/jakarta-intl-denso/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/jakarta-intl-denso/" />
<image:image>
<image:loc>https://www.matthewswong.com/jid-web.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/parcel-cirebon/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/parcel-cirebon/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/parcel-cirebon/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/parcel-cirebon/" />
<image:image>
<image:loc>https://www.matthewswong.com/parcel-cirebon.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/tiktok-agency-incubator/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/tiktok-agency-incubator/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/tiktok-agency-incubator/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/tiktok-agency-incubator/" />
<image:image>
<image:loc>https://www.matthewswong.com/tiktok-agency.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/shibui-matcha-bar/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/shibui-matcha-bar/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/shibui-matcha-bar/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/shibui-matcha-bar/" />
<image:image>
<image:loc>https://www.matthewswong.com/shibui-lp.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/mpilates/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/mpilates/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/mpilates/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/mpilates/" />
<image:image>
<image:loc>https://www.matthewswong.com/mpilates-web.png</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/stadpass/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/stadpass/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/stadpass/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/stadpass/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/STADPASS%2520Project.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/observer-kpu/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/observer-kpu/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/observer-kpu/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/observer-kpu/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/Observer%2520KPU%2520Project.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/credit-risk-analysis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/credit-risk-analysis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/credit-risk-analysis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/credit-risk-analysis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-01.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-02.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-03.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-04.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-05.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-06.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/en/projects/security-onion-lab/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/security-onion-lab/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/security-onion-lab/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/security-onion-lab/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/1.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/5.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/6.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/7.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/8.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/9.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/experience/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/experience/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/experience/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/experience/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/education/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/education/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/education/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/education/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/" />
<image:image>
<image:loc>https://www.matthewswong.com/AiFeeds.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/ReviewCI.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/jid-web.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/parcel-cirebon.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/tiktok-agency.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/shibui-lp.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/STADPASS%2520Project.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/Observer%2520KPU%2520Project.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/hackathons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/hackathons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/hackathons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/hackathons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/PWC-Hackathon.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/web3-training-documentation.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/AI-Hackathon1.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/Pwc-hackathon-2024.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/commsult-software-workshop.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/web3-networking-event.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/Blockchain1.jpeg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/Symposium1.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/case-studies/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/case-studies/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/case-studies/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/case-studies/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/architecture/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/contact/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/contact/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/contact/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/contact/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/biznet-gio-vs-idcloudhost-indonesia-cloud/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/biznet-gio-vs-idcloudhost-indonesia-cloud.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/coretax-djp-tax-integration-indonesia-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/coretax-djp-tax-integration-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/coretax-djp-tax-integration-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/coretax-djp-tax-integration-indonesia-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/coretax-djp-tax-integration-indonesia-developer.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/midtrans-payment-gateway-integration-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/midtrans-payment-gateway-integration-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/midtrans-payment-gateway-integration-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/midtrans-payment-gateway-integration-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/midtrans-payment-gateway-integration-nextjs.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nik-ktp-dukcapil-verification-api-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nik-ktp-dukcapil-verification-api-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nik-ktp-dukcapil-verification-api-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nik-ktp-dukcapil-verification-api-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nik-ktp-dukcapil-verification-api-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/qris-dynamic-payment-integration-nodejs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/qris-dynamic-payment-integration-nodejs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/qris-dynamic-payment-integration-nodejs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/qris-dynamic-payment-integration-nodejs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/qris-dynamic-payment-integration-nodejs.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/sewa-vps-murah-indonesia-panduan/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sewa-vps-murah-indonesia-panduan/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sewa-vps-murah-indonesia-panduan/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sewa-vps-murah-indonesia-panduan/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sewa-vps-murah-indonesia-panduan.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/tokopedia-shopee-marketplace-api-integration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tokopedia-shopee-marketplace-api-integration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tokopedia-shopee-marketplace-api-integration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tokopedia-shopee-marketplace-api-integration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tokopedia-shopee-marketplace-api-integration.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/whatsapp-business-api-integration-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/whatsapp-business-api-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/whatsapp-business-api-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/whatsapp-business-api-integration-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/whatsapp-business-api-integration-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/xendit-vs-midtrans-payment-gateway-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/xendit-vs-midtrans-payment-gateway-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/xendit-vs-midtrans-payment-gateway-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/xendit-vs-midtrans-payment-gateway-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/xendit-vs-midtrans-payment-gateway-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/sumopod-cheap-indonesian-vps-review/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sumopod-cheap-indonesian-vps-review/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sumopod-cheap-indonesian-vps-review/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sumopod-cheap-indonesian-vps-review/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sumopod-cheap-indonesian-vps-review.jpg</image:loc>
</image:image>
<lastmod>2026-07-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/argo-rollouts-progressive-delivery-canary/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/argo-rollouts-progressive-delivery-canary/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/argo-rollouts-progressive-delivery-canary/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/argo-rollouts-progressive-delivery-canary/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/argo-rollouts-progressive-delivery-canary.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/bun-vs-nodejs-production-runtime/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/bun-vs-nodejs-production-runtime/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/bun-vs-nodejs-production-runtime/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/bun-vs-nodejs-production-runtime/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/bun-vs-nodejs-production-runtime.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloudflare-tunnel-zero-trust-homelab/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-tunnel-zero-trust-homelab/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-tunnel-zero-trust-homelab/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-tunnel-zero-trust-homelab/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-tunnel-zero-trust-homelab.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/debouncing-throttling-react-hooks-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/debouncing-throttling-react-hooks-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/debouncing-throttling-react-hooks-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/debouncing-throttling-react-hooks-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/debouncing-throttling-react-hooks-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-bake-multi-platform-builds/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-bake-multi-platform-builds/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-bake-multi-platform-builds/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-bake-multi-platform-builds/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-bake-multi-platform-builds.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/drizzle-orm-vs-prisma-typescript/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/drizzle-orm-vs-prisma-typescript/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/drizzle-orm-vs-prisma-typescript/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/drizzle-orm-vs-prisma-typescript/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/drizzle-orm-vs-prisma-typescript.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ebpf-observability-cilium-tetragon/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ebpf-observability-cilium-tetragon/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ebpf-observability-cilium-tetragon/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ebpf-observability-cilium-tetragon/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ebpf-observability-cilium-tetragon.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/effect-ts-functional-error-handling/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/effect-ts-functional-error-handling/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/effect-ts-functional-error-handling/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/effect-ts-functional-error-handling/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/effect-ts-functional-error-handling.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/expand-contract-schema-migration-pattern/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/expand-contract-schema-migration-pattern/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/expand-contract-schema-migration-pattern/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/expand-contract-schema-migration-pattern/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/expand-contract-schema-migration-pattern.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/feature-flag-driven-trunk-based-development/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/feature-flag-driven-trunk-based-development/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/feature-flag-driven-trunk-based-development/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/feature-flag-driven-trunk-based-development/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/feature-flag-driven-trunk-based-development.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/github-actions-reusable-workflows-composite-actions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-reusable-workflows-composite-actions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-reusable-workflows-composite-actions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-reusable-workflows-composite-actions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-reusable-workflows-composite-actions.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/github-actions-runner-autoscaling-arc/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-runner-autoscaling-arc/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-runner-autoscaling-arc/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-runner-autoscaling-arc/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-runner-autoscaling-arc.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/grafana-alloy-opentelemetry-collector-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/grafana-alloy-opentelemetry-collector-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/grafana-alloy-opentelemetry-collector-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/grafana-alloy-opentelemetry-collector-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/grafana-alloy-opentelemetry-collector-migration.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/hono-edge-api-framework-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hono-edge-api-framework-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hono-edge-api-framework-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hono-edge-api-framework-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hono-edge-api-framework-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/idempotent-consumer-pattern-message-queue/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/idempotent-consumer-pattern-message-queue/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/idempotent-consumer-pattern-message-queue/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/idempotent-consumer-pattern-message-queue/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/idempotent-consumer-pattern-message-queue.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/incus-lxc-system-containers-vs-docker/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/incus-lxc-system-containers-vs-docker/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/incus-lxc-system-containers-vs-docker/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/incus-lxc-system-containers-vs-docker/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/incus-lxc-system-containers-vs-docker.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/kubernetes-gateway-api-vs-ingress/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-gateway-api-vs-ingress/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-gateway-api-vs-ingress/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-gateway-api-vs-ingress/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-gateway-api-vs-ingress.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nats-jetstream-vs-kafka-lightweight/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nats-jetstream-vs-kafka-lightweight/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nats-jetstream-vs-kafka-lightweight/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nats-jetstream-vs-kafka-lightweight/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nats-jetstream-vs-kafka-lightweight.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nestjs-request-scoped-providers-di-gotchas/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nestjs-request-scoped-providers-di-gotchas/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nestjs-request-scoped-providers-di-gotchas/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nestjs-request-scoped-providers-di-gotchas/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nestjs-request-scoped-providers-di-gotchas.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/openapi-typescript-end-to-end-types/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/openapi-typescript-end-to-end-types/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/openapi-typescript-end-to-end-types/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/openapi-typescript-end-to-end-types/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/openapi-typescript-end-to-end-types.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/opentelemetry-tracing-nestjs-auto-instrumentation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/opentelemetry-tracing-nestjs-auto-instrumentation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/opentelemetry-tracing-nestjs-auto-instrumentation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/opentelemetry-tracing-nestjs-auto-instrumentation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/opentelemetry-tracing-nestjs-auto-instrumentation.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/opentofu-vs-terraform-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/opentofu-vs-terraform-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/opentofu-vs-terraform-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/opentofu-vs-terraform-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/opentofu-vs-terraform-migration.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pgbouncer-connection-pooling-modes/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pgbouncer-connection-pooling-modes/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pgbouncer-connection-pooling-modes/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pgbouncer-connection-pooling-modes/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pgbouncer-connection-pooling-modes.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-explain-analyze-reading-query-plans/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-explain-analyze-reading-query-plans/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-explain-analyze-reading-query-plans/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-explain-analyze-reading-query-plans/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-explain-analyze-reading-query-plans.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-generated-columns-computed-data/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-generated-columns-computed-data/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-generated-columns-computed-data/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-generated-columns-computed-data/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-generated-columns-computed-data.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-logical-replication-zero-downtime-upgrade/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-logical-replication-zero-downtime-upgrade/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-logical-replication-zero-downtime-upgrade/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-logical-replication-zero-downtime-upgrade/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-logical-replication-zero-downtime-upgrade.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-skip-locked-job-queue/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-skip-locked-job-queue/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-skip-locked-job-queue/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-skip-locked-job-queue/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-skip-locked-job-queue.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/prometheus-remote-write-mimir-scaling/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prometheus-remote-write-mimir-scaling/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prometheus-remote-write-mimir-scaling/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prometheus-remote-write-mimir-scaling/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prometheus-remote-write-mimir-scaling.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/react-server-components-vs-islands-architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-server-components-vs-islands-architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-server-components-vs-islands-architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-server-components-vs-islands-architecture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-server-components-vs-islands-architecture.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/restic-vs-borg-encrypted-backups/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/restic-vs-borg-encrypted-backups/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/restic-vs-borg-encrypted-backups/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/restic-vs-borg-encrypted-backups/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/restic-vs-borg-encrypted-backups.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/server-sent-events-vs-websockets-realtime/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/server-sent-events-vs-websockets-realtime/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/server-sent-events-vs-websockets-realtime/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/server-sent-events-vs-websockets-realtime/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/server-sent-events-vs-websockets-realtime.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/sqlite-litestream-replication-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sqlite-litestream-replication-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sqlite-litestream-replication-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sqlite-litestream-replication-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sqlite-litestream-replication-production.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/systemd-hardening-sandboxing-services/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/systemd-hardening-sandboxing-services/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/systemd-hardening-sandboxing-services/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/systemd-hardening-sandboxing-services/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/systemd-hardening-sandboxing-services.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/tanstack-router-type-safe-routing/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tanstack-router-type-safe-routing/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tanstack-router-type-safe-routing/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tanstack-router-type-safe-routing/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tanstack-router-type-safe-routing.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/terraform-import-blocks-existing-infra/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/terraform-import-blocks-existing-infra/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/terraform-import-blocks-existing-infra/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/terraform-import-blocks-existing-infra/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/terraform-import-blocks-existing-infra.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/typescript-satisfies-operator-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/typescript-satisfies-operator-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/typescript-satisfies-operator-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/typescript-satisfies-operator-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/typescript-satisfies-operator-patterns.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/valibot-vs-zod-bundle-size/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/valibot-vs-zod-bundle-size/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/valibot-vs-zod-bundle-size/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/valibot-vs-zod-bundle-size/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/valibot-vs-zod-bundle-size.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/valkey-vs-redis-fork-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/valkey-vs-redis-fork-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/valkey-vs-redis-fork-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/valkey-vs-redis-fork-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/valkey-vs-redis-fork-migration.jpg</image:loc>
</image:image>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/web-workers-offload-main-thread-react/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/web-workers-offload-main-thread-react/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/web-workers-offload-main-thread-react/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/web-workers-offload-main-thread-react/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/web-workers-offload-main-thread-react.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/zod-4-schema-validation-performance/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zod-4-schema-validation-performance/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zod-4-schema-validation-performance/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zod-4-schema-validation-performance/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zod-4-schema-validation-performance.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/branchid-scoping-idor-multi-branch-erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/branchid-scoping-idor-multi-branch-erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/branchid-scoping-idor-multi-branch-erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/branchid-scoping-idor-multi-branch-erp/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/branchid-scoping-idor-multi-branch-erp.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/building-pos-mobile-indonesian-sme-carwash/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-pos-mobile-indonesian-sme-carwash/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-pos-mobile-indonesian-sme-carwash/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-pos-mobile-indonesian-sme-carwash/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/building-pos-mobile-indonesian-sme-carwash.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/derived-cash-book-union-view-postgres/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/derived-cash-book-union-view-postgres/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/derived-cash-book-union-view-postgres/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/derived-cash-book-union-view-postgres/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/derived-cash-book-union-view-postgres.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/flutter-offline-outbox-sync-field-app/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/flutter-offline-outbox-sync-field-app/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/flutter-offline-outbox-sync-field-app/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/flutter-offline-outbox-sync-field-app/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/flutter-offline-outbox-sync-field-app.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/integer-money-idr-avoid-float-errors/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/integer-money-idr-avoid-float-errors/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/integer-money-idr-avoid-float-errors/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/integer-money-idr-avoid-float-errors/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/integer-money-idr-avoid-float-errors.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/kasbon-employee-cash-advance-payroll-deduction/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kasbon-employee-cash-advance-payroll-deduction/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kasbon-employee-cash-advance-payroll-deduction/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kasbon-employee-cash-advance-payroll-deduction/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kasbon-employee-cash-advance-payroll-deduction.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/mock-real-repository-adapter-offline-parity/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mock-real-repository-adapter-offline-parity/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mock-real-repository-adapter-offline-parity/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mock-real-repository-adapter-offline-parity/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mock-real-repository-adapter-offline-parity.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pos-cash-session-reconciliation-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pos-cash-session-reconciliation-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pos-cash-session-reconciliation-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pos-cash-session-reconciliation-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pos-cash-session-reconciliation-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pos-payment-settlement-idempotency-keys/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pos-payment-settlement-idempotency-keys/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pos-payment-settlement-idempotency-keys/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pos-payment-settlement-idempotency-keys/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pos-payment-settlement-idempotency-keys.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/stock-movement-source-of-truth-vs-cached-qty/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/stock-movement-source-of-truth-vs-cached-qty/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/stock-movement-source-of-truth-vs-cached-qty/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/stock-movement-source-of-truth-vs-cached-qty/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/stock-movement-source-of-truth-vs-cached-qty.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nestjs-terminus-health-checks/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nestjs-terminus-health-checks/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nestjs-terminus-health-checks/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nestjs-terminus-health-checks/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nestjs-terminus-health-checks.jpg</image:loc>
</image:image>
<lastmod>2026-06-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-daemon-socket-backend-control/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-daemon-socket-backend-control/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-daemon-socket-backend-control/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-daemon-socket-backend-control/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-daemon-socket-backend-control.jpg</image:loc>
</image:image>
<lastmod>2026-06-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nestjs-custom-decorators-metadata-reflection/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nestjs-custom-decorators-metadata-reflection/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nestjs-custom-decorators-metadata-reflection/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nestjs-custom-decorators-metadata-reflection/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nestjs-custom-decorators-metadata-reflection.jpg</image:loc>
</image:image>
<lastmod>2026-06-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-buildkit-cache-mounts-faster-builds/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-buildkit-cache-mounts-faster-builds/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-buildkit-cache-mounts-faster-builds/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-buildkit-cache-mounts-faster-builds/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-buildkit-cache-mounts-faster-builds.jpg</image:loc>
</image:image>
<lastmod>2026-06-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/testing-nestjs-applications-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/testing-nestjs-applications-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/testing-nestjs-applications-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/testing-nestjs-applications-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/testing-nestjs-applications-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-swarm-load-testing-replicas-throughput/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-swarm-load-testing-replicas-throughput/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-swarm-load-testing-replicas-throughput/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-swarm-load-testing-replicas-throughput/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-swarm-load-testing-replicas-throughput.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-swarm-custom-autoscaler-cpu/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-swarm-custom-autoscaler-cpu/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-swarm-custom-autoscaler-cpu/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-swarm-custom-autoscaler-cpu/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-swarm-custom-autoscaler-cpu.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-row-lock-bottleneck-prometheus-influxdb/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-row-lock-bottleneck-prometheus-influxdb/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-row-lock-bottleneck-prometheus-influxdb/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-row-lock-bottleneck-prometheus-influxdb/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-row-lock-bottleneck-prometheus-influxdb.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/slo-quality-gate-bitbucket-pipeline/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/slo-quality-gate-bitbucket-pipeline/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/slo-quality-gate-bitbucket-pipeline/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/slo-quality-gate-bitbucket-pipeline/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/slo-quality-gate-bitbucket-pipeline.jpg</image:loc>
</image:image>
<lastmod>2026-07-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/dokploy-self-hosted-paas-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/dokploy-self-hosted-paas-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/dokploy-self-hosted-paas-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/dokploy-self-hosted-paas-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/dokploy-self-hosted-paas-vps.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/coolify-vs-dokploy-self-hosted-paas/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/coolify-vs-dokploy-self-hosted-paas/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/coolify-vs-dokploy-self-hosted-paas/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/coolify-vs-dokploy-self-hosted-paas/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/coolify-vs-dokploy-self-hosted-paas.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-partial-prerendering-ppr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-partial-prerendering-ppr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-partial-prerendering-ppr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-partial-prerendering-ppr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-partial-prerendering-ppr.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/server-sent-events-nextjs-streaming/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/server-sent-events-nextjs-streaming/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/server-sent-events-nextjs-streaming/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/server-sent-events-nextjs-streaming/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/server-sent-events-nextjs-streaming.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/react-19-use-hook-actions-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-19-use-hook-actions-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-19-use-hook-actions-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-19-use-hook-actions-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-19-use-hook-actions-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/tanstack-query-nextjs-app-router/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tanstack-query-nextjs-app-router/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tanstack-query-nextjs-app-router/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tanstack-query-nextjs-app-router/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tanstack-query-nextjs-app-router.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/shadcn-ui-component-architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/shadcn-ui-component-architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/shadcn-ui-component-architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/shadcn-ui-component-architecture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/shadcn-ui-component-architecture.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/web-vitals-inp-optimization-2026/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/web-vitals-inp-optimization-2026/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/web-vitals-inp-optimization-2026/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/web-vitals-inp-optimization-2026/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/web-vitals-inp-optimization-2026.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-streaming-suspense-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-streaming-suspense-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-streaming-suspense-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-streaming-suspense-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-streaming-suspense-patterns.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/zustand-vs-redux-toolkit-state/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zustand-vs-redux-toolkit-state/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zustand-vs-redux-toolkit-state/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zustand-vs-redux-toolkit-state/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zustand-vs-redux-toolkit-state.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/react-hook-form-zod-type-safe-forms/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-hook-form-zod-type-safe-forms/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-hook-form-zod-type-safe-forms/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-hook-form-zod-type-safe-forms/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-hook-form-zod-type-safe-forms.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-dynamic-og-image-generation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-dynamic-og-image-generation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-dynamic-og-image-generation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-dynamic-og-image-generation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-dynamic-og-image-generation.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/kamal-2-docker-deployment-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kamal-2-docker-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kamal-2-docker-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kamal-2-docker-deployment-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kamal-2-docker-deployment-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-fixed-asset-depreciation-module/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-fixed-asset-depreciation-module/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-fixed-asset-depreciation-module/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-fixed-asset-depreciation-module/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-fixed-asset-depreciation-module.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-manufacturing-bom-mrp-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-manufacturing-bom-mrp-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-manufacturing-bom-mrp-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-manufacturing-bom-mrp-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-manufacturing-bom-mrp-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-general-ledger-double-entry-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-general-ledger-double-entry-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-general-ledger-double-entry-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-general-ledger-double-entry-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-general-ledger-double-entry-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-batch-serial-number-traceability/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-batch-serial-number-traceability/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-batch-serial-number-traceability/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-batch-serial-number-traceability/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-batch-serial-number-traceability.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-e-faktur-tax-integration-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-e-faktur-tax-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-e-faktur-tax-integration-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-e-faktur-tax-integration-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-e-faktur-tax-integration-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-consignment-inventory-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-consignment-inventory-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-consignment-inventory-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-consignment-inventory-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-consignment-inventory-workflow.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-multi-company-intercompany-transactions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-multi-company-intercompany-transactions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-multi-company-intercompany-transactions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-multi-company-intercompany-transactions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-multi-company-intercompany-transactions.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-quotation-to-cash-sales-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-quotation-to-cash-sales-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-quotation-to-cash-sales-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-quotation-to-cash-sales-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-quotation-to-cash-sales-workflow.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-landed-cost-import-calculation-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-landed-cost-import-calculation-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-landed-cost-import-calculation-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-landed-cost-import-calculation-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-landed-cost-import-calculation-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-stock-opname-cycle-count-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-stock-opname-cycle-count-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-stock-opname-cycle-count-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-stock-opname-cycle-count-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/github-actions-oidc-keyless-cloud-auth/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-oidc-keyless-cloud-auth/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-oidc-keyless-cloud-auth/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-oidc-keyless-cloud-auth/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-oidc-keyless-cloud-auth.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/llm-structured-output-json-schema/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-structured-output-json-schema/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-structured-output-json-schema/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-structured-output-json-schema/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-structured-output-json-schema.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/llm-evaluation-testing-ci-pipeline/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-evaluation-testing-ci-pipeline/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-evaluation-testing-ci-pipeline/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-evaluation-testing-ci-pipeline/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-evaluation-testing-ci-pipeline.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/embedding-model-selection-benchmark/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/embedding-model-selection-benchmark/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/embedding-model-selection-benchmark/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/embedding-model-selection-benchmark/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/embedding-model-selection-benchmark.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/hybrid-search-reranking-rag/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hybrid-search-reranking-rag/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hybrid-search-reranking-rag/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hybrid-search-reranking-rag/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hybrid-search-reranking-rag.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/claude-agent-sdk-building-agents/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-agent-sdk-building-agents/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-agent-sdk-building-agents/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-agent-sdk-building-agents/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-agent-sdk-building-agents.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/semantic-caching-llm-cost-reduction/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/semantic-caching-llm-cost-reduction/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/semantic-caching-llm-cost-reduction/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/semantic-caching-llm-cost-reduction/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/semantic-caching-llm-cost-reduction.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/multimodal-llm-document-data-extraction/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/multimodal-llm-document-data-extraction/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/multimodal-llm-document-data-extraction/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/multimodal-llm-document-data-extraction/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/multimodal-llm-document-data-extraction.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/groq-nextjs-streaming-chatbot/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/groq-nextjs-streaming-chatbot/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/groq-nextjs-streaming-chatbot/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/groq-nextjs-streaming-chatbot/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/groq-nextjs-streaming-chatbot.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/transactional-outbox-pattern-postgres/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/transactional-outbox-pattern-postgres/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/transactional-outbox-pattern-postgres/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/transactional-outbox-pattern-postgres/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/transactional-outbox-pattern-postgres.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/saga-pattern-distributed-transactions-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/saga-pattern-distributed-transactions-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/saga-pattern-distributed-transactions-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/saga-pattern-distributed-transactions-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/saga-pattern-distributed-transactions-nestjs.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-distroless-image-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-distroless-image-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-distroless-image-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-distroless-image-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-distroless-image-optimization.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-row-level-security-multitenant/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-row-level-security-multitenant/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-row-level-security-multitenant/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-row-level-security-multitenant/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-row-level-security-multitenant.jpg</image:loc>
</image:image>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/zero-downtime-database-migrations-prisma/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zero-downtime-database-migrations-prisma/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zero-downtime-database-migrations-prisma/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zero-downtime-database-migrations-prisma/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zero-downtime-database-migrations-prisma.jpg</image:loc>
</image:image>
<lastmod>2026-07-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/feature-flags-nestjs-progressive-rollout/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/feature-flags-nestjs-progressive-rollout/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/feature-flags-nestjs-progressive-rollout/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/feature-flags-nestjs-progressive-rollout/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/feature-flags-nestjs-progressive-rollout.jpg</image:loc>
</image:image>
<lastmod>2026-07-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/webhooks-reliable-delivery-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/webhooks-reliable-delivery-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/webhooks-reliable-delivery-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/webhooks-reliable-delivery-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/webhooks-reliable-delivery-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/passkeys-webauthn-nextjs-authentication/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/passkeys-webauthn-nextjs-authentication/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/passkeys-webauthn-nextjs-authentication/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/passkeys-webauthn-nextjs-authentication/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/passkeys-webauthn-nextjs-authentication.jpg</image:loc>
</image:image>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/software-supply-chain-sbom-sigstore/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/software-supply-chain-sbom-sigstore/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/software-supply-chain-sbom-sigstore/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/software-supply-chain-sbom-sigstore/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/software-supply-chain-sbom-sigstore.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/automated-secrets-rotation-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/automated-secrets-rotation-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/automated-secrets-rotation-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/automated-secrets-rotation-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/automated-secrets-rotation-strategy.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/sops-age-encrypted-secrets-git/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sops-age-encrypted-secrets-git/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sops-age-encrypted-secrets-git/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sops-age-encrypted-secrets-git/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sops-age-encrypted-secrets-git.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/building-in-public-indonesia-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-in-public-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-in-public-indonesia-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-in-public-indonesia-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/building-in-public-indonesia-developer.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/engineering-blog-seo-growth-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/engineering-blog-seo-growth-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/engineering-blog-seo-growth-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/engineering-blog-seo-growth-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/engineering-blog-seo-growth-developer.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/prometheus-recording-rules-cardinality/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prometheus-recording-rules-cardinality/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prometheus-recording-rules-cardinality/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prometheus-recording-rules-cardinality/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prometheus-recording-rules-cardinality.jpg</image:loc>
</image:image>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/victoriametrics-vs-prometheus-long-term/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/victoriametrics-vs-prometheus-long-term/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/victoriametrics-vs-prometheus-long-term/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/victoriametrics-vs-prometheus-long-term/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/victoriametrics-vs-prometheus-long-term.jpg</image:loc>
</image:image>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/renovate-automated-dependency-updates/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/renovate-automated-dependency-updates/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/renovate-automated-dependency-updates/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/renovate-automated-dependency-updates/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/renovate-automated-dependency-updates.jpg</image:loc>
</image:image>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/tailscale-mesh-vpn-self-hosted/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tailscale-mesh-vpn-self-hosted/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tailscale-mesh-vpn-self-hosted/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tailscale-mesh-vpn-self-hosted/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tailscale-mesh-vpn-self-hosted.jpg</image:loc>
</image:image>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/opentelemetry-collector-pipeline-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/opentelemetry-collector-pipeline-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/opentelemetry-collector-pipeline-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/opentelemetry-collector-pipeline-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/opentelemetry-collector-pipeline-design.jpg</image:loc>
</image:image>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/hierarchical-approval-npm-library/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hierarchical-approval-npm-library/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hierarchical-approval-npm-library/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hierarchical-approval-npm-library/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hierarchical-approval-npm-library.jpg</image:loc>
</image:image>
<lastmod>2026-06-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-compose-watch-local-dev/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-compose-watch-local-dev/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-compose-watch-local-dev/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-compose-watch-local-dev/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-compose-watch-local-dev.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/caddy-vs-nginx-automatic-https/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/caddy-vs-nginx-automatic-https/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/caddy-vs-nginx-automatic-https/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/caddy-vs-nginx-automatic-https/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/caddy-vs-nginx-automatic-https.jpg</image:loc>
</image:image>
<lastmod>2026-04-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/github-actions-caching-strategies/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-caching-strategies/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-caching-strategies/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-caching-strategies/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-caching-strategies.jpg</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/self-hosted-uptime-kuma-monitoring/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/self-hosted-uptime-kuma-monitoring/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/self-hosted-uptime-kuma-monitoring/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/self-hosted-uptime-kuma-monitoring/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/self-hosted-uptime-kuma-monitoring.jpg</image:loc>
</image:image>
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/blue-green-vs-canary-on-budget/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/blue-green-vs-canary-on-budget/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/blue-green-vs-canary-on-budget/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/blue-green-vs-canary-on-budget/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/blue-green-vs-canary-on-budget.jpg</image:loc>
</image:image>
<lastmod>2026-05-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/linux-cgroups-container-resource-limits/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/linux-cgroups-container-resource-limits/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/linux-cgroups-container-resource-limits/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/linux-cgroups-container-resource-limits/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/linux-cgroups-container-resource-limits.jpg</image:loc>
</image:image>
<lastmod>2026-05-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/backup-3-2-1-strategy-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/backup-3-2-1-strategy-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/backup-3-2-1-strategy-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/backup-3-2-1-strategy-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/backup-3-2-1-strategy-vps.jpg</image:loc>
</image:image>
<lastmod>2026-05-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/event-driven-architecture-when-not-to/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/event-driven-architecture-when-not-to/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/event-driven-architecture-when-not-to/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/event-driven-architecture-when-not-to/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/event-driven-architecture-when-not-to.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgres-indexing-practical-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgres-indexing-practical-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgres-indexing-practical-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgres-indexing-practical-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-indexing-practical-guide.jpg</image:loc>
</image:image>
<lastmod>2026-04-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/idempotency-keys-api-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/idempotency-keys-api-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/idempotency-keys-api-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/idempotency-keys-api-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/idempotency-keys-api-design.jpg</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/background-jobs-bullmq-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/background-jobs-bullmq-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/background-jobs-bullmq-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/background-jobs-bullmq-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/background-jobs-bullmq-nestjs.jpg</image:loc>
</image:image>
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/api-versioning-strategies-rest/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-versioning-strategies-rest/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-versioning-strategies-rest/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-versioning-strategies-rest/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-versioning-strategies-rest.jpg</image:loc>
</image:image>
<lastmod>2026-04-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-inventory-management-module-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-inventory-management-module-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-inventory-management-module-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-inventory-management-module-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-inventory-management-module-design.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-multi-currency-accounting/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-multi-currency-accounting/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-multi-currency-accounting/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-multi-currency-accounting/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-multi-currency-accounting.jpg</image:loc>
</image:image>
<lastmod>2026-04-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-approval-matrix-configuration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-approval-matrix-configuration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-approval-matrix-configuration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-approval-matrix-configuration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-approval-matrix-configuration.jpg</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-reporting-dashboard-architecture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-reporting-dashboard-architecture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-reporting-dashboard-architecture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-reporting-dashboard-architecture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-reporting-dashboard-architecture.jpg</image:loc>
</image:image>
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-user-training-adoption-playbook/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-user-training-adoption-playbook/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-user-training-adoption-playbook/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-user-training-adoption-playbook/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-user-training-adoption-playbook.jpg</image:loc>
</image:image>
<lastmod>2026-04-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/spreadsheet-to-erp-decision-framework/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/spreadsheet-to-erp-decision-framework/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/spreadsheet-to-erp-decision-framework/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/spreadsheet-to-erp-decision-framework/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/spreadsheet-to-erp-decision-framework.jpg</image:loc>
</image:image>
<lastmod>2026-05-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-procurement-purchase-order-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-procurement-purchase-order-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-procurement-purchase-order-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-procurement-purchase-order-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-procurement-purchase-order-workflow.jpg</image:loc>
</image:image>
<lastmod>2026-05-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-server-actions-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-server-actions-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-server-actions-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-server-actions-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-server-actions-production.jpg</image:loc>
</image:image>
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/react-server-components-mental-model/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-server-components-mental-model/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-server-components-mental-model/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-server-components-mental-model/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-server-components-mental-model.jpg</image:loc>
</image:image>
<lastmod>2026-04-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/self-hosting-web-fonts-performance/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/self-hosting-web-fonts-performance/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/self-hosting-web-fonts-performance/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/self-hosting-web-fonts-performance/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/self-hosting-web-fonts-performance.jpg</image:loc>
</image:image>
<lastmod>2026-04-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/design-tokens-tailwind-theme/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/design-tokens-tailwind-theme/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/design-tokens-tailwind-theme/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/design-tokens-tailwind-theme/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/design-tokens-tailwind-theme.jpg</image:loc>
</image:image>
<lastmod>2026-04-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-image-optimization-internals/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-image-optimization-internals/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-image-optimization-internals/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-image-optimization-internals/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-image-optimization-internals.jpg</image:loc>
</image:image>
<lastmod>2026-04-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/technical-seo-checklist-developers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/technical-seo-checklist-developers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/technical-seo-checklist-developers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/technical-seo-checklist-developers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/technical-seo-checklist-developers.jpg</image:loc>
</image:image>
<lastmod>2026-05-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/claude-fable-5-developers-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-fable-5-developers-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-fable-5-developers-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-fable-5-developers-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-fable-5-developers-guide.jpg</image:loc>
</image:image>
<lastmod>2026-06-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/llm-prompt-caching-cost-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-prompt-caching-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-prompt-caching-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-prompt-caching-cost-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-prompt-caching-cost-optimization.jpg</image:loc>
</image:image>
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/rag-vs-fine-tuning-decision/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/rag-vs-fine-tuning-decision/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/rag-vs-fine-tuning-decision/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/rag-vs-fine-tuning-decision/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/rag-vs-fine-tuning-decision.jpg</image:loc>
</image:image>
<lastmod>2026-04-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-agents-production-lessons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-agents-production-lessons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-agents-production-lessons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-agents-production-lessons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-agents-production-lessons.jpg</image:loc>
</image:image>
<lastmod>2026-05-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/mcp-model-context-protocol-explained/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mcp-model-context-protocol-explained/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mcp-model-context-protocol-explained/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mcp-model-context-protocol-explained/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mcp-model-context-protocol-explained.jpg</image:loc>
</image:image>
<lastmod>2026-04-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pgvector-semantic-search-postgres/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pgvector-semantic-search-postgres/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pgvector-semantic-search-postgres/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pgvector-semantic-search-postgres/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pgvector-semantic-search-postgres.jpg</image:loc>
</image:image>
<lastmod>2026-05-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloudflare-workers-vs-vercel-edge/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-workers-vs-vercel-edge/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-workers-vs-vercel-edge/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-workers-vs-vercel-edge/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-workers-vs-vercel-edge.jpg</image:loc>
</image:image>
<lastmod>2026-04-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/claude-opus-4-7-whats-new/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-opus-4-7-whats-new/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-opus-4-7-whats-new/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-opus-4-7-whats-new/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-opus-4-7.png</image:loc>
</image:image>
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/loki-prometheus-observability/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/loki-prometheus-observability/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/loki-prometheus-observability/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/loki-prometheus-observability/" />
<image:image>
<image:loc>https://www.matthewswong.com/monitoring-blog.jpg</image:loc>
</image:image>
<lastmod>2025-01-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/building-saas-ai-gymbro/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-saas-ai-gymbro/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-saas-ai-gymbro/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-saas-ai-gymbro/" />
<image:image>
<image:loc>https://www.matthewswong.com/my-product.jpg</image:loc>
</image:image>
<lastmod>2024-09-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/life-at-swiss-german-university/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/life-at-swiss-german-university/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/life-at-swiss-german-university/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/life-at-swiss-german-university/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/sgu-location.webp</image:loc>
</image:image>
<lastmod>2024-06-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pwc-capture-the-flag/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pwc-capture-the-flag/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pwc-capture-the-flag/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pwc-capture-the-flag/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/hackathon/PWC-Hackathon.jpg</image:loc>
</image:image>
<lastmod>2024-08-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ci-cd-pipeline-github-actions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ci-cd-pipeline-github-actions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ci-cd-pipeline-github-actions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ci-cd-pipeline-github-actions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ci-cd-github-actions.jpg</image:loc>
</image:image>
<lastmod>2024-07-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/kubernetes-deployment-strategies/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-deployment-strategies/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-deployment-strategies/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-deployment-strategies/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-deployment.jpg</image:loc>
</image:image>
<lastmod>2024-08-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-containerization-best-practices/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-containerization-best-practices/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-containerization-best-practices/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-containerization-best-practices/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-best-practices.jpg</image:loc>
</image:image>
<lastmod>2024-08-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-swarm-orchestration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-swarm-orchestration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-swarm-orchestration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-swarm-orchestration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-swarm.jpg</image:loc>
</image:image>
<lastmod>2024-09-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ansible-automation-infrastructure/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ansible-automation-infrastructure/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ansible-automation-infrastructure/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ansible-automation-infrastructure/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ansible-automation.jpg</image:loc>
</image:image>
<lastmod>2024-09-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/infrastructure-as-code-terraform/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/infrastructure-as-code-terraform/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/infrastructure-as-code-terraform/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/infrastructure-as-code-terraform/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/terraform-iac.jpg</image:loc>
</image:image>
<lastmod>2024-10-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/gitops-argocd-flux/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/gitops-argocd-flux/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/gitops-argocd-flux/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/gitops-argocd-flux/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/gitops-argocd.jpg</image:loc>
</image:image>
<lastmod>2024-10-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/site-reliability-engineering-sre/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/site-reliability-engineering-sre/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/site-reliability-engineering-sre/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/site-reliability-engineering-sre/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sre-reliability.jpg</image:loc>
</image:image>
<lastmod>2024-11-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/devsecops-security-pipeline/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/devsecops-security-pipeline/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/devsecops-security-pipeline/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/devsecops-security-pipeline/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/devsecops.jpg</image:loc>
</image:image>
<lastmod>2024-11-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloudflare-r2-gcs-egress/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-r2-gcs-egress/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-r2-gcs-egress/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-r2-gcs-egress/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-r2.jpg</image:loc>
</image:image>
<lastmod>2024-12-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/clean-code-principles/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/clean-code-principles/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/clean-code-principles/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/clean-code-principles/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/clean-code.jpg</image:loc>
</image:image>
<lastmod>2024-12-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/microservices-vs-monolith/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/microservices-vs-monolith/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/microservices-vs-monolith/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/microservices-vs-monolith/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/microservices.jpg</image:loc>
</image:image>
<lastmod>2025-01-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/api-design-rest-graphql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-design-rest-graphql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-design-rest-graphql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-design-rest-graphql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-rest-graphql.jpg</image:loc>
</image:image>
<lastmod>2025-01-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/test-driven-development-tdd/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/test-driven-development-tdd/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/test-driven-development-tdd/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/test-driven-development-tdd/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/test-driven-dev.jpg</image:loc>
</image:image>
<lastmod>2025-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/software-architecture-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/software-architecture-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/software-architecture-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/software-architecture-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/software-architecture.jpg</image:loc>
</image:image>
<lastmod>2025-02-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/database-optimization-postgresql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/database-optimization-postgresql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/database-optimization-postgresql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/database-optimization-postgresql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgres-optimization.jpg</image:loc>
</image:image>
<lastmod>2025-03-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-performance-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-performance-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-performance-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-performance-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-performance.jpg</image:loc>
</image:image>
<lastmod>2025-03-18T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-implementation-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-implementation-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-implementation-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-implementation-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-implementation.jpg</image:loc>
</image:image>
<lastmod>2025-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-digital-transformation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-digital-transformation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-digital-transformation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-digital-transformation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-digital-transform.jpg</image:loc>
</image:image>
<lastmod>2025-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-integration-api-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-integration-api-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-integration-api-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-integration-api-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-integration-api.jpg</image:loc>
</image:image>
<lastmod>2025-05-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-customization-vs-configuration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-customization-vs-configuration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-customization-vs-configuration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-customization-vs-configuration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-customization.jpg</image:loc>
</image:image>
<lastmod>2025-05-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-data-migration-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-data-migration-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-data-migration-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-data-migration-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-data-migration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloudflare-email-inbound-smtp2go/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloudflare-email-inbound-smtp2go/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloudflare-email-inbound-smtp2go/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloudflare-email-inbound-smtp2go/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloudflare-email.jpg</image:loc>
</image:image>
<lastmod>2025-06-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pusat-data-nasional-pdn-cloud-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pusat-data-nasional-pdn-cloud-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pusat-data-nasional-pdn-cloud-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pusat-data-nasional-pdn-cloud-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pusat-data-nasional-pdn-cloud-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2025-10-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/azure-indonesia-central-region-deployment-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/azure-indonesia-central-region-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/azure-indonesia-central-region-deployment-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/azure-indonesia-central-region-deployment-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/azure-indonesia-central-region-deployment-guide.jpg</image:loc>
</image:image>
<lastmod>2025-11-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/indonesia-open-banking-snap-api-qris-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/indonesia-open-banking-snap-api-qris-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/indonesia-open-banking-snap-api-qris-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/indonesia-open-banking-snap-api-qris-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/indonesia-open-banking-snap-api-qris-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2025-12-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/uu-pdp-compliance-developer-guide-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/uu-pdp-compliance-developer-guide-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/uu-pdp-compliance-developer-guide-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/uu-pdp-compliance-developer-guide-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/uu-pdp-compliance-developer-guide-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-01-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/finops-cloud-cost-optimization-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/finops-cloud-cost-optimization-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/finops-cloud-cost-optimization-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/finops-cloud-cost-optimization-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/finops-cloud-cost-optimization-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-02-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/odoo-erp-custom-module-development-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/odoo-erp-custom-module-development-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/odoo-erp-custom-module-development-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/odoo-erp-custom-module-development-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/odoo-erp-custom-module-development-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/building-production-rag-llm-applications/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/building-production-rag-llm-applications/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/building-production-rag-llm-applications/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/building-production-rag-llm-applications/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/building-production-rag-llm-applications.jpg</image:loc>
</image:image>
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/kubernetes-k3s-production-lightweight-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-k3s-production-lightweight-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-k3s-production-lightweight-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-k3s-production-lightweight-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-k3s-production-lightweight-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-03-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/platform-engineering-internal-developer-platform/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/platform-engineering-internal-developer-platform/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/platform-engineering-internal-developer-platform/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/platform-engineering-internal-developer-platform/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/platform-engineering-internal-developer-platform.jpg</image:loc>
</image:image>
<lastmod>2026-04-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/zero-trust-security-architecture-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zero-trust-security-architecture-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zero-trust-security-architecture-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zero-trust-security-architecture-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zero-trust-security-architecture-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-05-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/production-landing-page-core-web-vitals/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/production-landing-page-core-web-vitals/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/production-landing-page-core-web-vitals/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/production-landing-page-core-web-vitals/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/production-landing-page-core-web-vitals.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/typescript-project-structure-real-world/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/typescript-project-structure-real-world/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/typescript-project-structure-real-world/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/typescript-project-structure-real-world/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/typescript-project-structure-real-world.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/figma-to-nextjs-component-workflow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/figma-to-nextjs-component-workflow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/figma-to-nextjs-component-workflow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/figma-to-nextjs-component-workflow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/figma-to-nextjs-component-workflow.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-i18n-next-intl-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-i18n-next-intl-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-i18n-next-intl-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-i18n-next-intl-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-i18n-next-intl-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/balancing-devops-erp-webdev-engineer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/balancing-devops-erp-webdev-engineer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/balancing-devops-erp-webdev-engineer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/balancing-devops-erp-webdev-engineer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/balancing-devops-erp-webdev-engineer.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/hermes-ai-agent-nousresearch-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hermes-ai-agent-nousresearch-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hermes-ai-agent-nousresearch-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hermes-ai-agent-nousresearch-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hermes-ai-agent-nousresearch-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/google-cloud-vs-digital-ocean/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/google-cloud-vs-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/google-cloud-vs-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/google-cloud-vs-digital-ocean/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/google-cloud-vs-digital-ocean.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/grafana-prometheus-monitoring-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/grafana-prometheus-monitoring-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/grafana-prometheus-monitoring-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/grafana-prometheus-monitoring-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/grafana-prometheus-monitoring-vps.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/zero-downtime-nginx-blue-green-deploy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/zero-downtime-nginx-blue-green-deploy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/zero-downtime-nginx-blue-green-deploy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/zero-downtime-nginx-blue-green-deploy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/zero-downtime-nginx-blue-green-deploy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/automate-ssl-certbot-nginx/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/automate-ssl-certbot-nginx/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/automate-ssl-certbot-nginx/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/automate-ssl-certbot-nginx/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/automate-ssl-certbot-nginx.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/self-hosted-observability-digital-ocean/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/self-hosted-observability-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/self-hosted-observability-digital-ocean/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/self-hosted-observability-digital-ocean/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/self-hosted-observability-digital-ocean.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/kubernetes-solo-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/kubernetes-solo-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/kubernetes-solo-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/kubernetes-solo-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/kubernetes-solo-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-workflow-every-project/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-workflow-every-project/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-workflow-every-project/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-workflow-every-project/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-workflow-every-project.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/google-cloud-managed-services-vs-raw-compute/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/google-cloud-managed-services-vs-raw-compute/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/google-cloud-managed-services-vs-raw-compute/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/google-cloud-managed-services-vs-raw-compute/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/google-cloud-managed-services-vs-raw-compute.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-hr-leave-approval-flow/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-hr-leave-approval-flow/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-hr-leave-approval-flow/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-hr-leave-approval-flow/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-hr-leave-approval-flow.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/accounts-payable-multi-approval-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/accounts-payable-multi-approval-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/accounts-payable-multi-approval-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/accounts-payable-multi-approval-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/accounts-payable-multi-approval-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-invoice-pdf-generation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-invoice-pdf-generation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-invoice-pdf-generation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-invoice-pdf-generation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-invoice-pdf-generation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-email-automation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-email-automation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-email-automation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-email-automation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-email-automation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/why-erp-fails-indonesian-businesses/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/why-erp-fails-indonesian-businesses/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/why-erp-fails-indonesian-businesses/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/why-erp-fails-indonesian-businesses/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/why-erp-fails-indonesian-businesses.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/accounts-receivable-automation-erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/accounts-receivable-automation-erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/accounts-receivable-automation-erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/accounts-receivable-automation-erp/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/accounts-receivable-automation-erp.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/workflow-engine-react-nestjs-postgresql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/workflow-engine-react-nestjs-postgresql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/workflow-engine-react-nestjs-postgresql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/workflow-engine-react-nestjs-postgresql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/workflow-engine-react-nestjs-postgresql.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/excel-to-custom-erp-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/excel-to-custom-erp-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/excel-to-custom-erp-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/excel-to-custom-erp-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/excel-to-custom-erp-migration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-role-based-access-control/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-role-based-access-control/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-role-based-access-control/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-role-based-access-control/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-role-based-access-control.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-audit-trail-activity-log/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-audit-trail-activity-log/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-audit-trail-activity-log/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-audit-trail-activity-log/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-audit-trail-activity-log.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-project-structure-scalable/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-project-structure-scalable/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-project-structure-scalable/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-project-structure-scalable/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-project-structure-scalable.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/build-saas-30-days-nextjs-tailwind/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/build-saas-30-days-nextjs-tailwind/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/build-saas-30-days-nextjs-tailwind/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/build-saas-30-days-nextjs-tailwind/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/build-saas-30-days-nextjs-tailwind.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/type-safe-api-nestjs-prisma/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/type-safe-api-nestjs-prisma/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/type-safe-api-nestjs-prisma/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/type-safe-api-nestjs-prisma/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/type-safe-api-nestjs-prisma.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/seo-first-nextjs-checklist/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/seo-first-nextjs-checklist/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/seo-first-nextjs-checklist/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/seo-first-nextjs-checklist/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/seo-first-nextjs-checklist.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/react-query-vs-swr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-query-vs-swr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-query-vs-swr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-query-vs-swr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-query-vs-swr.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/mcp-auth-cerbos-authorization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mcp-auth-cerbos-authorization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mcp-auth-cerbos-authorization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mcp-auth-cerbos-authorization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mcp-auth-cerbos-authorization.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/real-user-monitoring-web-performance/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/real-user-monitoring-web-performance/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/real-user-monitoring-web-performance/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/real-user-monitoring-web-performance/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/real-user-monitoring-web-performance.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/image-optimization-nextjs-webp-avif/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/image-optimization-nextjs-webp-avif/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/image-optimization-nextjs-webp-avif/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/image-optimization-nextjs-webp-avif/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/image-optimization-nextjs-webp-avif.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-caching-isr-ssr-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-caching-isr-ssr-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-caching-isr-ssr-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-caching-isr-ssr-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-caching-isr-ssr-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/database-connection-pooling-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/database-connection-pooling-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/database-connection-pooling-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/database-connection-pooling-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/database-connection-pooling-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgresql-full-text-search-no-elasticsearch/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-full-text-search-no-elasticsearch/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-full-text-search-no-elasticsearch/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-full-text-search-no-elasticsearch/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-full-text-search-no-elasticsearch.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cursor-vs-offset-pagination/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cursor-vs-offset-pagination/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cursor-vs-offset-pagination/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cursor-vs-offset-pagination/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cursor-vs-offset-pagination.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/api-versioning-nestjs-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-versioning-nestjs-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-versioning-nestjs-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-versioning-nestjs-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-versioning-nestjs-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/graphql-vs-rest-2025/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/graphql-vs-rest-2025/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/graphql-vs-rest-2025/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/graphql-vs-rest-2025/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/graphql-vs-rest-2025.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/openapi-swagger-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/openapi-swagger-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/openapi-swagger-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/openapi-swagger-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/openapi-swagger-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/environment-variables-secrets-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/environment-variables-secrets-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/environment-variables-secrets-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/environment-variables-secrets-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/environment-variables-secrets-nextjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/e2e-testing-playwright-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/e2e-testing-playwright-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/e2e-testing-playwright-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/e2e-testing-playwright-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/e2e-testing-playwright-nextjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/accessibility-audit-nextjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/accessibility-audit-nextjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/accessibility-audit-nextjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/accessibility-audit-nextjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/accessibility-audit-nextjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/npm-dependency-management-audit/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/npm-dependency-management-audit/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/npm-dependency-management-audit/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/npm-dependency-management-audit/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/npm-dependency-management-audit.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/security-headers-nextjs-configuration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/security-headers-nextjs-configuration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/security-headers-nextjs-configuration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/security-headers-nextjs-configuration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/security-headers-nextjs-configuration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/dark-mode-nextjs-system-aware/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/dark-mode-nextjs-system-aware/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/dark-mode-nextjs-system-aware/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/dark-mode-nextjs-system-aware/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/dark-mode-nextjs-system-aware.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/event-driven-kafka-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/event-driven-kafka-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/event-driven-kafka-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/event-driven-kafka-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/event-driven-kafka-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/microservices-grpc-vs-rest-internal/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/microservices-grpc-vs-rest-internal/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/microservices-grpc-vs-rest-internal/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/microservices-grpc-vs-rest-internal/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/microservices-grpc-vs-rest-internal.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgresql-sharding-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-sharding-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-sharding-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-sharding-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-sharding-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/message-queue-rabbitmq-bullmq/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/message-queue-rabbitmq-bullmq/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/message-queue-rabbitmq-bullmq/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/message-queue-rabbitmq-bullmq/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/message-queue-rabbitmq-bullmq.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/api-gateway-pattern-nestjs-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-gateway-pattern-nestjs-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-gateway-pattern-nestjs-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-gateway-pattern-nestjs-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-gateway-pattern-nestjs-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/distributed-tracing-opentelemetry/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/distributed-tracing-opentelemetry/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/distributed-tracing-opentelemetry/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/distributed-tracing-opentelemetry/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/distributed-tracing-opentelemetry.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/circuit-breaker-nestjs-pattern/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/circuit-breaker-nestjs-pattern/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/circuit-breaker-nestjs-pattern/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/circuit-breaker-nestjs-pattern/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/circuit-breaker-nestjs-pattern.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cqrs-event-sourcing-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cqrs-event-sourcing-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cqrs-event-sourcing-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cqrs-event-sourcing-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cqrs-event-sourcing-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/websocket-scaling-redis-pubsub/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/websocket-scaling-redis-pubsub/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/websocket-scaling-redis-pubsub/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/websocket-scaling-redis-pubsub/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/websocket-scaling-redis-pubsub.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-testing-vitest-jest/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-testing-vitest-jest/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-testing-vitest-jest/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-testing-vitest-jest/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-testing-vitest-jest.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/storybook-component-documentation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/storybook-component-documentation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/storybook-component-documentation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/storybook-component-documentation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/storybook-component-documentation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/code-review-process-developer/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/code-review-process-developer/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/code-review-process-developer/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/code-review-process-developer/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/code-review-process-developer.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/technical-debt-management/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/technical-debt-management/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/technical-debt-management/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/technical-debt-management/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/technical-debt-management.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/developer-documentation-culture/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/developer-documentation-culture/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/developer-documentation-culture/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/developer-documentation-culture/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/developer-documentation-culture.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/open-source-license-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/open-source-license-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/open-source-license-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/open-source-license-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/open-source-license-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-purchase-order-approval/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-purchase-order-approval/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-purchase-order-approval/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-purchase-order-approval/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-purchase-order-approval.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-inventory-real-time-tracking/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-inventory-real-time-tracking/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-inventory-real-time-tracking/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-inventory-real-time-tracking/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-inventory-real-time-tracking.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-financial-reporting-automation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-financial-reporting-automation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-financial-reporting-automation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-financial-reporting-automation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-financial-reporting-automation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-multi-currency-implementation/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-multi-currency-implementation/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-multi-currency-implementation/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-multi-currency-implementation/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-multi-currency-implementation.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-vendor-supplier-portal/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-vendor-supplier-portal/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-vendor-supplier-portal/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-vendor-supplier-portal/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-vendor-supplier-portal.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-project-costing-time-tracking/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-project-costing-time-tracking/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-project-costing-time-tracking/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-project-costing-time-tracking/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-project-costing-time-tracking.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-payroll-integration-hr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-payroll-integration-hr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-payroll-integration-hr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-payroll-integration-hr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-payroll-integration-hr.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-customer-portal-b2b/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-customer-portal-b2b/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-customer-portal-b2b/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-customer-portal-b2b/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-customer-portal-b2b.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-third-party-api-integration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-third-party-api-integration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-third-party-api-integration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-third-party-api-integration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-third-party-api-integration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-kpi-dashboard-executives/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-kpi-dashboard-executives/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-kpi-dashboard-executives/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-kpi-dashboard-executives/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-kpi-dashboard-executives.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-document-management/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-document-management/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-document-management/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-document-management/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-document-management.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-warehouse-barcode-scanning/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-warehouse-barcode-scanning/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-warehouse-barcode-scanning/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-warehouse-barcode-scanning/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-warehouse-barcode-scanning.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-tax-compliance-indonesia-ppn/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-tax-compliance-indonesia-ppn/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-tax-compliance-indonesia-ppn/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-tax-compliance-indonesia-ppn/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-tax-compliance-indonesia-ppn.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-budget-variance-analysis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-budget-variance-analysis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-budget-variance-analysis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-budget-variance-analysis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-budget-variance-analysis.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-crm-integration-sales/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-crm-integration-sales/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-crm-integration-sales/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-crm-integration-sales/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-crm-integration-sales.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/odoo-vs-sap-vs-custom-erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/odoo-vs-sap-vs-custom-erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/odoo-vs-sap-vs-custom-erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/odoo-vs-sap-vs-custom-erp/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/odoo-vs-sap-vs-custom-erp.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-implementation-timeline-reality/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-implementation-timeline-reality/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-implementation-timeline-reality/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-implementation-timeline-reality/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-implementation-timeline-reality.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-change-management-employees/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-change-management-employees/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-change-management-employees/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-change-management-employees/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-change-management-employees.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-data-quality-migration-prep/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-data-quality-migration-prep/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-data-quality-migration-prep/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-data-quality-migration-prep/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-data-quality-migration-prep.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-roi-real-numbers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-roi-real-numbers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-roi-real-numbers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-roi-real-numbers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-roi-real-numbers.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-customization-cost-benefit-analysis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-customization-cost-benefit-analysis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-customization-cost-benefit-analysis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-customization-cost-benefit-analysis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-customization-cost-benefit-analysis.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-go-live-checklist/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-go-live-checklist/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-go-live-checklist/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-go-live-checklist/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-go-live-checklist.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-user-training-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-user-training-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-user-training-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-user-training-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-user-training-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-post-go-live-90-days/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-post-go-live-90-days/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-post-go-live-90-days/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-post-go-live-90-days/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-post-go-live-90-days.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-process-mapping-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-process-mapping-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-process-mapping-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-process-mapping-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-process-mapping-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-security-permissions-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-security-permissions-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-security-permissions-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-security-permissions-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-security-permissions-design.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-mobile-pwa-field-workers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-mobile-pwa-field-workers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-mobile-pwa-field-workers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-mobile-pwa-field-workers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-mobile-pwa-field-workers.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-legacy-access-db-migration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-legacy-access-db-migration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-legacy-access-db-migration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-legacy-access-db-migration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-legacy-access-db-migration.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-cloud-vs-on-premise-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-cloud-vs-on-premise-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-cloud-vs-on-premise-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-cloud-vs-on-premise-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-cloud-vs-on-premise-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-middleware-integration-design/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-middleware-integration-design/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-middleware-integration-design/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-middleware-integration-design/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-middleware-integration-design.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-app-router-migration-lessons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-app-router-migration-lessons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-app-router-migration-lessons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-app-router-migration-lessons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-app-router-migration-lessons.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/tailwindcss-vs-css-modules/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tailwindcss-vs-css-modules/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tailwindcss-vs-css-modules/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tailwindcss-vs-css-modules/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tailwindcss-vs-css-modules.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/prisma-vs-typeorm-nestjs-comparison/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prisma-vs-typeorm-nestjs-comparison/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prisma-vs-typeorm-nestjs-comparison/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prisma-vs-typeorm-nestjs-comparison/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prisma-vs-typeorm-nestjs-comparison.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextauth-vs-clerk-comparison/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextauth-vs-clerk-comparison/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextauth-vs-clerk-comparison/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextauth-vs-clerk-comparison/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextauth-vs-clerk-comparison.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/websockets-nestjs-realtime/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/websockets-nestjs-realtime/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/websockets-nestjs-realtime/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/websockets-nestjs-realtime/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/websockets-nestjs-realtime.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/file-upload-s3-nextjs-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/file-upload-s3-nextjs-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/file-upload-s3-nextjs-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/file-upload-s3-nextjs-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/file-upload-s3-nextjs-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/resend-vs-nodemailer-email/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/resend-vs-nodemailer-email/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/resend-vs-nodemailer-email/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/resend-vs-nodemailer-email/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/resend-vs-nodemailer-email.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-api-routes-vs-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-api-routes-vs-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-api-routes-vs-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-api-routes-vs-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-api-routes-vs-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/typescript-strict-mode-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/typescript-strict-mode-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/typescript-strict-mode-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/typescript-strict-mode-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/typescript-strict-mode-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/react-server-components-usage/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/react-server-components-usage/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/react-server-components-usage/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/react-server-components-usage/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/react-server-components-usage.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-middleware-real-use-cases/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-middleware-real-use-cases/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-middleware-real-use-cases/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-middleware-real-use-cases/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-middleware-real-use-cases.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/framer-motion-vs-css-animations/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/framer-motion-vs-css-animations/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/framer-motion-vs-css-animations/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/framer-motion-vs-css-animations/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/framer-motion-vs-css-animations.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/monorepo-turborepo-setup/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/monorepo-turborepo-setup/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/monorepo-turborepo-setup/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/monorepo-turborepo-setup/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/monorepo-turborepo-setup.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/api-rate-limiting-nestjs-redis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-rate-limiting-nestjs-redis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-rate-limiting-nestjs-redis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-rate-limiting-nestjs-redis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-rate-limiting-nestjs-redis.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nextjs-error-handling-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nextjs-error-handling-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nextjs-error-handling-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nextjs-error-handling-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nextjs-error-handling-patterns.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/llm-api-cost-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/llm-api-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/llm-api-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/llm-api-cost-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/llm-api-cost-optimization.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-agent-workflow-automation-2025/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-agent-workflow-automation-2025/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-agent-workflow-automation-2025/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-agent-workflow-automation-2025/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-agent-workflow-automation-2025.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/rag-pipeline-production-lessons/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/rag-pipeline-production-lessons/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/rag-pipeline-production-lessons/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/rag-pipeline-production-lessons/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/rag-pipeline-production-lessons.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/claude-api-tool-use-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/claude-api-tool-use-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/claude-api-tool-use-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/claude-api-tool-use-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/claude-api-tool-use-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/openai-vs-anthropic-vs-gemini-developers/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/openai-vs-anthropic-vs-gemini-developers/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/openai-vs-anthropic-vs-gemini-developers/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/openai-vs-anthropic-vs-gemini-developers/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/openai-vs-anthropic-vs-gemini-developers.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/langchain-vs-custom-llm/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/langchain-vs-custom-llm/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/langchain-vs-custom-llm/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/langchain-vs-custom-llm/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/langchain-vs-custom-llm.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-code-review-github-actions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-code-review-github-actions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-code-review-github-actions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-code-review-github-actions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-code-review-github-actions.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/pgvector-vs-pinecone-comparison/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/pgvector-vs-pinecone-comparison/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/pgvector-vs-pinecone-comparison/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/pgvector-vs-pinecone-comparison/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/pgvector-vs-pinecone-comparison.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/prompt-engineering-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prompt-engineering-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prompt-engineering-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prompt-engineering-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prompt-engineering-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-content-generation-quality/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-content-generation-quality/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-content-generation-quality/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-content-generation-quality/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-content-generation-quality.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/portfolio-junior-developer-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/portfolio-junior-developer-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/portfolio-junior-developer-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/portfolio-junior-developer-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/portfolio-junior-developer-guide.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/developer-productivity-tools-2025/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/developer-productivity-tools-2025/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/developer-productivity-tools-2025/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/developer-productivity-tools-2025/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/developer-productivity-tools-2025.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/learning-new-tech-stack-efficiently/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/learning-new-tech-stack-efficiently/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/learning-new-tech-stack-efficiently/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/learning-new-tech-stack-efficiently/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/learning-new-tech-stack-efficiently.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/open-source-contribution-career/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/open-source-contribution-career/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/open-source-contribution-career/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/open-source-contribution-career/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/open-source-contribution-career.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-prompt-injection-defense/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-prompt-injection-defense/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-prompt-injection-defense/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-prompt-injection-defense/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-prompt-injection-defense.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/mcp-server-development-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/mcp-server-development-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/mcp-server-development-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/mcp-server-development-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/mcp-server-development-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-agent-memory-persistence-patterns/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-agent-memory-persistence-patterns/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-agent-memory-persistence-patterns/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-agent-memory-persistence-patterns/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-agent-memory-persistence-patterns.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/local-llm-ollama-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/local-llm-ollama-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/local-llm-ollama-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/local-llm-ollama-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/local-llm-ollama-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ai-observability-llm-logging/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ai-observability-llm-logging/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ai-observability-llm-logging/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ai-observability-llm-logging/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ai-observability-llm-logging.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/function-calling-openai-anthropic/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/function-calling-openai-anthropic/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/function-calling-openai-anthropic/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/function-calling-openai-anthropic/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/function-calling-openai-anthropic.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/owasp-top-10-developer-checklist/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/owasp-top-10-developer-checklist/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/owasp-top-10-developer-checklist/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/owasp-top-10-developer-checklist/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/owasp-top-10-developer-checklist.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/jwt-vs-session-auth-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/jwt-vs-session-auth-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/jwt-vs-session-auth-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/jwt-vs-session-auth-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/jwt-vs-session-auth-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/sql-injection-orm-prevention/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sql-injection-orm-prevention/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sql-injection-orm-prevention/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sql-injection-orm-prevention/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sql-injection-orm-prevention.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cors-configuration-nextjs-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cors-configuration-nextjs-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cors-configuration-nextjs-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cors-configuration-nextjs-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cors-configuration-nextjs-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/https-tls-beyond-certbot/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/https-tls-beyond-certbot/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/https-tls-beyond-certbot/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/https-tls-beyond-certbot/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/https-tls-beyond-certbot.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/api-security-nestjs-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/api-security-nestjs-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/api-security-nestjs-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/api-security-nestjs-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/api-security-nestjs-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/secret-scanning-github-prevention/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/secret-scanning-github-prevention/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/secret-scanning-github-prevention/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/secret-scanning-github-prevention/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/secret-scanning-github-prevention.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-container-security-scanning/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-container-security-scanning/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-container-security-scanning/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-container-security-scanning/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-container-security-scanning.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/penetration-testing-developer-basics/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/penetration-testing-developer-basics/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/penetration-testing-developer-basics/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/penetration-testing-developer-basics/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/penetration-testing-developer-basics.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nginx-vs-traefik/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nginx-vs-traefik/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nginx-vs-traefik/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nginx-vs-traefik/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nginx-vs-traefik.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/linux-server-hardening/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/linux-server-hardening/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/linux-server-hardening/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/linux-server-hardening/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/linux-server-hardening.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/github-actions-vs-gitlab/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-vs-gitlab/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-vs-gitlab/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-vs-gitlab/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-vs-gitlab.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgresql-vs-mysql/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-vs-mysql/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-vs-mysql/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-vs-mysql/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-vs-mysql.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/redis-caching-nestjs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/redis-caching-nestjs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/redis-caching-nestjs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/redis-caching-nestjs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/redis-caching-nestjs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-compose-vs-k8s/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-compose-vs-k8s/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-compose-vs-k8s/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-compose-vs-k8s/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-compose-vs-k8s.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/monitoring-alerting-solo/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/monitoring-alerting-solo/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/monitoring-alerting-solo/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/monitoring-alerting-solo/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/monitoring-alerting-solo.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ssh-security-hardening/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ssh-security-hardening/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ssh-security-hardening/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ssh-security-hardening/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ssh-security-hardening.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/postgresql-backup-strategy/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/postgresql-backup-strategy/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/postgresql-backup-strategy/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/postgresql-backup-strategy/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/postgresql-backup-strategy.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/nginx-performance-tuning/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/nginx-performance-tuning/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/nginx-performance-tuning/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/nginx-performance-tuning/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/nginx-performance-tuning.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/fail2ban-vps-security/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/fail2ban-vps-security/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/fail2ban-vps-security/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/fail2ban-vps-security/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/fail2ban-vps-security.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/systemd-services-jobs/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/systemd-services-jobs/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/systemd-services-jobs/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/systemd-services-jobs/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/systemd-services-jobs.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/wireguard-vpn-cloud/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/wireguard-vpn-cloud/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/wireguard-vpn-cloud/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/wireguard-vpn-cloud/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/wireguard-vpn-cloud.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/log-rotation-linux/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/log-rotation-linux/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/log-rotation-linux/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/log-rotation-linux/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/log-rotation-linux.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/docker-secrets-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/docker-secrets-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/docker-secrets-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/docker-secrets-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/docker-secrets-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloud-run-vs-functions/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-run-vs-functions/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-run-vs-functions/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-run-vs-functions/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-run-vs-functions.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/terraform-modules-reusable/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/terraform-modules-reusable/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/terraform-modules-reusable/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/terraform-modules-reusable/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/terraform-modules-reusable.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/ansible-playbooks-production/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/ansible-playbooks-production/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/ansible-playbooks-production/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/ansible-playbooks-production/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/ansible-playbooks-production.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloud-cost-optimization/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-cost-optimization/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-cost-optimization/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-cost-optimization.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/multi-cloud-small-teams/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/multi-cloud-small-teams/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/multi-cloud-small-teams/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/multi-cloud-small-teams/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/multi-cloud-small-teams.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cdn-cloudflare-static/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cdn-cloudflare-static/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cdn-cloudflare-static/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cdn-cloudflare-static/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cdn-cloudflare-static.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/load-balancer-production-config/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/load-balancer-production-config/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/load-balancer-production-config/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/load-balancer-production-config/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/load-balancer-production-config.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/disaster-recovery-vps/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/disaster-recovery-vps/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/disaster-recovery-vps/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/disaster-recovery-vps/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/disaster-recovery-vps.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/container-registry-gcr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/container-registry-gcr/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/container-registry-gcr/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/container-registry-gcr/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/container-registry-gcr.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/vpc-networking-guide/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/vpc-networking-guide/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/vpc-networking-guide/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/vpc-networking-guide/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/vpc-networking-guide.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloud-storage-vs-minio/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-storage-vs-minio/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-storage-vs-minio/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-storage-vs-minio/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-storage-vs-minio.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/github-actions-runners/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/github-actions-runners/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/github-actions-runners/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/github-actions-runners/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/github-actions-runners.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/hashicorp-vault-secrets/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/hashicorp-vault-secrets/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/hashicorp-vault-secrets/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/hashicorp-vault-secrets/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/hashicorp-vault-secrets.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/prometheus-alertmanager/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/prometheus-alertmanager/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/prometheus-alertmanager/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/prometheus-alertmanager/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/prometheus-alertmanager.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/elastic-stack-self-hosted/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/elastic-stack-self-hosted/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/elastic-stack-self-hosted/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/elastic-stack-self-hosted/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/elastic-stack-self-hosted.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/tech-stack-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/tech-stack-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/tech-stack-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/tech-stack-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/tech-stack-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/remote-work-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/remote-work-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/remote-work-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/remote-work-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/remote-work-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/sgu-it-review/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/sgu-it-review/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/sgu-it-review/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/sgu-it-review/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/sgu-it-review.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/cloud-adoption-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/cloud-adoption-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/cloud-adoption-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/cloud-adoption-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/cloud-adoption-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/erp-market-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/erp-market-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/erp-market-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/erp-market-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/erp-market-indonesia.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/bpjs-api-integration/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/bpjs-api-integration/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/bpjs-api-integration/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/bpjs-api-integration/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/bpjs-api-integration.jpg</image:loc>
</image:image>
<lastmod>2026-07-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/digital-transformation-sme/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/digital-transformation-sme/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/digital-transformation-sme/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/digital-transformation-sme/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/digital-transformation-sme.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/indonesia-tech-ecosystem/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/indonesia-tech-ecosystem/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/indonesia-tech-ecosystem/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/indonesia-tech-ecosystem/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/indonesia-tech-ecosystem.jpg</image:loc>
</image:image>
<lastmod>2025-06-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/freelance-pricing-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/freelance-pricing-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/freelance-pricing-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/freelance-pricing-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/freelance-pricing-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/work-life-balance-dev/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/work-life-balance-dev/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/work-life-balance-dev/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/work-life-balance-dev/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/work-life-balance-dev.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/side-projects-full-time/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/side-projects-full-time/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/side-projects-full-time/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/side-projects-full-time/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/side-projects-full-time.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/technical-interview-indonesia/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/technical-interview-indonesia/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/technical-interview-indonesia/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/technical-interview-indonesia/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/blog/technical-interview-indonesia.jpg</image:loc>
</image:image>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/devops/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/devops/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/devops/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/devops/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/erp/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/erp/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/erp/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/erp/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/web-dev/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/web-dev/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/web-dev/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/web-dev/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/backend/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/backend/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/backend/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/backend/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/ai/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/ai/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/ai/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/ai/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/career/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/career/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/career/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/career/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/software-development/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/software-development/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/software-development/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/software-development/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/security/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/security/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/security/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/security/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/cloud/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/cloud/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/cloud/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/cloud/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/ai-ml/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/ai-ml/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/ai-ml/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/ai-ml/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/product/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/product/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/product/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/product/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/university/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/university/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/university/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/university/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/blog/category/hackathon/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/blog/category/hackathon/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/blog/category/hackathon/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/blog/category/hackathon/" />
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/devops-professional-certificate/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/devops-professional-certificate/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/devops-professional-certificate/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/devops-professional-certificate/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/devops-professional-certificate.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/network-defense-essentials/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/network-defense-essentials/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/network-defense-essentials/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/network-defense-essentials/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/network-defense-essentials.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/aws-academy-cloud-foundations/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/aws-academy-cloud-foundations/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/aws-academy-cloud-foundations/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/aws-academy-cloud-foundations/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/aws-academy-cloud-foundations.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/sql-advanced/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/sql-advanced/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/sql-advanced/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/sql-advanced/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/sql-advanced.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/ethical-hacking-essentials/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/ethical-hacking-essentials/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/ethical-hacking-essentials/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/ethical-hacking-essentials/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/ethical-hacking-essentials.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/certifications/cybersecurity-awareness-professional/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/certifications/cybersecurity-awareness-professional/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/certifications/cybersecurity-awareness-professional/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/certifications/cybersecurity-awareness-professional/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/certifications/cybersecurity-awareness-professional.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/ancorapro/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/ancorapro/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/ancorapro/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/ancorapro/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/ancorapro-poster.png</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/ai-feeds/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/ai-feeds/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/ai-feeds/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/ai-feeds/" />
<image:image>
<image:loc>https://www.matthewswong.com/AiFeeds.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/review-ci/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/review-ci/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/review-ci/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/review-ci/" />
<image:image>
<image:loc>https://www.matthewswong.com/ReviewCI.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/jakarta-intl-denso/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/jakarta-intl-denso/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/jakarta-intl-denso/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/jakarta-intl-denso/" />
<image:image>
<image:loc>https://www.matthewswong.com/jid-web.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/parcel-cirebon/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/parcel-cirebon/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/parcel-cirebon/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/parcel-cirebon/" />
<image:image>
<image:loc>https://www.matthewswong.com/parcel-cirebon.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/tiktok-agency-incubator/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/tiktok-agency-incubator/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/tiktok-agency-incubator/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/tiktok-agency-incubator/" />
<image:image>
<image:loc>https://www.matthewswong.com/tiktok-agency.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/shibui-matcha-bar/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/shibui-matcha-bar/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/shibui-matcha-bar/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/shibui-matcha-bar/" />
<image:image>
<image:loc>https://www.matthewswong.com/shibui-lp.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/mpilates/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/mpilates/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/mpilates/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/mpilates/" />
<image:image>
<image:loc>https://www.matthewswong.com/mpilates-web.png</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/stadpass/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/stadpass/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/stadpass/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/stadpass/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/STADPASS%2520Project.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/observer-kpu/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/observer-kpu/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/observer-kpu/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/observer-kpu/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/Observer%2520KPU%2520Project.jpeg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/credit-risk-analysis/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/credit-risk-analysis/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/credit-risk-analysis/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/credit-risk-analysis/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-01.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-02.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-03.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-04.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-05.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/rakamin/rakamin-06.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.matthewswong.com/id/projects/security-onion-lab/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.matthewswong.com/en/projects/security-onion-lab/" />
<xhtml:link rel="alternate" hreflang="id" href="https://www.matthewswong.com/id/projects/security-onion-lab/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.matthewswong.com/en/projects/security-onion-lab/" />
<image:image>
<image:loc>https://www.matthewswong.com/images/1.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/5.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/6.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/7.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/8.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://www.matthewswong.com/images/9.jpg</image:loc>
</image:image>
<lastmod>2026-07-18T05:04:44.410Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
