<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://alvinquach.dev</loc>
<lastmod>2026-04-01T18:49:28.141Z</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://alvinquach.dev/projects</loc>
<lastmod>2026-04-01T18:49:28.141Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog</loc>
<lastmod>2026-04-01T18:49:28.141Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://alvinquach.dev/experience</loc>
<lastmod>2026-04-01T18:49:28.141Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://alvinquach.dev/skills</loc>
<lastmod>2026-04-01T18:49:28.141Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://alvinquach.dev/contact</loc>
<lastmod>2026-04-01T18:49:28.141Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://alvinquach.dev/project/hoparc</loc>
<lastmod>2026-01-26T18:26:19.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://alvinquach.dev/project/t-creative-studio</loc>
<lastmod>2026-03-29T04:01:42.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://alvinquach.dev/project/kevin-lam-portfolio</loc>
<lastmod>2026-03-21T20:22:53.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://alvinquach.dev/project/sculptql</loc>
<lastmod>2026-03-29T04:01:46.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://alvinquach.dev/project/opportuniq</loc>
<lastmod>2026-03-29T04:01:45.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://alvinquach.dev/project/hoop-almanac</loc>
<lastmod>2026-03-29T04:01:44.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/building-accessible-ui-components</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-hook-form-vs-formik</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/mapbox-investment-properties</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-dynamic-imports-code-splitting</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/realtime-draft-system</loc>
<lastmod>2026-01-24T19:31:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-query-vs-swr</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-usecallback-usememo-when</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-route-handlers-vs-server-actions</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-middleware-authentication-redirects</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/understanding-react-server-components</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/infinite-scroll-vs-pagination</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/graphql-over-rest</loc>
<lastmod>2026-01-24T19:31:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-route-handlers-api-guide</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/git-workflow-solo</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/drag-drop-library-comparison</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/graphql-codegen-type-safety</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/postgres-connection-pool-exhaustion</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/drizzle-schema-design-opportuniq</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/pages-router-to-app-router-migration</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/tech-stack-usage</loc>
<lastmod>2026-01-24T19:31:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/feature-engineering-fantasy-basketball</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/hoop-almanac-architecture</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/dark-mode-implementation</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/memory-leak-d3-react</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-image-optimization</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/storyblok-vs-sanity-comparison</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/d3-force-directed-graphs-react</loc>
<lastmod>2026-03-22T03:01:41.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/gsap-scrolltrigger-react-performance</loc>
<lastmod>2026-03-22T03:01:44.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/openai-api-rate-limits-fallbacks</loc>
<lastmod>2026-03-22T03:01:50.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/tailwind-css-organizing-styles-scale</loc>
<lastmod>2026-03-22T03:01:52.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/image-optimization-nextjs-sanity</loc>
<lastmod>2026-03-22T03:01:53.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-error-boundaries-production</loc>
<lastmod>2026-03-22T03:01:55.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/content-security-policy-modern-web</loc>
<lastmod>2026-03-22T03:02:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/cicd-nextjs-app-router</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-hydration-mismatch-dynamic-imports</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/realtime-workout-feedback-websockets</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-seo-robots-sitemap-metadata</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/building-sculptql-sql-query-builder</loc>
<lastmod>2026-01-27T02:31:54.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-loading-states-streaming-suspense</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/seo-preservation-site-migration</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/websocket-draft-rooms-architecture</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/debugging-websocket-reconnection</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/chart-decision-risk-distribution</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/building-personal-knowledge-graph</loc>
<lastmod>2026-01-24T07:54:48.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-big-calendar-vs-fullcalendar</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/lacoda-capital-architecture</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/why-sanity-for-bring-the-shreds</loc>
<lastmod>2026-01-26T20:19:47.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-state-management-comparison</loc>
<lastmod>2026-01-26T19:28:26.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-app-router-vs-pages-router</loc>
<lastmod>2026-03-22T03:01:32.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-server-components-mental-model</loc>
<lastmod>2026-03-22T03:01:33.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/graphql-api-over-sanity-cms</loc>
<lastmod>2026-03-22T03:01:35.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/sanity-schema-design-patterns</loc>
<lastmod>2026-03-22T03:01:36.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/optimistic-ui-updates-realtime</loc>
<lastmod>2026-03-22T03:01:40.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/postgresql-vs-redis-data-store</loc>
<lastmod>2026-03-22T03:01:47.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/streaming-html-react-suspense</loc>
<lastmod>2026-03-22T03:01:59.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/pgvector-semantic-search-players</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/codemirror-sql-autocomplete</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/custom-syntax-highlighter-portfolio</loc>
<lastmod>2026-01-27T02:39:58.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-app-router-caching-deep-dive</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/numpy-pandas-performance</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/dual-cms-sanity-storyblok</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/sanity-groq-advanced-patterns</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/opportuniq-architecture-overview</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/d3js-react-interactive-charts</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/chart-api-response-optimization</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/starting-technical-blog</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/d3-decision-trees-opportuniq</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-app-router-lessons</loc>
<lastmod>2026-01-26T06:05:40.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/server-vs-client-state</loc>
<lastmod>2026-01-24T19:31:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/mapbox-react-integration</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-layouts-route-groups</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-generate-static-params-metadata</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/drizzle-vs-prisma</loc>
<lastmod>2026-01-26T06:07:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/why-sanity-for-portfolio</loc>
<lastmod>2026-01-24T22:11:44.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/prompt-engineering-maintenance</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/chart-workout-completion-rates</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/openai-automation-lacoda</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/ai-maintenance-diagnosis-opportuniq</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/wordpress-nextjs-migration-kevin-lam</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/fastapi-nextjs-integration</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/zero-knowledge-encryption-web-app</loc>
<lastmod>2026-03-29T03:59:04.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/webhook-processing-async-architecture</loc>
<lastmod>2026-03-29T03:59:08.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/context-aware-sql-autocompletion</loc>
<lastmod>2026-03-29T04:03:36.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/server-actions-vs-rest-nextjs</loc>
<lastmod>2026-03-29T03:59:10.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/accessibility-nextjs-app-router</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/tina-cms-git-based</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/jupyter-notebooks-production-workflow</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/threejs-react-knowledge-graph</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/framer-motion-vs-gsap</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/postgis-drizzle-geospatial</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/testing-nextjs-app-router</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/sklearn-model-selection-sports</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/ml-player-predictions-xgboost</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/radix-ui-component-library</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/local-first-architecture-sculptql</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-error-handling-boundaries</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/openai-embeddings-semantic-search</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/client-communication-non-technical</loc>
<lastmod>2026-01-26T06:05:40.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/playwright-e2e-patterns</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/wix-to-nextjs-migration</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/typescript-generics-patterns</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/environment-variables-management</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/typescript-generics-graphql</loc>
<lastmod>2026-03-22T03:01:37.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/websocket-reconnection-patterns</loc>
<lastmod>2026-03-22T03:01:38.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/tina-cms-vs-sanity-comparison</loc>
<lastmod>2026-03-22T03:01:43.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/threejs-nextjs-ssr-solutions</loc>
<lastmod>2026-03-22T03:01:46.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/prisma-orm-production-tips</loc>
<lastmod>2026-03-22T03:01:49.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/graphql-query-complexity-analysis</loc>
<lastmod>2026-03-22T03:01:56.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/accessible-ui-components-radix</loc>
<lastmod>2026-03-22T03:01:57.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/incremental-static-regeneration-explained</loc>
<lastmod>2026-03-22T03:02:02.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/react-query-patterns-opportuniq</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/zod-schema-validation</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-server-actions-guide</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/postgresql-query-optimization</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-navigation-functions-guide</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/error-boundaries-production</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/tailwind-patterns-scale</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/d3-schema-visualization</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/n-plus-1-graphql-bug</loc>
<lastmod>2026-01-24T07:23:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/nextjs-app-router-performance</loc>
<lastmod>2026-01-26T20:31:01.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/css-container-queries</loc>
<lastmod>2026-01-26T06:03:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/debugging-n-plus-one</loc>
<lastmod>2026-01-24T19:31:51.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/gradient-boosting-over-deep-learning</loc>
<lastmod>2026-03-29T05:39:24.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/feature-engineering-pipeline-sports-ml</loc>
<lastmod>2026-03-29T04:03:34.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/anti-hallucination-architecture-ai</loc>
<lastmod>2026-03-29T05:39:20.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/postgresql-advisory-locks-double-booking</loc>
<lastmod>2026-03-29T03:59:06.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/defense-in-depth-three-layers-auth</loc>
<lastmod>2026-03-29T03:59:11.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://alvinquach.dev/blog/four-layer-testing-strategy</loc>
<lastmod>2026-03-29T03:59:12.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
</urlset>
