My current setup for Laravel, PHP and AI development (2026 edition) original

by Freek Van der Herten – 12 minute read

After posting a screenshot, I often get questions about which editor, font or tools I'm using. Instead of replying to those questions individually I've decided to just write down the settings and apps that I'm using.

IDE

Since I don't have to write PHP as much as I used to, but mainly have to read and review it, I recently started using Zed as my main editor. It's superfast, and it has a couple of nice extensions to make PHP development good.

In Zed, I use the One Light theme with JetBrains Mono (size 15, line height 1.7) for the editor and MesloLGM Nerd Font Mono for the integrated terminal. Formatting on save is handled by Laravel Pint. I've stripped the UI down to the essentials: no tab bar, no minimap, no git blame, most panel buttons hidden. Copilot edit predictions are enabled though.

PhpStorm is still around for major refactoring sessions where I need powerful find-and-replace across hundreds of files.

Claude Code is of course not really an IDE, but it's my primary coding agent. I run it in iTerm2 and it handles the heavy lifting: writing features, running tests, debugging. My role has shifted to reviewing, guiding, and polishing.

Terminal

I use iTerm2 with Z shell and Oh My Zsh. The prompt is a customized agnoster theme.

I've replaced most traditional CLI tools with faster, modern alternatives:

  • eza instead of ls (with icons and tree view)
  • bat instead of cat (syntax highlighting)
  • ripgrep instead of grep
  • fd instead of find
  • zoxide instead of cd (smart directory jumping)
  • delta as my git pager (side-by-side diffs)
  • fnm instead of nvm (fast Node.js version management)

Some aliases I can't live without:

alias a="php artisan"
alias mfs="php artisan migrate:fresh --seed"
alias nah="git reset --hard;git clean -df"

I also have a commit() function that uses Claude to auto-generate commit messages from the current diff.

Dotfiles

Most of my development setup is version-controlled in my public dotfiles repository. It contains my shell configuration, editor settings, Claude Code configuration, aliases, functions, and more. If you want to replicate anything you see in this post, that repo is the place to start.

macOS

Though you see it on the screenshot, by default I hide and dock. I like to keep my desktop ultra clean, even hard disks aren't allowed to be displayed there. On my dock there aren't any sticky programs. Only apps that are running are on there. I only have stacks to Downloads and Desktop permanently on there. I've also hidden the indicator for running apps (that dot underneath each app), because if it's on my dock it's running.

The spacey background I'm using was the default one on Mac OS X 10.6 Snow Leopard Server.

One of the most important apps that I use is Raycast. It allows me to quickly do basic tasks such as opening up apps, locking my computer, emptying the trash, and much more. One of the best built in functions is the clipboard history. By default, macOS will only hold one thing in your clipboard, with Raycast I have a seemingly unending history of things I've copied, and the clipboard even survives a restart. It may sound silly, but I find myself using the clipboard history multiple times a day, it's that handy.

Raycast is also a window manager. I often work with two windows side by side: one on the left part of the screen, the other one on the right. I've configured Raycast with these window managing shortcuts:

  • ctrl+opt+cmd+arrow left: resize active window to the left half of the screen
  • ctrl+opt+cmd+arrow right: resize active window to the right half of the screen
  • ctrl+opt+cmd+arrow up: resize active window to take the whole screen

I've installed these Raycast extensions:

These are some of the other apps I'm using:

  • To run projects locally I use Laravel Valet. PHP Monitor keeps track of my PHP versions alongside it.
  • Ray is our own little tool at Spatie that I use for debugging apps. I use it daily.
  • Sometimes I need to run an arbitrary piece of PHP code. CodeRunner is an excellent app to do just that.
  • Yaak is my go-to for performing API calls. It's simple, it's good.
  • Databases are managed with TablePlus, and I use DBngin to manage local database servers.
  • For Docker and Linux machines I use OrbStack. It's way faster and lighter than regular Docker.
  • ImageOptim compresses images before I commit them.
  • If you're not using a password manager, you're doing it wrong. I use 1Password. It also handles SSH key signing via its SSH agent.
  • Things contains my to-dos.
  • Hidden Bar hides menu bar clutter.
  • CleanShot X handles screenshots and screen recording.
  • DaisyDisk is a nice app that helps you determine how your disk space is being used.
  • My favourite cloud storage solution is Dropbox. It's an oldie, but still good.
  • I read a lot of blogs through RSS feeds in Reeder.
  • Mails are read and written in Mimestream. Unlike other email clients which rely on IMAP, Mimestream uses the full Gmail API. It's super fast, and the author is dedicated to using the latest stuff in macOS. It's a magnificent app really.
  • My browser of choice is Safari, because of its speed and low power usage. To block ads I use 1Blocker.
  • I like to write long blog posts in iA Writer.
  • To pair program with anyone in my team, I use Tuple. The quality of the shared screen and sound is fantastic.
  • For team communication at Spatie we use Slack. For personal messaging I use Telegram and WhatsApp.
  • I have both Claude and ChatGPT as desktop apps for when I need AI assistance outside the terminal.
  • OpenClaw is an AI agent I deployed on a Digital Ocean server that I use via Telegram. It posts interesting links on my blog, summarizes blog posts for me, and helps me create code snippet screenshots. I've just started using it and I think I'll have more use cases for it next year. Fantastic technology.

