
Tôi liên tục học được những điều nhỏ nhặt: một cờ git mà tôi không biết là có tồn tại, một mẹo CSS giải quyết vấn đề bố cục, một dòng Python thay thế năm dòng mã lặp. Tôi từng chia sẻ những điều này trên Mastodon, nhưng chúng sẽ bị trôi mất trong nguồn cấp dữ liệu chỉ trong vài giờ. Viết một bài đăng blog đầy đủ cho mỗi điều đó thì có vẻ quá tốn công.
Giải pháp là một mục TIL (Today I Learned - Hôm nay tôi học được): các bài đăng ngắn hơn với ít định dạng hơn, một nguồn cấp dữ liệu RSS riêng biệt và cố tình giảm thiểu rào cản xuất bản.
Tôi đã thêm một tuyến /til/ vào trang web Next.js của mình. Mỗi bài đăng TIL là một tệp markdown đơn giản với phần frontmatter tối thiểu:
---
title: "Use `git log --oneline --graph` for a compact commit tree"
date: 2026-03-15
tags: ["git"]
---
Running `git log --oneline --graph --all` shows a compact ASCII commit
graph in the terminal. I use this daily now instead of `git log`.
Không có tóm tắt, không có hình ảnh hero, không có danh mục: chỉ có tiêu đề, ngày, thẻ và vài câu. Việc giảm thiểu chi phí là có chủ ý. Nếu viết một bài đăng mất hơn hai phút, tôi sẽ không làm.
Một yêu cầu tôi có: cho phép mọi người đăng ký các bài đăng TIL riêng biệt với các bài đăng blog đầy đủ. Trong Next.js, tôi đã tạo một điểm cuối nguồn cấp dữ liệu RSS riêng biệt:
// app/til/feed.xml/route.ts
export async function GET() {
const posts = getAllTilPosts();
const feed = generateFeed({
title: "TIL - Loc's Blog",
posts,
feedUrl: `${SITE_URL}/til/feed.xml`,
});
return new Response(feed, {
headers: { 'Content-Type': 'application/xml' },
});
}
Bằng cách này, những người đăng ký RSS có thể chọn giữa tất cả hoặc chỉ các mẹo nhanh.
Tôi đã tạo một tập lệnh tạo mẫu bài đăng TIL mới từ dòng lệnh:
npm run til "git log --oneline graph"
Điều này tạo một tệp .md mới với ngày được điền sẵn, tiêu đề từ đối số và nội dung mẫu mà tôi chỉ cần điền vào. Loại bỏ rào cản là chìa khóa: nếu tôi phải nhớ quy ước đặt tên tệp và định dạng frontmatter mỗi lần, tôi sẽ ngừng làm điều đó.
Tôi đã lấy ý tưởng này từ blog TIL của Simon Willison. Cái nhìn sâu sắc là hầu hết những gì bạn học được không đáng để viết một bài báo đầy đủ nhưng đáng để ghi lại. Một mục TIL nắm bắt được khoảng giữa đó. Theo thời gian, những bài đăng nhỏ này sẽ xây dựng thành một cơ sở kiến thức cá nhân hữu ích đáng ngạc nhiên.
Kể từ khi thêm mục TIL, tôi đã ghi lại những điều mà trước đây tôi sẽ bỏ qua. Một bản sửa lỗi cho vấn đề mạng Docker, một mẹo công cụ dành cho nhà phát triển trình duyệt, một bí danh shell mà tôi liên tục sử dụng lại: mỗi cái mất 30 giây để viết và giúp tôi tiết kiệm 10 phút để tìm hiểu lại sau này.
Việc tích hợp danh sách gửi thư hàng tuần là bước tiếp theo: một bản tóm tắt ngắn gọn về các TIL gần đây sẽ được gửi cùng với bản tin thông thường.
Zustand vs Jotai State Management Comparison](/en/blog/zustand-vs-jotai-react-state-management)
Làm sạch log AI CLI, tạo biểu thức cron, giải mã JWT và tính quyền chmod offline.

Tôi đã tự động hóa việc tạo ảnh hero và OG cho blog bằng Next.js và Puppeteer, giúp cắt giảm 30 phút công việc thủ công xuống còn 0.
Đọc tiếp
Tìm hiểu chuyên sâu về tối ưu hiệu suất Next.js - từ xử lý hình ảnh và font chữ đến caching, streaming và các kỹ thuật phân tích bundle nâng cao giúp cải thiện Core Web Vitals.
Đọc tiếp
Hướng dẫn chuẩn production toàn diện cho Next.js App Router: Ranh giới Server Components, caching nâng cao, streaming với Suspense, Server Actions, connection pooling và kiến trúc route cho enterprise.
Đọc tiếp