Bài toán

Quy trình, quy định, biểu mẫu và câu hỏi thường gặp của các phòng ban nằm rải rác ở email, nhóm chat và ổ chia sẻ. Giáo viên mới khó biết nên đọc gì trước. Tài liệu cũ và mới lẫn lộn, không biết ai đã đọc văn bản bắt buộc. Nhà trường cần một nơi tập trung để mỗi phòng ban đăng tài liệu, phân quyền ai được xem, cho phép tìm kiếm nhanh và nhận góp ý.

Chức năng chính

  • Đăng nhập bằng tài khoản Google (NextAuth). Bốn vai trò: SuperAdmin, Admin, Staff, Newbie. Email quản trị cấu hình sẵn được tự nâng quyền.
  • Trang chủ tổng hợp: FAQ mới, bài nổi bật, mới cập nhật, bài ghim và danh sách phòng ban (số tài liệu, số thành viên).
  • Quy trình / tài liệu: đăng tài liệu PDF kèm mô tả, phòng ban, thẻ (tag), thời hạn hiệu lực và cờ “bắt buộc đọc”. Có bốn mức hiển thị: Riêng tư, Phòng ban, Nội bộ, Công khai. Danh sách có lọc, phân trang và lịch sử tìm kiếm.
  • Đọc tài liệu ngay trên web: trình xem PDF (react-pdf) có chế độ lật trang như sách (page-flip) và toàn màn hình. Có đếm lượt xem, lượt thích và gợi ý bài liên quan.
  • FAQ: câu hỏi và trả lời soạn bằng CKEditor 5, gắn phòng ban, thẻ, bài liên quan và bình chọn.
  • Danh sách đọc: mỗi người có sẵn Bài ghim, Đã thích, Đã xem, FAQ, và tạo thêm danh sách riêng (ví dụ “Tài liệu cho giáo viên mới”).
  • Tìm kiếm nhanh trên thanh đầu trang, có gợi ý theo lịch sử tìm kiếm.
  • Thư góp ý cho từng bài và từng FAQ. Quản trị viên xem tập trung ở một bảng.
  • Quản lý tài khoản (Admin): danh sách người dùng, phòng ban, phân quyền, thêm người dùng.
  • Thống kê: tổng lượt xem, số bài trong 30 ngày, số người dùng.

Công nghệ

Next.js 14 (App Router, Server Actions, parallel routes), React 18, TypeScript, MUI 5 và MUI X DataGrid, CKEditor 5 (bản build riêng), MongoDB 6 driver, Zod kiểm tra dữ liệu, NextAuth (Google OAuth), react-pdf và page-flip, Chart.js, Docker Compose (app, MongoDB, mongo-express, nginx phục vụ file), GitLab CI.

Điểm ưu việt

  • Phân quyền nhiều tầng: theo vai trò người dùng và theo mức hiển thị của từng tài liệu. Tài liệu phòng ban không lọt ra ngoài.
  • Trải nghiệm đọc tốt: tài liệu PDF đọc trực tiếp như lật sách, không phải tải file về.
  • Định hướng người mới: cờ “bắt buộc đọc”, bài ghim và danh sách đọc giúp giáo viên mới hội nhập nhanh.
  • Kiến trúc gọn: Server Actions và MongoDB, không cần tầng API riêng. Dữ liệu được kiểm tra bằng Zod. Triển khai bằng Docker Compose.
  • Khép kín vòng phản hồi: góp ý, bình chọn FAQ và thống kê lượt xem cho biết tài liệu nào hữu ích, tài liệu nào cần cập nhật.