Skip to main content
Juliano Alves
•1 min read
Nx and Turborepo: choosing a task runner for monorepos
Computation caching vs content hashing, project graphs, generators, migration cost, and using both tools together when it pays.
Monorepo
Tooling
DX
•4 min read
Streaming and Suspense in the Next.js App Router
A deep dive into HTML streaming, Suspense boundaries, loading.tsx, caching semantics, and how to compose fast perceived performance without sacrificing correctness.
Next.js
React
Performance
•1 min read
Content-Security-Policy nonces in Next.js
Why nonces beat unsafe-inline, generating per-request nonces in middleware, passing to Script components, and strict-dynamic tradeoffs.
Next.js
Security
•1 min read
Rate limiting serverless APIs with Upstash Redis
Token bucket vs sliding window, keys by IP or user id, @upstash/ratelimit in Vercel Edge, and false positives behind NAT.
Redis
Serverless
Security
•2 min read
Multi-stage Docker builds for Next.js
Standalone output, layer caching with BuildKit, non-root users, distroless or Alpine runtimes, and image size tradeoffs.
Docker
Next.js
DevOps
•1 min read
Biome as a single linter and formatter
Speed vs ESLint ecosystem parity, migration path, CI integration, and when you still need TypeScript-aware ESLint rules.
Tooling
JavaScript
DX
•1 min read
tRPC: end-to-end types without GraphQL
Procedures, routers, context, Zod input validation, React Query integration, and boundaries between BFF tRPC and public REST.
TypeScript
API
React
•2 min read
HTTP caching: browser, CDN, and origin
Cache-Control directives, stale-while-revalidate, ETag vs Last-Modified, CDN cache keys, and busting strategies for HTML vs assets.
Web
Performance
Architecture
•4 min read
TypeScript utility types I use every day
From Pick and Omit to satisfies, mapped types, and when to reach for conditional types—patterns for APIs, forms, and component libraries without drowning in generics.
TypeScript
Frontend

© 2026 Juliano Alves. All rights reserved.