6 điểm bởi GN⁺ 2025-05-04 | 5 bình luận | Chia sẻ qua WhatsApp
  • Đây là một trường hợp tự xây dựng blog mà không dùng Jekyll, Ghost hay WordPress
  • Các yêu cầu cơ bản gồm sử dụng tên miền đang sở hữu, tạo site tĩnh, tuân thủ SEO, thêm bài viết dễ dàng
  • Cấu trúc cốt lõi gồm template.html và script render.py, chỉ với việc viết bài bằng Markdown là có thể tự động render mọi trang
  • Sử dụng thư viện Python markdown2 để tự động hóa việc chuyển đổi Markdown → HTML và tạo trang
  • Nhấn mạnh một cấu trúc vừa tuân thủ SEOcác tiêu chuẩn web hiện đại, vừa có thể thêm nội dung đơn giản

Yêu cầu đối với blog

  • Sử dụng tên miền đã sở hữu sẵn
  • Duy trì các tiêu chuẩn web hiện đại và tính thân thiện với SEO
  • Việc thêm bài viết phải cực kỳ dễ dàng
  • Mọi trang phải được tạo tĩnh

Tóm tắt quy trình triển khai

  • Tạo file template.htmlxây dựng bố cục HTML cơ bản
  • Cài công cụ render Markdown bằng lệnh pip install markdown2
  • Yêu cầu O1 viết script Python dùng để render (render.py)
  • Viết bài trong thư mục posts/ theo dạng eng.md
  • Chạy render.py để chuyển đổi sang HTML và tạo thư mục đầu ra

Mẫu HTML cốt lõi (template.html)

  • Cấu trúc HTML đơn giản và tối giản, chèn kết quả render Markdown vào vị trí {{ content }}
  • CSS dùng phông chữ dựa trên system-ui, padding thích ứng, thiết lập color-scheme để đảm bảo khả năng đọc

Script Python render cốt lõi (render.py)

  • Dùng markdown2 để chuyển từng bài viết Markdown thành HTML
  • Khi chuyển đổi, tự động thay thế đường dẫn <img> thành /posts/{post_code}/
  • Tiêu đề HTML được trích xuất từ # header trong Markdown
  • index.html được tạo từ greetings.md + danh sách tiêu đề của từng bài viết
  • Kết quả được lưu thành .html trong thư mục ./blog/

5 bình luận

 
ifmkl 2025-05-07

Hiện tại tôi cũng đang vận hành blog của mình đúng như ở trên. Tôi đã tự tạo một SSG đáp ứng các nhu cầu cá nhân của mình để sử dụng. Tôi còn thêm các tính năng tùy chỉnh riêng để tận dụng chức năng ảnh thumbnail, danh mục và thẻ. Các ảnh đính kèm được tự động chuyển đổi sang webp để tham chiếu, nhờ vậy tốc độ render khiến tôi rất hài lòng.

 
winterjung 2025-05-07

Ồ, vậy những tính năng tùy biến như thế anh/chị tự viết code để bổ sung dần dần à? Tôi cũng luôn định tự DIY, nhưng rồi lại chần chừ vì các tính năng mở rộng và plugin mà những framework blog SSG tôi đang dùng sẵn có cung cấp.

 
ifmkl 2025-05-07

Nếu bớt tham một chút, thì phần còn lại thật ra không quá khó. Ngay cả ssg cũng chỉ cần nhờ AI là nó viết hết code cho, và nếu bảo thêm tính năng thì thật sự nó cũng thêm được hết luôn haha

 
ndrgrd 2025-05-04

Chỉ cần chọn một phông chữ đẹp thì nhìn cũng khá ổn.

 
GN⁺ 2025-05-04
Ý kiến trên Hacker News
  • Khi bắt đầu blog, đã dùng SSG nhưng cuối cùng chuyển sang Wordpress và thấy tự do hơn

    • Điều quan trọng là tránh những công cụ cản trở việc viết bài
    • Cần tránh trì hoãn để tập trung vào việc viết
  • Hai yếu tố cần có để đủ tư cách là một blog

    • Bài viết phải được sắp xếp theo thứ tự ngày tháng và hiển thị ngày
    • Cần có RSS feed
  • Tình yêu dành cho các website độc lập

    • Website bắt đầu bằng ASP từ 25 năm trước nay đang chạy bằng Common Lisp
    • Bắt đầu với một website tối thiểu rồi dần bổ sung tính năng
    • Ý tưởng mới lúc nào cũng hấp dẫn, nhưng cần cẩn thận để dự án không phình to ngoài tầm kiểm soát
  • Muốn trình duyệt hỗ trợ native cho text/markdown và text/gemini

    • Hỗ trợ các định dạng khác giúp hạ thấp rào cản xuất bản và trao lại quyền kiểm soát cho người dùng
  • Chỉ ra lỗi trong đó chuỗi "Minimum viable blog" bị thay thế bằng tiêu đề bài viết

  • Từng vận hành blog bằng một trang HTML đơn giản, nhưng giờ dùng Astro để vận hành một website phát triển hơn

    • Astro là nền tảng tối ưu cho các website lấy nội dung làm trung tâm
  • Thử nghiệm với Bun JS và việc dùng HTML dưới dạng chuỗi JS

    • IntelliJ IDE nhận diện HTML và hỗ trợ format cũng như highlight
  • Một vài mẹo học được sau 15 năm thử nghiệm blog tối giản

    • JSX hữu ích như một trình dựng chuỗi phía máy chủ
    • GH Pages dễ dùng hơn Jekyll
    • highlight.js vẫn hữu ích cho việc highlight code
  • Sự dễ dàng của framework blog tĩnh tiêu chuẩn dùng Hugo/Zola và Cloudflare Pages

    • Sử dụng theme Hugo Blog Awesome
    • Giữ kích thước trang dưới 512kb
  • Trong quá trình hồi sinh một blog cũ, đã trải nghiệm sự bất tiện của Hexo

    • Theme không hoạt động đúng nên đang cân nhắc tự phát triển theme riêng
    • Dù độ phức tạp có thể tăng lên, vẫn đang cố gắng giải quyết vấn đề