Daniel Saewitz's Avatar

Daniel Saewitz

@saewitz.com

indie software engineer, bootstrapped founder, budding writer https://saewitz.com

177
Followers
199
Following
605
Posts
06.02.2024
Joined
Posts Following

Latest posts by Daniel Saewitz @saewitz.com

Yeah Charlie, stop firing strays

06.03.2026 23:09 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

3.0 getting its own hiatus really makes it mature huh

06.03.2026 20:47 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

phish 3.0 is now 17 years old, the same age as 1.0

cc: @cdirksen.bsky.social

06.03.2026 17:10 πŸ‘ 9 πŸ” 1 πŸ’¬ 0 πŸ“Œ 1

back in my day we wrote code uphill both ways

06.03.2026 01:07 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

One thing that I got wrong about marketing was: I felt if I published a narrative, I could do it just once.

It turns out you have to reinforce that messaging over and over and over again. This seems obvious in hindsight but I was naive.

Now I know why businesses are so annoying.

05.03.2026 19:47 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

there's some cruel irony in NEXT.js not having middleware

but I wanna call next()

04.03.2026 13:37 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Yeah. It's amazing how much code, state, and side-effects you can shed when you just use the platform.

It's funny reading about all the problems people post about and you can see that by better designing your route tree and not being afraid of navigation, you can side-step those problems entirely.

04.03.2026 07:05 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

what a fucking bone-headed mistake

04.03.2026 04:43 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I do have a half-written draft on this from the perspectives of loading states, but the bigger picture is even more interesting imo.

the only way I've found of communicating this is taking someones poorly written 'use client'-heavy code and pairing on moving it to a server component architecture.

03.03.2026 23:43 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

this is probably worthy of a blog post. but it's so hard to explain because the old heads (php, ruby) just say "no duh - this is how we always did" not understanding compositional client components and the new heads just say "vercel is trying to sell servers, this is so complex"

03.03.2026 23:41 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Remember. Going to a URL in your browser IS a GET request

03.03.2026 01:56 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Everything is a link and a page? You just cut an incredible amount of complexity, bugs, and code. And you got some nice UI/UX wins too.

03.03.2026 01:54 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 1

The big takeaway here is that people forget (or never learned) that the URL is the tier 1 state manager. @tanstack.com and @nuqs.dev are doing their best to re-educate the masses.

Rendering dynamic server components via searchparams feels like a cheat code, but it’s the way it was historically done

03.03.2026 01:53 πŸ‘ 9 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Depends on the scenario. Keep in mind that RSC is not a prescription: it is a toolbelt of functionality and you pick what best suits each use case. In general, most data can be fetched in a server component.

If you need to handle some data on user action, create a form with a submit button and fire off a server action and useActionState.

If it needs to be a GET for some reason (make sure that it does), create a route handler and use a fetching library (like tanstack query). Or that’s probably a hint that it shouldnt be an API endpoint, but a new page (or a new searchParam). In that case use nuqs to add a searchParam with shallow: false (or a <Link with nuqs’ build URL) and render the relevant data in the new page as a server component.

You have all the tools available to you. It’s up to you to choose the right tool for the job. If this feels complicated, it’s because there are a number of different ideal ways to solve a number of varying problem sets. Just keep in mind, the value here is flexibility and autonomy. You elect what solve to use where most appropriate.

Depends on the scenario. Keep in mind that RSC is not a prescription: it is a toolbelt of functionality and you pick what best suits each use case. In general, most data can be fetched in a server component. If you need to handle some data on user action, create a form with a submit button and fire off a server action and useActionState. If it needs to be a GET for some reason (make sure that it does), create a route handler and use a fetching library (like tanstack query). Or that’s probably a hint that it shouldnt be an API endpoint, but a new page (or a new searchParam). In that case use nuqs to add a searchParam with shallow: false (or a <Link with nuqs’ build URL) and render the relevant data in the new page as a server component. You have all the tools available to you. It’s up to you to choose the right tool for the job. If this feels complicated, it’s because there are a number of different ideal ways to solve a number of varying problem sets. Just keep in mind, the value here is flexibility and autonomy. You elect what solve to use where most appropriate.

Data fetching in RSC…

03.03.2026 01:48 πŸ‘ 6 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I'm sorry he has to see the wizards play basketball, but KD is incredible. True hooper

02.03.2026 21:48 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

will do!

02.03.2026 16:48 πŸ‘ 5 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

you guys could implement something I've long wanted.

create a unified endpoint for pnpm update-interactive that takes a LIST of packages, rather than fetching individually. if you're on bad internet this takes _forever_. it could be 100x more performant with one request.

02.03.2026 16:46 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Post image

and here's evidence its synced via icloud (only 1 key because the other is on the secure enclave, not synced)

02.03.2026 16:39 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

here's a demo of my secure enclave/icloud sync plc rotation key manager

02.03.2026 16:35 πŸ‘ 5 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

This posts via PDS session, not keys. But still nice to test

02.03.2026 16:31 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

the biggest piece of undiscussed tension in my family is that every day one of us solves the wordle on our shared NYT account and we never talk about it

02.03.2026 08:13 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

you can install this via

$ brew tap switz/tap && brew install switz/tap/plc-touch && plc-touch

but keep in mind its super under-baked and needs a lot of work to improve the ux. its buggy. no promises.

you're trusting my binary - read the code and build it yourself if you'd like. PRs are welcome

02.03.2026 07:50 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

hardware keys are locked to your device, but you lose them if you lose the device. in theory you could create multiple of these across a handful of devices.

if you trust icloud though, you can create a software-based key and that'll be synced.

02.03.2026 03:10 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

by setting up a higher priority key, you ensure you'll always have the highest priority control over the identity should anything happen to it.

02.03.2026 03:09 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

the major risk in atproto is that your PDS by default owns your keys (or at least in blueskys case).

this is good for ux, but has bigger ramifications especially as atproto grows wider.

02.03.2026 03:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Post image

built an atproto terminal ui for setting up alternative plc rotation keys. there are two types of keys.

hardware-based: no sync
software-based: synced via icloud

is anyone interested in this? I could package it up and release it, though it needs a lot of UX work.

tangled.org/saewitz.com/...

02.03.2026 03:06 πŸ‘ 25 πŸ” 3 πŸ’¬ 2 πŸ“Œ 1

It was roughly $96

01.03.2026 09:06 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Post image

Pro tip: do not accidentally make 270 million requests to R2

28.02.2026 22:27 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

lol - remember when they were a non profit…

28.02.2026 04:09 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Tomorrow is the best day of the year for any SaaS business owners. Happy Feb 28th

28.02.2026 00:30 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0