<?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">
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-package-code-quality-stack-pest-phpstan-rector-pint</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>A Laravel Package Code Quality Stack That Survives Version Drift</image:title>
            <image:caption>A practical Laravel package maintenance guide for Pest, PHPStan, Rector, Pint, matrix CI, release gates, and compatibility checks that catch version drift early.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/ai-search-laravel</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-ai-sdk-sub-agents-orchestration-pattern/blog-laravel-ai-sdk-sub-agents-orchestration-pattern-1200.webp</image:loc>
            <image:title>AI Search Optimization for Laravel Websites in 2026</image:title>
            <image:caption>A 2026 playbook for AI search optimization in Laravel: schema, content depth, llms.txt, sitemaps, IndexNow, and measurable visibility.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/splitting-laravel-boost-guidelines-into-focused-partials</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-contact/page-contact-1200.webp</image:loc>
            <image:title>Splitting Laravel Boost Guidelines Into Focused Package Partials</image:title>
            <image:caption>A package-maintainer pattern for composing Laravel Boost AI guidelines from Blade partials without turning core.blade.php into an unreadable wall of instructions.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/keep-sqlite-alive-laravel-forge-zero-downtime-deploys</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-filament-admin-panels/page-filament-admin-panels-1200.webp</image:loc>
            <image:title>Keep SQLite Alive During Laravel Forge Zero-Downtime Deployments</image:title>
            <image:caption>A practical deployment guide for running SQLite on Laravel Forge without losing data when zero-downtime releases switch the current symlink.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-ai-sdk-sub-agents-orchestration-pattern</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-ai-sdk-sub-agents-orchestration-pattern/blog-laravel-ai-sdk-sub-agents-orchestration-pattern-1200.webp</image:loc>
            <image:title>Laravel AI SDK Sub-Agents as a Clean Orchestration Pattern</image:title>
            <image:caption>A practical guide to Laravel AI SDK sub-agents, specialist agent boundaries, tool exposure, queueing, testing, and production orchestration patterns.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/authenticating-any-eloquent-model-laravel-sanctum-api</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Authenticating Any Eloquent Model in a Laravel Sanctum API</image:title>
            <image:caption>A production guide to using Laravel Sanctum tokens for projects, tenants, devices, and organizations instead of forcing every API request through User.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-addressable-polymorphic-addresses-eloquent-models</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-sitemap/page-sitemap-1200.webp</image:loc>
            <image:title>Laravel Addressable for Polymorphic Addresses on Eloquent Models</image:title>
            <image:caption>A production-focused guide to Laravel Addressable, polymorphic addresses, billing and shipping relations, eager loading, primary addresses, metadata, and spatial queries.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/wirebones-livewire-skeleton-placeholders-real-dom</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>Wirebones Generates Livewire Skeletons from the Real DOM</image:title>
            <image:caption>A detailed guide to Wirebones, Livewire lazy placeholders, DOM-based skeleton generation, responsive capture, CI checks, and production deployment.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-mongodb-vector-search-recommendation-engine</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-contact/page-contact-1200.webp</image:loc>
            <image:title>Building Laravel Recommendations with MongoDB Vector Search</image:title>
            <image:caption>A production guide to Laravel recommendations with MongoDB Vector Search, embeddings, Atlas indexes, queued refreshes, filters, caching, and safe UI output.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-container-best-practices-alpine-images-multi-stage-oci-labels</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>PHP Container Best Practices: Alpine Images, Multi-Stage &amp; OCI Labels</image:title>
            <image:caption>Production Docker guide for PHP - minimal Alpine base images, multi-stage builds, non-root users, and health check configuration.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/generics-in-php-current-workarounds-what-future-holds</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Generics in PHP: Current Workarounds and What the Future Holds</image:title>
            <image:caption>Explores PHP&apos;s current lack of runtime generics: PHPDoc template annotations, Psalm and PHPStan generics, and the current RFC landscape.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-85-property-hooks-in-laravel</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-85-property-hooks-in-laravel/blog-php-85-property-hooks-in-laravel-1200.webp</image:loc>
            <image:title>PHP 8.5 Property Hooks in Laravel</image:title>
            <image:caption>A practical guide to PHP 8.5 property hooks in Laravel, including safe use cases, Eloquent boundaries, DTO patterns, and SEO-friendly examples.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-webhooks-filament-admin-panels-webhook-monitoring-ui</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>PHP Webhooks With Filament: Admin Panels and Webhook Monitoring UI</image:title>
            <image:caption>Builds a Filament v3 admin panel with a webhook log viewer, retry controls, and signature verification status dashboard.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-pulse-real-time-application-monitoring-dashboard-explained</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Laravel Pulse: Real-Time Application Monitoring Dashboard Explained</image:title>
            <image:caption>Practical guide to Laravel Pulse: setting up, configuring recorders, creating custom cards, and interpreting performance metrics.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-schema-sentinel-database-schema-drift-ci</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-performance/page-laravel-performance-1200.webp</image:loc>
            <image:title>Laravel Schema Sentinel Turns Schema Drift into a CI Problem</image:title>
            <image:caption>A production guide to Laravel Schema Sentinel, schema drift detection, strict checks, generated fixes, CI gates, admin health checks, and release workflows.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-benchmarking-101-phpbench-xdebug-profiler-flame-graphs</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>PHP Benchmarking 101: phpbench, Xdebug Profiler &amp; Flame Graphs</image:title>
            <image:caption>Introduces phpbench for micro-benchmarks, Xdebug callgrind output, and flame graph visualization for identifying hot paths.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/environment-configuration-php-env-files-secrets-vault-integration</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>Environment Configuration in PHP: .env Files, Secrets &amp; Vault Integration</image:title>
            <image:caption>Best practices for managing config - dotenv libraries, secrets management with HashiCorp Vault, and runtime injection in containers.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-13-multi-tenancy-in-production</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-13-multi-tenancy-in-production/blog-laravel-13-multi-tenancy-in-production-1200.webp</image:loc>
            <image:title>Laravel 13 Multi-tenancy in Production</image:title>
            <image:caption>A production Laravel 13 multi-tenancy guide covering database isolation, tenant routing, queues, analytics, security, and SEO-safe tenant pages.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/hexagonal-architecture-php-practical-ports-adapters-implementation</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Hexagonal Architecture in PHP: Practical Ports and Adapters Implementation</image:title>
            <image:caption>Builds a complete hexagonal architecture example - domain model, use cases, ports, and adapters for HTTP, CLI, and database.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-data-transfer-objects-validation-casting-immutability-patterns</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>PHP Data Transfer Objects: Validation, Casting and Immutability Patterns</image:title>
            <image:caption>Shows multiple DTO patterns in PHP, including readonly classes, Spatie DTO package, validation at construction, and collection helpers.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-php-sdk-http-client-abstraction-retries-test-fakes</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Building a PHP SDK: HTTP Client Abstraction, Retries &amp; Test Fakes</image:title>
            <image:caption>Full tutorial for designing a third-party PHP SDK - fluent interface, PSR-18 HTTP client, retry middleware, and testable fakes.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/surviving-legacy-laravel-modernization</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-surviving-legacy-laravel-modernization/blog-surviving-legacy-laravel-modernization-1200.webp</image:loc>
            <image:title>Surviving Legacy Laravel Modernization</image:title>
            <image:caption>A practical Laravel modernization plan for legacy applications, covering tests, PHP upgrades, PHPStan, SEO regressions, and safe delivery.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-refactoring-handbook-modernize-legacy-codebases-safely</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>PHP Refactoring Handbook: How to Modernize Legacy Codebases Safely</image:title>
            <image:caption>Systematic approach to legacy PHP modernization - strangler fig pattern, characterization tests, dependency inversion, and incremental upgrades.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-memory-management-reference-counting-garbage-collection-leaks</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>PHP Memory Management: Reference Counting, Garbage Collection &amp; Leaks</image:title>
            <image:caption>Explains PHP&apos;s zval memory model, reference cycles, gc_collect_cycles, and tools like Valgrind and xDebug for leak detection.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-workers-queues-supervisor-horizon-zero-downtime-deploys</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>PHP Workers and Queues: Supervisor, Horizon &amp; Zero-Downtime Deploys</image:title>
            <image:caption>Production guide for managing PHP queue workers - Supervisor config, graceful restarts, deploy coordination, and alerting setup.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-octane-production-checklist</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Laravel Octane Production Checklist</image:title>
            <image:caption>A production Laravel Octane checklist for safe workers, memory, queues, database connections, Core Web Vitals, and measurable SEO performance gains.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-zero-build-powerful-php-cli-applications-distribute-them</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Laravel Zero: Build Powerful PHP CLI Applications and Distribute Them</image:title>
            <image:caption>Walks through building, testing, and compiling a Laravel Zero CLI tool to a PHAR with self-update and platform-specific builds.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/securing-laravel-apis-passport-sanctum-jwt-deep-comparison</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>Securing Laravel APIs: Passport vs Sanctum vs JWT Deep Comparison</image:title>
            <image:caption>Evaluates three Laravel auth strategies for APIs - comparing token types, setup complexity, revocation, and mobile app scenarios.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/phpstan-level-9-existing-laravel</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-phpstan-level-9-existing-laravel/blog-phpstan-level-9-existing-laravel-1200.webp</image:loc>
            <image:title>PHPStan Level 9 on Existing Laravel</image:title>
            <image:caption>A step-by-step PHPStan Level 9 adoption plan for existing Laravel applications, with baselines, module cleanup, CI rules, and SEO-safe releases.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/understanding-php-stream-api-file-io-wrappers-custom-protocols</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Understanding PHP Stream API: File I/O, Wrappers &amp; Custom Protocols</image:title>
            <image:caption>Explores PHP streams - wrappers, filters, stream contexts, and building custom stream wrappers for exotic storage backends.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/full-text-search-php-elasticsearch-meilisearch-laravel-scout</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Full-Text Search in PHP: Elasticsearch, Meilisearch &amp; Laravel Scout</image:title>
            <image:caption>Compares search backends, integrates each with Laravel Scout, and benchmarks relevance and performance on large datasets.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/symfony-ux-components-turbo-stimulus-live-components-2026</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>Symfony UX Components: Turbo, Stimulus &amp; Live Components in 2026</image:title>
            <image:caption>Shows how to build dynamic UIs in Symfony with UX Turbo page transitions, Stimulus controllers, and real-time Live Components.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-profiling-production-blackfire-tideways-spx-compared</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>PHP Profiling in Production: Blackfire, Tideways &amp; SPX Compared</image:title>
            <image:caption>Evaluates three PHP profilers for production use - setup, overhead, callgraph visualizations, and alerting on regressions.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-precognition-real-time-validation-without-full-form-submission</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-precognition-real-time-validation-without-full-form-submission/blog-laravel-precognition-real-time-validation-without-full-form-submission-1200.webp</image:loc>
            <image:title>Laravel Precognition: Real-Time Validation Without Full Form Submission</image:title>
            <image:caption>Deep-dive into Precognition - how it works, how to set it up with Inertia and Livewire, and front-end integration patterns.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-php-blog-engine-from-scratch-no-framework-clean-code</loc>
        <lastmod>2026-05-14</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>Building a PHP Blog Engine From Scratch: No Framework, Clean Code</image:title>
            <image:caption>Builds a feature-complete blog - routing, templating, SQLite storage, markdown support - using only the PHP standard library.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-webhooks-php-payload-validation-retries-idempotency</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Building Webhooks in PHP: Payload Validation, Retries &amp; Idempotency</image:title>
            <image:caption>Shows how to implement a robust webhook receiver - HMAC signature verification, duplicate detection, and async processing patterns.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-event-loops-explained-reactphp-amp-handle-concurrency</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>PHP Event Loops Explained: How ReactPHP and Amp Handle Concurrency</image:title>
            <image:caption>Demystifies event loops, non-blocking I/O, and timer scheduling in PHP, comparing ReactPHP streams vs Amp channels.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-code-review-checklist-50-things-senior-developers-always-check</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>PHP Code Review Checklist: 50 Things Senior Developers Always Check</image:title>
            <image:caption>A comprehensive, annotated code review checklist covering naming, error handling, security, performance, and testability issues.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-postgresql-advanced-queries-jsonb-full-text-search</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>PHP and PostgreSQL: Advanced Queries, JSONB &amp; Full-Text Search</image:title>
            <image:caption>Explores PostgreSQL-specific features from PHP - JSONB querying, array columns, CTEs, and pg_query for performance-critical apps.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/api-design-best-practices-php-developers-rest-hateoas-openapi</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>API Design Best Practices for PHP Developers: REST, HATEOAS &amp; OpenAPI</image:title>
            <image:caption>Covers API design fundamentals - hypermedia controls, status codes, versioning, and generating OpenAPI docs from PHP attributes.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/testing-laravel-applications-feature-tests-mocking-database-factories</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Testing Laravel Applications: Feature Tests, Mocking &amp; Database Factories</image:title>
            <image:caption>Covers Laravel&apos;s HTTP test helpers, Mockery integration, database factory states, and running tests against in-memory SQLite.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/pest-php-3-new-features-architectural-testing-mutation-testing</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Pest PHP 3 New Features: Architectural Testing &amp; Mutation Testing</image:title>
            <image:caption>Covers Pest 3&apos;s new architectural assertions, built-in mutation testing, how it compares with Infection PHP, and snapshot testing support.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-90-preview-whats-coming-how-prepare-codebase</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>PHP 9.0 Preview: What&apos;s Coming and How to Prepare Your Codebase</image:title>
            <image:caption>Early look at PHP 9.0 planned changes - removal of deprecated features, new syntax proposals, and migration path from 8.x.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-volt-folio-single-file-components-page-based-routing</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Laravel Volt &amp; Folio: Single-File Components and Page-Based Routing</image:title>
            <image:caption>Explores Laravel Folio&apos;s file-based routing and Volt&apos;s single-file Livewire components for rapid full-stack PHP development.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-rate-limiting-strategies-token-bucket-sliding-window-redis</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>PHP Rate Limiting Strategies: Token Bucket, Sliding Window &amp; Redis</image:title>
            <image:caption>Implements three rate-limiting algorithms in PHP with Redis, covering distributed locking, graceful degradation, and HTTP 429 responses.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/solid-principles-php-practical-examples-better-code-quality</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>SOLID Principles in PHP: Practical Examples for Better Code Quality</image:title>
            <image:caption>Demonstrates each SOLID principle with before/after PHP refactoring examples, showing how they reduce coupling and increase cohesion.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-php-package-packagist-scratch-first-release</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Building a PHP Package for Packagist: From Scratch to First Release</image:title>
            <image:caption>Full guide to designing, testing, documenting, and publishing a PHP library on Packagist with SemVer and GitHub releases.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-observability-logging-tracing-metrics-opentelemetry</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>PHP Observability: Logging, Tracing &amp; Metrics With OpenTelemetry</image:title>
            <image:caption>Implements the three pillars of observability in PHP - structured logging, distributed tracing, and Prometheus metrics with OTEL PHP SDK.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/symfony-7-migration-guide-what-changed-how-upgrade-safely</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Symfony 7 Migration Guide: What Changed and How to Upgrade Safely</image:title>
            <image:caption>Step-by-step upgrade path from Symfony 6 to 7 - breaking changes, removed components, new features, and automated migration tools.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-type-system-mastery-union-intersection-never-types-explained</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>PHP Type System Mastery: Union, Intersection &amp; Never Types Explained</image:title>
            <image:caption>Comprehensive guide to PHP&apos;s evolving type system - union, nullable, intersection, never, and void types with strict mode best practices.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-reverb-build-real-time-websocket-apps-without-third-party-services</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>Laravel Reverb: Build Real-Time WebSocket Apps Without Third-Party Services</image:title>
            <image:caption>Introduces Laravel&apos;s first-party WebSocket server - setup, horizontal scaling, authentication, and broadcasting channel integration.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/database-indexing-strategies-php-apps-b-trees-full-text-composite</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Database Indexing Strategies for PHP Apps: B-Trees, Full-Text &amp; Composite</image:title>
            <image:caption>Explains index types, covering indexes, partial indexes, and full-text search with practical MySQL and PostgreSQL PHP examples.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-ai-integrating-chatgpt-claude-apis-php-application</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>PHP and AI: Integrating ChatGPT &amp; Claude APIs Into Your PHP Application</image:title>
            <image:caption>Practical tutorial for calling LLM APIs from PHP - streaming responses, function calling, context management, and cost optimization.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/modern-php-development-workflow-git-ci-cd-docker-github-actions</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>Modern PHP Development Workflow: Git, CI/CD, Docker &amp; GitHub Actions</image:title>
            <image:caption>End-to-end guide for a professional PHP dev workflow - feature branches, automated tests, Docker builds, and zero-downtime deploys.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/what-the-next-generation-of-languages-is-teaching-us-about-how-we-think-today</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>What the Next Generation of Languages Is Teaching Us About How We Think Today</image:title>
            <image:caption>Looks at emerging languages - Zig, Gleam, Elixir, Carbon - and what their design choices reveal about the limitations in how current mainstream languages have trained developers to think.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-11-complete-guide-minimal-app-structure-bootstrapping</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>Laravel 11 Complete Guide: New Minimal App Structure &amp; Bootstrapping</image:title>
            <image:caption>Covers the redesigned minimal directory structure, single bootstrap file, merged config, and new artisan commands in Laravel 11.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-84-released-complete-breakdown-every-new-feature</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>PHP 8.4 Released: Complete Breakdown of Every New Feature</image:title>
            <image:caption>Definitive release guide covering property hooks, asymmetric visibility, lazy objects, the new HTML5 parser, and all deprecations.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/giving-back-at-scale-how-to-build-an-open-source-culture-within-your-engineering-team</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Giving Back at Scale: How to Build an Open Source Culture Within Your Engineering Team</image:title>
            <image:caption>Practical playbook for engineering managers - allocating contribution time, choosing strategic projects, recognising contributors, and making open source part of the team identity.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/symfony-messenger-async-messaging-retry-logic-dead-letter-queues</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Symfony Messenger: Async Messaging, Retry Logic &amp; Dead Letter Queues</image:title>
            <image:caption>Explores Symfony Messenger transports, middleware, retry stamps, failure transport, and monitoring with built-in CLI commands.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-slow-death-of-boilerplate-how-modern-frameworks-liberated-developer-thinking</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>The Slow Death of Boilerplate: How Modern Frameworks Liberated Developer Thinking</image:title>
            <image:caption>Charts the progressive elimination of ceremony in frameworks - from struts XML configs to Laravel&apos;s zero-config defaults - and how each reduction shifted developer attention toward actual problems.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/secure-php-file-uploads-validation-storage-malware-prevention</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>Secure PHP File Uploads: Validation, Storage &amp; Malware Prevention</image:title>
            <image:caption>Complete upload security guide: MIME validation, file-name sanitization, virus scanning integration, and secure S3 storage patterns.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/post-mortem-culture-turning-every-major-bug-into-team-learning-opportunity</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Post-Mortem Culture: Turning Every Major Bug Into a Team Learning Opportunity</image:title>
            <image:caption>Establishes a blameless post-mortem process - timeline reconstruction, five-whys root cause analysis, and action items that prevent entire classes of future bugs.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-fibers-vs-reactphp-vs-amp-async-php-ecosystem-comparison-2024</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>PHP Fibers vs ReactPHP vs Amp: Async PHP Ecosystem Comparison 2024</image:title>
            <image:caption>Side-by-side comparison of PHP async approaches: native Fibers, ReactPHP event loop, and Amp coroutines with benchmark methodology.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/what-corporate-open-source-contributions-actually-look-like-from-the-inside</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>What Corporate Open Source Contributions Actually Look Like From the Inside</image:title>
            <image:caption>An insider look at how companies like Google, Meta, and Microsoft structure open source teams, measure contribution impact, and balance community needs with business objectives.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/language-paradigms-as-lenses-what-learning-a-new-paradigm-does-to-your-developer-brain</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Language Paradigms as Lenses: What Learning a New Paradigm Does to Your Developer Brain</image:title>
            <image:caption>Explores the cognitive science of paradigm shifts - how learning OOP, functional, or concurrent programming rewires problem-solving instincts that persist long after you stop using the language.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/simplicity-at-scale-great-engineering-teams-keep-codebases-clean-over-time</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Simplicity at Scale: How Great Engineering Teams Keep Codebases Clean Over Time</image:title>
            <image:caption>Examines how high-performing teams sustain simplicity through architectural decision records, complexity budgets, and a shared culture of ruthless editing.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/optimizing-laravel-high-traffic-horizon-telescope-load-testing</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>Optimizing Laravel for High Traffic: Horizon, Telescope &amp; Load Testing</image:title>
            <image:caption>End-to-end performance playbook: queue tuning with Horizon, debug profiling with Telescope, and k6 load testing strategies.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-event-sourcing-systems-php-step-by-step-implementation</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>Building Event Sourcing Systems in PHP: A Step-by-Step Implementation</image:title>
            <image:caption>Implements an event store, aggregate roots, projectors, and process managers for an event-sourced PHP application from scratch.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-rector-automated-code-upgrades-refactoring-made-simple</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>PHP Rector: Automated Code Upgrades and Refactoring Made Simple</image:title>
            <image:caption>Introduction to Rector: running existing rule sets for PHP upgrades, writing custom rules, and integrating into CI/CD pipelines.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-kubernetes-rewired-the-way-engineers-think-about-infrastructure-and-applications</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>How Kubernetes Rewired the Way Engineers Think About Infrastructure and Applications</image:title>
            <image:caption>Examines how Kubernetes shifted infrastructure thinking from servers and processes to desired state, reconciliation loops, and declarative configuration as the new lingua franca of operations.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/security-in-open-source-why-transparency-is-both-greatest-strength-and-risk</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Security in Open Source: Why Transparency Is Both the Greatest Strength and Risk</image:title>
            <image:caption>Examines the dual nature of open source security - public code enables auditing but also attack research - covering responsible disclosure and dependency vulnerability management.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/debugging-across-full-stack-tracing-bug-browser-database</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>Debugging Across the Full Stack: Tracing a Bug From Browser to Database</image:title>
            <image:caption>Walks through a realistic end-to-end bug hunt spanning JavaScript console errors, HTTP requests, backend exceptions, and slow database queries.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/elegant-apis-how-design-interfaces-feel-obvious-use</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>Elegant APIs: How to Design Interfaces That Feel Obvious to Use</image:title>
            <image:caption>Covers the principles behind intuitive API design - minimal required knowledge, consistent conventions, and interfaces that guide users toward correct usage.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/real-time-notifications-laravel-broadcasting-pusher</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Real-Time Notifications in Laravel With Broadcasting &amp; Pusher</image:title>
            <image:caption>Implements server-side events, Echo.js front-end integration, private channels, and presence channels for real-time user notifications.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/mastering-php-composer-plugins-extend-build-pipeline-powerfully</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Mastering PHP Composer Plugins: Extend Your Build Pipeline Powerfully</image:title>
            <image:caption>Shows how to write, test, and publish Composer plugins for code generation, post-install hooks, and asset compilation automation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-evolution-of-sql-how-a-50-year-old-language-keeps-reinventing-developer-thinking</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>The Evolution of SQL: How a 50-Year-Old Language Keeps Reinventing Developer Thinking</image:title>
            <image:caption>Traces SQL from relational theory to window functions, CTEs, JSON columns, and vector search - showing how each addition changed what developers reached for when modelling data problems.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-84-preview-property-hooks-lazy-objects-new-array-functions</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>PHP 8.4 Preview: Property Hooks, Lazy Objects &amp; New Array Functions</image:title>
            <image:caption>Early preview of PHP 8.4 changes: property hooks as a major OOP addition, lazy object proxies, and new array helper functions.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/writing-code-easy-debug-observability-first-development</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Writing Code That Is Easy to Debug: Observability-First Development</image:title>
            <image:caption>Shifts the mindset from reactive debugging to proactive observability - designing state machines, audit trails, and invariant checks into the code itself.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-culture-of-code-review-in-open-source-honest-harsh-occasionally-brilliant</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>The Culture of Code Review in Open Source: Honest, Harsh &amp; Occasionally Brilliant</image:title>
            <image:caption>Explores the unique norms of open source code review - directness without cruelty, technical precision, and the rare experience of having your code reviewed by true domain experts.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/relationship-between-tests-elegant-design-simplicity-signal</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>The Relationship Between Tests and Elegant Design: Simplicity as a Signal</image:title>
            <image:caption>Argues that hard-to-test code is a symptom of poor design, and that writing tests first naturally drives toward simpler, more cohesive structures.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-api-resources-transform-json-responses-like-a-pro</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Laravel API Resources: Transform Your JSON Responses Like a Pro</image:title>
            <image:caption>Covers resource classes, resource collections, conditional attributes, nested includes, and metadata injection for clean API outputs.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-react-changed-the-mental-model-of-ui-development-across-the-entire-industry</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>How React Changed the Mental Model of UI Development Across the Entire Industry</image:title>
            <image:caption>Documents React&apos;s paradigm shift - declarative rendering, unidirectional data flow, and component thinking - and how it permanently changed how developers conceptualise user interfaces.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/design-patterns-php-factory-strategy-observer-decorator</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Design Patterns in PHP: Factory, Strategy, Observer &amp; Decorator</image:title>
            <image:caption>Code-heavy tutorial implementing GoF design patterns in modern PHP 8.x with interface-first design and practical use cases.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/thrill-fix-solving-hard-bug-teaches-system</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>The Thrill of the Fix: What Solving a Hard Bug Teaches You About Your System</image:title>
            <image:caption>Reflects on how the most painful debugging sessions yield the deepest system knowledge, and how to capture and share that understanding with your team.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/contributing-to-open-source-as-a-junior-developer-what-nobody-tells-you</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Contributing to Open Source as a Junior Developer: What Nobody Tells You</image:title>
            <image:caption>Honest account of the challenges new developers face - imposter syndrome, intimidating codebases, slow review cycles - with concrete strategies for pushing through each one.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-async-http-requests-guzzle-promises-curl-multi-handle</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-precognition-real-time-validation-without-full-form-submission/blog-laravel-precognition-real-time-validation-without-full-form-submission-1200.webp</image:loc>
            <image:title>PHP Async HTTP Requests With Guzzle Promises &amp; cURL Multi Handle</image:title>
            <image:caption>Compares serial vs parallel HTTP calls, demonstrates Guzzle pool concurrency, and benchmarks real-world API aggregation speedups.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/code-reviews-champion-simplicity-what-look-how-say-it</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>Code Reviews That Champion Simplicity: What to Look for and How to Say It</image:title>
            <image:caption>Gives reviewers a practical vocabulary for identifying and discussing unnecessary complexity without discouraging experimentation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-eloquent-relationships-hasmanythrough-morphmany-performance</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Laravel Eloquent Relationships: HasManyThrough, MorphMany &amp; Performance</image:title>
            <image:caption>Deep-dive into complex Eloquent relationships, N+1 problem detection with Telescope, eager loading strategies, and query optimization.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-symfony-component-model-how-one-framework-taught-php-to-think-in-reusable-parts</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>The Symfony Component Model: How One Framework Taught PHP to Think in Reusable Parts</image:title>
            <image:caption>Traces Symfony&apos;s evolution from monolithic framework to a decoupled component library - and how that architectural shift influenced every major PHP project that followed.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/functional-thinking-path-simpler-code-pure-functions-immutability</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Functional Thinking as a Path to Simpler Code: Pure Functions &amp; Immutability</image:title>
            <image:caption>Explains how functional programming ideas - pure functions, no side effects, immutable data - produce code that is dramatically easier to reason about.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-serverless-with-bref-aws-lambda-cold-starts-layers-cost</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>PHP Serverless With Bref on AWS Lambda: Cold Starts, Layers &amp; Cost</image:title>
            <image:caption>Guide to running Laravel/Symfony on Lambda via Bref, covering layer management, cold start mitigation, and real-world cost analysis.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/debugging-third-party-libraries-when-bug-not-your-code</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Debugging Third-Party Libraries: When the Bug Is Not Your Code</image:title>
            <image:caption>Guides developers through diagnosing bugs inside dependencies - reading source, bisecting versions, writing minimal reproducers, and filing useful issues.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-open-source-shaped-modern-internet-history-worth-knowing</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>How Open Source Shaped the Modern Internet: A History Worth Knowing</image:title>
            <image:caption>Traces the infrastructure of the modern web - Linux, Apache, OpenSSL, PostgreSQL, and Git - showing how freely shared code became the foundation everything else runs on.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/implementing-oauth-20-php-authorization-code-flow-from-scratch</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Implementing OAuth 2.0 in PHP: Authorization Code Flow From Scratch</image:title>
            <image:caption>Full implementation of OAuth 2.0 authorization code + PKCE flow in PHP, authorization endpoint, token exchange, and refresh logic.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-develop-eye-elegant-code-skill-building-roadmap</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>How to Develop an Eye for Elegant Code: A Skill-Building Roadmap</image:title>
            <image:caption>Outlines a deliberate practice path - reading great codebases, performing kata exercises, and seeking feedback to develop aesthetic code judgment.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-docker-changed-the-way-developers-think-about-environments-forever</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>How Docker Changed the Way Developers Think About Environments Forever</image:title>
            <image:caption>Argues that Docker&apos;s container model did not just solve deployment - it fundamentally shifted how developers conceptualise application boundaries, dependencies, and reproducibility.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/when-bug-not-where-you-think-classic-misdirection-debugging</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>When the Bug Is Not Where You Think It Is: Classic Misdirection in Debugging</image:title>
            <image:caption>Examines common misdirection patterns - symptoms in module A caused by bugs in module B - and how to retrace assumptions when a trail goes cold.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-cli-tools-php-symfony-console-component</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>Building CLI Tools With PHP and Symfony Console Component</image:title>
            <image:caption>Creates a feature-rich CLI application with commands, progress bars, table output, interactive prompts, and PHAR compilation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/forking-as-a-feature-how-disagreement-drives-innovation-in-open-source</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>Forking as a Feature: How Disagreement Drives Innovation in Open Source</image:title>
            <image:caption>Reframes the fork not as a failure of community but as a vital mechanism - exploring famous forks like MariaDB, LibreOffice, and Node/io.js and what they produced.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-ipv6-configuration-enabling-addressing-firewall-rules-ip6tables</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>Linux IPv6 Configuration: Enabling, Addressing &amp; Firewall Rules With ip6tables</image:title>
            <image:caption>Configures static and SLAAC IPv6 addressing, sets up ip6tables firewall rules, enables Router Advertisements, and tests connectivity end-to-end.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/automated-testing-pyramid-php-unit-integration-e2e-pest</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Automated Testing Pyramid in PHP: Unit, Integration &amp; E2E With Pest</image:title>
            <image:caption>Introduces Pest as an expressive PHP testing framework, demonstrates the testing pyramid, and shows parallel test execution.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-object-oriented-revolution-how-oop-changed-the-mental-model-of-an-entire-industry</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>The Object-Oriented Revolution: How OOP Changed the Mental Model of an Entire Industry</image:title>
            <image:caption>Examines how object-oriented thinking transformed software design in the 1990s and how its dominance shaped - and occasionally distorted - the way developers model every problem.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/yagni-principle-practice-shipping-simple-code-lasts</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>The YAGNI Principle in Practice: Shipping Simple Code That Lasts</image:title>
            <image:caption>Practical guide to You Aren&apos;t Gonna Need It - recognizing speculative features in code review, and techniques for deferring decisions safely.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-linux-audit-system-auditd-rules-reports-compliance</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>Configuring Linux Audit System: auditd Rules, Reports &amp; Compliance</image:title>
            <image:caption>Sets up auditd with custom rules for file access, privilege escalation, and network-related syscalls, then generates aureport reports for compliance audits.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/debugging-notebook-why-writing-down-hypotheses-makes-you-faster</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>The Debugging Notebook: Why Writing Down Your Hypotheses Makes You Faster</image:title>
            <image:caption>Makes the case for keeping a live debugging journal - recording what you tried, what you ruled out, and what you suspect to prevent circular thinking.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-encryption-best-practices-aes-256-libsodium-secure-key-management</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>PHP Encryption Best Practices: AES-256, Libsodium &amp; Secure Key Management</image:title>
            <image:caption>Shows proper symmetric and asymmetric encryption, key rotation, and envelope encryption using PHP&apos;s sodium extension.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-boot-process-deep-dive-grub2-initramfs-systemd-target-config</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Linux Boot Process Deep Dive: GRUB2, initramfs &amp; systemd Target Config</image:title>
            <image:caption>Traces the full boot sequence from BIOS or UEFI through GRUB2 menu configuration, initramfs hooks, systemd targets, and default runlevel setup.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/sql-vs-nosql-php-apps-when-use-mysql-mongodb-redis</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>SQL vs NoSQL in PHP Apps: When to Use MySQL, MongoDB or Redis</image:title>
            <image:caption>Decision guide comparing relational, document, and key-value stores for common PHP use cases, with code examples for all three.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/from-user-to-contributor-to-maintainer-the-open-source-career-path</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>From User to Contributor to Maintainer: The Open Source Career Path</image:title>
            <image:caption>Maps the natural progression from grateful user to active contributor to trusted maintainer, with milestones, mindset shifts, and skills developed at each stage.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/implementing-cqrs-in-php-separating-commands-queries-scalability</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Implementing CQRS in PHP: Separating Commands and Queries for Scalability</image:title>
            <image:caption>Walks through a PHP CQRS implementation - command/query buses, read models, projections, and eventual consistency trade-offs.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/setting-up-ansible-linux-configuration-management-playbooks-roles</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Setting Up Ansible for Linux Configuration Management: Playbooks &amp; Roles</image:title>
            <image:caption>Introduction to Ansible inventory, playbooks, roles, handlers, and Vault for secrets, automating repeatable Linux server configuration at scale.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/elegant-error-handling-simplicity-beyond-happy-path</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Elegant Error Handling: How Simplicity Applies Beyond the Happy Path</image:title>
            <image:caption>Applies elegance principles to error handling - meaningful error types, fail-fast design, and avoiding defensive code that obscures real intent.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-functional-programming-languages-quietly-reshaped-mainstream-development</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>How Functional Programming Languages Quietly Reshaped Mainstream Development</image:title>
            <image:caption>Traces how ideas from Haskell, Erlang, and Clojure - immutability, map/filter/reduce, pattern matching - migrated into Python, Java, JavaScript, and PHP over two decades.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-kernel-module-configuration-loading-blacklisting-building</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>Linux Kernel Module Configuration: Loading, Blacklisting &amp; Building</image:title>
            <image:caption>Covers modprobe, /etc/modules-load.d, blacklisting problematic modules, writing a minimal kernel module in C, and signing for Secure Boot.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/using-debugger-properly-breakpoints-watch-expressions-call-stack-inspection</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Using a Debugger Properly: Breakpoints, Watch Expressions &amp; Call Stack Inspection</image:title>
            <image:caption>Goes beyond print statements to teach conditional breakpoints, logpoints, memory inspection, and stepping strategies in modern debugger tooling.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-octane-turbocharged-php-swoole-roadrunner-production</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Laravel Octane: Turbocharged PHP With Swoole &amp; RoadRunner in Production</image:title>
            <image:caption>Explains how Octane boots your app once per worker, covers stateful pitfalls, memory leaks, and production deployment considerations.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/why-documentation-is-the-most-undervalued-contribution-in-open-source</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Why Documentation Is the Most Undervalued Contribution in Open Source</image:title>
            <image:caption>Makes the case that great documentation multiplies the impact of every other contribution, and gives a practical framework for writing docs that actually help newcomers.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>Deploying PHP Apps to AWS: EC2, ECS Fargate &amp; Lambda Runtimes Guide</image:title>
            <image:caption>Compares deployment approaches for PHP on AWS - from traditional EC2 to containerized Fargate and serverless Bref Lambda functions.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-samba-linux-file-shares-active-directory-permissions</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>Configuring Samba on Linux: File Shares, Active Directory &amp; Permissions</image:title>
            <image:caption>Sets up Samba shares with user authentication, joins Linux to Windows Active Directory with Winbind, and maps UNIX/Windows permissions.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-namespace-cgroup-fundamentals-how-containers-really-work</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>Linux Namespace and cgroup Fundamentals: How Containers Really Work</image:title>
            <image:caption>Explores PID, network, mount, UTS, IPC, and user namespaces, linking them to cgroups to show the foundations of container isolation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/debugging-race-conditions-concurrency-bugs-practical-field-guide</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Debugging Race Conditions and Concurrency Bugs: A Practical Field Guide</image:title>
            <image:caption>Tackles the hardest class of bugs - race conditions, deadlocks, and stale reads - with thread sanitiser tools, lock analysis, and deterministic replay.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/writing-code-humans-first-readability-professional-responsibility</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Writing Code for Humans First: Readability as a Professional Responsibility</image:title>
            <image:caption>Makes the case that code is read far more than it is written, and that optimising for the reader is the most impactful thing a developer can do.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/from-callbacks-to-promises-to-async-await-how-async-thinking-evolved-in-javascript</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>From Callbacks to Promises to Async/Await: How Async Thinking Evolved in JavaScript</image:title>
            <image:caption>Traces the decade-long evolution of asynchronous JavaScript - how each abstraction layer changed how developers reason about time, concurrency, and error handling.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-83-features-typed-class-constants-json-validate-more</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>PHP 8.3 Features: Typed Class Constants, json_validate() &amp; More</image:title>
            <image:caption>Comprehensive coverage of PHP 8.3 additions: typed class constants, json_validate(), mb_str_pad(), Randomizer improvements, and migration notes for PHP 8.2 teams.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/hardening-linux-ssh-2fa-google-authenticator-certificate-auth</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>Hardening Linux SSH: 2FA With Google Authenticator &amp; Certificate Auth</image:title>
            <image:caption>Implements SSH two-factor authentication with the Google Authenticator PAM module and OpenSSH certificate authority authentication for controlled server access.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-economics-of-open-source-sponsorships-grants-building-a-sustainable-income</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>The Economics of Open Source: Sponsorships, Grants &amp; Building a Sustainable Income</image:title>
            <image:caption>Surveys funding models for open source developers - GitHub Sponsors, Open Collective, Tidelift, consulting arrangements, and dual-licensing strategies.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/api-versioning-in-php-strategies-url-paths-header-based-approaches</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>API Versioning in PHP: Strategies, URL Paths &amp; Header-Based Approaches</image:title>
            <image:caption>Evaluates URL path, query string, header, and media-type versioning with PHP implementation examples and backwards-compatibility tips.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/simple-abstractions-vs-leaky-ones-how-tell-difference</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>Simple Abstractions vs Leaky Ones: How to Tell the Difference</image:title>
            <image:caption>Defines what makes an abstraction genuinely useful versus one that forces callers to understand its internals to use it correctly.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-high-availability-keepalived-vrrp-failover-configuration</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Linux High Availability With Keepalived: VRRP &amp; Failover Configuration</image:title>
            <image:caption>Sets up Keepalived VRRP for virtual IP failover, configures health check scripts, tracks interface state, and tests manual failover.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-microservices-with-roadrunner-high-performance-worker-pattern-explained</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>PHP Microservices With RoadRunner: High-Performance Worker Pattern Explained</image:title>
            <image:caption>Introduces RoadRunner as a Go-based PHP app server, covering worker loops, middleware, HTTP/2, and benchmarks vs php-fpm.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-reproduce-bug-reliably-most-underrated-debugging-skill</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>How to Reproduce a Bug Reliably: The Most Underrated Debugging Skill</image:title>
            <image:caption>Argues that reliable reproduction is 80% of the solution, covering environment snapshots, seed data, request replay, and minimising the reproduction case.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-laravel-effect-how-one-framework-made-php-developers-think-in-elegant-patterns</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>The Laravel Effect: How One Framework Made PHP Developers Think in Elegant Patterns</image:title>
            <image:caption>Documents how Laravel introduced expressive APIs, Eloquent ORM, and a developer-experience philosophy that fundamentally raised expectations across the entire PHP ecosystem.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>Building Multi-Tenant SaaS Apps in Laravel: Architecture &amp; Tenancy Strategies</image:title>
            <image:caption>Compares single-database, multi-database, and schema-based tenancy with practical code for middleware, scoping, and data isolation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-to-maintain-an-open-source-project-without-it-consuming-your-life</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>How to Maintain an Open Source Project Without It Consuming Your Life</image:title>
            <image:caption>Practical boundaries and systems for maintainers - issue triage templates, bot automation, co-maintainer onboarding, and how to say no without guilt.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-postgresql-linux-authentication-tuning-replication</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Configuring PostgreSQL on Linux: Authentication, Tuning &amp; Replication</image:title>
            <image:caption>Covers pg_hba.conf authentication methods, postgresql.conf memory and connection tuning, WAL-based streaming replication, and pg_stat monitoring.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-resource-limits-ulimit-cgroups-v2-systemd-slice-configuration</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Linux Resource Limits: ulimit, cgroups v2 &amp; Systemd Slice Configuration</image:title>
            <image:caption>Sets per-user and per-process limits with ulimit and /etc/security/limits.conf, then manages resources with cgroups v2 and systemd slices.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/memory-leaks-infinite-loops-debugging-bugs-hide-plain-sight</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Memory Leaks and Infinite Loops: Debugging the Bugs That Hide in Plain Sight</image:title>
            <image:caption>Methodical approach to diagnosing memory leaks and infinite loops - profiler usage, heap snapshots, watchdog timers, and systematic reproduction steps.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/art-knowing-what-delete-elegance-through-subtraction</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>The Art of Knowing What to Delete: Elegance Through Subtraction</image:title>
            <image:caption>Shows how the most impactful refactors remove code rather than add it - dead branches, redundant layers, and abstractions that outlived their purpose.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/working-with-php-attributes-replace-annotations-native-metadata</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Working With PHP Attributes: Replace Annotations With Native Metadata</image:title>
            <image:caption>Shows how to write, read, and validate PHP 8 Attributes, and how frameworks like Symfony and Doctrine are adopting them internally.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/open-source-governance-models-bdfl-committees-foundation-led-projects</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Open Source Governance Models: BDFL, Committees &amp; Foundation-Led Projects</image:title>
            <image:caption>Compares how major projects make decisions - from Linus Torvalds&apos; Linux model to Python&apos;s steering council and Apache Foundation&apos;s committee structure.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-rust-changes-the-way-you-think-about-memory-forever</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>How Rust Changes the Way You Think About Memory Forever</image:title>
            <image:caption>Explores how Rust&apos;s ownership model does not just prevent bugs - it instils a permanent mental model of memory lifetimes that improves how developers reason in every language they return to.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/setting-up-linux-dns-server-bind9-zones-records-dnssec</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Setting Up a Linux DNS Server With BIND9: Zones, Records &amp; DNSSEC</image:title>
            <image:caption>Configures BIND9 authoritative and recursive resolvers, writes forward and reverse zone files, enables DNSSEC signing, and tests with dig.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-static-analysis-with-phpstan-psalm-catch-bugs-before-runtime</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>PHP Static Analysis With PHPStan &amp; Psalm: Catch Bugs Before Runtime</image:title>
            <image:caption>Compares PHPStan and Psalm, covers level configuration, baseline management, custom rules, and CI integration for zero-defect deploys.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-container-networking-bridges-veth-pairs-iptables-deep-dive</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Linux Container Networking: Bridges, veth Pairs &amp; iptables Deep Dive</image:title>
            <image:caption>Explains how Docker and LXC use Linux bridges, veth pairs, network namespaces, and iptables NAT rules for container connectivity.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/role-logging-debugging-what-log-skip-how-search-it</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>The Role of Logging in Debugging: What to Log, What to Skip &amp; How to Search It</image:title>
            <image:caption>Designs a logging strategy that makes future debugging fast - structured log fields, correlation IDs, appropriate log levels, and querying with grep and jq.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/integrating-stripe-payments-laravel-subscriptions-webhooks-guide</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>Integrating Stripe Payments in Laravel: Subscriptions &amp; Webhooks Guide</image:title>
            <image:caption>Step-by-step Stripe Checkout integration covering recurring billing, webhook verification, idempotency, and failed-payment handling.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/naming-things-well-single-biggest-step-toward-elegant-code</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Naming Things Well: The Single Biggest Step Toward Elegant Code</image:title>
            <image:caption>Argues that precise, honest naming is the foundation of simplicity - covering variables, functions, classes, and the discipline of renaming when meaning shifts.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-redis-linux-persistence-memory-limits-replication</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Configuring Redis on Linux: Persistence, Memory Limits &amp; Replication</image:title>
            <image:caption>Tunes redis.conf for production: RDB and AOF persistence, maxmemory policies, bind address, password auth, and primary-replica replication.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-art-of-writing-a-good-pull-request-what-open-source-maintainers-actually-want</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>The Art of Writing a Good Pull Request: What Open Source Maintainers Actually Want</image:title>
            <image:caption>Covers what separates accepted PRs from rejected ones - focused scope, clear description, linked issues, passing tests, and respectful engagement with feedback.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-go-language-philosophy-how-simplicity-and-constraints-produce-better-engineers</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>The Go Language Philosophy: How Simplicity and Constraints Produce Better Engineers</image:title>
            <image:caption>Examines how Go&apos;s deliberate omissions - no generics for years, no inheritance, minimal syntax - force developers to solve problems differently and value clarity over cleverness.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/event-driven-architecture-php-events-listeners-message-buses</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>Event-Driven Architecture in PHP: Events, Listeners &amp; Message Buses</image:title>
            <image:caption>Implements a simple in-process event bus in PHP, then scales to RabbitMQ and Symfony Messenger for distributed event processing.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-disk-encryption-luks-full-disk-container-encryption</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-precognition-real-time-validation-without-full-form-submission/blog-laravel-precognition-real-time-validation-without-full-form-submission-1200.webp</image:loc>
            <image:title>Linux Disk Encryption With LUKS: Full-Disk &amp; Container Encryption</image:title>
            <image:caption>Encrypts partitions and loop devices with LUKS2, manages key slots, sets up auto-unlock with TPM2, and configures /etc/crypttab.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/database-migrations-best-practices-laravel-rollbacks-seeds-factories</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>Database Migrations Best Practices in Laravel: Rollbacks, Seeds &amp; Factories</image:title>
            <image:caption>Covers atomic migrations, safe schema changes in production, Eloquent factories for realistic test data, and migration-only deployments.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/debugging-production-safe-techniques-live-systems-without-downtime</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>Debugging in Production: Safe Techniques for Live Systems Without Downtime</image:title>
            <image:caption>Covers non-destructive production debugging - distributed tracing, feature flags, canary analysis, and live log tailing without touching running processes.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/what-beautiful-code-actually-looks-like-real-examples-across-languages</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>What Beautiful Code Actually Looks Like: Real Examples Across Languages</image:title>
            <image:caption>Curates genuinely elegant code snippets from open-source projects, analysing what makes each example immediately readable and intention-revealing.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-performance-tuning-opcache-jit-compiler-profiling-with-blackfire</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>PHP Performance Tuning: OPcache, JIT Compiler &amp; Profiling With Blackfire</image:title>
            <image:caption>Shows how to enable and tune OPcache and JIT, use Blackfire.io to pinpoint bottlenecks, and reduce response times by up to 60%.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-configure-selinux-policies-contexts-troubleshooting-denials</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>How to Configure SELinux: Policies, Contexts &amp; Troubleshooting Denials</image:title>
            <image:caption>Covers enforcing vs permissive modes, reading audit2allow output, writing custom type enforcement modules, and labeling files correctly.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-a-welcoming-open-source-community-code-of-conduct-docs-onboarding</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>Building a Welcoming Open Source Community: Code of Conduct, Docs &amp; Onboarding</image:title>
            <image:caption>Practical guide for maintainers to reduce contribution friction - writing good CONTRIBUTING files, labelling beginner issues, and creating a culture of constructive review.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/heisenbug-schrodinger-bug-other-phantom-failures-debugging-unpredictable</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>Heisenbug, Schrodinger Bug &amp; Other Phantom Failures: Debugging the Unpredictable</image:title>
            <image:caption>Catalogs bugs that vanish under observation, change behavior with logging, or only appear in production - and the techniques to corner each type.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/pythons-rise-to-dominance-how-readability-as-a-value-reshaped-a-generation-of-programmers</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Python&apos;s Rise to Dominance: How Readability as a Value Reshaped a Generation of Programmers</image:title>
            <image:caption>Traces Python&apos;s journey from scripting utility to the language of science, AI, and education - and how its radical readability ethic influenced language design far beyond its own community.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-to-secure-php-applications-https-csp-headers-input-validation</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>How to Secure PHP Applications: HTTPS, CSP Headers &amp; Input Validation</image:title>
            <image:caption>Practical implementation guide covering TLS enforcement, Content Security Policy headers, and robust server-side input sanitization.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-time-synchronization-configuring-ntp-chrony-correctly</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>Linux Time Synchronization: Configuring NTP and chrony Correctly</image:title>
            <image:caption>Sets up chrony as an NTP client and server, configures stratum hierarchy, verifies sync status, and handles leap second adjustments.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-graphql-api-php-webonyx-complete-tutorial</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Building a GraphQL API in PHP With Webonyx: A Complete Tutorial</image:title>
            <image:caption>Full guide to defining schemas, resolvers, mutations, and subscriptions using the webonyx/graphql-php library with Laravel integration.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/setting-up-haproxy-linux-load-balancing-health-checks-ssl</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Setting Up HAProxy on Linux: Load Balancing, Health Checks &amp; SSL</image:title>
            <image:caption>Configures HAProxy frontend/backend blocks, round-robin and least-connections balancing, active health checks, and SSL termination.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/psychology-complexity-developers-default-over-engineering</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>The Psychology of Complexity: Why Developers Default to Over-Engineering</image:title>
            <image:caption>Examines the cognitive biases - fear of future requirements, desire to appear clever - that push developers toward needless complexity.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/binary-search-debugging-fastest-way-isolate-any-bug-any-codebase</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Binary Search Debugging: The Fastest Way to Isolate Any Bug in Any Codebase</image:title>
            <image:caption>Applies binary search thinking to bug isolation - systematically halving the problem space with targeted experiments to converge on the root cause fast.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-companies-exploit-open-source-and-what-the-community-is-doing-about-it</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>How Companies Exploit Open Source and What the Community Is Doing About It</image:title>
            <image:caption>Examines the tension between commercial adoption and community contribution, covering license changes like SSPL, the Commons Clause, and fair-code experiments.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-82-released-readonly-classes-dnf-types-deprecations-explained</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>PHP 8.2 Released: Readonly Classes, DNF Types &amp; Deprecations Explained</image:title>
            <image:caption>First look at PHP 8.2 features — readonly classes, Disjunctive Normal Form types, new ini options, and upcoming deprecation clean-ups.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-backup-strategies-rsync-restic-automated-snapshot-rotation</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>Linux Backup Strategies: rsync, Restic &amp; Automated Snapshot Rotation</image:title>
            <image:caption>Compares rsync incremental backups and Restic deduplicated snapshots, covering remote targets, encryption, retention policies, and restore testing.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-typescript-changed-the-way-javascript-developers-think-about-correctness</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>How TypeScript Changed the Way JavaScript Developers Think About Correctness</image:title>
            <image:caption>Explores TypeScript&apos;s cognitive impact - how adding a type layer shifts mental models from runtime debugging to compile-time reasoning and changes how APIs are designed and consumed.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/refactoring-toward-elegance-simplify-code-without-breaking-it</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Refactoring Toward Elegance: How to Simplify Code Without Breaking It</image:title>
            <image:caption>Step-by-step refactoring guide - extracting intent into named functions, collapsing conditionals, and eliminating redundant state one change at a time.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-apparmor-ubuntu-profiles-modes-custom-policies</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>Configuring AppArmor on Ubuntu: Profiles, Modes &amp; Custom Policies</image:title>
            <image:caption>Covers AppArmor enforce vs complain modes, reading audit logs, generating profiles with aa-genprof, and writing custom policy rules.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/caching-strategies-php-redis-memcached-http-cache-headers</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Caching Strategies in PHP: Redis, Memcached &amp; HTTP Cache Headers</image:title>
            <image:caption>Covers key-value caching, cache-aside pattern, cache invalidation, and HTTP cache headers to reduce server load significantly.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/designing-clean-php-architecture-hexagonal-onion-clean-code</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Designing a Clean PHP Architecture: Hexagonal, Onion &amp; Clean Code</image:title>
            <image:caption>Contrasts architectural patterns, shows PHP project layouts for each, and explains the dependency rule and port/adapter separation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/who-owns-open-source-code-licenses-copyright-contributor-agreements-explained</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Who Owns Open Source Code? Licenses, Copyright &amp; Contributor Agreements Explained</image:title>
            <image:caption>Clarifies the legal landscape - MIT, Apache, GPL, and AGPL licenses, contributor license agreements, and what corporate adoption means for ownership and control.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/rubber-duck-debugging-why-explaining-bug-out-loud-actually-works</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Rubber Duck Debugging and Why Explaining Your Bug Out Loud Actually Works</image:title>
            <image:caption>Explains the cognitive science behind verbalising a problem - how articulation forces precision and surfaces hidden assumptions in your mental model.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/bash-shell-configuration-bashrc-bash-profile-environment-variables</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Bash Shell Configuration: .bashrc, .bash_profile &amp; Environment Variables</image:title>
            <image:caption>Explains login vs non-login shells, customizing PS1 prompts, managing PATH, aliases, functions, and sourcing configs in the right order.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-monitoring-prometheus-grafana-full-stack-setup-guide</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>Linux Monitoring With Prometheus &amp; Grafana: Full Stack Setup Guide</image:title>
            <image:caption>Installs Node Exporter and Prometheus, configures scrape intervals, builds Grafana dashboards, and sets up alerting rules.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/mastering-php-generators-memory-efficient-data-processing-scale</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-octane-production-checklist/blog-laravel-octane-production-checklist-1200.webp</image:loc>
            <image:title>Mastering PHP Generators: Memory-Efficient Data Processing at Scale</image:title>
            <image:caption>Demonstrates generators as iterators and coroutines, benchmarking memory savings against array-based approaches for large datasets.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/simplicity-design-principle-lessons-unix-python-go</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Simplicity as a Design Principle: Lessons From Unix, Python &amp; Go</image:title>
            <image:caption>Draws lessons from languages and systems famously built around simplicity, showing how their constraints produced more maintainable ecosystems.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/test-driven-development-in-php-practical-workflow-for-teams</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-laravel-precognition-real-time-validation-without-full-form-submission/blog-laravel-precognition-real-time-validation-without-full-form-submission-1200.webp</image:loc>
            <image:title>Test-Driven Development in PHP: A Practical Workflow for Teams</image:title>
            <image:caption>Shows how to embed TDD red-green-refactor cycles into team sprints, configure CI pipelines, and measure coverage regressions.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-configure-nfs-linux-server-setup-exports-client-mounts</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>How to Configure NFS on Linux: Server Setup, Exports &amp; Client Mounts</image:title>
            <image:caption>Sets up NFS v4 server, configures /etc/exports with security options, mounts shares on clients, and automates with /etc/fstab.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/maintainer-burnout-in-open-source-the-hidden-crisis-nobody-talks-about</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>Maintainer Burnout in Open Source: The Hidden Crisis Nobody Talks About</image:title>
            <image:caption>Documents the epidemic of maintainer exhaustion - unpaid pressure, hostile issues, and endless support requests - and what communities can do to protect the people who keep projects alive.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-frustration-loop-why-debugging-feels-impossible-before-it-suddenly-clicks</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>The Frustration Loop: Why Debugging Feels Impossible Before It Suddenly Clicks</image:title>
            <image:caption>Explores the psychological cycle of confusion, tunnel vision, and breakthrough that characterises a difficult debugging session and how to shorten it.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/cost-complexity-over-engineered-code-kills-developer-productivity</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>The Cost of Complexity: How Over-Engineered Code Kills Developer Productivity</image:title>
            <image:caption>Quantifies the hidden costs of unnecessary abstraction - slower onboarding, harder debugging, and cascading rework caused by premature generalization.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-livewire-vs-inertia-js-choosing-right-full-stack-approach</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Laravel Livewire vs Inertia.js: Choosing the Right Full-Stack Approach</image:title>
            <image:caption>Compares both approaches side-by-side with architecture diagrams, performance profiles, and developer experience analysis.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-kernel-tuning-sysctl-network-stack-security-hardening</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Linux Kernel Tuning With sysctl: Network Stack &amp; Security Hardening</image:title>
            <image:caption>Tunes TCP buffer sizes, connection tracking, SYN flood protection, ICMP restrictions, and kernel hardening parameters via sysctl.conf.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/symfony-6-new-features-every-php-developer-must-know</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-stack/page-stack-1200.webp</image:loc>
            <image:title>Symfony 6 New Features: What Every PHP Developer Must Know</image:title>
            <image:caption>Comprehensive overview of Symfony 6 highlights including PHP 8 attributes, typed properties, and the mature Mailer/Notifier components.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/setting-up-postfix-mail-server-linux-smtp-dkim-spf-records</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>Setting Up Postfix Mail Server on Linux: SMTP, DKIM &amp; SPF Records</image:title>
            <image:caption>Full Postfix configuration walkthrough covering virtual domains, TLS encryption, OpenDKIM signing, SPF and DMARC DNS records, and spam filtering.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/the-philosophy-of-giving-back-why-open-source-sustainability-depends-on-contributors</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>The Philosophy of Giving Back: Why Open Source Sustainability Depends on Contributors</image:title>
            <image:caption>Examines the tragedy of the commons in software - how projects collapse when everyone consumes and nobody contributes - and what healthy contribution cultures look like.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-senior-developers-think-debugging-mental-model-breakdown</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>How Senior Developers Think When Debugging: A Mental Model Breakdown</image:title>
            <image:caption>Reveals the systematic reasoning process experienced engineers use - narrowing scope, isolating variables, and resisting the urge to guess.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-user-management-groups-sudo-policies-pam-configuration</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>Linux User Management: Groups, sudo Policies &amp; PAM Configuration</image:title>
            <image:caption>Covers useradd, usermod, groupadd, /etc/sudoers syntax, sudo logging, password policies with PAM, and account expiration management.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-fiber-introduction-async-programming-without-complexity</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>PHP Fiber Introduction: Async Programming Without the Complexity</image:title>
            <image:caption>Explains PHP 8.1 Fibers as lightweight coroutines, compares them to async/await patterns, and shows practical cooperative scheduling.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/code-elegance-explained-senior-developers-mean-less-more</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>Code Elegance Explained: What Senior Developers Mean When They Say Less Is More</image:title>
            <image:caption>Defines elegance in software through concrete examples - minimal surface area, single responsibility, and expressive naming that removes the need for comments.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-linux-swap-size-priority-zram-better-performance</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Configuring Linux swap: Size, Priority &amp; zram for Better Performance</image:title>
            <image:caption>Explains swap partitions vs swapfiles, tuning swappiness and vfs_cache_pressure, and setting up compressed zram for low-memory systems.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/domain-driven-design-php-entities-value-objects-aggregates</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-cli-tools-php-symfony-console-component/blog-building-cli-tools-php-symfony-console-component-1200.webp</image:loc>
            <image:title>Domain-Driven Design in PHP: Entities, Value Objects &amp; Aggregates</image:title>
            <image:caption>Introduces DDD tactical patterns, showing how to model complex domains with PHP classes while keeping business logic framework-agnostic.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-to-make-your-first-open-source-contribution-without-feeling-like-an-imposter</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>How to Make Your First Open Source Contribution Without Feeling Like an Imposter</image:title>
            <image:caption>A beginner-friendly walkthrough of finding a welcoming project, understanding contribution guidelines, and submitting a first pull request that gets merged.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-to-implement-jwt-authentication-pure-php-step-by-step</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-automated-testing-pyramid-php-unit-integration-e2e-pest/blog-automated-testing-pyramid-php-unit-integration-e2e-pest-1200.webp</image:loc>
            <image:title>How to Implement JWT Authentication in Pure PHP Step by Step</image:title>
            <image:caption>Builds a JWT auth flow from scratch without libraries, covering header/payload/signature generation, verification, and refresh tokens.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/art-reading-stack-trace-what-every-line-really-telling-you</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>The Art of Reading a Stack Trace: What Every Line Is Really Telling You</image:title>
            <image:caption>Teaches developers to extract maximum signal from stack traces - reading frame order, spotting framework noise, and identifying the true origin of a failure.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-performance-tuning-cpu-memory-io-optimization-techniques</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>Linux Performance Tuning: CPU, Memory &amp; I/O Optimization Techniques</image:title>
            <image:caption>Covers sysctl kernel parameter tuning, CPU governor settings, NUMA awareness, swappiness, and I/O scheduler selection for workloads.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-set-up-linux-vpn-server-wireguard-complete-tutorial</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>How to Set Up a Linux VPN Server With WireGuard: Complete Tutorial</image:title>
            <image:caption>Installs and configures WireGuard on Ubuntu, generates key pairs, sets up peer configs, enables IP forwarding, and automates with wg-quick.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-programming-languages-shape-the-way-developers-think-about-problems</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>How Programming Languages Shape the Way Developers Think About Problems</image:title>
            <image:caption>Argues that the language you work in daily does not just express your thinking - it actively constrains and moulds how you conceptualise solutions before you write a single line.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/why-simple-code-not-same-easy-code-developers-perspective</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>Why Simple Code Is Not the Same as Easy Code: A Developer&apos;s Perspective</image:title>
            <image:caption>Breaks down the cognitive gap between writing code that works and writing code that is effortlessly understandable by others.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-81-enums-deep-dive-pure-backed-interface-implementation</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>PHP 8.1 Enums Deep Dive: Pure, Backed, and Interface Implementation</image:title>
            <image:caption>Explores every aspect of PHP 8.1 enums, including pure vs backed enums, cases(), from(), tryFrom(), interface implementation, and use in match.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-crud-apis-laravel-sanctum-authentication-2021</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-crud-apis-laravel-sanctum-authentication-2021/blog-building-crud-apis-laravel-sanctum-authentication-2021-1200.webp</image:loc>
            <image:title>Building CRUD APIs With Laravel Sanctum Authentication in 2021</image:title>
            <image:caption>End-to-end tutorial creating a token-authenticated CRUD API with Laravel Sanctum, resource transformers, and form request validation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-log-management-rsyslog-logrotate-centralized-logging-setup</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Linux Log Management: rsyslog, logrotate &amp; Centralized Logging Setup</image:title>
            <image:caption>Configures rsyslog for remote log forwarding, sets up logrotate policies, and introduces the ELK stack for centralized log aggregation.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/open-source-culture-explained-what-it-really-means-to-build-software-together</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>Open Source Culture Explained: What It Really Means to Build Software Together</image:title>
            <image:caption>Introduces the values underpinning open source - radical transparency, shared ownership, and the belief that software improves faster when built in public.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/debugging-as-detective-work-why-hunting-bugs-most-thrilling-part-development</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>Debugging as Detective Work: Why Hunting Bugs Is the Most Thrilling Part of Development</image:title>
            <image:caption>Draws a direct parallel between software debugging and criminal investigation - forming hypotheses, gathering evidence, and closing in on the culprit.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/automating-linux-tasks-cron-systemd-timers-full-guide</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>Automating Linux Tasks With Cron and Systemd Timers: Full Guide</image:title>
            <image:caption>Compares cron and systemd timers, covers crontab syntax, environment variables, logging cron output, and monotonic vs realtime timers.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/composer-best-practices-autoloading-version-constraints-monorepos</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-composer-best-practices-autoloading-version-constraints-monorepos/blog-composer-best-practices-autoloading-version-constraints-monorepos-1200.webp</image:loc>
            <image:title>Composer Best Practices: Autoloading, Version Constraints &amp; Monorepos</image:title>
            <image:caption>Essential Composer tips including PSR-4 autoloading, semantic versioning strategies, and managing a PHP monorepo with path repositories.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/beauty-elegant-code-simplicity-hardest-skill-master</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>The Beauty of Elegant Code: Why Simplicity Is the Hardest Skill to Master</image:title>
            <image:caption>Explores why writing simple, readable code demands more discipline and experience than writing complex solutions, with real before/after examples.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-network-configuration-static-ip-dns-netplan-ubuntu</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>Linux Network Configuration: Static IP, DNS &amp; Netplan on Ubuntu</image:title>
            <image:caption>Covers Netplan YAML syntax, setting static IPs, configuring DNS resolvers, bonding interfaces, and troubleshooting with ip and ss commands.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-configure-lamp-stack-ubuntu-apache-mysql-php-tuning</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>How to Configure a LAMP Stack on Ubuntu: Apache, MySQL &amp; PHP Tuning</image:title>
            <image:caption>Full LAMP installation and optimization: MPM worker tuning, MySQL InnoDB settings, PHP-FPM pools, and .htaccess security hardening.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-80-new-features-named-arguments-jit</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>PHP 8.0 New Features: Complete Developer Guide to Named Arguments, JIT and More</image:title>
            <image:caption>The biggest PHP release in years, with a practical breakdown of new syntax features, JIT compilation benefits, and migration tips.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-8-match-expression-vs-switch</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide/blog-deploying-php-apps-aws-ec2-ecs-fargate-lambda-runtimes-guide-1200.webp</image:loc>
            <image:title>PHP 8 Match Expression vs Switch: Everything You Need to Know</image:title>
            <image:caption>Detailed comparison of the new match expression against switch, covering exhaustiveness, strict comparison, and return values.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-disk-management-lvm-partitions-filesystem-configuration</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>Linux Disk Management: LVM, Partitions &amp; Filesystem Configuration</image:title>
            <image:caption>Explains fdisk, parted, LVM physical volumes, volume groups, logical volumes, and resizing filesystems without downtime.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-to-use-docker-with-php-local-development-setup</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite/blog-database-indexing-strategies-php-apps-b-trees-full-text-composite-1200.webp</image:loc>
            <image:title>How to Use Docker With PHP: Complete Local Development Setup Guide</image:title>
            <image:caption>Shows how to containerize a PHP app with PHP-FPM, Nginx, and MySQL using Docker Compose for reproducible dev environments.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/building-real-time-chat-app-php-websockets-ratchet</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches/blog-api-versioning-in-php-strategies-url-paths-header-based-approaches-1200.webp</image:loc>
            <image:title>Building a Real-Time Chat App With PHP WebSockets and Ratchet</image:title>
            <image:caption>Full project walkthrough using the Ratchet library to implement pub/sub messaging, rooms, and authentication over WebSockets.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/setting-up-linux-firewall-ufw-rules-logging-best-practices</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/site-og/site-og-1200.webp</image:loc>
            <image:title>Setting Up a Linux Firewall With UFW: Rules, Logging &amp; Best Practices</image:title>
            <image:caption>Practical UFW configuration covering allow/deny rules, application profiles, rate limiting, IPv6 support, and persistent rule management.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-systemd-services-create-enable-manage-custom-unit-files</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-php-sdk-http-client-abstraction-retries-test-fakes/blog-building-php-sdk-http-client-abstraction-retries-test-fakes-1200.webp</image:loc>
            <image:title>Linux systemd Services: Create, Enable &amp; Manage Custom Unit Files</image:title>
            <image:caption>Shows how to write systemd service, timer, and socket unit files, configure restart policies, and use journalctl for log inspection.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/understanding-php-traits-when-to-use-avoid</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions/blog-modern-php-development-workflow-git-ci-cd-docker-github-actions-1200.webp</image:loc>
            <image:title>Understanding PHP Traits: When to Use Them and When to Avoid Them</image:title>
            <image:caption>Practical guidance on trait composition, method conflict resolution, and the design pitfalls developers commonly fall into.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-unit-testing-with-phpunit-code-coverage</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies/blog-building-multi-tenant-saas-apps-laravel-architecture-tenancy-strategies-1200.webp</image:loc>
            <image:title>PHP Unit Testing With PHPUnit: From Zero to 100% Code Coverage</image:title>
            <image:caption>Comprehensive tutorial on writing unit, integration, and data-provider tests using PHPUnit, including mocking and assertion best practices.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/configuring-nginx-ubuntu-20-04-virtual-hosts-ssl-reverse-proxy</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-laravel-api-development/page-laravel-api-development-1200.webp</image:loc>
            <image:title>Configuring Nginx on Ubuntu 20.04: Virtual Hosts, SSL &amp; Reverse Proxy</image:title>
            <image:caption>Complete Nginx setup guide - server blocks, Let&apos;s Encrypt TLS, HTTP/2, Gzip compression, and proxying to upstream application servers.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/optimizing-mysql-queries-php-indexes-joins-execution-plans</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans/blog-optimizing-mysql-queries-php-indexes-joins-execution-plans-1200.webp</image:loc>
            <image:title>Optimizing MySQL Queries in PHP: Indexes, Joins and Execution Plans Explained</image:title>
            <image:caption>Deep-dive into slow-query diagnosis, index strategies, and using EXPLAIN to drastically cut database round-trip time.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-file-permissions-chmod-chown-acls-depth</loc>
        <lastmod>2026-05-08</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-linux-file-permissions-chmod-chown-acls-depth/blog-linux-file-permissions-chmod-chown-acls-depth-1200.webp</image:loc>
            <image:title>Linux File Permissions Explained: chmod, chown &amp; ACLs in Depth</image:title>
            <image:caption>Demystifies octal and symbolic permission notation, setuid/setgid/sticky bits, and extended ACLs for fine-grained access control.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/php-security-checklist-2020-xss-csrf-sql-injection</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-php-security-checklist-2020-xss-csrf-sql-injection/blog-php-security-checklist-2020-xss-csrf-sql-injection-1200.webp</image:loc>
            <image:title>PHP Security Checklist 2020: Protect Your App From XSS, CSRF and SQL Injection</image:title>
            <image:caption>A complete, actionable security checklist covering the OWASP Top 10 vulnerabilities with PHP-specific remediation code snippets.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-configure-ssh-linux-keys-port-change-fail2ban-setup</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-how-configure-ssh-linux-keys-port-change-fail2ban-setup/blog-how-configure-ssh-linux-keys-port-change-fail2ban-setup-1200.webp</image:loc>
            <image:title>How to Configure SSH on Linux: Keys, Port Change &amp; Fail2Ban Setup</image:title>
            <image:caption>Step-by-step guide to generating SSH key pairs, disabling password authentication, changing the default port, and blocking brute-force attempts with Fail2Ban.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/master-php-dependency-injection-practical-guide</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide/blog-integrating-stripe-payments-laravel-subscriptions-webhooks-guide-1200.webp</image:loc>
            <image:title>Master PHP Dependency Injection: A Practical Guide with Real Examples</image:title>
            <image:caption>Explains constructor, setter, and interface injection with concrete examples, showing how DI improves testability and flexibility.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/laravel-vs-symfony-2020-php-framework</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/page-services-laravel/page-services-laravel-1200.webp</image:loc>
            <image:title>Laravel vs Symfony in 2020: Which PHP Framework Should You Choose?</image:title>
            <image:caption>An objective, data-driven comparison of Laravel and Symfony covering performance benchmarks, ecosystem, and learning curve.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/linux-server-initial-setup-complete-security-configuration-guide-beginners</loc>
        <lastmod>2026-05-07</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-linux-server-initial-setup-complete-security-configuration-guide-beginners/blog-linux-server-initial-setup-complete-security-configuration-guide-beginners-1200.webp</image:loc>
            <image:title>Linux Server Initial Setup: Complete Security Configuration Guide for Beginners</image:title>
            <image:caption>Covers first-login hardening steps: creating sudo users, disabling root SSH, configuring UFW firewall, and enabling automatic security updates.</image:caption>
        </image:image>
    </url>
    <url>
        <loc>https://andrej.prus.dev/blog/how-to-build-rest-api-php-without-framework-2020</loc>
        <lastmod>2026-05-06</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
        <image:image>
            <image:loc>https://andrej.prus.dev/assets/images/optimized/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories/blog-database-migrations-best-practices-laravel-rollbacks-seeds-factories-1200.webp</image:loc>
            <image:title>How to Build a REST API in PHP Without a Framework in 2020</image:title>
            <image:caption>Step-by-step tutorial building a lightweight, dependency-free REST API using only native PHP and best-practice folder structure.</image:caption>
        </image:image>
    </url>
</urlset>
