what i reach for.

boring, proven defaults. i only reach for something new when the problem makes me.

web apps & dashboards

react + react query

most of the hard part is server state. react query handles it so components stay simple.

content & seo

astro

static html that loads fast and ranks. ship js only where a page actually needs it.

styling

tailwind + shadcn/ui

i haven't named a css class in years and don't miss it. shadcn gives me components i own.

client state

local, then zustand, then xstate

most 'state management' is just useState. zustand when it's shared, xstate when it's truly a machine.

backend

node + nestjs

structure that survives more than one engineer. go when node can't keep up.

data

postgres

postgres until it genuinely can't. redis for cache, queues, and realtime.

infra

docker + linux

i'd rather run a small box with caddy than wire up six managed services.

testing

vitest + testing library

test what the user does, not how the component does it. playwright for flows that would hurt to break.

environment

  • nvim
  • tmux
  • ghostty

config · github.com/ssnxd/config

agents

codex, claude, and whatever agent is sharpest right now.