{"id":23148471,"url":"https://github.com/anhhuy007/paperly","last_synced_at":"2025-04-04T14:10:36.674Z","repository":{"id":263618992,"uuid":"889726179","full_name":"anhhuy007/paperly","owner":"anhhuy007","description":"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.  ","archived":false,"fork":false,"pushed_at":"2025-01-07T02:33:17.000Z","size":6373,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-09T23:33:48.942Z","etag":null,"topics":["handlebarsjs","serverside-rendering","tailwind"],"latest_commit_sha":null,"homepage":"https://paperly-production.up.railway.app/","language":"Handlebars","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anhhuy007.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-17T04:03:23.000Z","updated_at":"2025-01-07T02:33:20.000Z","dependencies_parsed_at":"2024-12-23T12:44:56.664Z","dependency_job_id":"a540b6ae-5cec-4b15-b4fd-2d6e8d0648a3","html_url":"https://github.com/anhhuy007/paperly","commit_stats":null,"previous_names":["anhhuy007/paperly"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhhuy007%2Fpaperly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhhuy007%2Fpaperly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhhuy007%2Fpaperly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhhuy007%2Fpaperly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anhhuy007","download_url":"https://codeload.github.com/anhhuy007/paperly/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247190257,"owners_count":20898702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["handlebarsjs","serverside-rendering","tailwind"],"created_at":"2024-12-17T17:11:45.014Z","updated_at":"2025-04-04T14:10:36.645Z","avatar_url":"https://github.com/anhhuy007.png","language":"Handlebars","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **PTUDW - Đồ án cuối kỳ - Báo điện tử**\n\n![Paperpy](https://firebasestorage.googleapis.com/v0/b/tiktok-clone-f0b70.appspot.com/o/image%2Fpaperly.jpg?alt=media\u0026token=4f524bb0-bd7f-44e0-b3bc-22e692bbb033)\n\n**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:\n\n## 1. Phân hệ độc giả vãng lai (guest)\n\n### Hệ thống Menu\n\n- Hiển thị danh sách chuyên mục.\n\n  - **Lưu ý:** Có 2 cấp chuyên mục, ví dụ:\n\n    - Kinh Doanh ➠ Nông Sản\n\n    - Kinh Doanh ➠ Hải Sản\n\n### Trang chủ\n\n- Hiển thị 3-4 bài viết nổi bật nhất trong tuần qua.\n\n- Hiển thị 10 bài viết được xem nhiều nhất (mọi chuyên mục).\n\n- Hiển thị 10 bài viết mới nhất (mọi chuyên mục).\n\n- Hiển thị top 10 chuyên mục, mỗi chuyên mục 1 bài mới nhất.\n\n  - **Lưu ý:** Bài viết hiển thị trên trang chủ gồm các thông tin:\n\n    - Tiêu đề\n\n    - Chuyên mục\n\n    - Ngày đăng\n\n    - Ảnh đại diện bài viết\n\n  - **Khuyến khích:** Sử dụng hiệu ứng như slideshow hoặc carousel trên trang chủ.\n\n### Xem danh sách bài viết\n\n- Theo chuyên mục (category).\n\n- Theo nhãn (tag).\n\n- Có phân trang.\n\n  - **Lưu ý:** Bài viết hiển thị trên trang danh sách gồm các thông tin:\n\n    - Ảnh đại diện bài viết\n\n    - Tiêu đề\n\n    - Chuyên mục\n\n    - Danh sách nhãn (tag)\n\n    - Ngày đăng\n\n    - Nội dung tóm tắt (abstract)\n\n### Xem chi tiết bài viết\n\n- Nội dung đầy đủ của bài viết.\n\n- Ảnh đại diện (kích thước lớn).\n\n- Tiêu đề.\n\n- Ngày đăng.\n\n- Nội dung.\n\n- Chuyên mục (category).\n\n- Danh sách nhãn (tag).\n\n- Danh sách bình luận của độc giả:\n\n  - Ngày bình luận\n\n  - Tên độc giả\n\n  - Nội dung bình luận\n\n- Đăng bình luận mới.\n\n- 5 bài viết ngẫu nhiên cùng chuyên mục.\n\n  - **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.\n\n### Tìm kiếm bài viết\n\n- Sử dụng kỹ thuật Full-text search trên:\n\n  - Tiêu đề\n\n  - Nội dung tóm tắt (abstract)\n\n  - Nội dung đầy đủ\n\n## 2. Phân hệ độc giả (subscriber)\n\n- Độ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.\n\n- 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.\n\n- 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.\n\n- 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.\n\n## 3. Phân hệ phóng viên (writer)\n\n### Đăng bài viết\n\n- Hỗ trợ WYSIWYG với các công cụ như:\n\n  - [tinymce](http://tiny.cloud)\n\n  - [ckeditor](https://ckeditor.com)\n\n  - [quilljs](https://quilljs.com)\n\n  - [summernote](https://summernote.org)\n\n- Hỗ trợ upload hình ảnh và liên kết YouTube trong bài viết.\n\n- 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.\n\n### Xem danh sách bài viết (do phóng viên viết)\n\n- Đã được duyệt và chờ xuất bản.\n\n- Đã xuất bản.\n\n- Bị từ chối.\n\n- Chưa được duyệt.\n\n### Hiệu chỉnh bài viết\n\n- 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.\n\n## 4. **Phân hệ biên tập viên (Editor)**\n\nBiên tập viên thực hiện quản lý bài viết của phóng viên như sau:\n\n- **Duyệt hoặc từ chối** các bài viết draft được gửi từ phóng viên.\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  - Nếu duyệt, biên tập viên cần hiệu chỉnh các thông tin sau:\n    - **Chuyên mục (category)**.\n    - **Nhãn (tag)**.\n    - **Thời điểm xuất bản**.\n\n---\n\n## 5. **Phân hệ quản trị viên (Administrator)**\n\nQuả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:\n\n- **Quản lý chuyên mục (category)**.\n- **Quản lý nhãn (tag)**.\n- **Quản lý bài viết**.\n  - Cho phép cập nhật trạng thái từ **draft** sang **xuất bản**.\n- **Quản lý danh sách người dùng** (phóng viên, biên tập viên, độc giả).\n  - Phân công chuyên mục cho biên tập viên.\n  - Gia hạn tài khoản độc giả.\n\n---\n\n## 6. **Các tính năng chung cho các phân hệ người dùng**\n\n### **Đăng nhập**\n\n- **Tự cài đặt** hoặc sử dụng thư viện **passportjs**.\n  - Khuyến khích tích hợp đăng nhập qua Google, Facebook, Twitter, GitHub,...\n\n### **Cập nhật thông tin cá nhân**\n\nNgười dùng có thể cập nhật:\n\n- Họ tên.\n- Bút danh (dành cho phóng viên).\n- Email liên lạc.\n- Ngày tháng năm sinh.\n\n### **Đổi mật khẩu**\n\n- Mật khẩu được mã hóa bằng thuật toán **bcrypt**.\n\n### **Quên mật khẩu**\n\n- Hỗ trợ xác nhận qua email OTP với định dạng chuẩn xác.\n\n---\n\n## 7. **Yêu cầu khác**\n\n### **Yêu cầu kỹ thuật**\n\n- **Web App MVC**.\n- Sử dụng các công nghệ sau:\n  - **Framework**: ExpressJS.\n  - **View engine**: Handlebars/EJS.\n  - **Database**: MySQL/Postgres/MongoDB.\n\n### **Yêu cầu dữ liệu**\n\n- 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.\n- Hoàn thiện đầy đủ chức năng theo yêu cầu đề bài.\n\n### **Quản lý mã nguồn**\n\n- Mã nguồn được quản lý và upload qua **GitHub**.\n- Thực hiện commit/push thường xuyên.\n\n**Chú ý:** Sử dụng các hiệu ứng để nâng cao trải nghiệm người dùng.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanhhuy007%2Fpaperly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanhhuy007%2Fpaperly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanhhuy007%2Fpaperly/lists"}