# Kévin THÉRAGE | Symfony Lead Developer (Expert Symfony 7 Certified) > Kévin THÉRAGE – Symfony Lead Developer, Expert Symfony 7 Certified. Technical blog on Symfony, PHP, web development with tutorials, best practices and expert advice for developers. - [Building a RAG-Powered Code Review Assistant with PHP, Ollama, and Qdrant](https://ktherage.github.io/blog/2026/building-a-rag-powered-code-review-assistant/feed.md): Ask an LLM to review your code and you'll get generic advice. Give it 10,000 Symfony Core code reviews as reference — and it'll produce reviews that sound like nicolas-grekas and stof reviewed your PR. Here's how I built a RAG pipeline in 100% PHP to make that happen. - [The Cache That Didn't Cache: A Symfony Serialization Story](https://ktherage.github.io/blog/2026/the-cache-that-silently-wasnt/feed.md): The logs said the cache was working. The filesystem could testify to it. Here is how a hidden Closure in getInfo(), silent exception handling, and an ignored return value created a perfect, silent nightmare. - [Dealing with Isolated PHPStan 1 and the PHPUnit 13 Blindspot](https://ktherage.github.io/blog/2026/dealing-with-isolated-phpstan-1-and-the-phpunit-13-blindspot/feed.md): Shoving PHPStan into a separate subdirectory is great for avoiding dependency hell—until you upgrade to PHPUnit 13 and your static analysis pipeline goes completely blind. Here is how to fix it. - [Ubuntu 25.10: The Update That Bricked My Java Docker Containers](https://ktherage.github.io/blog/2026/ubuntu-25-10-docker-java-cgroupv2-crash/feed.md): After updating my operating system from Ubuntu 24.04 to 25.10, my selenium/standalone-chrome Docker container started crashing with a cryptic NullPointerException. Here is my story. - [My EventSubscriber silenced errors, here's why](https://ktherage.github.io/blog/2026/my-eventsubscriber-silenced-errors/feed.md): My whitelist route EventSubscriber was throwing AccessDenied errors in logs with no apparent reason. Here's how I discovered it was actually hiding the real error behind the scenes. - [Debugging Git's .gitignore: Why Whitelisting Files in Subdirectories Fails](https://ktherage.github.io/blog/2026/gitignore-blacklisting-whitelisting/feed.md): When using .gitignore to keep your project clean, it's easy to accidentally hide important files in subdirectories. Here's how to debug and fix this common issue. - [API Platform con 2025 - DAY 1](https://ktherage.github.io/blog/2025/api-platform-con-2025-day-1/feed.md): I had the opportunity to attend the API Platform Con 2025 thanks to SensioLabs and here is what I learned through the talks I viewed. - [API Platform con 2025 - DAY 2](https://ktherage.github.io/blog/2025/api-platform-con-2025-day-2/feed.md): I had the opportunity to attend the API Platform Con 2025 thanks to SensioLabs and here is what I learned through the talks I viewed. - [Symfony & Doctrine Migrations: Validation in CI](https://ktherage.github.io/blog/2024/symfony-and-doctrine-migrations-validation-in-ci/feed.md): I had the opportunity to work on a project with a team that was relatively new to Doctrine migrations. To help them get used to it, and to discard the possibility of having pull (or merge) requests with changes to doctrine entities without generating a migration. Here is how I did it. I hope you'll enjoy it! - [Bash & Curl: Simple HTTP call performance testing](https://ktherage.github.io/blog/2024/bash-and-curl-simple-http-call-performance-testing/feed.md): HTTP calls are essential to the functioning of the web and are critical to any web development project. You may have wondered how to quickly see how your HTTP call is performing. I'll show you how I did it easily using Curl. - [Postman : Automatic JWT authentication with expired token refresh](https://ktherage.github.io/blog/2022/postman-automatic-jwt-authentication-with-expired-token-refresh/feed.md): You've always wondered how to get automatically authenticated toward your JWT API. I'll tell you how I achieved this in this article. ## Pages - [About me](https://ktherage.github.io/about-me/feed.md) - [Legal](https://ktherage.github.io/legal/feed.md) - [Tags](https://ktherage.github.io/tags/feed.md) ## Full content - [Complete site (Markdown)](https://ktherage.github.io/feed.md)