A practical, story-driven guide to moving UI-driven mutations from /api/* routes to Next.js Server Actions using <form action>, FormData, pending UI with useFormStatus, and server validation—plus the clear boundary for when Route Handlers are still the right tool (webhooks, public APIs, streaming, custom headers).
Blog
Long-form writing and practical notes from real product and teaching work.