When I need to extend React props of HTML elements, I use ComponentProps. Very convenient 😊
Lars Graubner
@larsgraubner.bsky.social
I’m not active here. Find me at larsgraubner.com.
Very in depth article about why you should favor spyOn instead of mock. Worth a read (and try). laconicwit.com/vi-mock-is-a...
`vi.mock` Is a Footgun: Why `vi.spyOn` Should Be Your Default
Which Vitest API is your favorite? There are so many great ones to choose from. test is a classic, vi.fn might have the best name, and expect is a great Swiss Army knife. Like a proud parent, I have…
laconicwit.com
11/28 with more luck than skill 😂 How much can you score?
new Date("wtf")
How well do you know JavaScript's Date class?
jsdate.wtf
I'm starting to get a grep of how to handle CommonJS in an ESM Vite project. Nasty stuff 😄
My guilty pleasure is creating perfect abstractions and component apis 😅 Really satisfied with my react-hook-form abstraction
It took me weeks to figure out that Hetzner blocks certain email ports for new accounts 🤦♂️
'“eat your vegetables” is one of the least effective arguments in the world. [..] I would like to list some of my personal, completely selfish reasons for building accessible UIs. No finger-wagging here: just good old hardheaded self-interest!' nolanlawson.com/2025/06/16/s... #a11y
Selfish reasons for building accessible UIs
All web developers know, at some level, that accessibility is important. But when push comes to shove, it can be hard to prioritize it above a bazillion other concerns when you’re trying to c…
nolanlawson.com
The value of tests greatly increases when using AI for code generation. Let the AI check if it broke something by running the tests is so priceless 🚀
Claude Code suits my workflow much better than Cursor. It might be because I'm using Neovim 😅 The results are really impressive, but it's also quite slow and interrupts my workflow. I'll have to figure out the best way to integrate it 😊
One pattern I like to use is constants for time amounts with self-describing names. No need for extensive comments 🙅♂️
Are there any good guides on how to setup AWS SES properly? I manage to get it working, but not sure if everything is correct due to the massive amount of options 🙃 #AWS
Career advice for developers: Write normal code. Just the basic good stuff. Don't be fancy, don't be clever. Don't use currying everywhere. You don't need Docker for everything. Also don't write dumb code. Please write good code. But make it normal. As unsurprising as possible. Thank you
Not on my fun things to do list: handling DNS stuff 😅
Write flat tests. No "describe", no scenario nesting, no beforeEach/afterEach hooks (as a rule). Each test case is self-contained, listing all the setup it needs. Use Symbol.dispose for reliable cleanup. Use granular test cases. ☝️ These things will make your tests shine.
I learned the hard way, that when importing a CommonJS package in an ESM app within the same monorepo, Vite requires different selectors for the package: optimizeDeps requires the package name and commonjsOptions requires a path. Wasted way too much time on this, but it finally works as expected 🙄
pnpm v10.12 is a huge release! We’ve added many new features to the version catalogs system. We also shipped a new experimental option that makes installation almost instant on most dev machines. github.com/pnpm/pnpm/re...
Release pnpm 10.12.1 · pnpm/pnpm
Minor Changes Experimental. Added support for global virtual stores. When enabled, node_modules contains only symlinks to a central virtual store, rather to node_modules/.pnpm. By default, this c...
github.com
Whenever I implement basic features, such as authentication, for my starter kit, I like to check out the Laravel documentation. They're implemented and documented quite well there 🎯
One gotcha when using TanStack Form in combination with TanStack Query: Always use the async versions of the mutation functions. Otherwise the form state isSubmitting does not behave as expected.
This sounds exciting. Let‘s see how this will evolve. The principles seem promising at least 😊 remix.run/blog/wake-up...
Wake up, Remix!
It's time to go wake up Remix! Here's what we're building and what it means for React Router.
remix.run
It has been quiet this week around klokka.co but I‘m hard at work to get a Beta version done in the next couple weeks 😊 docs are waiting to be written 😄
klokka – Full-stack starter kit for enterprise applications at scale
TypeScript starter kit with React and NestJS providing structure and best practices for scalable SPAs with quick time-to-market.
klokka.co
Also, run ESLint with --report-unused-disable-directives to get notified of obsolete eslint-ignore comments.
Lil’ TypeScript tip: Instead of using `@ts-ignore` for stuff you don’t feel like fixing rn, use `@ts-expect-error`. When you do fix the issue, `@ts-expect-error` will *itself* become an error (which you can fix by deleting the comment). That way, you avoid stale ignores that aren’t needed anymore.
Currently I'm working on klokka.co - a full-stack starter kit that handles the tedious parts of enterprise apps (auth, I18n, emails, etc.) so you don't have to. React + NestJS + TypeScript, all set up and ready to scale. Ship your ideas faster.
klokka – Full-stack starter kit for enterprise applications at scale
TypeScript starter kit with React and NestJS providing structure and best practices for scalable SPAs with quick time-to-market.
klokka.co
I just recently discovered Chrome tab group and I really like them. My tabs always have been a mess 😄
Since I often use SVG sprites for icons and wasn't satisfied with the existing tools, I created a lightweight Node.js CLI tool. Check it out, feedback welcome! 😊 www.npmjs.com/package/svg-...
svg-sprite-forge
A lightweight CLI tool to generate SVG sprite files and TypeScript definitions from SVG icon collections.. Latest version: 1.0.0, last published: 3 minutes ago. Start using svg-sprite-forge in your…
npmjs.com
It was about time, wasn't it? 😅 👇 But now, with Firefox 138 all major browser engines support import attributes to import JSON from within your ECMAScript modules. 👇 ✅ Chromium: 123+ ✅ Safari: 17.2+ ✅ Firefox: 138+ (released 2w ago) PS. This syntax works in modern Node.js, too!
When implementing auth I always come back to session auth with cookies. It’s just easier to handle compared to JWT. This will be the default for klokka.co, my SPA starter kit 😊
Having both, ESM and CommonJS applications, in a monorepo is a constant battle.. 🥲
ECMAScript excitement 😉 Node.js 24 LTS ships these new JS features 🎉 🔶 Atomics.pause 🔶 Error.isError 🔶 Explicit Resource Management (`using`) 🔶 Float16Array 🔶 Intl.DurationFormat 🔶 Promise.try 🔶 RegExp.escape 🔶 RegExp Modifiers 🔶 RegExp Duplicate Named Capture Groups
Node.js 24 is here and it's looking good 😎🚀 Featuring updates to V8 v13.6, npm v11, improved Permission Model and more new features in the blog. Check it out and let us know what you think: hubs.ly/Q03lfLDC0