Home

Writing

Notes from building things.

  1. The best transactional email services in 2026

    Password resets, receipts and sign-in codes have to arrive. Here are seven ways to send them from your app, starting with the one that keeps your data and your provider in your hands.

    Tools

  2. Validating API input with Zod in TypeScript

    TypeScript checks nothing once your app is running. Here is how to validate request bodies, environment variables and API responses with one Zod schema that also gives you the type.

    TypeScriptBackend

  3. Why I use Drizzle for every TypeScript backend

    Raw SQL has no types, and heavy ORMs hide the SQL. Drizzle sits in between: you write TypeScript that reads like SQL, and every query is typed from your schema.

    TypeScriptTools

  4. Implementing AES-256-GCM encryption at rest in Node.js

    TLS stops protecting your data once it reaches the database. Here is how to encrypt sensitive fields yourself, with Node's native crypto module.

    Security