<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://hamzaghouri.com/</loc>
<lastmod>2026-10-14T18:23:36.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://hamzaghouri.com/projects/</loc>
<lastmod>2026-06-27T11:10:13.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://hamzaghouri.com/services/</loc>
<lastmod>2026-06-27T11:10:13.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/</loc>
<lastmod>2026-10-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/full-stack-engineer-in-the-ai-era/</loc>
<lastmod>2026-10-17T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ux-patterns-ai-features/</loc>
<lastmod>2026-10-16T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/prompt-injection-securing-llm-apps/</loc>
<lastmod>2026-10-16T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/offline-first-pos-indexeddb-dexie/</loc>
<lastmod>2026-10-15T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/webrtc-p2p-file-transfer-local-network/</loc>
<lastmod>2026-10-14T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/streaming-llm-responses-sse-nodejs/</loc>
<lastmod>2026-10-14T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/testing-flutter-apps-with-ai-agents/</loc>
<lastmod>2026-10-13T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/background-queues-ai-workloads/</loc>
<lastmod>2026-10-13T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/context-windows-memory-ai-agents/</loc>
<lastmod>2026-10-12T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/adding-ai-features-existing-saas/</loc>
<lastmod>2026-10-12T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/llm-api-rate-limits-retries-nodejs/</loc>
<lastmod>2026-10-11T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/multi-tenant-saas-architecture/</loc>
<lastmod>2026-10-10T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/deploying-ai-nodejs-apps-aws/</loc>
<lastmod>2026-10-10T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/human-in-the-loop-ai-design/</loc>
<lastmod>2026-10-09T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/caching-llm-responses-redis/</loc>
<lastmod>2026-10-09T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/controlling-llm-api-costs-nodejs/</loc>
<lastmod>2026-10-08T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/llm-observability-logging/</loc>
<lastmod>2026-10-07T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/image-processing-pipeline-sharp-s3/</loc>
<lastmod>2026-10-07T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/llm-recommender-hard-constraints/</loc>
<lastmod>2026-10-06T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/writing-specs-ai-agents-can-follow/</loc>
<lastmod>2026-10-05T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/evaluating-llm-features-before-shipping/</loc>
<lastmod>2026-10-05T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/github-actions-oidc-aws-deploy/</loc>
<lastmod>2026-10-04T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-mvp-guide-for-founders/</loc>
<lastmod>2026-10-04T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-features-flutter-apps-api-keys/</loc>
<lastmod>2026-10-03T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/llm-structured-extraction-web-scraping/</loc>
<lastmod>2026-10-02T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-agent-vs-deterministic-workflow/</loc>
<lastmod>2026-10-02T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/rolling-out-ai-coding-assistants-team/</loc>
<lastmod>2026-10-01T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/generative-ai-fashion-image-composition/</loc>
<lastmod>2026-09-30T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-document-review-against-template/</loc>
<lastmod>2026-09-30T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/hybrid-search-keyword-vector-rag/</loc>
<lastmod>2026-09-29T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/spec-driven-development-ai-coding-assistants/</loc>
<lastmod>2026-09-28T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-agent-guardrails-production/</loc>
<lastmod>2026-09-28T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/prompt-engineering-checklist-developers/</loc>
<lastmod>2026-09-27T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/embeddings-explained-web-developers/</loc>
<lastmod>2026-09-26T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-assistant-browser-extension/</loc>
<lastmod>2026-09-26T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/machine-readable-team-conventions-ai-agents/</loc>
<lastmod>2026-09-25T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/prompt-chaining-vs-single-prompt/</loc>
<lastmod>2026-09-24T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/voice-ai-assistant-speech-to-text/</loc>
<lastmod>2026-09-23T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/reviewing-ai-generated-tests/</loc>
<lastmod>2026-09-23T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/rag-chunking-strategies/</loc>
<lastmod>2026-09-22T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/reliable-json-from-llms-typescript/</loc>
<lastmod>2026-09-21T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/model-context-protocol-mcp-explained/</loc>
<lastmod>2026-09-21T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/block-ai-training-crawlers-robots-txt/</loc>
<lastmod>2026-09-20T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-pair-programming-backend/</loc>
<lastmod>2026-09-20T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-face-analysis-app-architecture/</loc>
<lastmod>2026-09-19T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/pgvector-vector-search-postgresql/</loc>
<lastmod>2026-09-18T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/build-tool-using-ai-agent-typescript/</loc>
<lastmod>2026-09-18T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/validating-llm-output-before-users/</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/ai-code-review-without-lowering-the-bar/</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/python-ai-microservice-with-nodejs-backend/</loc>
<lastmod>2026-09-16T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/rag-retrieval-augmented-generation-nodejs/</loc>
<lastmod>2026-09-15T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/agentic-ai-explained-for-engineers/</loc>
<lastmod>2026-09-15T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/two-stage-llm-pipeline-discovery-to-spec/</loc>
<lastmod>2026-09-14T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/typeorm-vs-prisma/</loc>
<lastmod>2026-06-08T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/spec-driven-development/</loc>
<lastmod>2026-06-08T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/scaling-to-60k-users/</loc>
<lastmod>2026-06-08T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://hamzaghouri.com/blog/nodejs-aws-elastic-beanstalk-cicd/</loc>
<lastmod>2026-06-08T00:00:00.000Z</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
</urlset>
