Sign in

Chris Morrell

@cmorrell.com
3.8K followers 400 following 4.8K posts

Philadelphia father of two. Mostly talking about PHP/Laravel/React on here. He/him. On the web @ cmorrell.com Podcasting @ overengineered.fm On mastodon @ rtsn.dev/@chris Formerly @ twitter.com/inxilpro

PostsRepliesMedia
Chris Morrell @cmorrell.com · 22/09/2026
I love Linear, but GraphQL kinda sucks to work with in PHP. Unfortunately, the API is giant and constantly evolving, so building a bespoke PHP SDK would be more maintenance than I'm willing to take on. So I built a tool that automatically parses the Linear GraphQL definition…
270
Chris Morrell @cmorrell.com · 21/09/2026
I got tired of accidentally opening Xcode because I've forgotten to choose "Always Open With…" on my Mac. So I build Short Circuit to manage file associations in one place. Feel free to use it, too! github.com/inxilpro/sho...
Screenshot of a macOS app for managing default file associations. The Code category is selected, showing a grid of file types—including JSON, XML, YAML, JavaScript, TypeScript, Python, PHP, Swift, C, C++, and CSS—with their current default applications. JSON data is selected, and a details panel on the right shows Sublime Text as the default app, along with its public.json identifier, .json extension, and application/json MIME type.
2111
Chris Morrell @cmorrell.com · 09/09/2026
I'm working on a project to process and centralize our knowledge at work. LLMs are so promising for this, but trusting a third party with *all our data* was a non-starter for us, so I built something to run internally. It's a little hard to explain, so I made a video:
131
Chris Morrell @cmorrell.com · 31/08/2026
I've deployed github.com/glhd/paralle... to a bunch of projects now. It's so nice to cut deploy time by 30–60s!
011
Chris Morrell @cmorrell.com · 25/06/2026
I'm about halfway thru Whistler by Ann Patchett. I don't know that I've cried this many tears of joy reading a book before. It's such a beautiful portrayal of familial love. Really, really good.
Book cover of Whistler, A Novel, by Ann Patchett

An oil painting of a horse standing in a field facing the viewer. The sky is dark and starry, and a few mountains are in the distance.
040
Chris Morrell @cmorrell.com · 05/06/2026
Nice little quality-of-life improvement for the Laravel `failed_jobs` table :)
alter table `failed_jobs`
  add column `display_name` 
      varchar(255) 
      generated always as (json_unquote(json_extract(`payload`, '$.displayName'))) 
      stored after `uuid`,
	add column `exception_name` 
		varchar(255) 
		generated always as (substring_index(`exception`, ':', 1)) 
		stored after `display_name`,
	add index `failed_jobs_display_name_index`(`display_name`),
	add index `failed_jobs_exception_name_index`(`exception_name`);
0190
Chris Morrell @cmorrell.com · 25/05/2026
Introduce yourself with ten bands you’ve seen live:
A number of folded band tour shirts:

- The Decemberists
- Wolf Alice
- The Format
- Chappell Roan
- Jason Isbell
- Olivia Rodrigo
- Josh Ritter
- The Beaches
- Lucius
- Lily and Madeleine
- The Low Anthem
- Slowly, It Dawns
150
Chris Morrell @cmorrell.com · 16/05/2026
Sometimes @ianlandsman.com and @aaronfrancis.com go a little long, so I decided to make a 1 minute highlight reel of the most recent @mostlytechnical.com
051
Chris Morrell @cmorrell.com · 13/05/2026
CMAT show was incredible. If you have a chance to see her live, do!
CMAT standing in the middle of a crowd
000
Chris Morrell @cmorrell.com · 19/04/2026
Oh my god. Target got there just after The Vitamin Shoppe. No news from OpenAI, et al, though! I’m sure they’re still working on it.
“AG1” display at Target.
330
Chris Morrell @cmorrell.com · 14/04/2026
OpenAI said they were gonna do it. Anthropic, Google, Facebook are fighting, too. Who would have known it would be The Vitamin Shoppe that got there first?
Photo of The Vitamin Shoppe storefront with an “AG1” supplement ad in the window.
050
Chris Morrell @cmorrell.com · 04/04/2026
I NEED A POEM

