<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://theodufort.com/</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/about</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/projects</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/tools</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/resources</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/skool</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/quick-support</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/free-analysis</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/contact</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/5-postgresql-extensions-supabase</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/ai-tools-vs-freelancers-vs-agencies-2026</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/call-api-from-postgres-sql-functions</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/connect-supabase-to-cursor-with-mcp</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/coolify-build-server-offload-builds</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/coolify-instance-backup-restore</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/custom-cursor-ai-rules</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/database-normal-forms-1nf-to-5nf</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/fastest-way-nextjs-multilingual</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/feeling-overwhelmed-building-web-app-3-steps</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/fixing-lovable-errors-troubleshooting-guide</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/free-database-architecture-review-ep1</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/free-database-architecture-review-ep2</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/free-database-architecture-review-ep3</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/full-database-access-supabase-mcp-cursor</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/generate-typescript-types-from-supabase</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/how-to-actually-understand-rag</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/how-to-choose-web-tech-stack-2026</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/lovable-supabase-quick-setup</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/managing-supabase-like-a-pro</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/migrate-supabase-to-self-hosted</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/multi-tenant-deployments-lovable-supabase-github-forks</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/multiple-nextjs-apps-one-vps-coolify</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/nextjs-onboarding-tours-nextstep</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/postgresql-indexing-deep-dive</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/postgresql-partitioning-5-methods</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/postgresql-table-partitioning-11x-benchmark</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/postgrest-turn-postgresql-into-rest-api</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/rag-app-cost-budgeting-llm-vector-storage</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/scale-of-massive-projects-bank-dev-pipeline</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-cost-savings-supabase-vps</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-free-translation-api-libretranslate</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-n8n-coolify</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-nextjs-supabase-coolify</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-ollama-local-ai</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-open-webui-ollama</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-s3-buckets-minio</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/self-host-too-much-when-not-to</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/session-based-auth-in-pure-postgres</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/supabase-dev-vs-production-setup</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/supabase-edge-functions-overrated</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/supabase-production-ready-vs-what-devs-ship</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/supabase-scheduled-backups-coolify-r2</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/supabase-storage-vs-r2-s3-cost</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/supabase-webhooks-ultimate-guide</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/ultimate-supabase-local-development-guide</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/blog/why-explain-analyze-is-your-best-friend</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies/ai-saas-workspace-access-control-audit</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies/disc-golf-app-gamification-security-audit</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies/ai-vocabulary-app-index-and-security-audit</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies/ai-crm-multi-tenant-security-audit</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies/whiteboard-saas-data-privacy-audit</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/case-studies/museum-directory-security-performance-audit</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/resources/supabase-project-rescue-checklist</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://theodufort.com/tools/ai-cost-calculator</loc><lastmod>2026-08-29T20:45:19.345Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url></urlset>