Sign in

Ed Grosvenor

@gros.co
1.3K followers 958 following 2K posts

Co-founder / CEO at artisan.build, working our fingers to the bone keeping artisanship at the center of web and mobile application development in the midst of Slopmageddon.

PostsRepliesMedia
Ed Grosvenor @gros.co · 24/08/2026
It's doing it on every step, and maybe that's fine. I generally reach for it when the complexity of a class is such that I can't keep all the edge cases in my head. Since robots can't make judgment calls (no judgment), maybe just letting them always do it is fine. It's slow, but I'm in no hurry.
A screenshot from soloterm.com (very good): 

Server half is on PR3 (NoCredential) - 17/17 mutations killed, 
sinc's auto-complete logic and reporting
000
Ed Grosvenor @gros.co · 24/08/2026
Oh crap. The robots decided that everything needs mutation testing. This is a one-shot "quick and dirty proof of concept" that I kicked off at bedtime on Friday night and is just now landing. The good news is it works, the code is fine, and the UI is bad enough that people will think it's mine.
Screenshot of Pest PHP output, showing 2 risky, 2 skipped, 3415 passed tests with 16981 assertions, taking 245.42 seconds.
110
Ed Grosvenor @gros.co · 07/08/2026
Either this is a weird bug or I've found a way to beat the prediction markets with PHP.
A table of projects, one of which says "Last commit 14 hours from now".
000
Ed Grosvenor @gros.co · 16/07/2026
When I landed in America and they told me it’s only safe to eat deep fried food, I could live with it. But now they tell me I have to mask up to walk to the deep fried restaurant.
Me in a black N95 mask and sunglasses walking through Chicago during an air quality emergency caused by wildfire smoke.
120
Ed Grosvenor @gros.co · 09/07/2026
Mmmm. Dogfood.
A Slack notification from the Artisan Build Slack app with the following text:

white check mark emoji - We've got your request and we're on it: Refine agent hedging in Slack integration

hammer and wrench emoji - Work has started on your request: Refine agent hedging in Slack integration
010
Ed Grosvenor @gros.co · 29/06/2026
It's getting close now.
A screenshot of a bucket containing the binary builds for Mac, Windows, and Linux of a tool called Ballast.
000
Ed Grosvenor @gros.co · 16/06/2026
TFW the health check endpoint of your site is the slowest route.
A live demo of Hone, an open-source AI-first telemetry system for Laravel, telling me that the /up endpoint on our company site is the slowest route over the past 7 days, with a p95 of 879.34 ms.
010
Ed Grosvenor @gros.co · 14/06/2026
You know those pictures of family life that get people commenting things like “This guy won at life”?Here’s mine. This is what my kids gave me for Father’s Day this morning. Father’s Day was last week in Switzerland. It’s next week in the US.
A box if Mike & Ike Root Beer Float candy with a 50% off label.
030
Ed Grosvenor @gros.co · 09/06/2026
Well, now we know how Anthropic will wind down its subscriptions. More subtle than the GitHub Copilot approach.
A screenshot from claude.ai showing that the new Fable model is included in the Max plan until June 22, after which it will only be available via usage credits.
020
Ed Grosvenor @gros.co · 25/05/2026
Our house guest. I have no idea where this cat came from but the children have named her Spider-Man. Very sweet and patient enough to tolerate toddler affection, so obviously not homeless.
A young gray cat next to a baby gate
020
Ed Grosvenor @gros.co · 25/05/2026
Desperate times call for desperate measures.
Dice with die, der, and das on their sides instead of numbers.
120
Ed Grosvenor @gros.co · 14/05/2026
Two results side by side, both with Sentinal as the first word in their randomly chosen name, from different models / providers.
010
Ed Grosvenor @gros.co · 11/05/2026
Busy tracking down the root cause. I'm sure it'll be fine.
Me in Slack: I think I might thave invented a new thing. The n*(n+1) problem.
010
Ed Grosvenor @gros.co · 15/04/2026
So you're saying there's a chance...
From a screenshot from a website that helps Americans research options for living abroad. Flight time from NYC: 11 hours, Expat community: very large, Citizenship possible after 999 years of residency.
010
Ed Grosvenor @gros.co · 14/04/2026
The thing I shared earlier is the second most interesting thing I ran `cloud ship` on. I had hoped to share this one, too, but Claude is still busy doing data entry. Maybe tomorrow...
Claude adding columns to bitmask int columns holding visa information for Americans wanting to move abroad.
000
Ed Grosvenor @gros.co · 05/04/2026
This is a 5 minute walk from my house. These paths will take us all the way into France. If I turn the other direction, I’m on a tram into the center of the city in under 10 minutes. I love this little town of ours.
Milo (9) and Teddy (2) riding bikes on a path next to a horse farm.
15122383
Ed Grosvenor @gros.co · 18/03/2026
You can get yourself a blood boy and pop 300 pills a day to try to add 10 years to your life, or you can simply choose not to spend so much of your remaining time on earth resolving conflicts.
A GitHub comment from a PR detailing the decisions made by an automated conflict resolution workflow. The comment reads Automated Branch Sync — Merge Conflicts Resolved

