Có dạo Vibe Coding bắt đầu nổi lên rần rần, và mọi người bắt đầu chia sẻ nhiều về việc xây dựng website với Astro bằng Vibe Coding. Dù là một đứa lười làm nhưng lại rất FOMO, trì hoãn hoài thì tới một thời điểm mình cũng không để ngó lơ được nữa. Bắt tay vào làm thôi!!
Mình khởi đầu với ý định trải nghiệm Vibe Code với Astro để làm blog, cộng với một vài từ khoá được tiêm nhiễm vào đầu: R2, D1, Cloudflare Pages.
Và mình đặt tên dự án này là Astrotion.
Giai đoạn 1 - Định hình Blog
Version đầu tiên của blog mình build hoàn toàn với Antigravity, tài khoản Gmail Pro. Đầu tiên, do không biết bắt đầu từ đâu nên mình lên Astro theme, lựa một cái template blog có sẵn và yêu cầu AI hướng dẫn mình setup. Cũng đơn giản lắm, nên sau vài thao tác là mình đã có được một chiếc blog đầu tiên (xấu đui xấu đớn..).
Là đứa khá thích phong cách tối giản, nên mình cũng muốn blog của mình nó thể hiện được đúng cái gu của bản thân. Lượn lượn một vòng tìm ý tưởng, mình cóp nhặt được kha khá thứ từ Substack và Facebook Feed. Hành trình build blog mới thật sự bắt đầu từ đây.
Tại sao lại follow theo Substack?
- Một nền tảng dành cho những người thích viết - thích đọc, quá nổi tiếng rồi thì mình mặc định là trải nghiệm người dùng của nó thật sự tốt.
- Phần nhìn nó cũng rất hợp với gu mình, gọn gàng, vừa đủ.
Tại sao lại follow theo Facebook Feed?
- Nó lại xuất phát từ việc bản chất mình là một đứa khá ít nói - ít viết, nên mình biết chắc nếu đặt áp lực bản thân phải chia sẻ các bài viết dài dài thì..mình bỏ cuộc ngay từ những ngày đầu tiên. Nên mình đã suy nghĩ khá nhiều về việc làm sao để mình vẫn có thể chia sẻ thoải mái mà không bị áp lực bởi con chữ.
- Còn gì phù hợp hơn một hành vi như kiểu "post status sống ảo trên mạng xã hội"..cái hành vi mà mình đã được tôi luyện hơn chục năm từ 2020 đến giờ, nhỉ?
Có ý tưởng rồi, mình lại yêu cầu AI nó hiện thực hoá thôi, việc đó nó làm tốt lắm. Sau đâu đó nửa ngày feedback, tinh chỉnh thì mình ra được giao diện blog như phiên bản hiện tại nhưng ít "tính năng ẩn" hơn.
Giai đoạn 2 - Tối ưu trải nghiệm viết
Dù là một đứa rất ít khi viết, nhưng mình đã tưởng tượng đến một ngày mình chăm chỉ sản xuất nội dung bằng tất cả sự nhiệt huyết thế nào, mình đã hình dung là mình có thể viết 5 đến 10 bài mỗi ngày. Nên mình tìm cách tối ưu cho những thứ gần như không bao giờ tồn tại.. Ỏoo 👉👈.
Quay lại ý chính. Ở thời điểm này, mọi bài viết đang được lưu trong thư mục contents của dự án Astrotion, đồng nghĩa mỗi lần viết mình phải lọ mọ mở Code editor lên > Mở folder dự án > Tạo file Markdown theo đúng cấu trúc Frontmatter đã quy định > Và viết.
Quy trình này không phải rào cản lớn với mình ở hiện tại, nhưng nó sẽ là vấn đề với Quỳnh ở thì tương lai, cái đứa mà sẽ viết 5-10 bài viết mỗi ngày á.. lại nữa!!
Mục tiêu mình đặt ra lúc này:
- Viết và format Markdown thân thiện, preview nhanh được format.
- Viết bất cứ khi nào, bất cứ đâu.
- Viết xong xuất bản được luôn mà không cần phải lọ mọ mở máy tính để build lại.
Vì đã từng dùng qua Obsidian, nên để giải quyết các gạch đầu dòng trên, thứ đầu tiên xuất hiện trong đầu mình cũng chính là Obsidian.
Nếu bạn chưa biết, thì Obsidian là một app quản lý ghi chú, các ghi chú của bạn sẽ được lưu trữ ở trên chính thiết bị của bạn, hoàn toàn miễn phí. Nếu bạn muốn đồng bộ các ghi chú giữa nhiều thiết bị, bạn có thể bỏ X tiền để mua Obsidian Sync, nhưng ở đây mình không làm vậy.
Lý do mình lựa chọn Obsidian?
Ngoài việc nó giải quyết được hết các mục tiêu mình đã vạch ra ở trên, nó cũng có thêm vài lợi ích khá hay ho để hỗ trợ mình viết:
- Giúp mình quản lý danh sách bài viết với Obsidian Base
- Tạo các template mẫu cho các dạng bài viết khác nhau với plugin Templater
- Vẽ biểu đồ, flow chart, hình minh hoạ,.. với plugin Excalidraw (xịn lắm, bạn nên thử nha)
Nhưng làm sao để Obsidian có thể sync đa thiết bị, làm sao để cập nhật bài viết từ Obsidian lên web? Mình có loạt bài chia sẻ ở đây, bạn có thể đọc thêm nha: Loạt bài chia sẻ về Obsidian cho blog.
Tới đây là cũng hòm hòm cho Quỳnh Tương Lai rồi, yayyy.
Giai đoạn 3 - Tối ưu trải nghiệm viết (ủa..nữa)
Đây là câu chuyện mình giải quyết cho Quỳnh ở thì hiện tại, một đứa lười viết dài và chỉ thích đăng status sống ảo!
Obsidian thì ổn đó, nhưng để đăng các bài viết ngẫu hứng thì thật sự là nó vẫn khá cồng kềnh. Một đứa thiếu nghị lực như mình thì sự cồng kềnh lại càng làm mình lười viết.
Để xem, làm sao để tái hiện được cái hành vi post status Facebook trên blog của mình nhỉ??
À ha, Telegram Bot.
Giờ ha, những lúc muốn đăng gì đó mình sẽ viết viết rồi quăng cho em Bot. Bên dưới sẽ build một workflow n8n để nó nhận content mình gửi, tự commit git > trigger build > bài được xuất bản. Toẹt vời!!
Sau một khoản thời gian tự trải nghiệm, thì đa phần các bài đăng trên blog mình toàn dùng workflow này chứ hổng có viết trên Obsidian, nhưng mình tin là Quỳnh ở thì tương lai sẽ cần đến nó..
Giai đoạn 4 - Tối ưu cho người sống vội
Là mình đó, một đứa sống vội.
Mình muốn mỗi lần mình post bài một phát, mình phải thấy nó nằm ngay trên blog chứ không phải chờ một vài phút, mình là đứa thiếu kiên nhẫn lắm.
Ưu điểm của mấy blog xây dựng bằng Astro, để dễ hình dung thì nó làm gì bên dưới mình không cần biết, kết quả cuối cùng của blog sẽ là những file tĩnh để trình duyệt đọc nhanh hơn, tối ưu hơn, load vèo vèo luôn. Và chính vì cơ chế này, nên mọi thứ bạn thay đổi đều được build lại, quá trình build phụ thuộc nhiều yếu tố, cụ thể mình cũng hổng rõ, chỉ biết là nó lâu hơn mức độ kiên nhẫn của mình.
Nên mình quyết định thay đổi kiến trúc blog.

