TSBOARD (trình xây dựng cộng đồng mã nguồn mở được viết bằng TypeScript)
(github.com/sirini)TSBOARD là gì?
- TSBOARD là viết tắt của Type Safety BOARD, một trình xây dựng cộng đồng kiêm hệ thống bảng tin được viết bằng TypeScript.
- Dự án sử dụng runtime Bun từng được giới thiệu trên GeekNews này, và xây dựng backend bằng web framework ElysiaJS. Nhờ vậy, tốc độ hoạt động nhanh hơn so với các engine bảng tin thông thường.
- Ở frontend, Vue và Vuetify được sử dụng. Tuy nhiên, cảm quan thẩm mỹ của tác giả thì khá khiêm tốn, nên tôi viết bài này với hy vọng sau này có thể nhận được sự giúp đỡ từ những nhà thiết kế tài ba. (+ tất nhiên cũng rất cần sự hỗ trợ từ các lập trình viên giỏi nữa!)
Vì sao lại làm ra nó?
- Tôi bắt đầu với các chương trình web bằng
PHP, và là một lập trình viên (giờ đã thành ông chú) từng trải qua thời kỳ của Zeroboard và Gnuboard. - Ký ức cuối cùng của tôi về JavaScript trong đầu chỉ là một ngôn ngữ kiểu như vô dụng nếu không có
jQuery(...). - Nhưng rồi tôi bị chinh phục muộn màng bởi việc các tiêu chuẩn liên tục được cải tiến, sự xuất hiện của
Node.js, và TypeScript của Microsoft. (thực ra có lẽ là quá muộn) - Vì vậy tôi muốn thử làm lại một chương trình web, và muốn viết lại kiểu bảng tin mà mình vẫn luôn làm, nhưng chỉ bằng TypeScript.
- Đồng thời, tôi cũng muốn tạo ra thứ gì đó (nhân tiện) dễ dùng hơn, nhanh hơn và vận hành an toàn hơn, nên đã làm ra nó.
Những điểm mạnh riêng của TSBOARD
- TSBOARD được viết bằng TypeScript ở cả frontend lẫn backend nên đảm bảo tối đa tính an toàn kiểu dữ liệu. (dĩ nhiên không có gì là hoàn hảo, nhưng đây là phần tôi chú trọng nhất)
- Với những ai từng làm full-stack dựa trên
Node.js, thiết kế này sẽ rất dễ hiểu và có thể áp dụng ngay. Vì chính tôi cũng vừa học lại từ đầu trong quá trình làm nên đã tham khảo rất nhiều thực tiễn tốt từ người khác. - Mọi tính năng cần thiết để xây dựng một website cộng đồng quy mô nhỏ đến vừa đều đã được tích hợp sẵn. Khi phát triển, tôi đã tham khảo các cộng đồng nổi tiếng trong nước như Clien, Quasar Zone, GiggleHD, hay Damoang mới xuất hiện gần đây.
Tất nhiên cũng có nhược điểm.
- Runtime Bun không hoạt động đúng trên CPU ảo. Với các dịch vụ hosting máy chủ ảo giá rẻ, sẽ rất khó tận dụng nó một cách đúng nghĩa. TSBOARD cũng phụ thuộc vào Bun nên tình hình tương tự.
- TSBOARD sử dụng phương thức Client Side Rendering. Là người vẫn còn rất quý PHP, với tôi thậm chí khái niệm Server Side Rendering còn nghe lạ tai hơn. Dù mỗi cách đều có ưu và nhược điểm, tôi trước hết muốn thử một phương pháp mới, và cũng phát triển TSBOARD với mục tiêu giảm tải cho server, nên với ai đó điều này rõ ràng có thể là một nhược điểm.
- Thực ra tôi đã bắt đầu phát triển từ hơn nửa năm trước, nhưng đến giờ mới chỉ vừa đủ để có thể đăng bài giới thiệu, nên vẫn còn rất nhiều thiếu sót. Tôi hy vọng nhược điểm này về sau sẽ được khắc phục nhờ sự giúp đỡ của những quý nhân mà tôi sẽ gặp.
Kết lời: mơ về ngày nào đó các cộng đồng nổi tiếng sẽ chọn TSBOARD
- Khi thấy Gnuboard chuyển từ PHP sang Python, tôi cảm nhận được rằng các chương trình web cũng đang liên tục thử những hướng đi mới. Rhymix sinh ra từ XE cũng vậy. Web vẫn rất năng động, và việc phát triển cũng thế.
- Tôi cũng muốn đóng góp dù nhỏ vào hệ sinh thái web thông qua dự án TSBOARD, nên để lại bài giới thiệu này.
- Tôi mơ về ngày một website cộng đồng mới ra đời sẽ chọn TSBOARD. haha
Cảm ơn bạn đã đọc một bài viết dài như vậy!
21 bình luận
Mình không chắc việc để lại thêm bình luận cho bài đã đăng khoảng 2 tuần trước có giúp ích gì không nữa haha
Trong lúc suy nghĩ về cách phản ánh các phản hồi liên quan đến SEO nhận được từ GeekNews,
mình đã triển khai
sitemap.xmlđể áp dụng tối ưu hóa công cụ tìm kiếm và để chia sẻ nội dung này nên mình để lại bình luận!Nói ngắn gọn thì, cuối cùng công cụ tìm kiếm sẽ thu thập dữ liệu thông qua robots.txt > sitemap.xml
tại đường dẫn https://tsboard.dev/tsapi/seo/main.html (trang ví dụ).
Khi người dùng truy cập từ tìm kiếm, họ sẽ được dẫn từ trang đó quay lại trang web gốc thông qua các liên kết.
Bạn có thể xem chi tiết qua liên kết bên dưới!
https://tsboard.dev/board/free/18
Tôi cũng đang nghĩ xem có nên chạy dự án làm vì sở thích của mình bằng bun hay không, nhưng nghe nói nó không hoạt động đúng trên vCPU thì thật bất ngờ. Với cả lúc đăng ký thành viên, vì chỗ điều kiện mật khẩu ghi là chữ in hoa nên tôi tưởng không cần bao gồm chữ thường cũng được, ai ngờ bị lừa luôn haha. Có lẽ nên viết là chữ hoa và chữ thường.
Để phòng trường hợp ai đó đang quan tâm nên tôi để lại một bình luận trả lời. Với những ai đang cân nhắc runtime Bun, giờ đây bạn không còn phải lo về vấn đề hoạt động trên CPU ảo nữa...! Tôi đã thử trên phiên bản 1.1.31 và xác nhận rằng nó chạy ổn không gặp vấn đề gì. :)
Ôi, cảm ơn bạn đã để lại bình luận, và mình chắc chắn cũng sẽ chỉnh sửa phần điều kiện mật khẩu mà bạn đã nhắc tới. hihihi
Bun thì nói sao nhỉ, bản thân mình cũng chưa dùng quá sâu, nhưng trong lúc sử dụng đã có khá nhiều trải nghiệm khiến mình bất ngờ theo nhiều nghĩa. Cũng có nhiều lúc những tính năng vốn đương nhiên chạy được trên Node.js lại không hoạt động vì một lý do nào đó trên Bun (ví dụ như từng có vấn đề không hỗ trợ tùy chọn
recursive: truekhi tạo thư mục), nhưng đồng thời cũng có rất nhiều khía cạnh cho thấy nó ám ảnh tốc độ đến mức đáng kinh ngạc (và vì thế mình càng không thể không có thiện cảm với nó).Bây giờ hình như họ gọi là Bundows, và Bun runtime trên Windows giờ đã được hỗ trợ chính thức, nhưng trước bản 1.1 thì chưa được nên phải chạy trên WSL2. Việc chạy trên CPU ảo mà bạn nhắc tới thì khả năng cao Bun sẽ còn không hỗ trợ trong tương lai. Dù họ có cung cấp cả bản phân phối cho CPU không hỗ trợ lệnh AVX2 (
baseline), nhưng chuyện không hỗ trợ CPU ảo — không rõ có phải là giới hạn của Zig, ngôn ngữ dùng để phát triển Bun, hay không — vẫn là điều khá đáng tiếc về nhiều mặt. Cảm nhận đơn giản của mình khi dùng là: có vẻ Bun cũng đã chấp nhận hy sinh một số phần để đổi lấy tốc độ.Nhân tiện, nếu sau này có người dùng Bun nào đó đọc được bình luận này, mình xin nói thêm một chút: dù có nhiều ràng buộc, Bun vẫn là một lựa chọn rất hấp dẫn. Đặc biệt nếu bạn chọn ElysiaJS làm web framework thì ít nhất ở khía cạnh tốc độ, mình nghĩ sẽ không có gì phải thất vọng. Nếu bây giờ mình phải quay lại thời điểm ban đầu để chọn runtime một lần nữa... có lẽ mình sẽ suy nghĩ thêm đôi chút, nhưng rồi cuối cùng, bất chấp nhiều vấn đề, có lẽ mình vẫn sẽ chọn Bun. Cái cách nó ám ảnh gần như cuồng nhiệt với tốc độ, và cách nó dám thách thức hệ sinh thái JS runtime vốn đã có sẵn “đáp án”, thật sự có gì đó khiến mình rung động. hihihi
Khi xem mã trên GitHub, tôi có vài thắc mắc nên xin phép để lại câu hỏi.
Cá nhân tôi rất ấn tượng vì cuối cùng cũng có một kiểu board xây dựng trên nền tảng TS mà tôi vẫn mong chờ!
Cài đặt khóa ngoại đã được áp dụng trong bản cập nhật v0.8.40!
https://tsboard.dev/board/free/18
Ôi, cảm ơn bạn đã bình luận!
Ý bạn về thiết lập quan hệ là đang nói tới việc chưa cấu hình khóa ngoại đúng không! Không có lý do đặc biệt gì cả, chỉ là tôi định khi cấu trúc bảng được chốt ở mức tương đối thì sẽ thiết lập, nhưng trong lúc xử lý các việc khác nên đến giờ vẫn chưa kịp phản ánh vào. Giờ thì mối quan hệ phụ thuộc giữa các bảng TSBOARD và các cột tham chiếu đã ổn định ở mức nhất định, nên tôi sẽ thử thiết lập khóa ngoại và chuyển sang cách làm bảo đảm tính toàn vẹn tốt hơn!
Tôi cũng đã cân nhắc NoSQL một chút... nhưng vì đã có quá nhiều thứ mới phải học, từ chính ngôn ngữ TypeScript cho tới Vue, Node.js/Bun, nên tôi quyết định không đổi. Cơ sở dữ liệu quan hệ đúng là đã tồn tại từ rất lâu, nhưng tôi cũng nghĩ rằng chắc hẳn phải có lý do khiến nó đến giờ vẫn còn được dùng hữu ích ở rất nhiều nơi. Tại thời điểm đang viết bình luận này thì tôi nghĩ như vậy, còn nếu sau này phát sinh nhu cầu gì đó thì cũng có thể cân nhắc những thứ như MongoDB. Haha
Cá nhân tôi thật sự thấy khá ngạc nhiên khi đến giờ vẫn chưa có một diễn đàn nào dựa trên TypeScript, nhưng có lẽ đó cũng chỉ là vấn đề thời gian thôi. Mong là sẽ có thêm nhiều dự án khác với phong cách khác với TSBOARD nữa! Haha, cảm ơn bạn đã bình luận!
Thành thật mà nói, ban đầu tôi không kỳ vọng nhiều vì nghĩ tới các kiểu board PHP ngày xưa, nhưng sau khi xem trang demo (https://tsboard.dev) thì tôi đã đổi ý. Chất lượng quá tốt.
Tôi nghĩ những điểm như thế này có lẽ sẽ là cần thiết!
Trình soạn thảo là anh tự triển khai luôn sao? Ghê thật. Tôi đoán chắc là đã dùng một engine editor (?) nào đó, nhưng vẫn cảm nhận được tinh thần thủ công cực kỳ đáng nể.
Cảm ơn bạn đã để lại bình luận! Mình càng cảm ơn hơn vì bạn đã đánh giá cao chất lượng của trang tsboard.dev. haha
Về hỗ trợ SSR mà bạn nhắc tới, mình đã thử chuẩn bị lộ trình chia thành 2 giai đoạn. Trước tiên sẽ áp dụng các biện pháp bổ sung, rồi ở các phiên bản sau sẽ phát triển theo hướng kết hợp hợp lý giữa CSR và SSR. Để tối ưu SEO hơn nữa mà vẫn giữ hiệu năng đủ tốt thì trên hết bản thân mình cũng cần học thêm rất nhiều, nên có lẽ sẽ cần thêm thời gian. Mình hy vọng nếu không bỏ cuộc và cứ kiên trì làm tiếp thì cũng sẽ có cơ hội gặp được những dev giỏi khác để học nhanh hơn, biết đâu còn nhận được sự giúp đỡ nữa. haha
Với trường hợp không đăng nhập, khi làm TSBOARD mình đã không tính đến để rút ngắn thời gian phát triển và giữ sự đơn giản trong thiết kế, nhưng mình sẽ suy nghĩ thêm! Ở thời điểm đang để lại phản hồi này thì nếu phải hỗ trợ người dùng không phải thành viên sẽ cần rất nhiều thay đổi, nên trước mắt có vẻ vẫn khó. ^^;;;
Phần editor thì mình đã lắp ghép thủ công từng chút một dựa trên editor tiptap, và thực sự nó ngốn thời gian hơn mình tưởng rất nhiều. Theo ký ức trước đây thì hình như là CKEditor...? Kiểu như hồi đó chỉ cần mang về dùng là được, nhưng dạo này lại phải lắp từng mảnh như xếp Lego vậy. hu hu Rồi để tích hợp thêm các chức năng của TSBOARD vào đó nên mình còn vật vã hơn nữa. Trong lúc làm mình đã nghĩ là giá mà có ai làm sẵn phần editor này cho thì tốt biết mấy, haha... Nếu ai đang cần một editor tạm ổn (?) dựa trên tiptap thì có lẽ tham khảo phần code mình đã triển khai trong TSBOARD sẽ giúp phát triển nhanh và dễ hơn đấy.
Ngoài dự đoán, có khá nhiều người nhìn nhận nó tích cực đến mức mình thấy tiếc luôn khoảng thời gian từng đắn đo không biết có nên viết bài giới thiệu hay không. TSBOARD vẫn còn thiếu sót rất nhiều, nhưng mong mọi người tiếp tục ủng hộ!
Tôi cũng bắt đầu phát triển với php, và đây cũng đúng vào giai đoạn tôi mê typescript nên đang thử làm rất nhiều thứ.
Cảm thấy có chút đồng điệu nên rất vui được gặp.
Rất vui được gặp bạn! Tôi cũng tình cờ đang đi trên một hành trình khá giống như vậy. haha Cá nhân tôi thấy hơi đáng tiếc vì ngôn ngữ PHP đến giờ vẫn còn bị chê trách ở khắp nơi, nhưng sau khi dùng TypeScript thì tôi lại nghĩ rằng có lẽ bị chê một chút cũng không sao. haha Mong rằng yeppyshiba cũng sẽ thực hiện được nhiều dự án thú vị với TypeScript nhé. :)
Thật tuyệt vời 👍
Cảm ơn bạn!! Đây vẫn là một dự án còn nhiều thiếu sót, nhưng tôi cũng rất vui vì bạn đã nhìn nhận nó tích cực. haha
Tôi sẽ tiếp tục nỗ lực cải thiện hơn nữa để khi nào đó, nếu bạn cần đến TSBOARD, tôi có thể tự tin giới thiệu nó. :)
Mình cũng thấy tiếc vì thiếu thứ như thế này.. cảm ơn bạn.
Cảm ơn bạn đã để lại bình luận! Nếu sau này có lúc bạn cần một chương trình web tương tự TSBOARD, mong bạn sẽ nhớ đến nó và thử dùng nhé. Mình sẽ tiếp tục chăm chỉ phát triển để khi bạn cần có thể sử dụng thuận tiện hơn!
Ồ...! Tôi còn nhớ board sirini thời PHP, đúng là lâu lắm rồi.
Hồi đó tôi cũng từng tự phát triển skin cho Sirini Board và báo cáo cả lỗ hổng bảo mật nữa, dạo này anh vẫn ổn chứ :)
Khi xem code thì cảm nhận của tôi là phần code phía server có khá nhiều cảm giác kiểu PHP nhỉ haha (code js mang cảm giác PHP?)
Như người khác đã nói, nếu là CSR thì sẽ có nhược điểm là bất lợi cho SEO và những phần tương tự.
Hy vọng những điểm này sẽ được cải thiện tốt haha
À, thì ra bạn là ân nhân đã từng giúp tôi trước đây! Rất vui khi được gặp lại bạn như thế này haha
Nhân tiện, cả khi đó lẫn bây giờ, tôi cũng hơi ngại vì có vẻ mình chỉ toàn làm ra những thứ tầm thường mà ai cũng có thể nghĩ tới. ^^;;
Phần code backend đúng là như bạn nói, có pha trộn phong cách PHP haha. Đôi khi tôi cũng hay tự hỏi liệu trong JS có hàm nào giống hàm mình từng dùng ở PHP không, rồi lần nào cũng đi tìm, thậm chí có lúc còn tự đặt tên hàm theo kiểu tên na ná như vậy để dùng. Có lẽ khi tôi quen hơn với code JS/TS và tiếp tục refactor thì mọi thứ sẽ còn được cải thiện hơn nữa. haha
Về phần SEO, đúng như bạn nói, tôi cần phải bổ sung thêm. Trong suy nghĩ ngắn của tôi thì có thể là thêm các trang tĩnh khác như RSS, và tôi sẽ thử đủ thứ xem sao.
Mà việc có người vẫn nhớ tới tôi từ thời PHP4 thật sự là một điều vừa bất ngờ vừa đáng biết ơn! Thật ra tôi đã đắn đo rất nhiều không biết có nên viết bài này hay không. haha;; Tôi sẽ cố gắng để dù chỉ một chút cũng có thể giúp ích cho nhiều người hơn. Mong mọi người cũng sẽ yêu mến TSBOARD thật nhiều!
Đọc bài xong mình nảy ra vài thắc mắc nên để lại bình luận. (Mình chưa xem code)
Mình muốn hỏi vì sao backend lại không được phát triển theo hướng tương thích với Node.js (liệu hiệu năng có không đủ để bù lại những nhược điểm mà bạn đã nói không?)
Nếu là CSR thì bạn định xử lý SEO như thế nào? Có vẻ với một cộng đồng thì cũng cần quan tâm đến lượng truy cập từ tìm kiếm nữa.
Xin chào! Cảm ơn bạn đã để lại bình luận. (Thật ra tôi nghĩ nó sẽ chìm nghỉm trong sự thờ ơ, nên rất xúc động)
Những điều bạn hỏi cũng là thứ tôi đã suy nghĩ rất nhiều, nên mong bạn cứ xem như đây chỉ là một góc nhìn như vậy thôi.
À, nói thêm là từ sau thời PHP, tôi chưa từng tiếp tục làm web development trong công việc thực tế dù chỉ một lần. Tôi cũng không để tâm trong thời kỳ Node.js bùng nổ hay khi React thay đổi thế giới web, nên có thể góc nhìn của tôi hơi lạ một chút. haha
Khi bắt đầu phát triển TSBOARD, ban đầu tôi đoán rằng chắc hẳn đã có sẵn một board, blog hay gì đó tương tự thứ tôi định làm, nổi tiếng và chạy trên Node.js rồi, chỉ là tôi không biết thôi. Như tôi có nói ở phần đầu, trong cuộc sống thực tôi cũng không có việc phải làm web, mà cũng chưa từng nghiêm túc làm side project riêng, nên có lẽ vì thế tôi càng nghĩ như vậy. Tôi đương nhiên cho rằng chắc chắn đã có một thứ gì đó làm trên Node.js rồi, nên nếu tôi lại làm mới nữa thì cũng không có nhiều ý nghĩa. Vì đã học cái mới thì thử luôn trên nền Bun đi, và quyết định đó dẫn đến hiện tại.
Nếu xét về bài toán hiệu năng, thật ra với kiểu site cộng đồng nhỏ mà tôi nhắm tới (dưới 10 người online đồng thời), tôi nghĩ Node.js là hoàn toàn đủ. Trước khi cân nhắc Bun, tôi cũng đã thử với Node.js + Hono, và theo tôi thì thực ra không có vấn đề gì. Tuy nhiên, hiệu năng áp đảo mà Bun đưa ra, cùng với hiệu năng của ElysiaJS chạy trên Bun, đã khiến tôi thực sự ấn tượng và không muốn từ bỏ. Vì tôi nghĩ chắc hẳn đã có ai đó làm rất tốt một board dựa trên Node.js rồi, nên nếu muốn cạnh tranh với cái board tưởng tượng đó, tôi cần hiệu năng cao hơn. Cuối cùng tôi đã từ bỏ tính tương thích Node.js và thiết kế theo hướng phụ thuộc vào Bun. (Giờ thì tôi hơi hối hận một chút. Hóa ra lại không có... những board nổi tiếng kiểu Gnuboard, Rhymix hay XE trên nền Node.js. Hay là do tôi chưa tìm ra nhỉ??)
Điều bạn nói hoàn toàn đúng. Muốn có lưu lượng từ tìm kiếm thì kiểu gì Google crawler cũng phải đọc được nội dung và ghép khớp cho việc tìm kiếm. Phần này tôi vẫn chưa triển khai, nhưng tôi đang nghĩ rằng nếu người dùng muốn thì có thể chia sẻ riêng các nội dung mới nhất ở dạng tĩnh, giống như cách người ta public RSS feed vậy. Tôi cũng đang nghĩ rằng nếu public ra ngoài dưới dạng JSON thì trình thu thập có thể cập nhật dữ liệu dễ hơn chăng? Tôi sẽ suy nghĩ thêm về chuyện này. (Tôi từng nghĩ đến RSS, nhưng dạo này hình như đa số mọi người không còn dùng nó nữa đúng không?? Có lẽ là tôi đã rời xa web quá lâu rồi T_T)
Tách biệt với các biện pháp bổ sung cho SEO, lý do tôi chọn CSR là vì muốn giảm tải cho server một cách tích cực hơn. Theo tôi biết thì ngay cả trường hợp của site Damoang mới xuất hiện gần đây (không biết tôi có nên nêu thẳng tên cộng đồng này ra không nữa), gánh nặng traffic và tải server cũng khá lớn. Khi nghĩ về một community builder, SEO cũng quan trọng, nhưng trước hết tôi muốn giải quyết những vấn đề gắn trực tiếp với chi phí, nên đã ưu tiên chọn CSR. Là người vẫn còn rất yêu PHP, thật ra SSR mới là thứ quen thuộc hơn với tôi. Nhưng bạn có thể hiểu đây là một lựa chọn xuất phát từ suy nghĩ rằng nếu client chủ động dùng thêm computing power thì biết đâu server sẽ rảnh rang trở lại hơn.
Hy vọng phần nào giải đáp được thắc mắc của bạn. Đồng thời, những lựa chọn tôi đưa ra đều có ưu và nhược điểm khá rõ, nên thật lòng tôi không nghĩ TSBOARD là đáp án đúng duy nhất. Tôi đã cân nhắc nhiều trade-off, và có thể xem đây là các quyết định được đưa ra từ suy nghĩ còn ngắn của bản thân. Nếu sau này TSBOARD được sử dụng nhiều hơn, tôi cũng hoàn toàn có thể thay đổi suy nghĩ và thử những hướng khác bất cứ lúc nào. haha
Vì thiết kế ban đầu đã được xây dựng theo hướng CSR, nên nếu muốn chuyển sang SSR thì có lẽ sẽ cần khối lượng công việc gần như ở mức tái phát triển toàn bộT_T
Các trình thu thập dữ liệu tìm kiếm gần đây cũng được nói là đã cải thiện phần nào việc xử lý JS, nhưng... có lẽ vẫn khó mà theo kịp plain HTML.
Với trình duyệt thông thường thì xử lý bằng CSR, còn với bot tìm kiếm (GoogleBot, Yeti, v.v.) thì cũng có thể áp dụng cách xử lý bằng SSR.
Cá nhân tôi nghĩ cách đó chỉ là giải pháp tạm thời, và nếu muốn hỗ trợ SEO tốt thì cuối cùng SSR có lẽ vẫn là đáp án đúng.
Ngay cả với CSR, khi lượng request tăng lên thì rốt cuộc backend cũng sẽ chịu tải, nên có vẻ hướng đi tốt hơn là giảm tải cho backend thông qua thiết kế cache và nhiều cơ chế khác nhau ^^;
Đúng như bạn nói, trong trường hợp của TSBOARD thì mọi thứ hiện đều được xây dựng theo tiêu chuẩn CSR, nên có vẻ ít nhất ở phiên bản v1.y.z sẽ phải triển khai theo hướng chỉ dùng CSR. Nếu bổ sung thêm một phần, vì cấu trúc là tất cả bài viết đều xuất hiện ở màn hình đầu tiên, nên có thể chỉ áp dụng SSR cho trang đầu, hoặc như bạn nói, thêm một trang riêng để bot có thể crawl phía plain HTML. Mình sẽ cố gắng phản ánh các phương án bổ sung này trong dải phiên bản v0.9.z!
À, mình hơi lo sẽ có người nghĩ rằng TSBOARD dùng CSR nên không thể tìm kiếm được, nên xin nói thêm là với Googlebot, nghe nói hiện nay đã được cải thiện đến mức có thể lấy cả nội dung của các website được tạo theo kiểu CSR! (Vì là Google nên mới làm được...?) Rõ ràng đây là cách bất lợi cho SEO, nhưng không phải là hoàn toàn không được, nên có lẽ bạn không cần quá lo.
Không chỉ có CSR và SSR mà có lẽ còn có những cách nằm đâu đó ở giữa, nên mình sẽ suy nghĩ thêm và lập cả roadmap v2.0.0 với mục tiêu cải thiện SEO. (Dù vẫn còn là chuyện khá xa haha) Cảm ơn bạn đã góp ý, và dù dự án vẫn còn nhiều thiếu sót, mong mọi người tiếp tục ủng hộ TSBOARD!