Khởi đầu: scaffold blog trên theme AstroPaper, nhưng đổi hẳn cách lấy dữ liệu — đọc bài viết trực tiếp từ Supabase lúc request (SSR) thay vì content collection file-based có sẵn của theme.
Giai đoạn layout: thêm trang Shelves, viết lại About, rồi làm lại toàn bộ layout/theme/font để khớp taniarascia.com — chuyển từ layout mặc định sang sidebar cố định, đổi font, đổi bảng màu, lấy trực tiếp từ CSS thật của site tham khảo thay vì đoán.
Giai đoạn icon: ban đầu thử vẽ tay avatar kiểu sketch bút chì và icon cho từng mục (Shelves, About...), xử lý qua vài kỹ thuật ảnh khác nhau. Cuối cùng quyết định tạm gác lại, chuyển hết sang emoji trực tiếp — để tránh project nặng thêm vì pipeline xử lý ảnh, ảnh gốc vẫn giữ lại trong _archive/ phòng khi muốn quay lại.
Giai đoạn dọn tài liệu: viết lại CLAUDE.md/PROJECT.md/README cho khớp thực trạng, thay vì để tài liệu mô tả một kiến trúc dự kiến chưa có thật.
Giai đoạn deploy: build lần đầu lên Cloudflare Workers fail hai lần liên tiếp — thiếu trường packages trong pnpm-workspace.yaml (pnpm 10.x yêu cầu), và thiếu wrangler làm dependency trực tiếp. Nhân tiện dọn luôn bước index Pagefind không cần thiết ra khỏi build chính.
Bài học lớn nhất: phần khó nhất không phải là viết code tính năng, mà là những lớp cấu hình ở ranh giới giữa các công cụ — package manager, adapter, deploy tooling. Những thứ này gần như vô hình khi mọi thứ chạy đúng, và chỉ lộ ra khi build fail ở một môi trường khác với máy dev.