Tailwind CSS v4: What Changed and How to Migrate
Tailwind v4 moves configuration from JavaScript to CSS, drops the content array, and ships a faster engine. Here's what the breaking changes actually mean for a real project migration.
Tailwind v4 moves configuration from JavaScript to CSS, drops the content array, and ships a faster engine. Here's what the breaking changes actually mean for a real project migration.
Vitest runs faster, works natively with ESM and TypeScript, and uses the same API as Jest. If you're still on Jest in a Vite-based project, here's the case for switching and exactly how to do it.
Biome is a Rust-based JavaScript toolchain that handles linting, formatting, and imports in a single binary. We've been running it in production projects since late 2025. Here's what the migration from ESLint and Prettier actually looks like.
Running containers in production without scanning them is the equivalent of shipping code without running tests. Here's how teams scan images, generate SBOMs, and add runtime protection, from the CI step to the cluster.
Code-first API development produces documentation as an afterthought. OpenAPI-first flips that: you write the spec, generate the server stubs and client SDKs, and enforce the contract at every layer. Here's how it works in practice.
Not every real-time feature needs WebSockets. Server-Sent Events handle most push scenarios with far less complexity. Here's how to choose, and what each approach looks like in actual code.
Background jobs that crash mid-execution lose all their state. Temporal solves this by making workflows durable state machines that survive process restarts, deploys, and outages. Here's what it looks like in TypeScript and Python.
Every public API needs rate limiting, but the algorithm you choose shapes the user experience and the failure modes. Here's how each approach works and when to use it.
Passkeys are no longer an experimental feature. Apple, Google, and Microsoft all support them natively. Here's what WebAuthn actually looks like in code and when passkeys make sense for your app.
Most E2E test suites break as fast as the features they cover. Here's how to write Playwright tests that hold up when the UI changes, the data changes, and the team keeps shipping.
Most technical proposals lose because they describe what will be built, not why the client should trust you to build it. Here's how to write one that actually wins.
Most teams treat their CI pipeline as a black box that occasionally fails. A few hours of optimization can cut your CI time by 40-60% and your GitHub Actions bill by a similar margin. Here's exactly how to do it.