iOS

Here's a screenshot of my current homescreen.

I don't use folders and try to keep the number of installed apps to a minimum. There's just one screen with apps, all the other apps are opened via search. Notifications and notification badges are turned off for all apps except Messages. My current phone is an iPhone 17 Pro Max.

In the dock I have Mail, Messages, Claude, and Safari.

Here's a rundown of the apps on the homescreen:

  • I listen to podcasts using Apple's built-in Podcasts app.
  • WordStockt is a word game I built myself. I play it daily.
  • WhatsApp and Telegram are where most of my friends and family are, so I need both.
  • I live in Antwerp, fantastic city. I don't own a car and do almost everything by bike and foot. Velo Antwerpen is the local bike sharing service and great for getting around.
  • Slack is for communicating with my team and some other communities.
  • Google Drive gives me file access on the go.
  • Letterboxd is like a pretty version of IMDb. I use it to log every movie I watch.
  • Using the Home app I control my lights at home.
  • VRT MAX is the offical app of the public broadcasting service in Belgium. There's good local content there.
  • We use Asana for project management at Spatie.
  • Reeder is where I read my RSS feeds.
  • SNCB is handy for looking up train schedules in Belgium.
  • Dropbox keeps my files accessible everywhere.
  • Nuki controls the electronic door lock at our office.
  • I use Books for reading on the go.
  • I still use X (Twitter), mostly through the website on Mac. I still miss Tweetbot a lot.
  • Bluesky
  • For music I use Apple Music.

There are no other screens set up. I use the App Library to find any app that isn't on the home screen.

Hardware

I'm using a MacBook Pro 16-inch with an Apple M4 Pro processor, 48 GB of RAM, running macOS Tahoe.

I usually work in closed-display mode. To save some desk space, I use a vertical Mac stand: the Twelve South BookArc. The external monitor is a Gigabyte Aorus FO32U2P, a 32" 4K OLED.

Here's the hardware that is on my desk:

  • a space grey wireless Apple Magic Keyboard with Touch ID
  • a space grey Apple Magic Trackpad

To connect all external hardware to my MacBook I have a CalDigit TS3 Plus. This allows me to connect everything to my MacBook with a single USB-C cable. That cable also charges the MacBook. Less clutter on the desk means more headspace.

I play music on a KEF LS50 Wireless II stereo pair, which sound incredible. To stay in "the zone" when commuting or at the office have my Sony WH-1000XM6 noise-cancelling headphones.

Next to programming, my big passion is music. I produce tracks under my artist name Kobus. You can find my music on Spotify and Apple Music. I use Ableton Live 12 Suite for recording and editing.

Misc

At Spatie, we use Google Workspace to handle mail and calendars. High level planning at the company is done using Float. All servers I work on are provisioned by Forge. The performance and uptime of those servers are monitored via Oh Dear. To track exceptions in production, we use Flare. To send mails to our audience that is interested in our paid products, we use our homegrown Mailcoach. For HR, we use Officient. The entire team uses Claude Code as their coding agent.

In closing

Every few years, I write a new version of this post. Here's the 2022 version. If you have any questions on any of these apps and services, feel free to contact me on X.

Join 9,500+ smart developers

Every month I share what I learn from running Spatie, building Oh Dear, and maintaining 300+ open source packages. Practical takes on Laravel, PHP, and AI that you can actually use.

No spam. Unsubscribe anytime. You can also follow me on X.

Found something interesting to share? Submit a link to the community section.