The default branch was merged into this PR and conflicts were resolved automatically.

Resolution Details
app/Filament/Resources/DatabaseServers/Pages/EditDatabaseServer.php
What the PR branch changed: Added the installPgvector() method between ensureFirewallRules() and getExistingFirewallPorts().
What the default branch changed: Added a @return array<int, int> docblock annotation to getExistingFirewallPorts().
Resolution: Kept both — the PR's installPgvector() method is preserved, and the docblock from main is placed directly above getExistingFirewallPorts(), after the new method.
Posted by the automated branch sync workflow. Please review the conflict resolutions above to ensure they match your intent.
020
Ed Grosvenor @gros.co · 09/03/2026
Milo is getting really serious about this game development thing. “Mark know game design right? Get me 30 minutes with him this week”. I blame his mother.
Milo (10) working on pixel art on a MacBook Air in a cafe
010
Ed Grosvenor @gros.co · 03/03/2026
Son of Anton, remove all the bugs from this app so I can launch it. Just go ahead and merge when you're done. No mistakes!
A screenshot from a Github PR showing 481 files changed with line changes of  +6,935 and 90,773
030
Ed Grosvenor @gros.co · 28/02/2026
No I’m not. I’ve just leaned most of my German from a toddler.
A screenshot of Bluesky asking me if I’m writing in Dutch.
160
Ed Grosvenor @gros.co · 21/02/2026
Me: Now let's add some more time range options to this chart. Claude: Great idea! Here's a chart showing 1, 3, 6, 9, and 12 months, as well as YTD, and All Time.
A FluxUI chart of weekly activity with several different time ranges all crammed into it at the same time.
020
Ed Grosvenor @gros.co · 17/02/2026
This graphic doesn’t accurately represent git flow any more than the original. The hot fix never makes it into develop. Two releases in a row happen with no changes in between.
A graphic that apparently intends to illustrate git flow, but doesn’t accurately represent it.
000
Ed Grosvenor @gros.co · 04/02/2026
And it's fixed. I mean, it's still very badly broken, but it works, and in the age of AI, that's all that really matters... apparently.
Screenshot of a PR showing 181 commits, 743 changed files, 25,000+ line additions, and 18,000+ line removals.
110
Ed Grosvenor @gros.co · 18/11/2025
Well, this is unfortunate.
Cloudflare Global Network experiencing issues
Incident Report for Cloudflare
Update
We are continuing to investigate this issue.
Posted 7 minutes ago. Nov 18, 2025 - 12:03 UTC
Investigating
Cloudflare is aware of, and investigating an issue which impacts multiple customers: Widespread 500 errors, Cloudflare Dashboard and API also failing.
We are working to understand the full impact and mitigate this problem. More updates to follow shortly.
140
Ed Grosvenor @gros.co · 09/11/2025
Anyone know a disgraced former AWS Naming Engineer who's looking for work? As we grow the portfolio of tools in our client portal, I'm struggling to find the right mix of catchy and confusing.
Screenshot of our client portal that includes tools called Authenticator, ALF (Arbitrary Large Files), Environmental, Forgery, Pails, and Preview.
130
Ed Grosvenor @gros.co · 09/11/2025
The generator works perfectly. There are a few other little compatibility issues that I could patch by publishing a service provider. But so far, I'm enjoying this combination.
A picture of part of a readme.md for a not-yet-published package called artisan-build/modular-livewire that adds the --module option to php artisan make:livewire to allow for creation of Livewire 4 components inside of modules when using internachi/modular.
070
Ed Grosvenor @gros.co · 05/11/2025
It takes a little getting used to, but this is my basic winter setup.
That picture of Bernie Sanders in a surgical mask and mittens that has been posted thousands of times since it was taken in the winter of 2021.
110
Ed Grosvenor @gros.co · 30/10/2025
My new assistant’s first day on the job. Maybe the machines really will replace us after all.
010
Ed Grosvenor @gros.co · 22/09/2025
Nothing spices up a cold autumn rain storm like a splash in the fountain. Childhood is fun to watch.
Teddy playing in a fountain during a rain storm on the way home from daycare
030
Ed Grosvenor @gros.co · 10/07/2025
I think the kids are hungry.
Milo and Teddy sitting in front of the grill staring, waiting for the burgers to cook.
010
Ed Grosvenor @gros.co · 09/07/2025
Flattery will get you nowhere, computer.
An image recognition system on display at a museum in Winterthur Switzerland that guessed my age to be 27.
020
Ed Grosvenor @gros.co · 01/07/2025
I’m taking a much needed break.
Milo looking out over the side of a tour boat at a beach in Lucerne.
000
Ed Grosvenor @gros.co · 01/07/2025
He gets to steer. I get to pedal. I think the division of labor is wrong.
150
Ed Grosvenor @gros.co · 29/06/2025
School is out for the year so now it’s time for him to learn the important stuff.
Milo (9) pulling a hotdog off the grill and putting it on a plate.
040
Ed Grosvenor @gros.co · 15/06/2025
One minute later, I was pulling him out of a mud puddle in the middle of this downpour. This child has no fear.
Teddy on a plasma car looking longingly outside as rain pours down.
000
Ed Grosvenor @gros.co · 09/06/2025
Nothing stands between me and Laravel Live UK except one tram, two trains, the Paris metro, and the escalator at St Pancras.
A suitcase and a laptop bag in front of a bench at a tram stop in Basel, Switzerland
281
Ed Grosvenor @gros.co · 18/05/2025
Does this count as self-care?
An iPhone reminder set for tomorrow at 8 am that says “you’re not dying. You ate beets last night”
040
Ed Grosvenor @gros.co · 16/05/2025
Every once in a while my wife sends me a message that touches something deep in my soul. This was one of those messages.
A cartoon banana with the caption: By the age of 2, the average toddler has taken exactly 5 bites out of 325 bananas.
060
Ed Grosvenor @gros.co · 27/04/2025
Some families put on fancy clothes and go to church on Sundays to refill their spiritual tanks. We spend our Sundays on our bikes looking for a nice forest to explore. Today we found a good one.
Teddy standing next to a tree on a sculpture trail in Reinach.
190
Ed Grosvenor @gros.co · 11/04/2025
Now we're cooking with gas...
A PHP code snippet that lets me run single rector rule on a single file from within my app.

