<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://vishalmaurya.dev</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/blog</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/projects</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/tags</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/about</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/hire</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/uses</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/testimonials</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/ai-integration-developer-india</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/full-stack-web-development</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/devops-ci-cd-deployment</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/payment-integration</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/kyc-integration</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/ai-tools</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/services/java-backend-development</loc>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/what-to-prepare-before-hiring-developer-saas-mvp</loc>
<lastmod>2026-10-11T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/turn-manual-business-process-into-web-app</loc>
<lastmod>2026-10-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/integrate-third-party-api-existing-app</loc>
<lastmod>2026-10-09T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/freelancer-vs-agency-software-development</loc>
<lastmod>2026-10-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/cost-to-build-custom-web-application</loc>
<lastmod>2026-10-07T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/integrate-openai-django-fastapi-backend</loc>
<lastmod>2026-10-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/build-ai-powered-internal-business-tool</loc>
<lastmod>2026-10-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/add-semantic-search-existing-web-app</loc>
<lastmod>2026-10-04T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/extract-structured-invoice-data-llm</loc>
<lastmod>2026-10-03T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/build-rag-system-company-documents</loc>
<lastmod>2026-10-02T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/build-ai-chatbot-business-website</loc>
<lastmod>2026-10-01T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/design-reliable-background-jobs-web-app</loc>
<lastmod>2026-09-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/manage-production-secrets-environment-variables</loc>
<lastmod>2026-09-29T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/migrate-django-app-google-cloud-run</loc>
<lastmod>2026-09-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/ci-cd-dockerized-python-api</loc>
<lastmod>2026-09-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/deploy-nextjs-with-separate-backend-api</loc>
<lastmod>2026-09-26T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/deploy-django-azure-production</loc>
<lastmod>2026-09-25T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/replace-spreadsheet-workflow-internal-web-app</loc>
<lastmod>2026-09-24T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/generate-email-pdf-reports-automatically</loc>
<lastmod>2026-09-23T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/sync-data-between-business-apps-apis</loc>
<lastmod>2026-09-22T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/automate-invoice-processing-python</loc>
<lastmod>2026-09-21T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/send-website-leads-to-crm-automatically</loc>
<lastmod>2026-09-20T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/automate-excel-reports-python</loc>
<lastmod>2026-09-19T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/modernize-legacy-django-react-app</loc>
<lastmod>2026-09-18T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/debug-third-party-api-integration</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/fix-python-worker-memory-growth</loc>
<lastmod>2026-09-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/debug-slow-postgresql-query</loc>
<lastmod>2026-09-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/fix-nextjs-build-fails-vercel</loc>
<lastmod>2026-09-14T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/fix-cors-errors-react-django</loc>
<lastmod>2026-09-13T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/build-saas-mvp-without-overengineering</loc>
<lastmod>2026-09-12T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/add-payments-subscriptions-saas</loc>
<lastmod>2026-09-11T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/connect-nextjs-frontend-django-backend</loc>
<lastmod>2026-09-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/build-role-based-admin-dashboard</loc>
<lastmod>2026-09-09T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/add-authentication-existing-nextjs-app</loc>
<lastmod>2026-09-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/build-client-portal-small-business</loc>
<lastmod>2026-09-07T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/observability-for-python-api</loc>
<lastmod>2026-09-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/validate-llm-structured-output</loc>
<lastmod>2026-09-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/run-database-migrations-safely</loc>
<lastmod>2026-09-04T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/deploy-fastapi-with-docker</loc>
<lastmod>2026-09-03T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/api-rate-limiting-for-saas</loc>
<lastmod>2026-09-02T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/redis-cache-invalidation-api</loc>
<lastmod>2026-09-01T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/multi-tenant-saas-authorization</loc>
<lastmod>2026-08-31T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/design-webhook-processing-with-retries</loc>
<lastmod>2026-08-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/make-celery-background-jobs-reliable</loc>
<lastmod>2026-08-29T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/fix-slow-django-api-endpoints</loc>
<lastmod>2026-08-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/secure-api-keys-nextjs</loc>
<lastmod>2026-08-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/secure-rag-pdf-documents</loc>
<lastmod>2026-08-26T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/debug-intermittent-api-failures</loc>
<lastmod>2026-08-25T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/extract-validate-pdf-data-python</loc>
<lastmod>2026-08-24T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/running-python-jobs-in-cloud</loc>
<lastmod>2026-08-23T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/routing-production-errors-to-the-right-team-without-alert-fatigue</loc>
<lastmod>2026-08-22T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/understanding-react-server-components-nextjs-14</loc>
<lastmod>2026-08-22T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/production-bug-or-incident-a-simple-severity-triage</loc>
<lastmod>2026-08-21T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/why-does-react-need-keys</loc>
<lastmod>2026-08-21T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/shipping-bugs-to-production-smaller-prs-rollbacks-and-recovery</loc>
<lastmod>2026-08-20T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/snippets/redux-toolkit-passing-an-argument-to-selector</loc>
<lastmod>2026-08-20T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/stuck-on-one-bug-for-days-a-systematic-debugging-method</loc>
<lastmod>2026-08-19T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/getting-productive-in-a-huge-unfamiliar-codebase</loc>
<lastmod>2026-08-18T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/production-only-bugs-logging-staging-parity-and-feature-flags</loc>
<lastmod>2026-08-17T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/bugs-you-cannot-reproduce-a-repeatable-process</loc>
<lastmod>2026-08-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/ollama-vs-lm-studio-vs-llama-cpp-vs-vllm-which-to-use</loc>
<lastmod>2026-08-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/sandboxing-local-ai-coding-agents-containers-vms-and-users</loc>
<lastmod>2026-08-14T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/llm-first-vs-ner-pipelines-for-document-information-extraction</loc>
<lastmod>2026-08-13T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/sqlalchemy-many-to-many-in-a-fastapi-post-endpoint</loc>
<lastmod>2026-08-12T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/django-to-fastapi-migrating-a-team-without-chaos</loc>
<lastmod>2026-08-11T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/async-python-cpu-bound-vs-io-bound-work</loc>
<lastmod>2026-08-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/blocking-the-event-loop-latency-spikes-in-async-pipelines</loc>
<lastmod>2026-08-09T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/threadpoolexecutor-memory-blowup-million-futures</loc>
<lastmod>2026-08-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/asyncio-tasks-silently-garbage-collected</loc>
<lastmod>2026-08-07T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/jwts-need-no-database-lookup-revocation-and-logout</loc>
<lastmod>2026-08-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/roll-your-own-auth-or-use-a-provider</loc>
<lastmod>2026-08-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/access-and-refresh-tokens-where-to-store-them</loc>
<lastmod>2026-08-04T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/jwt-vs-session-cookies-how-to-choose-for-a-web-app</loc>
<lastmod>2026-08-03T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/choosing-hosting-for-a-react-django-postgresql-app</loc>
<lastmod>2026-08-02T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/automatic-rollback-when-a-container-deploy-fails</loc>
<lastmod>2026-08-01T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/debugging-502-and-404-errors-behind-a-reverse-proxy-on-a-vps</loc>
<lastmod>2026-07-31T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/keeping-postgres-data-across-docker-deploys</loc>
<lastmod>2026-07-30T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/is-docker-compose-production-ready</loc>
<lastmod>2026-07-29T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/deploying-docker-compose-to-a-vps-with-github-actions</loc>
<lastmod>2026-07-28T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/indexes-vs-write-speed-on-busy-postgresql-tables</loc>
<lastmod>2026-07-27T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/reading-explain-analyze-when-you-are-new</loc>
<lastmod>2026-07-26T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/the-missing-index-on-a-join-in-postgresql</loc>
<lastmod>2026-07-25T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/slow-serialization-of-large-pydantic-responses-in-fastapi</loc>
<lastmod>2026-07-24T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/testing-async-fastapi-with-sqlalchemy-and-pytest</loc>
<lastmod>2026-07-23T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/when-async-is-worth-it-in-fastapi-and-when-sync-def-is-fine</loc>
<lastmod>2026-07-22T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/fix-async-sqlalchemy-missinggreenlet-errors-in-fastapi</loc>
<lastmod>2026-07-21T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/celery-scales-workers-but-exhausts-the-database-connection-pool</loc>
<lastmod>2026-07-20T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/run-django-migrations-once-in-a-multi-server-deploy</loc>
<lastmod>2026-07-19T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/celery-serialization-pitfalls-and-task-always-eager-in-ci</loc>
<lastmod>2026-07-18T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/celery-worker-killed-by-the-oom-killer</loc>
<lastmod>2026-07-17T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/deploying-new-code-while-old-celery-tasks-are-queued</loc>
<lastmod>2026-07-16T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/deploy-celery-worker-beat-and-flower-with-docker-compose</loc>
<lastmod>2026-07-15T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/celery-vs-cron-or-a-django-management-command</loc>
<lastmod>2026-07-14T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/react-state-not-rerendering-and-you-might-not-need-useeffect</loc>
<lastmod>2026-07-13T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/why-useeffect-loops-forever-and-how-to-fix-it</loc>
<lastmod>2026-07-12T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/migrate-next-js-pages-router-to-app-router</loc>
<lastmod>2026-07-11T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/error-handling-in-the-next-js-app-router</loc>
<lastmod>2026-07-10T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/pass-search-params-and-page-data-to-layouts</loc>
<lastmod>2026-07-09T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/make-next-js-navigation-feel-fast-on-slow-networks</loc>
<lastmod>2026-07-08T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/next-js-middleware-limits-and-trailing-slash-redirects</loc>
<lastmod>2026-07-07T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/structure-a-large-next-js-app-router-project</loc>
<lastmod>2026-07-06T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/fix-use-client-boundary-and-provider-errors</loc>
<lastmod>2026-07-05T00:00:00.000Z</lastmod>
</url>
<url>
<loc>https://vishalmaurya.dev/blog/why-next-js-app-router-data-is-stale</loc>
<lastmod>2026-07-04T00:00:00.000Z</lastmod>
</url>
</urlset>
