Profile avatar
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
539 posts 3,270 followers 167 following
Prolific Poster
Conversation Starter

When you're logging data in your application, you should use placeholders for user-provided data, instead of just concatenating strings or using string interpolation. I share why this is important, and how Laravel makes it easy to do. masteringlaravel.io/daily/2025-0...

Here's a peek into my brain, and how I decide when to chain a test assertion, and when I split it out onto its own statement. masteringlaravel.io/daily/2025-0...

One of the best things I’ve found while teaching this testing workshop is to do first write the test in a sub-optimal (but “easy”) way first and then highlight the problem and show a better way. Takes a lot more work to set up properly but I think does a much better job teaching the concept.

Just released Alpine AJAX v0.12 with two handy new target modifiers `target.back` and `target.away`. Coincidentally, Laravel v12 was released today, so get v12 and v0.12 and get shippin'! github.com/imacrayon/al...

If you've been programming a long time, it can be quite frustrating when you try to learn something new outside your expertise. In the latest episode, we discuss these struggles in the context of a fun side project. masteringlaravel.io/daily/2025-0...

If there's a task I do repeatedly in my editor, and I don't know how to do it strictly from the keyboard, it's time to find a better way. Today, I'm sharing how I quickly attach a Docker terminal in PHPStorm. masteringlaravel.io/daily/2025-0...

Something new today! I'm trying out sharing a tip in video form. Don't worry it's still short and laser-focused. I walk through the process of switching from Pest to PHPUnit in a Laravel app. masteringlaravel.io/daily/2025-0...

This beta group that is going through my Laravel testing workshop has been a great experience. I’m convinced I want to spend more of my time doing this in 2025. I’m having fun. People are learning a ton. It’s really cool to brain dump what I’ve learned in the trenches over the last 10+ years.

Just queued up my 400th tip for the Mastering Laravel newsletter. The streak lives on!

Let's be honest. Code review takes time, and we don't have unlimited time in a day. I share how I decide what I analyze closely and what I can just scan. masteringlaravel.io/daily/2025-0...

I really truly despise a flaky test. Old Joel would just kick the test suite to run again and hope for the best. New Joel has to figure out why it's flaky. Let's look at a recent example in today's tip. masteringlaravel.io/daily/2025-0...

What would you do if you had to programmatically make a copy of an existing table's schema, and you couldn't control when that schema would change? MySQL has a simple solution. masteringlaravel.io/daily/2025-0...

Continuing yesterday's thrilling discussion about XML schema definitions, I'm going to show you a real world example of how it can help you clean up your PHPUnit configuration file. masteringlaravel.io/daily/2025-0...

Do your eyes gloss over all the XML schema config at the top of your phpunit.xml config file? Let's drill into one line and take a closer look at what it's doing for us. masteringlaravel.io/daily/2025-0...

Tiny little improvements spread across your workflow can make a big difference in the long run. Here's a small tweak to your AWS security groups that can save you time and effort when vendors (like Forge and Envoyer) update their list of IPs. masteringlaravel.io/daily/2025-0...

Here's a subtle testing tip that came up in a recent conversation. Easy to do, and you won't notice most of the time, but when you do, it's a lifesaver. masteringlaravel.io/daily/2025-0...

When sending a project update, a short video can be way more impactful than a big wall of text. But, as usual, there's some nuance to it. That's the topic for the new episode of the No Compromises podcast. masteringlaravel.io/daily/2025-0...

I'm starting a podcast! 🎙️ I'm hoping for a handful of sponsors to help get it off the ground. I think this will be a fun exploration of Statamic, talking with creators, agencies, and clients who use Statamic every day. Please dm if you think you might like to sponsor. talkingstatamic.com

When I see an error message, I like to first understand why it's happening. Then, knowing what to do to fix it is usually pretty easy. Today, let's work through a Bcrypt error I bumped into recently. masteringlaravel.io/daily/2025-0...

When you're introducing a new workflow to your GitHub Actions setup, you might want to experiment with it before merging it, but you'll run into a problem. Here's a simple trick to get around that. masteringlaravel.io/daily/2025-0...

Very interesting thoughts on productivity and how much work is enough each day. youtu.be/ZeFLBj8ZS-s?...

This is fantastic. Imagine if every subscription service made this offer.

Pairing in general is a great practice. Pairing with Aaron is an experience. Today I share a couple gems from a recent pairing session with him. masteringlaravel.io/daily/2025-0...

I love consistency. So when I find two things that appear similar, but work very differently, I want to know why. Here's an example with Laravel test assertions with JSON data and backed enums. masteringlaravel.io/daily/2025-0...

Ever have a test error message that makes you scratch your head? The thing it says is an error doesn't look like an error at all. Here's something I bumped into recently with enums and assertJson. masteringlaravel.io/daily/2025-0...

This quote has been rolling around my head for a while now: “Almost everything will work again if you unplug it for a few minutes, including you.“ Anyone ever take a sabbatical? How was it?

I haven’t shared anything about this outside my mailing list at all, but a beta cohort for my new Laravel testing workshop starts this week and I’m really looking forward to it. This idea for a new approach to teaching testing is something I’ve had in my head for years. This week it becomes real!

For someone like me who loves well-documented code and enforcing types, why would I ever remove those things from a new command file? Today's tip explains why. masteringlaravel.io/daily/2025-0...

Laravel's docs are first-class. It's one of my favorite things about the framework. But we can sometimes lose sight of the third-party packages Laravel bundles in, which have their own docs as well. Let's figure out how to mine these docs more effectively. masteringlaravel.io/daily/2025-0...

Ever feel like your banging your head against a wall sometimes? For me, this is often a sign that I need to step back and come at the problem from a different angle. Here's a recent example of why that can be so helpful. masteringlaravel.io/daily/2025-0...

In today's tip I share a scenario where a factory only needed unique values some of the time, and how I'd handle that. masteringlaravel.io/daily/2025-0...

I'm compiling a list of companies that are interested in sponsoring phpx.world meetups. If your company wants to get added, please get in touch! (Also, if your company has offices that could host events, please reach out as well!)

I like having a structured way to write my tests. But not everything can be boiled down to a neat and tidy rule. For example, our recent discussion of test layering in a multi-tenant app. masteringlaravel.io/daily/2025-0...

Anyone keen for a Laravel meet up in South Africa? 🤷‍♂️ Anywhere will do. Cape Town or Johannesburg seem the most likely, but Durban also a possibility (we’re based there).

Next week's tips all queued up. Sign up and get them delivered to your inbox for free at masteringlaravel.io

New Mogwai album does not disappoint.

One of my favorite things about sharing Laravel tips each day is when someone takes one of my ideas and runs with it. Here's something a reader did with my approach to testing policy logic. I really like this, feels like a native Laravel feature. masteringlaravel.io/daily/2025-0...