RunRector::rule(rule: RemoveInternalDocblockRector::class)
            ->on(path: __DIR__.'/files/InternalClass.php');
010
Ed Grosvenor @gros.co · 14/03/2025
The healing power of spring
Teddy (18 months) standing on a rocky bank of the Rhine in Basel, Switzerland
040
Ed Grosvenor @gros.co · 11/03/2025
The walk home from the hospital was tons of fun.
Toddler in his stroller covered in confetti from a parade.
030
Ed Grosvenor @gros.co · 27/02/2025
Just another Thursday night in Basel.
A picture of my son wearing a costume at the end of the parade
000
Ed Grosvenor @gros.co · 25/02/2025
En route to Neuchâtel for the @laravel.swiss meetup. I love working from trains.
A laptop with the Laravel 12 welcome screen on a table of a Swiss train.
350
Ed Grosvenor @gros.co · 23/02/2025
Doing a little prep work for tomorrow’s stream on a train to Zürich.
A kindle scribe with notes about pricing plans for a SaaS I plan to build and ship on a stream tomorrow night.
040
Ed Grosvenor @gros.co · 17/02/2025
That one attribute lets me authorize the transaction before it happens and process it if the user has a sufficient balance. All of this is done using listeners on the Verbs lifecycle hook, so it's completely out of the application's way. The limits for each ledger item are defined in the plan.
An array of ledger items (Memes, Subtweets, Replies, and RickRolls) along with the limit and period (hour, day, week, month, etc).
100
Ed Grosvenor @gros.co · 17/02/2025
I nearly didn't bother with usage limitations on the first iteration of this subscription management package because my current batch of projects don't require it, and I was afraid that getting a nice DX for a complicated feature would be hard. But I think this is pretty manageable.
A verbs event with a Costs attribute that defines the ledger item that will be spent during the event.
120
Ed Grosvenor @gros.co · 14/02/2025
By the time I get to Friday, I need to make myself laugh to get through the day. This is the current state of the test data for my subscription management package.
A pricing page showing the subscription options for an imaginary SaaS that helps people achieve their dream of being the greatest troll on the internet.
130
Ed Grosvenor @gros.co · 08/02/2025
Hey watch it! That’s my work wife you’re talking about.
Large commercial nespresso machine
100
Ed Grosvenor @gros.co · 18/01/2025
If I'm pushing straight to main over and over, you know I'm trying to get a token working in GitHub Actions.
A list of failed GitHub Actions workflows on work pushed directly to the main branch with frustrated commit messages.
020