Đây là mô hình mình nghĩ đến:
- Phải làm sao đó để khi mình cập nhật nội dung nó sẽ chỉ cập nhật những thứ liên quan tới nội dung mà không build lại toàn bộ blog.
- Chỉ khi nào mình cập nhật tính năng thì mới cần build lại toàn bộ source hiện tại.
Brainstorm một hồi với AI (à, lúc này mình đã chuyển sang dùng Claude Code rồi), nó gợi ý mình đẩy hết nội dung lên R2 bao gồm cả ảnh và file Markdown bài viết. Nghe cũng hợp lý ha, vì cái này kỹ thuật quá nên mình cũng đâu có biết như thế nào là không hợp lý =))). Thôi kệ, cứ chạy là được!!
Nên hiện tại mình có 2 repo github, một cái để đẩy content lên, và một cái để đẩy source code lên (chỉ build lại khi có commit từ git này).
Giai đoạn 5 - Refactor & cóp nhặt features
Chuyện này cũng dài và nhiều thứ mình overthinking lắm, nên chắc mình chẻ nhỏ nhỏ ra để viết sau nhen.
Tạm tổng kết
Cũng không biết động lực nào giúp mình có thể ngồi viết một lèo từ đầu tới cuối bài viết này. Chắc do trời đẹp, cộng hưởng với một ly cà phê Movenpick thơm nhưng không đắng và gắt, không máy tính, không điện thoại, không một sự hỗ trợ nào từ AI.
Mình, hoàn toàn tập trung gõ gõ trong app Obsidian trên iPad, tĩnh lặng.
Gửi lời cảm ơn đến Quỳnh, vì đã tối ưu workflow viết bài cho blog trên Obsidian, để mình có thể chìm vào cái "flow viết" mà gần như rất ít lần xuất hiện <3.