olragon

Mảnh vườn này dựng bằng gì, mà sao lại nhỏ vậy?

🌲 xanhgieo chăm #meta#toi-gian#bun#web#rieng-tu

Viết cho Ai tò mò trang này chạy bằng gì, hoặc đang tính dựng một trang nhỏ cho riêng mình.

Vài ghi chú về cách mảnh vườn này vận hành, và những lựa chọn nhỏ mà bướng bỉnh đằng sau nó.

English: What is this garden built from, and why so small?.

Ba rồng tưới cho mầm cây mọc ra từ một chiếc máy tính

Mình dựng lại trang này ba lần trong hai năm, và lần nào cũng vì chính mình chán cái mình vừa dựng. Lần này thì mình bớt đi thay vì thêm vào.

Người ta hay hỏi vì sao một trang cá nhân lại cần đến cả cái "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. Giữ được mọi mảnh ghép cùng lúc trong đầu thì mình chăm nó như chăm mảnh vườn, chứ chẳng phải bảo trì nó như 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.

Sao chẳng có framework nào

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ị mấy 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, rồi biên dịch nhúm code client ngay lúc chạy. Chẳng dependency nào cả. 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 chẳng phải 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.

Trang này làm bằng gì

Mã nguồn là HTML ngữ nghĩa, tô bằng đúng một file CSS viết tay: tiêu đề, danh sách, bài viết, hình. Vài thứ tương tác (hiệu ứng chuyển ngôn ngữ, cái 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ó.

Vì sao chẳng có web font

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à mình quan tâm nhất điều này: bớt một công ty dòm xem bạn đang đọc gì. Mỗi trang trong vườn tải đúng ba file, tất cả từ chính domain này.

Mình có đo đếm gì bạn không

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

Nó chạy trên cái máy cỡ nào

Tất cả chạy trên một máy ảo 256 MB, lúc rảnh chỉ quanh 98 MB, tiến trình server ngốn cỡ 43 MB bộ nhớ. Mình thu nhỏ chẳ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. 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.

Rốt cuộc để làm gì

Vì phần lớn web nặng hơn mức cần thiết, mà cái nặng đó có cái giá bạn chẳng thấy trên hoá đơn: chậm hơn, mong manh hơn, bị dòm nhiều hơn, và khó mà thương nổi. Mảnh 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à 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.

Gửi Ba rồng một lá thư

Đọc xong muốn nói gì thì viết cho mình nha. Thư chỉ tới tay mình, chẳng tự hiện lên trang. Lá nào hay mà bạn cho phép, mình chép lại dưới bài, không kèm tên bạn.

Mảnh vườn giữ gì từ lá thư này

Từ terminal cũng gửi được: curl -d 'msg=…' olragon.com/garden/colophon-vi/letter