Building — Prev. VP Product @vercel

Joined March 2012
227 Photos and videos
22 Oct 2025
Brother from another mother. I thought I was the only one doing that. Safari is simply the best "consumption" browser, while Chrome is the best "creation" browser.
21 Oct 2025
Replying to @wongmjane
Same here. Safari is default. Chrome for dev work.
4
1
20
31,653
22 Oct 2025
Safari is the fastest and most efficient browser, and most people anyways use Safari on iOS, so using Chrome as default on desktop implies not having any cloud sync between devices.
2
2
6
15,887
Leo retweeted
3 Oct 2025
We are alarmed by reports that Germany is on the verge of a catastrophic about-face, reversing its longstanding and principled opposition to the EU’s Chat Control proposal which, if passed, could spell the end of the right to privacy in Europe. signal.org/blog/pdfs/germany…

700
8,619
29,867
4,766,426
7 Sep 2025
Suspense in React is a solution to a problem that should have never existed in the first place. It exists to avoid blocking the UI on slow data and data waterfalls, but it is, in my opinion, fundamentally anti dynamism, anti personalization, and anti performance. Because the effort required to craft a clean UI with it is much greater than if it wasn't involved. A proper skeleton requires meticulous planning of all the potential states that a UI could be in, and then have those be represented as good as possible by the skeleton. It is always an approximation, and the worse the approximation is, the worse the user experience is. Whereas, if your data is fast, the final UI is not constrained to what the skeleton looks like, which enables the best user experience (no loading states), maximum dynamism, and thereby also maximum personalization. Of course this doesn't immediately work for any app of any size, but there is a wide range of small to medium apps for which it, in my opinion, makes the most sense. I created blade.im to make it easy to quickly build apps that offer maximum dynamism, however, without any loading states whatsoever. No skeleton, no SPA spinner, no slow TTFB. Every page render is a single database transaction, even if your layouts and page contain many dozens of queries. If you perform a write, the whole UI is updated for you, in the same transaction that performs the write.
5
16
14,731
12 Aug 2025
Man, @rolldown_rs is absolutely incredible. Great API. Excellent performance. A joy to use. I just landed Rust-powered builds on Blade with @OxcProject parsing plus rolldown bundling and was able to remove ~300 LOC (and counting) compared to esbuild.
3
3
60
27,658
12 Aug 2025
4
8,060
26 Jun 2025
The best loading state is *no* loading state. The best skeleton is *no* skeleton. The best suspense is *no* suspense. Don't make your users wait because of technical constraints. UX comes first. Your users deserve what they want *immediately*, not later.
1
20
17,913
26 Jun 2025
Blade just went from 140 to 240 stars over night! Thank youuu! 🫶 Excited to announce: 📦 New package name: `blade` 🚀 New init command: `npm create blade` 🦕 Deno and Node support (prev. only Bun) 🖥️ Windows and WSL support 📃 Automatic table of contents for MDX
1
19
12,504
26 Jun 2025
A new docs UI by @juriadams with a cleaner layout landed as well: blade.im
6
9,939
19 Jun 2025
Thanks, @theo! Working hard not to disappoint you! 🫡
7
1
89
20,293
18 Jun 2025
We're working on a docs site for Blade at blade.im — seems like someone already found the link 👀
Replying to @smakosh
It's speaking my language 😍 Will definitely check this out, thanks!
1
3
20
10,440
17 Jun 2025
Trimmed down Blade's JSX stream parser a lot to reduce its impact on the client bundles, which must be as minimal as possible. We'll add size stats to the upcoming site.
1
9
5,970
17 Jun 2025
2
2,513
13 Jun 2025
Blade can now be deployed to @cloudflare and @netlify with zero config, in addition to @vercel and containers! 🎉 Let me know if there are any other providers you'd like to see added. I think @deno_land and @awsamplify would make sense?
6
24
6,093
2 Jun 2025
Inspired by nuqs, @nurodev added `useQueryState` to Blade, which lets you easily store state in the URL, as if it is `useState`:
1
1
20
7,911
2 Jun 2025
3
3,290
26 May 2025
Watching @anselm_io demo @jazz_tools at @localfirstconf. Super exciting!
2
1
12
4,428
16 May 2025
Blade went from 0.4.4 to 0.6.3 this week! ⬥ Support for UI libs like shadcn via `styles.css` ⬥ Support for custom API routes using Hono ⬥ Natively ships Tailwind v4 (Rust engine) ⬥ Improved HMR reliability Next, @nurodev is working on a nuqs-inspired `useQueryState` hook!
1
10
6,311
16 May 2025
Soon the readme will explode, so I will likely start moving the docs out into dedicated site: github.com/ronin-co/blade
4
3,172
Leo retweeted
15 May 2025
Replying to @joshtriedcoding
By forcing your app to be rendered client-side, you are neglecting all advantages of RSC. Your initial page load will be a blank screen, your client bundles will become unbearably large (increasing the time to interactive), and so on. Better to stick to the Next.js defaults, IMO.
1
1
29
6,209