
Today’s issue: Robert Frost’s thoughts on Remix vs React, reverse JavaScript framework fatigue, and using cutting edge CSS features to pay my rent.
Welcome to the late-night special Halloween edition of #437.


Me watching the vibe-coders turn shadcn/ui into the new Bootstrap
It’s already one of the most popular open-source projects of all time, but shadcn/ui keeps pumping out hit after hit anyway.
And since today is Halloween, we thought it’d be the perfect time to highlight all the tricks and treats coming from the mysterious, pseudonymous, and possibly immortal shadcn over the past couple months.
Let’s dive in:
shadcn CLI 3.0 – This update from back in August gave the CLI a total overhaul. It now supports namespaced and private registries, improved error handling, and much faster dependency resolution. You can also search, preview, and install components right from your terminal, which makes it feel like a mini package manager for your entire design system.
Registry Directory – They just launched this on Tuesday, and it’s basically a Craigslist for UI components, with hopefully fewer weirdos. It provides a public index that lists every official and community-made component, hook, and layout pattern — all installable with the CLI. Teams can even host their own internal registries, which turns shadcn/ui into a kind of open-source distribution platform for design systems.
Forms – A flexible new Form primitive with built-in validation helpers, schema integration, and compatibility with React Hook Form, TanStack Form, and Zod. It makes handling complex form logic feel smoother, simpler, and less cursed than ever.
Bottom Line: shadcn/ui has quietly evolved into a full-blown component platform that’s loved by humans and AI codegen tools. Yes, this is part of the reason why every new site these days has that same Bootstrap shadcn/ui look and feel – but that’s the price you pay for winning.


My team after I make our QA cycles twice as fast
If you want to get one big productivity win for your team before the end of Q4, you need to check out QA Wolf.
Their AI-native testing service saved Meow Wolf $300k per year in engineering costs, while also saving them 40+ hours of testing time per release cycle.
Here’s how:
Get a personalized demo to see how they can cut your team’s QA cycles down to 15 minutes or less.

It’s a remote container build service that lets you run GitHub Actions 40x faster for half the cost, and they just launched GitHub Job Details to provide observability for your whole CI/CD pipeline too.
What gets logged?
for (var i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 1000)
}

Chrome announced that it’ll connect to HTTPS by default starting a year from now, so every visit to a non-HTTPS site will trigger a permission prompt. Somebody please warn addictinggames.com before the firewall blocks City Jumper.
Tanner Linsley wrote about Directives and the Platform Boundary, stressing the need for clearer boundaries between framework behavior and platform semantics. I only wish he could’ve given this same advice about boundaries to my college roommates about 15 years ago.
Kilo Code is an open-source, multi-agent coding system that lets you connect to 500+ LLMs and run them wherever you want. It’s #1 on OpenRouter, and can handle agent orchestration, architecture, and coding – with open and transparent pricing. [sponsored]
Brendan McLoughlin wrote about the diverging futures of React and Remix. “Two frameworks diverged in a wood and I took the one less toxic, and that has made all the difference.”
Should you write code that runs in the browser or code that the browser runs? Jim Nielsen shares his thoughts.
Tessa Mero explored why developers are bailing on Next.js for TanStack Start, besides a mild case of Reverse Framework Fatigue.
Meta Quest now supports React Native and you don’t need to learn anything new to get started. See how to set up, build and run apps on Meta Quest in this hands-on guide for React Native developers. [sponsored]
The DevTools team released Chrome 142, bringing AI code suggestions, MCP server upgrades, and Gemini-powered performance trace debugging. Just in case Chrome didn’t already come with enough AI features you avoid like the plague.
Rspack 1.6 adds better tree-shaking for dynamic imports, JSX preservation, and support for JavaScript’s new import defer.
Only idiots write manual tests – modern engineering teams like Notion, Dropbox and Wiz use Meticulous to maintain e2e UI tests that cover every edge case of your web app. [sponsored]
Turborepo 2.6 just dropped with faster caching, better pipelines, and yet another attempt to convince us that monorepos aren’t a giant psy-op.
Preethi shared this tutorial on CSS animations that leverage the Parent-Child relationship. Leveraging the parent-child relationship is the only way my brother has been able to pay his rent since 2015.
What gets logged?
for (var i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 1000)
}
A little throw back for all you old heads. This used to be everyone’s favorite JavaScript interview question.
This code will log 5 5 times.
The reason for this is because we declared our variable with var, which is function scoped. By the time our functions given to setTimeout run, i will already be 5 and every function will reference that same variable. To fix this, use let which is block scoped and will give each iteration of our for loop its own i.
for (let i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 1000)
}