MarkerHighlight.js
I love digital tools that have some analog look or feel to them. (Speaking as an Excalidraw super user.) Going to have to find an excuse to use this beauty!

by sebastian de deyne
I love digital tools that have some analog look or feel to them. (Speaking as an Excalidraw super user.) Going to have to find an excuse to use this beauty!

3 Apr 2026 via vercel.com
How to multiply your shipping cadence while using agents responsibly. Matthew Binshtok on the Vercel blog:
There is a fundamental difference between relying on AI and leveraging it.
- Relying means assuming that if the agent wrote it and the tests pass, it’s ready to ship. The author never builds a mental model of the change. The result is massive PRs full of hidden assumptions that are impossible to review because neither the author nor the reviewer has a clear picture of what the code actually does.
- Leveraging means using agents to iterate quickly while maintaining complete ownership of the output. You know exactly how the code behaves under load. You understand the associated risks. You’re comfortable owning them.
I’ve seen a lot of strong opinions about disclosing whether code in a PR was written by hand or generated by AI. I don’t really care. The author owns the code in the first place. The author and reviewer have a shared responsibility for what happens on production.
Putting your name on a pull request means “I have read this and I understand what it does.” If you have to re-read your own PR to explain how it might impact production, the engineering process has failed.
The litmus test is simple: would you be comfortable owning a production incident tied to this pull request?
Musings from Robin Sloan:
Most olive oil production at medium-or-greater scale depends on machines of this kind [over-the-row olive harvester]; they trundle over trees planted in long rows, almost like continuous hedges, and collect the fruit with vibrating fingers. Machine-harvested olives cost less to buy, and they arrive at the mill in better shape than olives harvested by hand.
The catch: most olives can’t be cultivated in this configuration; the trees don’t thrive so close together. Only a handful of varieties will tolerate it, so those handful have been planted in huge numbers, and the flavor of global olive oil has changed as a result.
AI enables us to do things faster, and sometimes better than we’ve been able to before. But it has its limits. And as we learn those limits, the work we do will shift to avoid them.
In a different section, the article dives into the limitations of the physical world.
The project cut across several different magic circles — Ruby code, quasi-governmental APIs, the rules and standards of the postal system — but/and it also broke out into the physical world of paper, printers, and post offices. The project required manipulations including but not limited to: folding, peeling, sticking … gnarly!!
It’s possible that an AI coding agent could have helped me with #1 above, and of course it could have advised me on the rest. But it’s impossible to imagine the AI agent handling #2-5 autonomously; it would require such a Rube Goldberg tangle of support that “autonomously” would no longer apply.
In our programming world, AI’s impact looks limitless. But once you drift outside the boundaries of software, it’s put into a different perspective.
If indeed AI automation does not flood fill the physical world, it will be because the humble paper jam stood in its way.
In a project management-themed Hackers Incorporated episode, Adam Wathan introduced derisking projects with save points. The entire episode is definitely worth your time, but that specific piece of advice has changed the way I work as a developer and make decisions as a project manager.
In practice, it has taught me to optimize for optionality, not efficiency.
For the past year, Obsidian has been my note-taking companion. I don’t care about fancy features like backlinks, canvas… I like Obsidian because it’s fast, minimal (up to you!), customizable, works with Markdown files, and has a good enough mobile app.
I’ve slowly grown towards a more consistent way of taking and organizing notes. While I’m using Obsidian, it’s a system that can easily be ported to any other tool as long as you have something that resembles a filesystem.
Next week we’re sending out the first issue of a new newsletter: href.email.
Content on the internet is at a tipping point. Social media actively discourages sharing links, while AI-generated content is gaining prominence. We want to double down on human-created and curated content. Authors and creators put a lot of effort into their work, which we want to bring to the surface with our own touch.
I’m looking forward to help curate write these the coming months! (And I’m stoked about the domain name, how was that not taken?) Expect a healthy mix of dev/design/product content. Head over to href.email if you want to subscribe.
I thought this image from Christoph Niemann in Sunday Sketching was worth sharing.
We can force ourselves to do good work. But for great work, we need a portion of luck.

