olragon

Khu vườn này được dựng thế nào — và vì sao nó nhỏ

🌲 evergreenupdated 2026-06-23#meta#toi-gian#bun#web#rieng-tu

Vài ghi chú về cách khu vườn này vận hành, và những lựa chọn nhỏ mà bướng bỉnh đằng sau nó. Bởi Long Nguyen (olragon).

English: How this garden is built.

Người ta hay hỏi vì sao một trang cá nhân lại cần đến cả một "tech stack". Phần lớn là không cần. Trang này dựng trên đúng một ý: toàn bộ nó phải nằm gọn trong đầu mình. Nếu mình giữ được mọi mảnh ghép cùng lúc trong đầu, mình có thể chăm nó như chăm một khu vườn, thay vì bảo trì nó như một cỗ máy.

Nên mình cứ bớt dần đi. Đây là những gì còn lại, và vì sao.

Một runtime, không framework

Trước đây là Astro + React + Tailwind + MDX + Vite. Đều là công cụ tốt — và đều là giàn giáo mình vác theo cho một trang chỉ hiển thị vài dòng chữ. Nên mình tháo hết. Giờ chỉ còn một file Bun.serve dựng HTML mỗi lần có request và biên dịch nhúm code client ngay lúc chạy. Không một dependency nào. Không bước build, không node_modules mục ruỗng, không gì để npm audit. Triển khai chỉ là rsync rồi khởi động lại.

Cái được không phải là tốc độ để khoe. Mà là không còn gì chen giữa mình và trang web. Khi có gì hỏng, chỉ có một file để đọc.

HTML5 thuần, CSS viết tay

Mã nguồn là HTML ngữ nghĩa — tiêu đề, danh sách, bài viết, hình — tô bằng đúng một file CSS viết tay. Vài thứ tương tác (hiệu ứng chuyển ngôn ngữ, một bộ đếm) là web component thuần, không runtime framework. Trình duyệt vốn đã biết làm gần hết mọi thứ rồi; mình cố không cãi lại nó.

Font hệ thống, không CDN

Không web font, không font CDN, không <link> tới server của ai khác. Trang dùng đúng font serif và mono mà thiết bị bạn sẵn có. Bớt được một request mạng, bớt một thứ phải chờ, và — điều này quan trọng với mình — bớt một công ty dòm bạn đang đọc. Một trang trong vườn này tải đúng ba file, tất cả từ chính domain này.

Không một mẩu analytics bên thứ ba

Không Google Analytics, không tag manager, không pixel. Mình còn gỡ luôn cả beacon analytics tự động của nhà cung cấp, để không gì "gọi về nhà" khi bạn ghé. Mình không biết bạn là ai, và mình muốn giữ vậy. Nếu chân trang ghi "no trackers", thì nó phải đúng theo nghĩa đen.

Một cỗ máy tí hon

Tất cả chạy trên một máy ảo 256 MB, lúc rảnh chỉ quanh 98 MB, với tiến trình server ngốn cỡ 43 MB bộ nhớ. Mình thu nhỏ không phải để tiết kiệm tiền — đằng nào cũng chỉ là số lẻ. Mình thu nhỏ vì nhỏ thì dễ hiểu. Một cỗ máy mình mô tả gọn trong một câu là cỗ máy mình thật sự hiểu.

Để làm gì

Vì phần lớn web nặng hơn mức cần thiết, và cái nặng đó có một cái giá bạn không thấy trên hóa đơn: chậm hơn, mong manh hơn, bị theo dõi nhiều hơn, và khó mà thương nổi. Khu vườn thì ngược lại. Nó nhỏ một cách có chủ đích, chăm bằng tay, và dựng để sống lâu hơn cả những framework lẽ ra đã viết nên nó.

Có thể mình đang tối ưu quá đà cho một trang gần như chẳng ai đọc. Chắc là vậy thật. Nhưng chính sự giới hạn mới là phần vui — và một thứ mình hiểu trọn vẹn là thứ mười năm nữa mình vẫn còn chăm được.