Can we talk about the moon
tonight? Low & full
in the baby-blue sky. A friend
at my door, the sound
of her laugh & well-loved
heart. I want to be held
up like that. I need a poem
about happiness I haven't
written yet, an ode
to the ducks in my neighbour's
pool, another for the pink
magnolias of spring—some trees
make it look so easy: Yes,
I can hold all this beauty up.
111119
Chris Morrell @cmorrell.com · 02/04/2026
If you’re in Philly, this is running thru this weekend and is *very* funny.
“Can’t Forget About You” theater program
010
Chris Morrell @cmorrell.com · 29/03/2026
Great show.
Stage with “the format” above it
000
Chris Morrell @cmorrell.com · 27/03/2026
😂
"Javascript" block tower with one small block holding it up labeled "app-root-path"
120
Chris Morrell @cmorrell.com · 21/03/2026
I’m only 15% of the way into this, so I can’t say for sure, but this has been a fantastic audiobook so far. libro.fm/audiobooks/9...
The Everlasting by Alice E. Harrow
Libro.fm

My listening supports Iffy Books
051
Chris Morrell @cmorrell.com · 18/03/2026
one part remains unchanged, though
How do I know when to release 1.0.0?

Don't.
110
Chris Morrell @cmorrell.com · 08/03/2026
I’m tempted to set an alert for when the counter hits 987,654,321…
987,637,467 Downloads
160
Chris Morrell @cmorrell.com · 07/03/2026
I'm experimenting with an "you're at this point of the page" highlight that shows all sections proportionally to how much of the page they take up. What do we think? (I'm not convinced, but it's an interesting approach.)
440
Chris Morrell @cmorrell.com · 12/02/2026
Wish you could turn off reposts for specific users? Here's a custom CSS snippet to hide reposts by username. I have it set up as an Arc "boost" but you can find a custom CSS plugin for whatever browser you use. Huge quality-of-life improvement. 😍
div[data-testid^="feedItem-by-"]:has(a:is(
  [href*="friend1.bsky.social"],
  [href*="friend2.bsky.social"],
  [href*="friend3.bsky.social"]
)[aria-label^="Reposted by"]) {
  display: none !important;
}
270
Chris Morrell @cmorrell.com · 11/02/2026
My kingdom for this option in Claude Desktop and ChatGPT. The number of times I've accidentally sent a partial prompt just trying to add a new line 🤬🤬🤬
"Send Message" configuration set to "Command Return"
250
Chris Morrell @cmorrell.com · 20/01/2026
Alright, here's a 3 min video of the new plugin I'm working on called Chronicle. Hit record, walk through code in your IDE, and get a handoff document at the end. Here's the actual document it produced from my demo session: gist.github.com/inxilpro/4b7...
0111
Chris Morrell @cmorrell.com · 18/01/2026
Hah
heliographe.studio says:

If you put the Apple icons in reverse it looks like the portfolio of someone getting really good at icon design

Followed by the Pages icons in reverse: going from basic, unrecognizable icons in boxes to a very beautiful ink pot and fountain pen icon.
116127
Chris Morrell @cmorrell.com · 06/01/2026
Yeah, it really is bonkers just how bad it is. The conclusion is brutal.
In my opinion, Apple took on an impossible task: to add an icon to every menu item. There are just not enough good metaphors to do something like that.

But even if there were, the premise itself is questionable: if everything has an icon, it doesn’t mean users will find what they are looking for faster.