PS: I highly recommend Christoph’s Abstract episode which you can watch for free on YouTube.
I’ve been writing more Blade + Tailwind the past few weeks. Coming from React + Tailwind I really missed tailwind-merge and clsx, but luckily came across this great package from Sandro Gehri.
{{-- components/button.blade.php --}}
<button
{{ $attributes
->merge(['type' => 'submit'])
->twMerge('bg-green-500') }}
>
{{ $slot }}
</button>
{{-- home/index.blade.php --}}
<x-button class="bg-red-500">
A red button
</x-button>
Source code and installation instructions on GitHub.
From Escape the Algorithm. When we create a contract or a pattern, there are gains in familiarity, modularity, and composability, but it’s a lossy translation.
If I were to design a personal map of my neighborhood, it would include the potholes I swerve by on my bike rides, the neighbor’s sweet precocious 4 year old that is always on the front stoop and wants to tell me about her day, routes that have small patches of grass to the right of the sidewalk and end near a public trash can (suitable for walking my right-side-only peeing dog), the schedule and trajectory of shade during the summer, homes with potted flowers hanging off their railings, restaurants that closed ages ago, the playgrounds where we are most likely to run into parent friend crushes, and the street with the best view of the skyline at night.
It probably would not look like Google Maps.
:hover or :focus state to debug styling issues. Sometimes, you want to debug an issue of an element in focus with a state controlled by JavaScript. Unfortunately, the forced states from the developer console aren’t always enough. (Edit: unless you use Chrome apparently, scroll to the end for an alternative solution!)In a New Yorker article titled The Art of Decision-Making, Joshua Rothman explores the paradox of how we can spend a lot of energy fretting over small decisions, while the big life decisions seem to come naturally.
We agonize over what to stream on Netflix, then let TV shows persuade us to move to New York
An interesting point he makes is how our aspirations can take a long time to come to fruition. How can we guide our actions if we don’t even know if we’ll still want the results by the time we get there?
To aspire […] is to judge one’s present-day self by the standards of a future self who doesn’t yet exist. But that can leave us like a spider plant putting down roots in the air, hoping for soil that may never arrive.
As the life we crave can change dramatically.
Before having children, you may enjoy clubbing, skydiving, and LSD; you might find fulfillment in careerism, travel, cooking, or CrossFit; you may simply relish your freedom to do what you want. Having children will deprive you of these joys. And yet, as a parent, you may not miss them. You may actually prefer changing diapers, wrangling onesies, and watching “Frozen.” These activities may sound like torture to the childless version of yourself, but the parental version may find them illuminated by love, and so redeemed. You may end up becoming a different person—a parent. The problem is that you can’t really know, in advance, what “being a parent” is like.

Last week, we released Laravel Error Share, a package to share local Laravel exceptions with a coworker or your debugging friend on the internet. We wrote all about the functionality of the package on the Flare blog. In this post, I’d like to look into some of the implementation details and considerations we made while building it.
Full title is Managing My Motivation, as a Solo Dev, but this is great advice for any dev.
My favorite:
Leave tasks unfinished
I can’t overstate how much this one helps me. I try to leave a task 90% finished at the end of a working session. It feels slightly worse than closing out the work, but it makes starting the next day 10x easier. Having a quick win when I start coding is a massive boost, and it immediately gets me into the flow state. It can’t be too easy though, if all I have left is to run git commit, that’s not enough. Ideally it’s something where I know exactly what I need to do, that will take 5-10 minutes.
As I’ve written before: end the day with a failing test.
The Cascade is a great new blog on all things CSS by Robin Rendle. It’s also an attempt to fill the void left by CSS-Tricks, for which Robin was also a writer for. And like CSS-Tricks, every time you visit the blog you might be surprised with a tweaked design.
CSS is in a really good place these days, but there’s a lot to keep up with. Max Böck also just shared a great article on keeping up with recent features.
Peter Suhm shared a beautiful guide on how to build a writing habit. The guide isn’t about good writing, or achieving success through publishing your work. It’s about the small gains you get and compound from consistent writing for yourself. It’s about building a habit, the quality will follow.
This is a guide about writing — not publishing. Publishing is the root of all evil when it comes to writing consistently. Publishing is uncomfortable, at times even scary. How will people judge your words? It’s publishing that causes writer’s block — not writing. It’s what makes writing hard. In the same way that talking is easy but getting up on stage and giving a talk is hard, writing is easy too, but writing something you feel confident enough to publish is hard. When the stakes are low, the writing is easy. Once I realized the key to building a daily writing habit was to separate the process of writing from the goal of publishing, it all clicked for me.
I love the pragmatism. And the goal is up to you be it 100 or 1000 words a day. There’s no right or wrong amount of writing, the key is consistency.