https://github.com/anhhuy007/paperly
Paperly is a online news reading platform, offering dynamic features such as browsing, preminum content access and collaborative content management for many different end-users: readers, writers, editors and administrators.
https://github.com/anhhuy007/paperly
handlebarsjs serverside-rendering tailwind
Last synced: about 1 year ago
JSON representation
Paperly is a online news reading platform, offering dynamic features such as browsing, preminum content access and collaborative content management for many different end-users: readers, writers, editors and administrators.
- Host: GitHub
- URL: https://github.com/anhhuy007/paperly
- Owner: anhhuy007
- Created: 2024-11-17T04:03:23.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-01-07T02:33:17.000Z (over 1 year ago)
- Last Synced: 2025-02-09T23:33:48.942Z (over 1 year ago)
- Topics: handlebarsjs, serverside-rendering, tailwind
- Language: Handlebars
- Homepage: https://paperly-production.up.railway.app/
- Size: 6.08 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: contributing.md
Awesome Lists containing this project
README
# **PTUDW - Đồ án cuối kỳ - Báo điện tử**

**Yêu cầu:** Xây dựng ứng dụng web **Báo điện tử** với các phân hệ và chức năng sau:
## 1. Phân hệ độc giả vãng lai (guest)
### Hệ thống Menu
- Hiển thị danh sách chuyên mục.
- **Lưu ý:** Có 2 cấp chuyên mục, ví dụ:
- Kinh Doanh ➠ Nông Sản
- Kinh Doanh ➠ Hải Sản
### Trang chủ
- Hiển thị 3-4 bài viết nổi bật nhất trong tuần qua.
- Hiển thị 10 bài viết được xem nhiều nhất (mọi chuyên mục).
- Hiển thị 10 bài viết mới nhất (mọi chuyên mục).
- Hiển thị top 10 chuyên mục, mỗi chuyên mục 1 bài mới nhất.
- **Lưu ý:** Bài viết hiển thị trên trang chủ gồm các thông tin:
- Tiêu đề
- Chuyên mục
- Ngày đăng
- Ảnh đại diện bài viết
- **Khuyến khích:** Sử dụng hiệu ứng như slideshow hoặc carousel trên trang chủ.
### Xem danh sách bài viết
- Theo chuyên mục (category).
- Theo nhãn (tag).
- Có phân trang.
- **Lưu ý:** Bài viết hiển thị trên trang danh sách gồm các thông tin:
- Ảnh đại diện bài viết
- Tiêu đề
- Chuyên mục
- Danh sách nhãn (tag)
- Ngày đăng
- Nội dung tóm tắt (abstract)
### Xem chi tiết bài viết
- Nội dung đầy đủ của bài viết.
- Ảnh đại diện (kích thước lớn).
- Tiêu đề.
- Ngày đăng.
- Nội dung.
- Chuyên mục (category).
- Danh sách nhãn (tag).
- Danh sách bình luận của độc giả:
- Ngày bình luận
- Tên độc giả
- Nội dung bình luận
- Đăng bình luận mới.
- 5 bài viết ngẫu nhiên cùng chuyên mục.
- **Lưu ý:** Độc giả có thể click vào chuyên mục (category) hoặc nhãn (tag) để chuyển nhanh sang phần xem danh sách bài viết.
### Tìm kiếm bài viết
- Sử dụng kỹ thuật Full-text search trên:
- Tiêu đề
- Nội dung tóm tắt (abstract)
- Nội dung đầy đủ
## 2. Phân hệ độc giả (subscriber)
- Độc giả có đăng ký tài khoản (thực tế là mua) sẽ được phép xem và tải xuống ấn bản (.pdf) của một số bài viết premium.
- Tài khoản độc giả có thời hạn **7 ngày** (có thể cài đặt **N phút**), tính từ ngày được cấp.
- Khi hết hạn, tài khoản độc giả cần được gia hạn để tiếp tục truy cập các bài viết premium.
- Các bài viết premium được ưu tiên hiển thị trước trong kết quả khi độc giả thực hiện chức năng xem danh sách hoặc tìm kiếm bài viết.
## 3. Phân hệ phóng viên (writer)
### Đăng bài viết
- Hỗ trợ WYSIWYG với các công cụ như:
- [tinymce](http://tiny.cloud)
- [ckeditor](https://ckeditor.com)
- [quilljs](https://quilljs.com)
- [summernote](https://summernote.org)
- Hỗ trợ upload hình ảnh và liên kết YouTube trong bài viết.
- Khi đăng bài, phóng viên chỉ nhập tiêu đề, tóm tắt, nội dung, chuyên mục và gán nhãn cho bài viết.
### Xem danh sách bài viết (do phóng viên viết)
- Đã được duyệt và chờ xuất bản.
- Đã xuất bản.
- Bị từ chối.
- Chưa được duyệt.
### Hiệu chỉnh bài viết
- Chỉ được phép hiệu chỉnh các bài viết bị từ chối hoặc chưa được duyệt.
## 4. **Phân hệ biên tập viên (Editor)**
Biên tập viên thực hiện quản lý bài viết của phóng viên như sau:
- **Duyệt hoặc từ chối** các bài viết draft được gửi từ phóng viên.
- Nếu từ chối, biên tập viên phải ghi rõ lý do để phóng viên chỉnh sửa.
- Nếu duyệt, biên tập viên cần hiệu chỉnh các thông tin sau:
- **Chuyên mục (category)**.
- **Nhãn (tag)**.
- **Thời điểm xuất bản**.
---
## 5. **Phân hệ quản trị viên (Administrator)**
Quản trị viên có toàn quyền trên hệ thống, với các chức năng chính như sau:
- **Quản lý chuyên mục (category)**.
- **Quản lý nhãn (tag)**.
- **Quản lý bài viết**.
- Cho phép cập nhật trạng thái từ **draft** sang **xuất bản**.
- **Quản lý danh sách người dùng** (phóng viên, biên tập viên, độc giả).
- Phân công chuyên mục cho biên tập viên.
- Gia hạn tài khoản độc giả.
---
## 6. **Các tính năng chung cho các phân hệ người dùng**
### **Đăng nhập**
- **Tự cài đặt** hoặc sử dụng thư viện **passportjs**.
- Khuyến khích tích hợp đăng nhập qua Google, Facebook, Twitter, GitHub,...
### **Cập nhật thông tin cá nhân**
Người dùng có thể cập nhật:
- Họ tên.
- Bút danh (dành cho phóng viên).
- Email liên lạc.
- Ngày tháng năm sinh.
### **Đổi mật khẩu**
- Mật khẩu được mã hóa bằng thuật toán **bcrypt**.
### **Quên mật khẩu**
- Hỗ trợ xác nhận qua email OTP với định dạng chuẩn xác.
---
## 7. **Yêu cầu khác**
### **Yêu cầu kỹ thuật**
- **Web App MVC**.
- Sử dụng các công nghệ sau:
- **Framework**: ExpressJS.
- **View engine**: Handlebars/EJS.
- **Database**: MySQL/Postgres/MongoDB.
### **Yêu cầu dữ liệu**
- Dữ liệu mẫu cần ít nhất **20 bài viết** với đầy đủ nội dung, hình ảnh, và phân loại.
- Hoàn thiện đầy đủ chức năng theo yêu cầu đề bài.
### **Quản lý mã nguồn**
- Mã nguồn được quản lý và upload qua **GitHub**.
- Thực hiện commit/push thường xuyên.
**Chú ý:** Sử dụng các hiệu ứng để nâng cao trải nghiệm người dùng.