Why I ended up writing my own ESLint rules, a conversation with TravelPerk's 15th hire about turning a converted-flat monolith into a microfrontend platform, TypeScript 7 finally landing in Go, and a workshop date that already sold out.
New article: Master your own ESLint rules
Every team has a pattern they keep flagging in code review. Someone pushes back, someone else lets it through next sprint, the thing keeps shipping.
I got tired of it. So I wrote a custom ESLint rule. And somewhere in the middle of learning how the parser sees my code I realized writing your own rules is probably the fastest way to actually understand how JavaScript is executed.
The article takes you through what ESLint is actually doing when it walks your code on save. Then the four rules I built for the patterns my team kept breaking.
There's also a five-minute version at the end for when you just want to flag a pattern without publishing a plugin. If you've ever opened AST Explorer, squinted at it for a minute and closed the tab, start there.
Podcast: Giorgio Polvara on scaling frontend at Perk
New episode of Señors @ Scale is out. Giorgio Polvara was TravelPerk's 15th hire, set up the frontend foundations that still power the product today, left to try engineering management at Toptal, realized he missed building, and came back as Staff. He's also the original creator of @testing-library/user-event, which you almost certainly have in your lockfile right now (over a million weekly npm downloads).
We got deep into what it actually takes to scale a frontend team from 7 engineers to a full platform tribe. The migration from a monolithic React app to microfrontends (vertically split SPAs served at the infrastructure layer, not SingleSPA). And the company-wide rebrand that changed everything visible at once, shipped behind a feature flag without leaking a pixel of the new identity.
We also got into contract testing with Pact, and when they reach for runtime Zod validation instead. Then how you actually manage shared dependencies across a fleet of apps (pnpm, Syncpack, internal Vite plugins) without everything drifting out of sync.
Plus Giorgio's take on why 20% refactoring time is a broken model, and the Staff engineer move of proposing five solutions and expecting one to land.
Giorgio put it best:
You're not building features. You're improving a system that happens to produce features.
Watch the full episode on YouTube
TypeScript 7.0 Beta is out and it's the Go rewrite
The one we've been waiting on since 6.0 shipped. Headline numbers are 10x faster type checking with roughly half the memory usage, and project loading around 8x faster in large monorepos.
If you've been watching tsc --watch spin for 90 seconds every time you save, install it on a branch and point your editor at the native binary.
Most of the work in 6.0 was alignment so 7.0 could actually happen. If something errors in 7.0 it probably errored in 6.0 too, and there are still plenty of people on 5.x who never ran that check.
Laws of Software Engineering, the website
Someone collected 56 of the laws that quietly govern how software and teams actually work. Conway, Hyrum, Brooks, Goodhart, Hofstadter, all the usual suspects, each with a short write-up.
The kind of site you bookmark for the next time someone needs a quick Parkinson's Law explainer in a meeting.
Claude Design is out of Anthropic Labs
Anthropic shipped Claude Design, a Labs product for building slides, one-pagers, and pitch decks through conversation instead of starting from a blank canvas. You import from your existing sources and it applies your brand automatically. When you want the design wired into a running app, it hands off to Claude Code.
If you've been stitching together brand decks from Figma and Notion on Sunday nights, this is the kind of thing that might replace a step.
ChatGPT Images 2.0
OpenAI shipped a new generation of their in-chat image model. Announcement and demos are worth a scroll if you've been using the previous version for marketing assets or product mockups.
Workshop: From Lizard to Wizard — Monday sold out
Monday April 27 is gone. That was the early slot, the one I thought would take a couple of weeks to fill.
By popular demand I've added a weekend date, Saturday May 2nd. Content is identical to the weekday version (algorithms, system design, security, accessibility, observability, design patterns, AI) on a day you don't have to negotiate a PTO day for.
If you want to go but need your manager's sign-off, I wrote you a short thing you can forward that makes the case without you having to do it yourself:
There's also a referral link. Drop your own email into the URL below and send it to a colleague, and they'll get 50€ off the regular price when they sign up:
https://neciudan.dev/lizard-to-wizard/signup?referral=<ENTER_YOUR_EMAIL_HERE>&utm_source=neciudan-newsletter
Or grab a spot for yourself:
Community reads
Bloom Filters Are Beautiful by Incident.io — how they took a slow alert filtering API from 5s down to 0.3s by stacking a bloom filter on top of a time-based partition. Clear write-up of why they didn't reach for a GIN index, and when you'd actually pick a probabilistic data structure over a regular one.
Migrating shadcn/ui from Radix to Base UI by shadcn studio — Base UI is the successor project from the Radix, Floating UI, and Material UI teams. The render prop replaces asChild, and the maintainer story is a lot stronger now that the ex-MUI and Floating UI folks are involved. If you've been wondering whether to jump, this walks you through it.
Variable Fonts that React to Scroll by Carmen Ansió — font-variation-settings is an animatable CSS property, which means CSS scroll-driven animations can drive font weight and spacing the same way they drive anything else. Zero JavaScript, and the "weight lens" demo that highlights words as you scroll past them is worth the click on its own.
Agents as Scaffolding by Will Larson — the argument is that agents work best as prototyping scaffolding. You build the system with them, then refactor the deterministic parts out to code, keeping agents only for the ambiguous bits (like figuring out code ownership). His security vulnerability triage walkthrough makes the tradeoff concrete.
Anthropic added repeatable routines to Claude Code via 9to5Mac — you can now set recurring routines that run on Anthropic's infra instead of your laptop. Think nightly issue triage or weekly PR digests, with no cron glue to maintain yourself. Limits are 5-25 runs a day depending on your plan.
Conferences
JS Heroes — May 14-15, 2026
JS Heroes is back in Cluj-Napoca, Romania. Community-driven, single-track, nonprofit. Consistently one of the best lineups in Europe. If you've never been, it's worth the trip.
Use code love_for_communities for 10% off.
Convex Summit — June 17-18, 2026
I'm speaking at Convex Summit 2026 at Kinépolis Ciudad de la Imagen in Madrid. Two days on how architects and tech leaders navigate complex decisions, with a lineup I'm genuinely looking forward to.
Use code CONVEX26DanNeciu for 15% off tickets.
That's it for this one.
If you're enjoying these, share the subscribe link with someone who'd get something out of it, or with your team on Slack:
📬 Get the next one in your inbox
New articles, podcast episodes, community reads, and what is shipping in the JS world. One email a week, no fluff.
📰 Other recent editions
Cutting 250GB of bandwidth from my blog, Nico Martin on running ML in the browser with Transformers.js, why GitHub has been bad recently, and the end of responsive images
You really dont need an effect, podcast on federated frontends with Zephyr Cloud, TanStack ships RSC, and GitHub finally tackles stacked PRs
React tips that matter, service mesh at scale with Linkerd creator, HTML-in-Canvas, and Transformers.js 4.0
Shimmer skeletons, podcast on databases with Tyler Benfield, axios got compromised, and DOM-free text layout