Joel Clermont
banner
jclermont.com
Joel Clermont
@jclermont.com
📖 Author of Mastering Laravel Validation Rules
✍️ I post useful Laravel tips https://masteringlaravel.com
🎙️ Co-host of https://show.nocompromises.io podcast
🐘 Organizer of Milwaukee PHP
Pinned
As much as I love building with Laravel, I also find a lot of satisfaction helping other Laravel devs level up their skills.

I’d love to figure out a path to spend more of each week doing that in 2025. I feel like masteringlaravel.io has so much more to offer.
From Competent to Confident | Mastering Laravel
A collection of resources to make you a better Laravel developer
masteringlaravel.io
Laravel's factory for() helper uses naming conventions to link relationships. But what happens when you have two relationships to the same model? In today's video, I show how Laravel makes this easy. masteringlaravel.io/daily/2026-0...
Using factories with more than one relationship | Mastering Laravel
Sometimes you can't follow the typical naming convention
masteringlaravel.io
January 9, 2026 at 2:30 PM
Knowing your dependencies' licenses is nice. Automatically checking for non-compliant licenses is even better. masteringlaravel.io/daily/2026-0...
Automate license compliance checks | Mastering Laravel
Different output formats make automation possible
masteringlaravel.io
January 8, 2026 at 2:42 PM
Oh no! Did you just find five different ways of doing the same thing in your codebase? Here's how to decide when consistency is worth the refactoring effort. masteringlaravel.io/daily/2026-0...
Keep your code consistent | Mastering Laravel
Make it a conscious decision, not left to chance
masteringlaravel.io
January 7, 2026 at 1:48 PM
Your project has dozens of dependencies. Do you know what licenses they use? Composer has a built-in command for this. masteringlaravel.io/daily/2026-0...
Know your dependencies' licenses | Mastering Laravel
A quick way to see what you're shipping
masteringlaravel.io
January 6, 2026 at 3:45 PM
Some projects need docker-wrapped commands, others use global tooling. Instead of remembering which is which, teach your shell to check for a local script first. masteringlaravel.io/daily/2026-0...
Use a local script before falling back to global commands | Mastering Laravel
A simple zsh function that checks for project-specific wrappers first
masteringlaravel.io
January 5, 2026 at 3:47 PM
Route::redirect is convenient, but it matches all HTTP verbs, not just GET. In today's video, I show a simple fix that gives you precise control. masteringlaravel.io/daily/2026-0...
Redirect routes match all HTTP verbs | Mastering Laravel
If you need to be more precise, here's a better way
masteringlaravel.io
January 3, 2026 at 2:12 PM
Day 3 of running the new retail game/repair shop. This is kind of fun doing things out in a physical space and the community. If my son teaches me the repair skills, I could really get hooked.
January 2, 2026 at 7:05 PM
Remember when "View Source" would make a fresh GET request, breaking your ability to debug after a POST submission? Browsers finally fixed this, and I couldn't be happier. masteringlaravel.io/daily/2026-0...
View source no longer makes a new request | Mastering Laravel
Sometimes bugs just quietly disappear
masteringlaravel.io
January 1, 2026 at 2:12 PM
Tired of users uploading HEIC files your app can't handle? A simple HTML attribute helps filter file types and even converts them automatically in Safari. masteringlaravel.io/daily/2025-1...
How to get rid of HEIC files in your app | Mastering Laravel
And it makes your app easier to use for non-iPhone users too
masteringlaravel.io
December 31, 2025 at 11:09 PM
We take security seriously in our projects. Composer 2.9 now blocks vulnerable packages natively, which means we can finally remove roave/security-advisories. One less dependency to manage. masteringlaravel.io/daily/2025-1...
Composer 2.9 adds native security protection | Mastering Laravel
And one less package we need to install
masteringlaravel.io
December 30, 2025 at 1:43 PM
Ever feel less certain about your decisions as you gain experience? In the latest No Compromises podcast, we explore why senior developers often feel "wrong" more often, and why that's actually a sign of growth. masteringlaravel.io/daily/2025-1...
Why senior developers feel wrong more often | Mastering Laravel
The unexpected side effect of expertise
masteringlaravel.io
December 29, 2025 at 2:49 PM
We don't cache locally, but CI is a different story. And it's not about speed - it's about catching subtle bugs that could slip into production. In today's video, I walk you through a real world scenario. masteringlaravel.io/daily/2025-1...
The benefits of Laravel caching in CI | Mastering Laravel
And it's not for performance reasons
masteringlaravel.io
December 26, 2025 at 2:02 PM
Did you ever notice that Eloquent doesn't escape the percent sign in LIKE queries? Don't worry. It's not a security hole. In fact, it unlocks a useful feature you might not have considered. masteringlaravel.io/daily/2025-1...
Why isn't the percent sign escaped in LIKE queries? | Mastering Laravel
And how it opens up a useful feature
masteringlaravel.io
December 25, 2025 at 2:17 PM
My happy place
December 25, 2025 at 2:06 AM
You see two similar pieces of code and your instinct says "refactor!" But is that always the right call? Sometimes waiting pays off. masteringlaravel.io/daily/2025-1...
Is it time to abstract this? | Mastering Laravel
Oh no! It's duplicated code!
masteringlaravel.io
December 24, 2025 at 3:40 PM
When a community member asked about escaping user input in LIKE queries, I decided to prove the answer rather than just guess. masteringlaravel.io/daily/2025-1...
Do you need to escape user input passed to LIKE queries? | Mastering Laravel
Let's find out and not just assume
masteringlaravel.io
December 23, 2025 at 2:30 PM
I was helping a client in one of their private package repos and they wondered why I deleted the composer.lock they had committed. Here are a few reasons. masteringlaravel.io/daily/2025-1...
Why you don't need to commit composer.lock in a package repo | Mastering Laravel
And the problems it causes if you do
masteringlaravel.io
December 22, 2025 at 2:09 PM
Route and view caching is a performance win in production, but locally it just creates friction. In today's video, I share a real story of how this tripped up a developer I was pairing with. masteringlaravel.io/daily/2025-1...
Don't cache routes or views locally | Mastering Laravel
Great for production, but trouble for development
masteringlaravel.io
December 19, 2025 at 2:37 PM
While backfilling tests on a client project, I discovered a surprising inconsistency in how Laravel's request helpers handle default values. masteringlaravel.io/daily/2025-1...
A surprising inconsistency with request helpers and default values | Mastering Laravel
And how to avoid it
masteringlaravel.io
December 18, 2025 at 3:36 PM
As devs, we sometimes rush to coding a solution to a problem that causes us friction or repetition, but there's an important step that should come first. masteringlaravel.io/daily/2025-1...
Document before automating | Mastering Laravel
Even though it's not as fun as writing code
masteringlaravel.io
December 17, 2025 at 2:00 PM
Last week I showed a pattern for lazy loading a backup config value. As is so often the case, I figured out a slightly better way to do it after publishing it. masteringlaravel.io/daily/2025-1...
Another way to lazy load a config fallback value | Mastering Laravel
Built right into Laravel's env helper
masteringlaravel.io
December 16, 2025 at 3:01 PM
Auto-formatters are great, but are there times when manually tweaking code actually helps? In the latest episode of the No Compromises podcast, we explore when hand-formatting might actually be just the kind of activity you need. masteringlaravel.io/daily/2025-1...
Should you ever hand-format code? | Mastering Laravel
When saving time is not the goal
masteringlaravel.io
December 15, 2025 at 12:16 PM
Stopped in yesterday at the new game shop our family is running. Here are some pics.
December 13, 2025 at 1:26 PM
Did you know there is a validation rule in Laravel that it is impossible to make fail? In today's video, I show what this rule is and why it's still a valuable rule. masteringlaravel.io/daily/2025-1...
Why the nullable validation rule is useful | Mastering Laravel
Sometimes code is for your team, not just the PHP runtime
masteringlaravel.io
December 12, 2025 at 2:51 PM
Sometimes I wish I was building fancier apps that required matrix algebra or cryptography, not the simple CRUD apps that pay my bills. But recently, I was having fun building a video player and got to dust off an operator I rarely use. masteringlaravel.io/daily/2025-1...
A simple use case for the modulus operator | Mastering Laravel
Clean and readable
masteringlaravel.io
December 11, 2025 at 2:48 PM