Today’s issue: What people get wrong about Electron, what happens when you nerd-snipe yourself, and what durable objects taught me about finding the perfect AI blood boy.
Welcome to #364.
Me brainwashing Rails developers to start using React
I’m still legally banned from operating a hot glue gun in the lower 48 states – but that judge never said anything about superglue.
So I’m perfectly qualified to talk about last month’s release of Superglue 1.0, a library that enables Rails developers to bask in the glorious light of React (the good parts).
With Superglue, all of DHH’s children can now use React/Redux to build declarative UI – without having to give up their Rails form helpers, URL helpers, or view layer.
And you can do all that without getting bogged down in the weeds of the React ecosystem:
No APIs – Instead, Superglue utilizes Rails’ ability to respond to different mime types on the same route.
No client-side routing – The server is still in charge of navigation, because it’s Rails.
No JavaScript (almost) – Superglue only ships what’s needed to hydrate interactive components.
Bottom Line: Superglue aims to give you all the reactivity and interactivity of React, while still leaning heavily on Rails for your application logic.
It’s obviously targeted at Rails developers for the most part – but as more and more React devs get frustrated by the complexity of RSC, who knows? Maybe we’ll start rethinking our life choices and get a little Rails-curious. Or just get really into baking.
![]() ![]() ![]() ![]() |
Waiting on another 2-hour QA cycle before you can deploy.
Pretty much every dev team in the world has the same goal for 2025: release better software more frequently.
Luckily, QA Wolf is already helping hundreds of teams do that. Here’s how:
Their multi-agent AI systems create, maintain, and run Playwright tests 5x faster than anyone else (see how it works).
They provide unlimited parallel test runs on their infrastructure, getting you pass/fail results within 3 min.
You get zero flakes, because every failed test is reviewed by one of their human QA engineers.
Get a personalized demo for your team – and see how they help 92% of their customers release faster, while saving 9 hours/week per engineer.
They’re hosting a live group demo where one of their engineers will walk through how to use Sentry to find and fix errors in your codebase, while answering all your questions along the way.
export default function App() {
const [count, setCount] = React.useState(0)
const [delay, setDelay] = React.useState(100)
const [step, setStep] = React.useState(1)
const handleDelayChange = (d) => setDelay(d)
const handleStepChange = (s) => setStep(s)
React.useEffect(() => {
const id = window.setInterval(() => {
setCount((c) => c + step)
}, delay)
return () => window.clearInterval(id)
}, [delay, step])
return (
<main>
<h1>{count}</h1>
<Slider
min={100}
max={2000}
step={100}
onChange={handleDelayChange}
label="ms delay"
/>
<Slider
min={1}
max={10}
step={1}
onChange={handleStepChange}
label="increment by"
/>
</main>
)
}
Felix Rieseberg has maintained Electron for the past decade and just wrote about the things people get wrong about Electron. Turns out, there’s more to the story than just “Slack make laptop fan go brrrr.”
In this article, Paweł explains how he brought LCP down to under 350 ms for Google-referred users on his website
SuperTokens created an open-source alternative to Auth0 that’s easy to self-host and extend – without the SaaS pricing surprise. [sponsored]
Iago Lastra epically nerd-sniped himself trying to answer a simple question: How long is a second in JavaScript? It turns out that time was an illusion after all.
Ran Mizrahi wrote about how and why his team built Harmony, a minimalistic, open-source library that helps you stitch together independent components into a composable architecture.
ESLint maintainer, Josh Goldberg, wrote about avoiding any
s with Linting and TypeScript.
Apryse launched this Template Extraction SDK to help you simplify data extraction from your documents with preprocessing capabilities and a JSON output. [sponsored]
pydantic.run is a Python browser sandbox, not to be confused with the actual sandbox full of Pythons currently under construction for season 2 of Beast Games.
Mentoss is a new approach to mocking global fetch()
calls.
Sunil Pai wrote about how durable objects callbacks are weird, but convenient for AI stuff – much like the rotating roster of blood boys that travel everywhere with Sam Altman.
The bug is that we’re unnecessarily removing and re-adding the interval whenever delay
or step
changes.
We want to be able to access the reactive step
value from inside of useEffect
, but we don’t want to include it in the dependency array because it has nothing to do with setting and removing the interval.
This is the perfect use case for React’s new(ish) experimental hook, useEffectEvent
. You can abstract the reactive but non-synchronizing logic into useEffectEvent
, then you can use that event handler inside of useEffect
without needing to include it as a dependency in the dependency array.
import * as React from "react"
import Slider from "./Slider"
React.useEffectEvent = React.experimental_useEffectEvent;
export default function App() {
const [count, setCount] = React.useState(0)
const [delay, setDelay] = React.useState(100)
const [step, setStep] = React.useState(1)
const handleDelayChange = (d) => setDelay(d)
const handleStepChange = (s) => setStep(s)
const onInterval = React.useEffectEvent(() => {
setCount(count + step)
})
React.useEffect(() => {
const id = window.setInterval(onInterval, delay)
return () => window.clearInterval(id)
}, [delay])
return (
<main>
<h1>{count}</h1>
<Slider
min={100}
max={2000}
step={100}
onChange={handleDelayChange}
label="ms delay"
/>
<Slider
min={1}
max={10}
step={1}
onChange={handleStepChange}
label="increment by"
/>
</main>
)
}
Want to learn all about React and its new APIs like useEffectEvent
? If so, check out react.gg – the interactive way to master modern React.