And even if the premise was solid, I still wish I could say: they did the best they could, given the goal. But that’s not true either: they did a poor job consistently applying the metaphors and designing the icons themselves.
030
Chris Morrell @cmorrell.com · 31/12/2025
🎉🎉🎉
Photo of Kevin from Grand Designs on a TV
020
Chris Morrell @cmorrell.com · 17/12/2025
I just revived Laravel Dumper and tagged version 3.0! Check it out: github.com/glhd/laravel... Should now work fully with Herd! Here's with/without laravel-dumper :)
Screen shot of dump() output with laravel-dumper:

Illuminate\Database\Query\Builder {#223 ▼
  sql: "select * from "users" where "email" = 'bogdan@foo.com' limit 10"
  #connection: Illuminate\Database\SQLiteConnection {#1518 ▼
    name: "testing"
    database: ":memory:"
    driver: "sqlite"
     …23
  }
   …25
}Screen shot of dump() output WITHOUT laravel-dumper:

Illuminate\Database\Query\Builder {#223 ▼
  +connection: Illuminate\Database\SQLiteConnection {#1518 ▶}
  +grammar: Illuminate\Database\Query\Grammars\SQLiteGrammar {#1494 ▶}
  +processor: Illuminate\Database\Query\Processors\SQLiteProcessor {#1470}
  +bindings: array:9 [▶]
  +aggregate: null
  +columns: null
  +distinct: false
  +from: "users"
  +indexHint: null
  +joins: null
  +wheres: array:1 [▶]
  +groups: null
  +havings: null
  +orders: null
  +limit: 10
  +groupLimit: null
  +offset: null
  +unions: null
  +unionLimit: null
  +unionOffset: null
  +unionOrders: null
  +lock: null

...
1110
Chris Morrell @cmorrell.com · 13/12/2025
Swift has a cool `defer` statement that lets you effectively queue code to run right before leaving the current scope. It's kinda like try/finally but way cleaner. Would be cool if we had something like this in PHP. What if you could just do a `finally` block without the try to have this behavior?
// in PHP
try {
	// ...
} finally {
	doSomeCleanUp();
}

// in Swift
defer { doSomeCleanUp() }
370
Chris Morrell @cmorrell.com · 08/12/2025
The joys of having a car that has software bugs. I looked out the window this morning to discover that 3 of 4 doors in our Tesla were open. Camera footage shows the doors just randomly open at 9:45pm last night. So much fun.
11291
Chris Morrell @cmorrell.com · 06/12/2025
Kind of an interesting look at the traffic we've seen over the last few days. I expect more spikes soon, but this is what it looks like right now.
Graph showing a line at 0, then jumps to 500M for 8 hours, then drops to 10-50M after that.

It points out the 3.7 billion request spike and then comments that the section of the graph looks small in comparison but is still 1-2 million req/min.
190
Chris Morrell @cmorrell.com · 30/11/2025
It was right there. Prep at 11:15 AM!
Screen shot of earlier post with Thanksgiving spreadsheet with “Brussels” circled.
030
Chris Morrell @cmorrell.com · 27/11/2025
So it begins.
Photo of a printed spreadsheet showing a Thanksgiving day cooking schedule in great detail.
6250
Chris Morrell @cmorrell.com · 27/11/2025
lol thanks gemini
Chart: "Number of Planned Tasks by Menu Item"
Brussels: 5
Corn: 1
Cranberry: 1
Dressing: 4
Gravy: 1
Potato: 4
Turkey: 8
060
Chris Morrell @cmorrell.com · 18/11/2025
Photo of Chris wearing green sweat pants and a pink sweatshirt with three loons on it.
260
Chris Morrell @cmorrell.com · 18/11/2025
One sec let me “laravel new” two times real quick.
Screen shot from GitHub showing 149 repositories.
430
Chris Morrell @cmorrell.com · 13/11/2025
BROKEN SPOKE

You grow old.
You love everybody.
You forgive everyone.
You think: we are all leaves dragged along by a wheel.
Then comes a splendid spotted yellow one-ah, distinction!
And in that moment you are dragged under.

Mary Ruefle
050
Chris Morrell @cmorrell.com · 12/11/2025
I was just cleaning up the basement and found an old CD that had a midi version of my high school senior project on it. I composed a version of "Nothing Else Matters" for a quartet. I listened to this so many times while I was working on the project. Sounds awful, but kinda fun.
130
Chris Morrell @cmorrell.com · 07/11/2025
This looks like a roadtrip of some sort for someone.
Screen capture of map showing Laravel icons in a row.
180
Chris Morrell @cmorrell.com · 06/11/2025
There's no way to share a personal automation, but this one has been a joy for me…
Automation that runs immediately:
When I get a message containing 'stop'
Match text and send message…Receive messages as input
Match "stop(to end|to quit|2end|2quit)" in content
If matches has any value, then send "stop" to sender
030
Chris Morrell @cmorrell.com · 06/11/2025
Laravel logo in beige color with the "ar" blurred out.
080
Chris Morrell @cmorrell.com · 02/11/2025
Got caught up in figuring out how to draw a maze for @benholmen.com's @kilopx.com — so much fun.
090
Chris Morrell @cmorrell.com · 31/10/2025
Happy Halloween!
Photo of Chris dressed as the Dread Pirate Roberts from the Princess Bride.
380
Chris Morrell @cmorrell.com · 30/10/2025
Got inspired by the most recent episode of No Plans to Merge…
050
Chris Morrell @cmorrell.com · 29/10/2025
And stuff like this… We've got `AlgoliaKey` and `AlgoliaFilters` classes that I really should open source some day :P
AlgoliaKey::for(Foo::class)
  ->forUser(Auth::user()) // Scopes the key to user_id
  ->filters(
    // Exclude recently deleted records that might not
    // have been removed from the index yet
    Foo::query()
      ->where('deleted_at', '>', now()->subMinute())
      ->pluck('uuid')
      ->map(fn($id) => "NOT uuid:{$id}")
      ->join(' AND ')
  )
  ->expires(now()->addHour());
130
Chris Morrell @cmorrell.com · 15/10/2025
“Why shouldn’t I?” Bilbo meme where he’s looking at the ring and decides to keep it, but the ring is “long text”
060
Chris Morrell @cmorrell.com · 15/10/2025
I don't need to do this often, but when I do it's a huge pain to get the sequential tailwind classes right, so I put together a little "responsive text" blade component. It's pretty neat!
Code Snippet:

```blade
<x-ui.responsive-text
  xs="Unsigned"
  md="Not yet signed"
  xl="This agreement has not yet been signed"
/>
```
0100
Chris Morrell @cmorrell.com · 11/10/2025
So it’s apple season and I’ve been craving a candied/caramel apple. But I don’t want a whole one. So I’m experimenting with candied apple bites… It’s very hard to wait for these to cool entirely!
Photo of candied apple chunks with tooth picks sticking out of them.
350
Chris Morrell @cmorrell.com · 11/10/2025
Alright. This time I got the candy thermometer out. Took me a whole 12s to find it in the drawer. Really saved a bunch of time by skipping that the first time around…
Photo of sugar mixture boiling in a pan with a candy thermometer sticking out of it.
000
Chris Morrell @cmorrell.com · 11/10/2025
Ugh. And I burnt the caramel so it’s back to square one 😭
Photo of burnt caramel on parchment paper.
430
Chris Morrell @cmorrell.com · 09/10/2025
It's kinda wild what a little DB tuning can do… On the 6th we launched a new feature that resulted in 100,000's of new DB queries. And because of a single missing index and a few sub-optimal queries, that caused a huge spike in load. We added the index and fixed the queries, and voila!
Graph showing load vs. bin log usage: on 10/6 a spike in bin log usage triggered a huge spike in load. On 10/7 and 10/8, similar spikes had no noticeable affect on load.
3110
Chris Morrell @cmorrell.com · 02/10/2025
This looks like Mario Kart to me.
Screen capture from Ian's Sora video showing him with an oversized head and weird arm in a strange convertable.
020