Bài viết mới nhất
Tôi đã refactor toàn bộ backend NestJS như thế nào — và những bài học đắt giá
Sau 2 năm tích lũy tech debt, codebase NestJS của chúng tôi đã trở thành một mớ hỗn độn. Bài viết này ghi lại toàn bộ quá trình refactor, từ planning đến execution, và những gì tôi học được về dependency injection, module boundaries và testing strategy.
Next.js App Router sau 1 năm production: những điều không ai nói với bạn
RSC, Suspense, Server Actions — nghe có vẻ xịn nhưng khi đưa vào production thực tế thì không ít cạm bẫy. Tôi chia sẻ những vấn đề gặp phải với caching, hydration mismatch, và cách chúng tôi tổ chức data fetching pattern cho team 5 người.
Xây dựng RAG system với pgvector: từ prototype đến production
pgvector đủ tốt để thay thế Pinecone cho hầu hết các use case? Spoiler: có — nếu bạn biết cách tune index IVFFlat/HNSW đúng cách. Tôi sẽ walk through toàn bộ pipeline từ chunking, embedding đến retrieval và re-ranking.
Tailwind CSS v4: những thay đổi bạn cần biết trước khi migrate
Tailwind v4 bỏ `tailwind.config.js`, dùng CSS-native @theme, @import thay vì PostCSS plugin. Breaking changes khá nhiều nhưng DX tốt hơn đáng kể. Tôi đã migrate một dự án thực tế và ghi lại từng bước.
PostgreSQL query optimization thực chiến: từ 3s xuống 80ms
Một câu query đơn giản JOIN 4 bảng, 2 triệu rows, chạy 3 giây. Bài viết này ghi lại quá trình dùng EXPLAIN ANALYZE, partial index, materialized view và partition để đưa về 80ms. Không có magic, chỉ là hiểu đúng cách PG planner hoạt động.
Docker Compose cho production: setup đúng cách mà ít người làm
Dùng Docker Compose cho production không xấu — nếu bạn làm đúng. Tôi sẽ chia sẻ cách tôi setup multi-stage builds, health checks, secrets management, log rotation và rolling update strategy cho một app nhỏ-vừa mà không cần Kubernetes.
8 TypeScript patterns tôi dùng hàng ngày (và lý do tại sao)
Từ discriminated unions để handle async states, branded types cho type-safe IDs, đến satisfies operator để type-check mà không mất inference. Đây là những pattern thực tế tôi áp dụng trong mọi dự án TypeScript.
Redis patterns thực tế: caching, rate limiting, queue, và pub/sub trong một app
Redis không chỉ là một cache đơn giản. Tôi sẽ show cách dùng Redis cho 4 mục đích khác nhau trong cùng một ứng dụng: distributed cache với invalidation, sliding window rate limiter, job queue với BullMQ, và real-time event bus — không xung đột nhau.