freek.dev newsletter #190

Hi there!

Welcome to the 190th freek.dev newsletter!

Here are a couple of links I hope you'll enjoy as much as I did.

⭐ Transform your URLs with AI using our new Laravel package
I'm excited to share that we've released a new package called spatie/laravel-url-ai-transformer. This one can get the content of a webpage and transform it into something else using AI. In this blog post, I'd like to share why I've created it and how you can use it.

⭐ Exploring our new PHP SDK, built using Saloon
I've recently rebuilt the SDK for Oh Dear, and thanks to Saloon I had a great time downing so.

Sevalla is the all-in-one PaaS for your web projects (sponsored link)
Host and deploy your applications, databases, object storage, and static sites. Enjoy advanced deployment pipelines, a complete database studio, instant preview apps, and one-click templates. The pricing is simple: no hidden fees, no seat-based pricing, and you pay only for what you use.

⭐ Why I don't use down migrations
Every once in a while, someone opens a PR on one of our open source packages adding a down function to the migration. Instead of typing a response for each PR, I'll now link to this post.

The Real Ask
When someone comes to you with a question to do something, instead of blindly doing the ask, take a step back and try to understand what they actually want to achieve. Often this task might actually not be the best way to achieve the goal they are set out to do.

Livewire 4: The Future of PHP Components
At Laracon US Caleb Porzio announced Livewire 4, which comes with unified components, performance improvements, and many more awesome goodies

Enabling WAL mode with SQLite in Laravel
SQLite's WAL mode makes using SQLite database much more production-ready.

scout:queue-import: Faster Indexing in Laravel Scout
The new scout:queue-import command splits your model’s ID range into chunks and queues jobs for each, enabling faster indexing of large datasets.

SQL Generated Columns and Views: How to Use Them in Your Laravel App
Learn how to use SQL generated columns and database views in Laravel to simplify queries, boost performance, and make your data easier to filter, sort, and reuse across your application.

The pipe operator in PHP 8.5
Looking forward to using this myself too.

A year with property hooks
Some interesting thoughts on property hooks by Brent

How to update composer.lock without changing any packages
Joel Clermont shares a nice composer knowledge nugget.

The Story of Valkey
Valkey is an interesting fork of Redis.

An engineer's perspective on hiring
The current hiring process for engineers is flawed, wasting time and failing to differentiate between skilled candidates and those using AI.

Compile time generics: yay or nay?
One of the most sought-after features for PHP is Generics: The ability to have a type that takes another type as a parameter. It's a feature found in most compiled languages by now, but implementing generics in an interpreted language like PHP, where all the type checking would have to be done at runtime, has always proven Really Really Hard(tm), Really Really Slow(tm), or both.

6 Weeks of Claude Code
Claude Code has considerably changed my relationship to writing and maintaining code at scale. I still write code at the same level of quality, but I feel like I have a new freedom of expression which is hard to fully articulate.

On full-breadth developers
It looks like full-breadth developers—people with both technical and product capabilities—stand to gain as clear winners in the AI era.

If you're remote, ramble
A tip for remote teams of 2-10 people. Create a personal “ramblings” channel for each teammate in your team’s chat app of choice.

A tiny taxonomy of meetings
Ideally every meeting should be categorised in advance so that everyone’s going in with the same expectations.

TODOs aren’t for doing
Some teams require that every TODO comment in a codebase gets logged in the bug tracker. Others automatically delete any “stale” TODO that has been in the codebase for over a year. Don’t do it!

Developer Tooling #005
Here's Patrick's selection of tools for this month!


Community links

In this section you'll find links submitted by others. Let me know if you did write or stumbled across a blog post, tutorial or video that might be interesting to appear in this section

Creating a custom toggle in Tailwindcss (submitted by Chris Rhymes)

Understanding Laravel Eloquent's Active Record Pattern (submitted by Wendell Adriel)

Laravel Security Guide: How to Fix These 6 Common Mistakes (submitted by Bert De Swaef)

Filament v4: What’s New and Exciting (submitted by Nabil Hassen)

How to Create AI Agents in Laravel with Attribute‑based Tool Registration (submitted by Revaz Gh.)

Create AI Agents in Laravel — The Simple Way (submitted by Ash Allen)

Deploying Laravel on NixOS (submitted by Samuel Štancl)

Laravel Queues Under the Hood (submitted by Wendell Adriel)

Boosting Laravel Boost (submitted by Oussama Mater)


Old posts

Here are a couple of links from a while ago!

When everything fails, you can always trust the Laravel rescue helper

Using Ray inside your Blade views

Benefits of writing clean, maintainable code.

State of Generics and Collections

PHP 8.4 Property Hooks

New Array Functions in PHP 8.4


Did you like this newsletter?

I take a lot of time curating the right links for you. You could do me a favor by either spreading the word and letting others know about my newsletter.

Alternatively, you could consider picking up one of the paid products my team and I have worked on:

  • All spatie products
  • Oh Dear
  • Mailcoach
  • Flare

If you have any questions, remarks or thoughts about this newsletter, simply hit reply!

Thank you so much for reading!


Freek

You are receiving this newsletter because you subscribed at freek.dev Unsubscribe from this newsletter This mail was sent using Mailcoach

Online version • Past editions • Unsubscribe