<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.hientruyen.online/changelog</id>
    <title>Hiên Truyện Blog</title>
    <updated>2026-04-11T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.hientruyen.online/changelog"/>
    <subtitle>Hiên Truyện Blog</subtitle>
    <icon>https://docs.hientruyen.online/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Lịch sử thay đổi]]></title>
        <id>https://docs.hientruyen.online/changelog/2026/04/11/changelog</id>
        <link href="https://docs.hientruyen.online/changelog/2026/04/11/changelog"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tổng hợp ngắn gọn các thay đổi quan trọng theo từng phiên bản của MangaM.]]></summary>
        <content type="html"><![CDATA[<p>Tổng hợp ngắn gọn các thay đổi quan trọng theo từng phiên bản của MangaM.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tổng-quan-nhanh">Tổng quan nhanh<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%E1%BB%95ng-quan-nhanh" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tổng quan nhanh" title="Đường dẫn trực tiếp đến Tổng quan nhanh" translate="no">​</a></h2>
<ul>
<li class=""><strong>Phiên bản mới nhất</strong>: v0.8.0</li>
<li class=""><strong>Cách đọc</strong>: sắp xếp từ mới đến cũ để dễ theo dõi thay đổi gần nhất.</li>
<li class=""><strong>Phạm vi</strong>: các thay đổi lớn về tính năng, cải tiến, sửa lỗi và hạ tầng.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="dòng-thời-gian">Dòng thời gian<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#d%C3%B2ng-th%E1%BB%9Di-gian" class="hash-link" aria-label="Đường dẫn trực tiếp đến Dòng thời gian" title="Đường dẫn trực tiếp đến Dòng thời gian" translate="no">​</a></h2>
<table><thead><tr><th>Phiên bản</th><th>Thời gian</th><th>Điểm nhấn</th></tr></thead><tbody><tr><td>v0.8.0</td><td>2026-04-09 → 2026-04-11</td><td>Credit nhóm dịch, quản lý tập, lên lịch xuất bản</td></tr><tr><td>v0.7.0</td><td>2026-04-04 → 2026-04-08</td><td>Tính năng nhóm dịch, tách trang khám phá, logo mới</td></tr><tr><td>v0.6.0</td><td>2026-03-24 → 2026-04-03</td><td>Kiểm duyệt AI, xử lý nền, đường dẫn nhóm</td></tr><tr><td>v0.5.0</td><td>2026-02-06 → 2026-02-28</td><td>Đăng nhập Discord, tải lên ổn định, chống spam</td></tr><tr><td>v0.4.0</td><td>2026-01-24 → 2026-01-31</td><td>Trang quản trị, Docker production, lưu trữ R2</td></tr><tr><td>v0.3.0</td><td>2025-11-01 → 2025-12-22</td><td>Trang quản trị, tìm kiếm thông minh, nhật ký thao tác</td></tr><tr><td>v0.2.0</td><td>2025-10-01 → 2025-10-05</td><td>Kéo-thả ảnh chương, theo dõi phiên bản</td></tr><tr><td>v0.1.0</td><td>2025-09-06 → 2025-09-30</td><td>Ra mắt lần đầu</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="chi-tiết-theo-phiên-bản">Chi tiết theo phiên bản<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#chi-ti%E1%BA%BFt-theo-phi%C3%AAn-b%E1%BA%A3n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chi tiết theo phiên bản" title="Đường dẫn trực tiếp đến Chi tiết theo phiên bản" translate="no">​</a></h2>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v080--2026-04-09-đến-2026-04-11">v0.8.0 — 2026-04-09 đến 2026-04-11<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v080--2026-04-09-%C4%91%E1%BA%BFn-2026-04-11" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.8.0 — 2026-04-09 đến 2026-04-11" title="Đường dẫn trực tiếp đến v0.8.0 — 2026-04-09 đến 2026-04-11" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Nhóm dịch — Credit &amp; Quyên góp</strong>: Thêm hệ thống credit cho nhóm dịch, quy tắc quyên góp, và hiển thị credit cho người đọc.</li>
<li class=""><strong>Tập (Volume)</strong>: Gán tập hàng loạt cho chương từ trang nhóm và admin; tích hợp volume vào bulk import.</li>
<li class=""><strong>Chương oneshot &amp; lên lịch xuất bản</strong>: Thêm toggle oneshot, bộ chọn thời gian xuất bản có lịch, và worker tự động xuất bản chương đã lên lịch.</li>
<li class=""><strong>Content Rating</strong>: Thêm bộ chọn ContentRating vào form tạo/chỉnh sửa manga, wire toàn bộ qua service layer.</li>
<li class=""><strong>Tiêu đề chương thông minh</strong>: Thêm tiện ích <code>getChapterDisplayTitle</code> để hiển thị tên chương nhất quán trên mọi bề mặt.</li>
<li class=""><strong>Admin nâng cao</strong>: Tinh chỉnh dashboard và quy trình quản lý truy cập chương; thêm migration credit donate.</li>
<li class=""><strong>Routing slug-based</strong>: Chuyển toàn bộ luồng manga sang đường dẫn dựa theo slug.</li>
<li class=""><strong>Shell &amp; điều hướng</strong>: Cải thiện auth, navigation, và UI dùng chung.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h3>
<ul>
<li class="">Form manga cải thiện: validation ảnh bìa 3:4 + 7MB.</li>
<li class="">Cập nhật WASM artifacts và tài liệu zip parser.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v070--2026-04-04-đến-2026-04-08">v0.7.0 — 2026-04-04 đến 2026-04-08<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v070--2026-04-04-%C4%91%E1%BA%BFn-2026-04-08" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.7.0 — 2026-04-04 đến 2026-04-08" title="Đường dẫn trực tiếp đến v0.7.0 — 2026-04-04 đến 2026-04-08" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới-1">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi-1" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Group Features (Schema)</strong>: Thêm model <code>GroupCredit</code>, <code>MangaVolume</code>, <code>UploadPermission</code>, <code>CollabChapter</code> vào Prisma schema.</li>
<li class=""><strong>API Group Features</strong>: Route CRUD đầy đủ cho credit, volume, upload-permissions, và merge manga.</li>
<li class=""><strong>UI Group Features</strong>: Dialog quản lý credit, volume, upload permissions, collab groups, merge manga dialog, và hiển thị credit trên reader.</li>
<li class=""><strong>Khám phá (Explore)</strong>: Tách trang explore thành <strong>Latest</strong> và <strong>Trending</strong> riêng biệt, thêm vào navbar.</li>
<li class=""><strong>Thêm vào nhóm</strong>: Hiển thị QR quyên góp nhóm dịch dạng nổi bật (spotlight).</li>
<li class=""><strong>Logo mới</strong>: Cập nhật icon logo định dạng PNG và ICO.</li>
<li class=""><strong>Yêu cầu tham gia nhóm tuyển thành viên</strong>: Spec và kế hoạch triển khai.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h3>
<ul>
<li class="">Xóa phần quản lý donations khỏi admin.</li>
<li class="">Đường dẫn nhóm: backfill group slug qua instrumentation hook.</li>
<li class="">Loại bỏ biến <code>ctx</code> thừa trong route upload-permissions.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="thay-đổi-hạ-tầng">Thay đổi hạ tầng<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#thay-%C4%91%E1%BB%95i-h%E1%BA%A1-t%E1%BA%A7ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Thay đổi hạ tầng" title="Đường dẫn trực tiếp đến Thay đổi hạ tầng" translate="no">​</a></h3>
<ul>
<li class="">Tên trang web/URL chuyển từ build-time <code>NEXT_PUBLIC_*</code> sang runtime env vars.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v060--2026-03-24-đến-2026-04-03">v0.6.0 — 2026-03-24 đến 2026-04-03<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v060--2026-03-24-%C4%91%E1%BA%BFn-2026-04-03" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.6.0 — 2026-03-24 đến 2026-04-03" title="Đường dẫn trực tiếp đến v0.6.0 — 2026-03-24 đến 2026-04-03" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới-2">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi-2" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>AI Moderation Worker</strong>: Worker xử lý kiểm duyệt nội dung bằng AI theo chu kỳ.</li>
<li class=""><strong>Bulk Import nâng cao</strong>: Import chương hàng loạt có thứ tự, quản lý ZIP, bulk import manga từ admin.</li>
<li class=""><strong>Nhóm dịch — Slug URL</strong>: Migrate toàn bộ route <code>/group/[id]</code> → <code>/g/[slug]</code>, thêm redirect shim, backfill slug.</li>
<li class=""><strong>Email templates</strong>: Chuyển sang EmailMD cho các email hệ thống.</li>
<li class=""><strong>Worker hợp nhất</strong>: Gộp tất cả queue workers thành một process duy nhất để giảm RAM.</li>
<li class=""><strong>Background Jobs</strong>: Chuyển XP award, manga embedding, thông báo chương sang queue (enqueue thay vì fire-and-forget).</li>
<li class=""><strong>Next-chapter navigation</strong>: Thêm sticky bottom bar cho điều hướng chương kế trên desktop; sửa pull indicator mobile.</li>
<li class=""><strong>Emoji system</strong>: Thêm hệ thống emoji/reaction (spec + kế hoạch).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi-1">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#s%E1%BB%ADa-l%E1%BB%97i-1" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h3>
<ul>
<li class="">Đảm bảo XP award dùng transaction client để tránh phantom job khi rollback.</li>
<li class="">Sửa scroll jank trên reader mobile với <code>IntersectionObserver</code>.</li>
<li class="">Sanitize recommendation payloads và refresh error screens.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v050--2026-02-06-đến-2026-02-28">v0.5.0 — 2026-02-06 đến 2026-02-28<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v050--2026-02-06-%C4%91%E1%BA%BFn-2026-02-28" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.5.0 — 2026-02-06 đến 2026-02-28" title="Đường dẫn trực tiếp đến v0.5.0 — 2026-02-06 đến 2026-02-28" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới-3">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi-3" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Discord OAuth</strong>: Hỗ trợ đăng nhập bằng Discord, xử lý redirect đúng sau proxy.</li>
<li class=""><strong>NSFW Gate</strong>: Trang NSFW riêng biệt với kiểm soát truy cập và ẩn public entries.</li>
<li class=""><strong>Uppy ZIP Upload</strong>: Migrate uploader ZIP sang Uppy, hỗ trợ chunked upload.</li>
<li class=""><strong>Turnstile</strong>: Thêm xác minh Cloudflare Turnstile phía client.</li>
<li class=""><strong>Queue Worker Docker</strong>: Thêm container worker vào Docker Compose.</li>
<li class=""><strong>Social platform links</strong>: Hiển thị website nhóm dịch theo từng nền tảng mạng xã hội.</li>
<li class=""><strong>Alternate titles</strong>: Hỗ trợ tiêu đề thay thế trong luồng tạo/chỉnh sửa manga.</li>
<li class=""><strong>AI Chat Search</strong>: Tích hợp chat search dùng AI cho manga, cải thiện hybrid matching.</li>
<li class=""><strong>Personalized UX</strong>: Cải thiện trải nghiệm đọc cá nhân hóa, auth gating trang chủ và profile.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi-2">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#s%E1%BB%ADa-l%E1%BB%97i-2" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h3>
<ul>
<li class="">Sanitize lỗi phía client để tránh rò rỉ thông tin DB.</li>
<li class="">Khắc phục false positive devtools blocker trên Safari mobile.</li>
<li class="">Ổn định visuals card di động và avatar.</li>
<li class="">Tự động dọn stale chunked ZIP sources.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v040--2026-01-24-đến-2026-01-31--phiên-bản-nhiều-cập-nhật-nhất">v0.4.0 — 2026-01-24 đến 2026-01-31 ⭐ Phiên bản nhiều cập nhật nhất<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v040--2026-01-24-%C4%91%E1%BA%BFn-2026-01-31--phi%C3%AAn-b%E1%BA%A3n-nhi%E1%BB%81u-c%E1%BA%ADp-nh%E1%BA%ADt-nh%E1%BA%A5t" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.4.0 — 2026-01-24 đến 2026-01-31 ⭐ Phiên bản nhiều cập nhật nhất" title="Đường dẫn trực tiếp đến v0.4.0 — 2026-01-24 đến 2026-01-31 ⭐ Phiên bản nhiều cập nhật nhất" translate="no">​</a></h2>
<blockquote>
<p><strong>34 commits trong một ngày (27/01/2026)</strong> — đây là ngày hoạt động mạnh nhất trong toàn bộ lịch sử dự án.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới-4">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi-4" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Admin Panel đầy đủ</strong>: Dashboard thống kê, quản lý manga, user, comments, reports, audit logs.</li>
<li class=""><strong>RBAC tĩnh</strong>: Thay thế hệ thống RBAC động bằng kiểm tra permission tĩnh; seed roles mặc định.</li>
<li class=""><strong>Avatar tự động lưu</strong>: Người dùng và nhóm có thể upload avatar với optimistic UI và instant preview.</li>
<li class=""><strong>Avatar frames</strong>: Triển khai frame avatar toàn nền tảng.</li>
<li class=""><strong>CI/CD — Docker Hub</strong>: GitHub Actions pipeline build image và push lên Docker Hub.</li>
<li class=""><strong>Nginx reverse proxy</strong>: Cấu hình Nginx với SSL termination, gzip, real IP forwarding.</li>
<li class=""><strong>Docker Compose Production</strong>: Setup đầy đủ với Postgres, Redis, app, và Nginx.</li>
<li class=""><strong>Storage R2</strong>: Implement avatar storage trên Cloudflare R2.</li>
<li class=""><strong>Inline chapter title editing</strong>: Chỉnh sửa tiêu đề chương trực tiếp trong trang upload.</li>
<li class=""><strong>DateTimePicker</strong>: Thêm component chọn ngày giờ dùng shadcn/ui.</li>
<li class=""><strong>Push notifications</strong>: Nền tảng thông báo push (PWA).</li>
<li class=""><strong>Passkey / WebAuthn</strong>: Thêm hỗ trợ xác thực passkey.</li>
<li class=""><strong>Environment validation</strong>: Script kiểm tra biến môi trường; RBAC migration và security audit scripts.</li>
<li class=""><strong>Group mention rendering</strong>: Hiển thị mention người dùng trong comments có thể click.</li>
<li class=""><strong>GIF → Animated WebP</strong>: Tối ưu upload GIF thành animated WebP.</li>
<li class=""><strong>Drag-and-drop dropzone</strong>: Cải thiện dropzone upload chương, hỗ trợ responsive.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến-1">Cải tiến<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#c%E1%BA%A3i-ti%E1%BA%BFn-1" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h3>
<ul>
<li class="">Card manga: Cải thiện visuals và 3D transforms.</li>
<li class="">Auth forms: Format và tối ưu component.</li>
<li class="">Reader: Thêm placeholder phù hợp chiều cao trang.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi-3">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#s%E1%BB%ADa-l%E1%BB%97i-3" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h3>
<ul>
<li class="">Khắc phục user comment count trong profile stats.</li>
<li class="">Avatar URL nhóm nhất quán sau khi lưu.</li>
<li class="">Normalize line endings (CRLF → LF) toàn codebase.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v030--2025-11-01-đến-2025-12-22">v0.3.0 — 2025-11-01 đến 2025-12-22<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v030--2025-11-01-%C4%91%E1%BA%BFn-2025-12-22" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.3.0 — 2025-11-01 đến 2025-12-22" title="Đường dẫn trực tiếp đến v0.3.0 — 2025-11-01 đến 2025-12-22" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới-5">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi-5" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Admin v1</strong>: Thêm navigation, quản lý user, manga, components admin mới.</li>
<li class=""><strong>AI Chat Search v1</strong>: Tích hợp AI chat search tìm kiếm manga.</li>
<li class=""><strong>Audit logs</strong>: Decode action và thêm bộ lọc cho audit logs.</li>
<li class=""><strong>Announcement form</strong>: Sử dụng DateTimePicker trong form thông báo.</li>
<li class=""><strong>Chapter metadata SEO</strong>: Thêm <code>generateMetadata</code> cho trang chương để cải thiện SEO.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến-2">Cải tiến<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#c%E1%BA%A3i-ti%E1%BA%BFn-2" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h3>
<ul>
<li class="">Dọn dẹp API documentation không dùng.</li>
<li class="">Cập nhật dependencies và loại bỏ scripts thừa.</li>
<li class="">Cải thiện button variants trong YearPicker và MangaList.</li>
<li class="">Refactor cache invalidation patterns dễ đọc hơn.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi-4">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#s%E1%BB%ADa-l%E1%BB%97i-4" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h3>
<ul>
<li class="">Sửa tham số <code>coverUrl</code> trong <code>updateCoverAction</code>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v020--2025-10-01-đến-2025-10-05">v0.2.0 — 2025-10-01 đến 2025-10-05<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v020--2025-10-01-%C4%91%E1%BA%BFn-2025-10-05" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.2.0 — 2025-10-01 đến 2025-10-05" title="Đường dẫn trực tiếp đến v0.2.0 — 2025-10-01 đến 2025-10-05" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới-6">Tính năng mới<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi-6" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h3>
<ul>
<li class=""><strong>Drag-and-drop reorder</strong>: Kéo thả để sắp xếp lại thứ tự ảnh chương.</li>
<li class=""><strong>Chapter revision tracking</strong>: Theo dõi revision để cache-busting ảnh chương chính xác.</li>
<li class=""><strong>Group name trong manga</strong>: Thêm trường tên nhóm vào form tạo manga và danh sách.</li>
<li class=""><strong>Tooltip component</strong>: Thêm component tooltip mới.</li>
<li class=""><strong>Prefetch ảnh chương</strong>: Cải thiện chiến lược prefetch ảnh trên reader.</li>
<li class=""><strong>Upload error handling</strong>: Nâng cao xử lý lỗi khi upload ảnh chương với versioning.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="thay-đổi-hạ-tầng-1">Thay đổi hạ tầng<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#thay-%C4%91%E1%BB%95i-h%E1%BA%A1-t%E1%BA%A7ng-1" class="hash-link" aria-label="Đường dẫn trực tiếp đến Thay đổi hạ tầng" title="Đường dẫn trực tiếp đến Thay đổi hạ tầng" translate="no">​</a></h3>
<ul>
<li class="">Thử nghiệm tích hợp Cloudflare Pages / Workers với OpenNext.js (sau đó đã rollback sang Docker).</li>
<li class="">Cấu hình R2 bucket và KV cho incremental caching.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="v010--2025-09-06-đến-2025-09-30">v0.1.0 — 2025-09-06 đến 2025-09-30<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#v010--2025-09-06-%C4%91%E1%BA%BFn-2025-09-30" class="hash-link" aria-label="Đường dẫn trực tiếp đến v0.1.0 — 2025-09-06 đến 2025-09-30" title="Đường dẫn trực tiếp đến v0.1.0 — 2025-09-06 đến 2025-09-30" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="ra-mắt-lần-đầu">Ra mắt lần đầu<a href="https://docs.hientruyen.online/changelog/2026/04/11/changelog#ra-m%E1%BA%AFt-l%E1%BA%A7n-%C4%91%E1%BA%A7u" class="hash-link" aria-label="Đường dẫn trực tiếp đến Ra mắt lần đầu" title="Đường dẫn trực tiếp đến Ra mắt lần đầu" translate="no">​</a></h3>
<ul>
<li class=""><strong>Cơ sở dự án</strong>: Khởi tạo từ Create Next App với Next.js 16 App Router.</li>
<li class=""><strong>Xác thực</strong>: Đăng ký, đăng nhập email, xác minh email, đặt lại mật khẩu.</li>
<li class=""><strong>Manga reader</strong>: Trang đọc manga với Book reader và authorization cho ảnh.</li>
<li class=""><strong>Trang manga</strong>: Trang chi tiết manga với SSR, SEO metadata, và kiểm soát truy cập.</li>
<li class=""><strong>Upload chương</strong>: Upload ảnh chương cơ bản với presign S3.</li>
<li class=""><strong>Nhóm dịch</strong>: Component nhóm dịch cơ bản.</li>
<li class=""><strong>Comments</strong>: Hệ thống bình luận với lọc theo manga.</li>
<li class=""><strong>Favicon &amp; branding</strong>: Favicon và metadata branding.</li>
<li class=""><strong>MangaCard</strong>: Component hiển thị manga với status badges và loading states.</li>
<li class=""><strong>workerFetch</strong>: Tiện ích gọi API với timeout và revalidation.</li>
</ul>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.1.0 — Ra mắt và tính năng cốt lõi]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.1.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.1.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2025-09-06 → 2025-09-30]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2025-09-06 → 2025-09-30</p>
<p>Phiên bản đầu tiên của MangaM, tập trung vào những tính năng thiết yếu để người dùng có thể đăng ký, đọc truyện, tải chương và bình luận ngay từ đầu.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng">Tính năng<a href="https://docs.hientruyen.online/changelog/v0.1.0#t%C3%ADnh-n%C4%83ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng" title="Đường dẫn trực tiếp đến Tính năng" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="xác-thực-người-dùng">Xác thực người dùng<a href="https://docs.hientruyen.online/changelog/v0.1.0#x%C3%A1c-th%E1%BB%B1c-ng%C6%B0%E1%BB%9Di-d%C3%B9ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Xác thực người dùng" title="Đường dẫn trực tiếp đến Xác thực người dùng" translate="no">​</a></h3>
<ul>
<li class=""><strong>Đăng ký</strong> tài khoản với email.</li>
<li class=""><strong>Xác minh email</strong> sau khi đăng ký.</li>
<li class=""><strong>Đăng nhập</strong> bằng email/password.</li>
<li class=""><strong>Quên mật khẩu</strong>: gửi email reset, nhập mật khẩu mới.</li>
<li class="">Email templates cho: xác minh, reset mật khẩu, mật khẩu tạm thời.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trình-đọc-truyện">Trình đọc truyện<a href="https://docs.hientruyen.online/changelog/v0.1.0#tr%C3%ACnh-%C4%91%E1%BB%8Dc-truy%E1%BB%87n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trình đọc truyện" title="Đường dẫn trực tiếp đến Trình đọc truyện" translate="no">​</a></h3>
<ul>
<li class=""><strong>Book reader</strong>: đọc manga theo kiểu lật trang trái/phải.</li>
<li class=""><strong>Authorization cho ảnh</strong>: kiểm tra quyền trước khi trả về ảnh chương.</li>
<li class="">Xử lý lỗi và <strong>not found</strong> khi chương không tồn tại.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trang-manga">Trang Manga<a href="https://docs.hientruyen.online/changelog/v0.1.0#trang-manga" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trang Manga" title="Đường dẫn trực tiếp đến Trang Manga" translate="no">​</a></h3>
<ul>
<li class="">Trang chi tiết manga với <strong>SSR</strong> và SEO metadata (<code>og:title</code>, <code>og:image</code>).</li>
<li class=""><strong>Kiểm soát truy cập</strong>: phân biệt manga công khai/private.</li>
<li class=""><strong>Canonical slug redirect</strong>: URL chuẩn hóa theo slug của manga.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tải-chương">Tải chương<a href="https://docs.hientruyen.online/changelog/v0.1.0#t%E1%BA%A3i-ch%C6%B0%C6%A1ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tải chương" title="Đường dẫn trực tiếp đến Tải chương" translate="no">​</a></h3>
<ul>
<li class="">Upload ảnh chương cơ bản.</li>
<li class=""><strong>Presign S3</strong> cho direct upload từ client lên storage.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="nhóm-dịch">Nhóm dịch<a href="https://docs.hientruyen.online/changelog/v0.1.0#nh%C3%B3m-d%E1%BB%8Bch" class="hash-link" aria-label="Đường dẫn trực tiếp đến Nhóm dịch" title="Đường dẫn trực tiếp đến Nhóm dịch" translate="no">​</a></h3>
<ul>
<li class="">Components nhóm dịch cơ bản.</li>
<li class="">Trang danh sách chương theo nhóm.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="bình-luận">Bình luận<a href="https://docs.hientruyen.online/changelog/v0.1.0#b%C3%ACnh-lu%E1%BA%ADn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Bình luận" title="Đường dẫn trực tiếp đến Bình luận" translate="no">​</a></h3>
<ul>
<li class="">Hệ thống <strong>bình luận</strong> trên manga.</li>
<li class="">Lọc comments theo manga.</li>
<li class="">Xử lý lỗi và loading states.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="giao-diện--hiển-thị">Giao diện &amp; hiển thị<a href="https://docs.hientruyen.online/changelog/v0.1.0#giao-di%E1%BB%87n--hi%E1%BB%83n-th%E1%BB%8B" class="hash-link" aria-label="Đường dẫn trực tiếp đến Giao diện &amp; hiển thị" title="Đường dẫn trực tiếp đến Giao diện &amp; hiển thị" translate="no">​</a></h3>
<ul>
<li class=""><strong>Favicon</strong> và metadata branding.</li>
<li class=""><code>generateMetadata</code> cho trang manga.</li>
<li class=""><strong>Error components</strong> và loading states theo theme.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="utilities">Utilities<a href="https://docs.hientruyen.online/changelog/v0.1.0#utilities" class="hash-link" aria-label="Đường dẫn trực tiếp đến Utilities" title="Đường dẫn trực tiếp đến Utilities" translate="no">​</a></h3>
<ul>
<li class=""><strong><code>workerFetch</code></strong>: tiện ích gọi API nội bộ với timeout và revalidation support.</li>
<li class=""><strong><code>MangaCard</code></strong> component: hiển thị thông tin manga với status badges và image loading states.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="stack-kỹ-thuật">Stack kỹ thuật<a href="https://docs.hientruyen.online/changelog/v0.1.0#stack-k%E1%BB%B9-thu%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Stack kỹ thuật" title="Đường dẫn trực tiếp đến Stack kỹ thuật" translate="no">​</a></h2>
<table><thead><tr><th>Thành phần</th><th>Công nghệ</th></tr></thead><tbody><tr><td>Framework</td><td>Next.js 16 App Router</td></tr><tr><td>UI</td><td>React 19, TypeScript</td></tr><tr><td>Styling</td><td>Tailwind CSS v4, shadcn/ui</td></tr><tr><td>Database</td><td>PostgreSQL, Prisma ORM</td></tr><tr><td>Auth</td><td>JWT, session-based</td></tr><tr><td>Storage</td><td>S3-compatible (presign)</td></tr><tr><td>State</td><td>Zustand, React Query</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.1.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Ngày</th><th>Mô tả</th></tr></thead><tbody><tr><td>2025-08-27</td><td>Initial commit from Create Next App</td></tr><tr><td>2025-09-06</td><td>first commit, and base func pages</td></tr><tr><td>2025-09-09</td><td>feat(auth): add forgot password functionality with email verification</td></tr><tr><td>2025-09-29</td><td>feat: implement workerFetch utility for API calls</td></tr><tr><td>2025-09-29</td><td>feat: add MangaCard component</td></tr><tr><td>2025-09-29</td><td>feat: enhance metadata generation and error handling components</td></tr><tr><td>2025-09-30</td><td>feat: refactor manga creation into metadata and cover upload functions</td></tr><tr><td>2025-09-30</td><td>fix: add authorization for image reader</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="initial" term="initial"/>
        <category label="auth" term="auth"/>
        <category label="reader" term="reader"/>
        <category label="manga" term="manga"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.2.0 — Tải chương, kéo-thả và hạ tầng cloud]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.2.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.2.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2025-10-01 → 2025-10-05]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2025-10-01 → 2025-10-05</p>
<p>Phiên bản này giúp việc tải và sắp xếp ảnh chương thuận tiện hơn, đồng thời cải thiện khả năng theo dõi phiên bản và thử nghiệm hạ tầng cloud.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.2.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="sắp-xếp-ảnh-bằng-kéo-thả">Sắp xếp ảnh bằng kéo thả<a href="https://docs.hientruyen.online/changelog/v0.2.0#s%E1%BA%AFp-x%E1%BA%BFp-%E1%BA%A3nh-b%E1%BA%B1ng-k%C3%A9o-th%E1%BA%A3" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sắp xếp ảnh bằng kéo thả" title="Đường dẫn trực tiếp đến Sắp xếp ảnh bằng kéo thả" translate="no">​</a></h3>
<ul>
<li class="">Kéo thả để <strong>sắp xếp lại thứ tự</strong> ảnh trong chương trước khi xuất bản.</li>
<li class="">Dùng <code>@dnd-kit</code> làm thư viện drag-and-drop.</li>
<li class="">Thêm server actions và types hỗ trợ reorder.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="theo-dõi-phiên-bản-ảnh-chương">Theo dõi phiên bản ảnh chương<a href="https://docs.hientruyen.online/changelog/v0.2.0#theo-d%C3%B5i-phi%C3%AAn-b%E1%BA%A3n-%E1%BA%A3nh-ch%C6%B0%C6%A1ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Theo dõi phiên bản ảnh chương" title="Đường dẫn trực tiếp đến Theo dõi phiên bản ảnh chương" translate="no">​</a></h3>
<ul>
<li class="">Thêm <strong>revision number</strong> cho mỗi lần thay đổi ảnh chương.</li>
<li class="">Revision được dùng như <strong>cache-busting key</strong> cho CDN và browser cache.</li>
<li class="">Đảm bảo người đọc luôn thấy phiên bản ảnh mới nhất sau khi chỉnh sửa.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="hiển-thị-tên-nhóm-dịch">Hiển thị tên nhóm dịch<a href="https://docs.hientruyen.online/changelog/v0.2.0#hi%E1%BB%83n-th%E1%BB%8B-t%C3%AAn-nh%C3%B3m-d%E1%BB%8Bch" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hiển thị tên nhóm dịch" title="Đường dẫn trực tiếp đến Hiển thị tên nhóm dịch" translate="no">​</a></h3>
<ul>
<li class="">Thêm trường <strong>tên nhóm</strong> vào form tạo manga.</li>
<li class="">Hiển thị tên nhóm dịch trong danh sách manga.</li>
<li class="">Cập nhật types và metadata tương ứng.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="hộp-gợi-ý">Hộp gợi ý<a href="https://docs.hientruyen.online/changelog/v0.2.0#h%E1%BB%99p-g%E1%BB%A3i-%C3%BD" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hộp gợi ý" title="Đường dẫn trực tiếp đến Hộp gợi ý" translate="no">​</a></h3>
<ul>
<li class="">Thêm component <strong>Tooltip</strong> mới từ Radix UI vào thư viện components.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tải-trước-ảnh-chương">Tải trước ảnh chương<a href="https://docs.hientruyen.online/changelog/v0.2.0#t%E1%BA%A3i-tr%C6%B0%E1%BB%9Bc-%E1%BA%A3nh-ch%C6%B0%C6%A1ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tải trước ảnh chương" title="Đường dẫn trực tiếp đến Tải trước ảnh chương" translate="no">​</a></h3>
<ul>
<li class="">Cải thiện <strong>prefetch strategy</strong> cho ảnh: prefetch trang tiếp theo trong khi đọc trang hiện tại.</li>
<li class="">Thêm <strong>loading hints</strong> để browser ưu tiên tải ảnh chương.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="hạ-tầng-thử-nghiệm">Hạ tầng (thử nghiệm)<a href="https://docs.hientruyen.online/changelog/v0.2.0#h%E1%BA%A1-t%E1%BA%A7ng-th%E1%BB%AD-nghi%E1%BB%87m" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hạ tầng (thử nghiệm)" title="Đường dẫn trực tiếp đến Hạ tầng (thử nghiệm)" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-note admonition_FYm_ alert alert--secondary"><div class="admonitionHeading_pJod"><span class="admonitionIcon_LPAO"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>ghi chú</div><div class="admonitionContent_fv1g"><p>Cloudflare Pages/Workers được thử nghiệm trong phiên bản này nhưng sau đó <strong>đã rollback</strong> về Docker vì không phù hợp với kiến trúc server-side của ứng dụng.</p></div></div>
<ul>
<li class="">Tích hợp <strong>OpenNext.js</strong> cho Cloudflare Pages deployment.</li>
<li class="">Cấu hình <strong>R2 bucket</strong> làm storage cho ảnh manga.</li>
<li class="">Cấu hình <strong>KV</strong> cho incremental caching.</li>
<li class="">Thêm <strong>Wrangler</strong> config cho Cloudflare Worker.</li>
<li class="">Thêm CI/CD bước build và verify cho Cloudflare.</li>
<li class=""><strong>Kết quả:</strong> Rollback hoàn toàn, xóa tất cả Cloudflare Pages artifacts.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/v0.2.0#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h2>
<ul>
<li class="">Nâng cao xử lý lỗi khi upload ảnh chương với versioning rõ ràng.</li>
<li class="">Cải thiện <strong>loading states</strong> trong chapter image components.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.2.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Ngày</th><th>Mô tả</th></tr></thead><tbody><tr><td>2025-10-01</td><td>feat: implement drag-and-drop functionality for chapter images reordering</td></tr><tr><td>2025-10-01</td><td>feat: add group name field to manga creation and listing forms</td></tr><tr><td>2025-10-03</td><td>feat: enhance chapter image fetching and reordering with revision tracking</td></tr><tr><td>2025-10-03</td><td>feat: enhance chapter image upload and error handling, add versioning</td></tr><tr><td>2025-10-03</td><td>feat: improve prefetch strategy for chapter images</td></tr><tr><td>2025-10-04</td><td>feat: add tooltip component</td></tr><tr><td>2025-10-04</td><td>feat: OpenNext.js Cloudflare integration (later reverted)</td></tr><tr><td>2025-10-05</td><td>feat: remove Cloudflare Pages artifact preparation script</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="upload" term="upload"/>
        <category label="chapter" term="chapter"/>
        <category label="cloudflare" term="cloudflare"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.3.0 — Trang quản trị, tìm kiếm thông minh và SEO]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.3.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.3.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2025-11-01 → 2025-12-22]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2025-11-01 → 2025-12-22</p>
<p>Phiên bản này bổ sung trang quản trị đầu tiên, cải thiện khả năng tìm kiếm và tối ưu hiển thị để người dùng dễ tiếp cận hơn.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.3.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trang-quản-trị-đầu-tiên">Trang quản trị đầu tiên<a href="https://docs.hientruyen.online/changelog/v0.3.0#trang-qu%E1%BA%A3n-tr%E1%BB%8B-%C4%91%E1%BA%A7u-ti%C3%AAn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trang quản trị đầu tiên" title="Đường dẫn trực tiếp đến Trang quản trị đầu tiên" translate="no">​</a></h3>
<p>Bộ components admin đầu tiên:</p>
<ul>
<li class=""><strong>Navigation admin</strong>: sidebar điều hướng các phần quản trị.</li>
<li class=""><strong>Quản lý user</strong>: danh sách người dùng và phân quyền cơ bản.</li>
<li class=""><strong>Quản lý manga</strong>: trang danh sách và chi tiết manga từ góc admin.</li>
<li class=""><strong>Upload ảnh bìa manga</strong> trực tiếp từ admin.</li>
<li class=""><strong>Audit logs v1</strong>: decode action và thêm bộ lọc tìm kiếm.</li>
<li class=""><strong>Reports</strong>: trang xem báo cáo vi phạm.</li>
<li class=""><strong>Announcements</strong>: form tạo thông báo với <code>DateTimePicker</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tìm-kiếm-bằng-hội-thoại">Tìm kiếm bằng hội thoại<a href="https://docs.hientruyen.online/changelog/v0.3.0#t%C3%ACm-ki%E1%BA%BFm-b%E1%BA%B1ng-h%E1%BB%99i-tho%E1%BA%A1i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tìm kiếm bằng hội thoại" title="Đường dẫn trực tiếp đến Tìm kiếm bằng hội thoại" translate="no">​</a></h3>
<ul>
<li class="">Tích hợp <strong>AI-powered chat search</strong> tìm kiếm manga bằng ngôn ngữ tự nhiên.</li>
<li class="">Giao diện chat phía admin và site để truy vấn manga.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="chọn-ngày-giờ">Chọn ngày giờ<a href="https://docs.hientruyen.online/changelog/v0.3.0#ch%E1%BB%8Dn-ng%C3%A0y-gi%E1%BB%9D" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chọn ngày giờ" title="Đường dẫn trực tiếp đến Chọn ngày giờ" translate="no">​</a></h3>
<ul>
<li class="">Thêm component <strong>DateTimePicker</strong> dùng shadcn/ui.</li>
<li class="">Sử dụng trong <code>AnnouncementForm</code> để chọn thời gian đăng thông báo.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tối-ưu-hiển-thị-chương">Tối ưu hiển thị chương<a href="https://docs.hientruyen.online/changelog/v0.3.0#t%E1%BB%91i-%C6%B0u-hi%E1%BB%83n-th%E1%BB%8B-ch%C6%B0%C6%A1ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tối ưu hiển thị chương" title="Đường dẫn trực tiếp đến Tối ưu hiển thị chương" translate="no">​</a></h3>
<ul>
<li class="">Thêm <code>generateMetadata</code> cho trang chương với tiêu đề, mô tả, og<!-- -->:image<!-- -->.</li>
<li class="">Cải thiện khả năng index bởi công cụ tìm kiếm.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/v0.3.0#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h2>
<ul>
<li class="">Cập nhật <strong>dependencies</strong>: Next.js, React, và các package liên quan.</li>
<li class=""><strong>Loại bỏ API documentation</strong> không còn sử dụng.</li>
<li class=""><strong>Dọn dẹp scripts</strong> thừa trong <code>package.json</code>.</li>
<li class="">Refactor <strong>cache invalidation patterns</strong> dễ đọc hơn.</li>
<li class="">Cải thiện button variants trong <code>YearPicker</code> và <code>MangaList</code> components.</li>
<li class="">Xóa các middleware không dùng.</li>
<li class="">Cleanup scanlation group components.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/v0.3.0#s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h2>
<ul>
<li class="">Sửa tham số <code>coverUrl</code> bị sai tên trong <code>updateCoverAction</code>.</li>
<li class="">Khắc phục các type errors sau cleanup.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.3.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Ngày</th><th>Mô tả</th></tr></thead><tbody><tr><td>2025-12-22</td><td>feat: add new components for admin and site management</td></tr><tr><td>2025-12-22</td><td>feat: enhance admin and site components with new features</td></tr><tr><td>2025-11-22</td><td>feat: add chapter metadata fetching and update generateMetadata</td></tr><tr><td>2025-11-22</td><td>feat: update button variants and refactor cache invalidation patterns</td></tr><tr><td>2025-11-24</td><td>chore: clean up package.json and update dependencies</td></tr><tr><td>2025-11-21</td><td>feat: remove unused API documentation</td></tr><tr><td>2025-11-21</td><td>fix: update cover URL parameter name in updateCoverAction</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="admin" term="admin"/>
        <category label="search" term="search"/>
        <category label="seo" term="seo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.4.0 — Trang quản trị, phân quyền và hạ tầng production ⭐]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.4.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.4.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2026-01-24 → 2026-01-31]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2026-01-24 → 2026-01-31</p>
<p>:::tip Kỷ lục cập nhật
<strong>34 commits trong một ngày duy nhất (27/01/2026)</strong> — đây là giai đoạn bận rộn nhất của dự án, khi MangaM chuyển từ bản thử nghiệm sang một nền tảng hoàn chỉnh hơn cho người dùng và quản trị viên.
:::</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.4.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trang-quản-trị-đầy-đủ">Trang quản trị đầy đủ<a href="https://docs.hientruyen.online/changelog/v0.4.0#trang-qu%E1%BA%A3n-tr%E1%BB%8B-%C4%91%E1%BA%A7y-%C4%91%E1%BB%A7" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trang quản trị đầy đủ" title="Đường dẫn trực tiếp đến Trang quản trị đầy đủ" translate="no">​</a></h3>
<ul>
<li class=""><strong>Dashboard thống kê</strong>: tổng manga, chương, người dùng, daily stats tracking.</li>
<li class=""><strong>Quản lý manga</strong>: xem, chỉnh sửa, xóa manga; upload ảnh bìa từ admin.</li>
<li class=""><strong>Quản lý user</strong>: xem danh sách, phân quyền role, quản lý ban/unban.</li>
<li class=""><strong>Quản lý comments</strong>: kiểm duyệt bình luận, xóa vi phạm.</li>
<li class=""><strong>Reports</strong>: xem và xử lý báo cáo vi phạm từ người dùng.</li>
<li class=""><strong>Audit logs</strong>: ghi lại mọi thao tác admin; decode action và thêm bộ lọc.</li>
<li class=""><strong>Admin shell</strong>: hiển thị avatar admin trong sidebar; account controls trong footer sidebar.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="phân-quyền-rõ-ràng">Phân quyền rõ ràng<a href="https://docs.hientruyen.online/changelog/v0.4.0#ph%C3%A2n-quy%E1%BB%81n-r%C3%B5-r%C3%A0ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Phân quyền rõ ràng" title="Đường dẫn trực tiếp đến Phân quyền rõ ràng" translate="no">​</a></h3>
<ul>
<li class="">Thay thế hệ thống RBAC động bằng <strong>kiểm tra permission tĩnh</strong> — đơn giản, dễ audit.</li>
<li class="">Seed <strong>default roles</strong> và permissions vào database khi khởi tạo.</li>
<li class="">Cập nhật permission fetch action và services dùng static checks.</li>
<li class="">Thêm migration đồng bộ <code>UserRoleEnum</code> với schema.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="lưu-avatar-tự-động">Lưu avatar tự động<a href="https://docs.hientruyen.online/changelog/v0.4.0#l%C6%B0u-avatar-t%E1%BB%B1-%C4%91%E1%BB%99ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Lưu avatar tự động" title="Đường dẫn trực tiếp đến Lưu avatar tự động" translate="no">​</a></h3>
<p><strong>Profile:</strong></p>
<ul>
<li class="">Upload avatar với <strong>optimistic UI</strong> — hiển thị ngay trước khi server xác nhận.</li>
<li class="">Action <code>updateAvatarAction</code> xử lý upload và cập nhật URL.</li>
<li class="">Hiển thị nhất quán avatar URL sau khi lưu.</li>
</ul>
<p><strong>Nhóm dịch:</strong></p>
<ul>
<li class=""><code>uploadGroupAvatarAction</code>: <strong>xóa ảnh cũ trước</strong> khi upload ảnh mới (atomic replacement).</li>
<li class="">Instant preview avatar nhóm sau khi upload.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="khung-avatar">Khung avatar<a href="https://docs.hientruyen.online/changelog/v0.4.0#khung-avatar" class="hash-link" aria-label="Đường dẫn trực tiếp đến Khung avatar" title="Đường dẫn trực tiếp đến Khung avatar" translate="no">​</a></h3>
<ul>
<li class="">Hệ thống <strong>avatar frames</strong> triển khai trên toàn nền tảng.</li>
<li class="">Người dùng có thể chọn frame trang trí cho avatar.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tự-động-triển-khai">Tự động triển khai<a href="https://docs.hientruyen.online/changelog/v0.4.0#t%E1%BB%B1-%C4%91%E1%BB%99ng-tri%E1%BB%83n-khai" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tự động triển khai" title="Đường dẫn trực tiếp đến Tự động triển khai" translate="no">​</a></h3>
<ul>
<li class="">Pipeline <strong>GitHub Actions</strong> tự động:<!-- -->
<ol>
<li class="">Verify WASM artifacts</li>
<li class="">Build Docker image</li>
<li class="">Push lên Docker Hub</li>
<li class="">Trigger deploy webhook</li>
</ol>
</li>
<li class="">Dockerfile hỗ trợ nhiều package managers và <strong>Next.js standalone output</strong>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="thiết-lập-production-bằng-docker">Thiết lập production bằng Docker<a href="https://docs.hientruyen.online/changelog/v0.4.0#thi%E1%BA%BFt-l%E1%BA%ADp-production-b%E1%BA%B1ng-docker" class="hash-link" aria-label="Đường dẫn trực tiếp đến Thiết lập production bằng Docker" title="Đường dẫn trực tiếp đến Thiết lập production bằng Docker" translate="no">​</a></h3>
<ul>
<li class=""><strong>Docker Compose production</strong> đầy đủ: Postgres, Redis, App, Nginx.</li>
<li class=""><strong>Nginx reverse proxy</strong>: SSL termination, gzip compression, real IP forwarding.</li>
<li class="">Cấu hình health checks và networking giữa các services.</li>
<li class="">Thêm script deploy và setup server environment.</li>
<li class=""><strong>PM2</strong> để quản lý Next.js process trên VM.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="lưu-trữ-ảnh-an-toàn">Lưu trữ ảnh an toàn<a href="https://docs.hientruyen.online/changelog/v0.4.0#l%C6%B0u-tr%E1%BB%AF-%E1%BA%A3nh-an-to%C3%A0n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Lưu trữ ảnh an toàn" title="Đường dẫn trực tiếp đến Lưu trữ ảnh an toàn" translate="no">​</a></h3>
<ul>
<li class="">Implement avatar storage trên <strong>Cloudflare R2</strong>.</li>
<li class="">Storage router phân loại intent (group assets, user avatars, chapter images).</li>
<li class="">Thêm <code>auth login action</code> và <strong>storage router</strong> tổng quát.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="đăng-nhập-bằng-passkey">Đăng nhập bằng passkey<a href="https://docs.hientruyen.online/changelog/v0.4.0#%C4%91%C4%83ng-nh%E1%BA%ADp-b%E1%BA%B1ng-passkey" class="hash-link" aria-label="Đường dẫn trực tiếp đến Đăng nhập bằng passkey" title="Đường dẫn trực tiếp đến Đăng nhập bằng passkey" translate="no">​</a></h3>
<ul>
<li class="">Thêm hỗ trợ xác thực <strong>passkey</strong> (WebAuthn) cho tài khoản người dùng.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="thông-báo-đẩy-pwa">Thông báo đẩy (PWA)<a href="https://docs.hientruyen.online/changelog/v0.4.0#th%C3%B4ng-b%C3%A1o-%C4%91%E1%BA%A9y-pwa" class="hash-link" aria-label="Đường dẫn trực tiếp đến Thông báo đẩy (PWA)" title="Đường dẫn trực tiếp đến Thông báo đẩy (PWA)" translate="no">​</a></h3>
<ul>
<li class="">Nền tảng <strong>Web Push Notifications</strong> với VAPID keys.</li>
<li class="">Người dùng có thể subscribe/unsubscribe nhận thông báo.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="chỉnh-tiêu-đề-chương">Chỉnh tiêu đề chương<a href="https://docs.hientruyen.online/changelog/v0.4.0#ch%E1%BB%89nh-ti%C3%AAu-%C4%91%E1%BB%81-ch%C6%B0%C6%A1ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chỉnh tiêu đề chương" title="Đường dẫn trực tiếp đến Chỉnh tiêu đề chương" translate="no">​</a></h3>
<ul>
<li class="">Chỉnh sửa <strong>tiêu đề chương trực tiếp</strong> trong trang upload (không cần mở dialog riêng).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="chọn-ngày-giờ">Chọn ngày giờ<a href="https://docs.hientruyen.online/changelog/v0.4.0#ch%E1%BB%8Dn-ng%C3%A0y-gi%E1%BB%9D" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chọn ngày giờ" title="Đường dẫn trực tiếp đến Chọn ngày giờ" translate="no">​</a></h3>
<ul>
<li class="">Component <strong>chọn ngày giờ</strong> mới dùng shadcn/ui, dùng trong form thông báo và lên lịch.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="hiển-thị-nhắc-tên">Hiển thị nhắc tên<a href="https://docs.hientruyen.online/changelog/v0.4.0#hi%E1%BB%83n-th%E1%BB%8B-nh%E1%BA%AFc-t%C3%AAn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hiển thị nhắc tên" title="Đường dẫn trực tiếp đến Hiển thị nhắc tên" translate="no">​</a></h3>
<ul>
<li class=""><strong>@mention người dùng</strong> trong bình luận hiển thị dạng link có thể click.</li>
<li class="">Tính năng comment counting trong profile stats.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tối-ưu-gif-sang-webp">Tối ưu GIF sang WebP<a href="https://docs.hientruyen.online/changelog/v0.4.0#t%E1%BB%91i-%C6%B0u-gif-sang-webp" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tối ưu GIF sang WebP" title="Đường dẫn trực tiếp đến Tối ưu GIF sang WebP" translate="no">​</a></h3>
<ul>
<li class="">Tối ưu upload GIF: tự động convert sang <strong>animated WebP</strong> để giảm dung lượng.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="kéo-thả-ảnh-chương">Kéo-thả ảnh chương<a href="https://docs.hientruyen.online/changelog/v0.4.0#k%C3%A9o-th%E1%BA%A3-%E1%BA%A3nh-ch%C6%B0%C6%A1ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Kéo-thả ảnh chương" title="Đường dẫn trực tiếp đến Kéo-thả ảnh chương" translate="no">​</a></h3>
<ul>
<li class="">Cải thiện <strong>dropzone upload chương</strong> responsive trên mọi màn hình.</li>
<li class="">Khôi phục drag-and-drop cho chapter images.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="kiểm-tra-môi-trường-và-công-cụ">Kiểm tra môi trường và công cụ<a href="https://docs.hientruyen.online/changelog/v0.4.0#ki%E1%BB%83m-tra-m%C3%B4i-tr%C6%B0%E1%BB%9Dng-v%C3%A0-c%C3%B4ng-c%E1%BB%A5" class="hash-link" aria-label="Đường dẫn trực tiếp đến Kiểm tra môi trường và công cụ" title="Đường dẫn trực tiếp đến Kiểm tra môi trường và công cụ" translate="no">​</a></h3>
<ul>
<li class=""><strong>Script kiểm tra biến môi trường</strong> (<code>validate-env.ts</code>).</li>
<li class=""><strong>RBAC migration</strong> và security audit scripts.</li>
<li class=""><strong>Admin CLI</strong> (<code>pnpm cli</code>) với nhiều lệnh quản trị.</li>
<li class=""><strong>Smoke test</strong> cho services layer.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/v0.4.0#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h2>
<ul>
<li class="">Cải thiện <strong>manga card visuals</strong> và 3D card transforms.</li>
<li class="">Format và tối ưu auth forms, input components.</li>
<li class="">Normalize <strong>line endings</strong> (CRLF → LF) toàn codebase.</li>
<li class="">User profile: hiển thị scanlation group roles trong header.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/v0.4.0#s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h2>
<ul>
<li class="">Khắc phục <strong>user comment count</strong> trong profile stats hiển thị sai.</li>
<li class="">Đảm bảo avatar URL nhóm nhất quán sau khi lưu lần đầu.</li>
<li class="">Fix card hover animation trên Firefox.</li>
<li class="">Fix mention links điều hướng đúng.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật-ngày-27012026--34-commits">Commits nổi bật (ngày 27/01/2026 — 34 commits)<a href="https://docs.hientruyen.online/changelog/v0.4.0#commits-n%E1%BB%95i-b%E1%BA%ADt-ng%C3%A0y-27012026--34-commits" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật (ngày 27/01/2026 — 34 commits)" title="Đường dẫn trực tiếp đến Commits nổi bật (ngày 27/01/2026 — 34 commits)" translate="no">​</a></h2>
<table><thead><tr><th>Nhóm</th><th>Mô tả</th></tr></thead><tbody><tr><td>Docker</td><td>Nginx config, SSL, gzip, Docker Compose production</td></tr><tr><td>CI/CD</td><td>GitHub Actions pipeline build + push Docker Hub</td></tr><tr><td>Avatar</td><td>Auto-save avatar profile + nhóm, optimistic UI</td></tr><tr><td>Storage</td><td>R2 storage router, intent detection</td></tr><tr><td>Performance</td><td>GIF → animated WebP optimization</td></tr><tr><td>UI</td><td>Card 3D transforms, dropzone full-width, auth forms</td></tr><tr><td>Docs</td><td>Mention rendering QA report</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="admin" term="admin"/>
        <category label="rbac" term="rbac"/>
        <category label="cicd" term="cicd"/>
        <category label="docker" term="docker"/>
        <category label="auth" term="auth"/>
        <category label="storage" term="storage"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.5.0 — Đăng nhập Discord, tải lên và cải thiện trải nghiệm]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.5.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.5.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2026-02-06 → 2026-02-28]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2026-02-06 → 2026-02-28</p>
<p>Phiên bản này tập trung vào việc đăng nhập thuận tiện hơn, tải lên ổn định hơn, tăng cường bảo mật và cải thiện trải nghiệm đọc trên điện thoại.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.5.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="đăng-nhập-bằng-discord">Đăng nhập bằng Discord<a href="https://docs.hientruyen.online/changelog/v0.5.0#%C4%91%C4%83ng-nh%E1%BA%ADp-b%E1%BA%B1ng-discord" class="hash-link" aria-label="Đường dẫn trực tiếp đến Đăng nhập bằng Discord" title="Đường dẫn trực tiếp đến Đăng nhập bằng Discord" translate="no">​</a></h3>
<ul>
<li class="">Hỗ trợ <strong>đăng nhập bằng Discord</strong> (<code>DISCORD_CLIENT_ID</code>, <code>DISCORD_SECRET</code>, <code>DISCORD_REDIRECT_URI</code>).</li>
<li class="">Xử lý redirect OAuth đúng khi ứng dụng chạy sau reverse proxy.</li>
<li class="">Cải thiện UI card xác thực và tab animation.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trang-nội-dung-nhạy-cảm">Trang nội dung nhạy cảm<a href="https://docs.hientruyen.online/changelog/v0.5.0#trang-n%E1%BB%99i-dung-nh%E1%BA%A1y-c%E1%BA%A3m" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trang nội dung nhạy cảm" title="Đường dẫn trực tiếp đến Trang nội dung nhạy cảm" translate="no">​</a></h3>
<ul>
<li class="">Thêm trang <strong>NSFW riêng biệt</strong> với kiểm soát truy cập.</li>
<li class="">Ẩn các entry NSFW khỏi danh sách công khai theo mặc định.</li>
<li class="">Route <code>/nsfw</code> có hidden mode và gating phân quyền.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tải-lên-zip-ổn-định-hơn">Tải lên ZIP ổn định hơn<a href="https://docs.hientruyen.online/changelog/v0.5.0#t%E1%BA%A3i-l%C3%AAn-zip-%E1%BB%95n-%C4%91%E1%BB%8Bnh-h%C6%A1n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tải lên ZIP ổn định hơn" title="Đường dẫn trực tiếp đến Tải lên ZIP ổn định hơn" translate="no">​</a></h3>
<ul>
<li class=""><strong>Migrate</strong> chapter ZIP uploader từ pipeline cũ sang <strong>Uppy</strong>.</li>
<li class="">Hỗ trợ <strong>chunked upload</strong> chia nhỏ file lớn thành nhiều phần.</li>
<li class="">Tự động dọn dẹp <strong>stale chunked ZIP sources</strong>.</li>
<li class="">Docker Compose: thêm container <strong>queue worker</strong> riêng cho xử lý ZIP.</li>
<li class="">Xóa pipeline ZIP batch upload cũ (legacy).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="chống-spam-cho-form">Chống spam cho form<a href="https://docs.hientruyen.online/changelog/v0.5.0#ch%E1%BB%91ng-spam-cho-form" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chống spam cho form" title="Đường dẫn trực tiếp đến Chống spam cho form" translate="no">​</a></h3>
<ul>
<li class="">Thêm xác minh <strong>Turnstile</strong> phía client cho các form nhạy cảm.</li>
<li class="">Cấu hình qua <code>NEXT_PUBLIC_TURNSTILE_SITEKEY</code> và <code>TURNSTILE_SECRET_KEY</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="liên-kết-mạng-xã-hội">Liên kết mạng xã hội<a href="https://docs.hientruyen.online/changelog/v0.5.0#li%C3%AAn-k%E1%BA%BFt-m%E1%BA%A1ng-x%C3%A3-h%E1%BB%99i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Liên kết mạng xã hội" title="Đường dẫn trực tiếp đến Liên kết mạng xã hội" translate="no">​</a></h3>
<ul>
<li class="">Hiển thị website nhóm dịch với <strong>icon theo nền tảng</strong> (Twitter, Discord, Facebook, v.v.).</li>
<li class="">Thêm helper <code>detectSocialPlatform(url)</code> phía server.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tên-thay-thế">Tên thay thế<a href="https://docs.hientruyen.online/changelog/v0.5.0#t%C3%AAn-thay-th%E1%BA%BF" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tên thay thế" title="Đường dẫn trực tiếp đến Tên thay thế" translate="no">​</a></h3>
<ul>
<li class="">Hỗ trợ <strong>tiêu đề thay thế</strong> (<code>alternate_titles</code>) trong luồng tạo và chỉnh sửa manga.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="tìm-kiếm-bằng-hội-thoại">Tìm kiếm bằng hội thoại<a href="https://docs.hientruyen.online/changelog/v0.5.0#t%C3%ACm-ki%E1%BA%BFm-b%E1%BA%B1ng-h%E1%BB%99i-tho%E1%BA%A1i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tìm kiếm bằng hội thoại" title="Đường dẫn trực tiếp đến Tìm kiếm bằng hội thoại" translate="no">​</a></h3>
<ul>
<li class="">Cải thiện <strong>chat facet</strong> và <strong>hybrid matching</strong> cho tìm kiếm manga bằng AI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trải-nghiệm-theo-sở-thích">Trải nghiệm theo sở thích<a href="https://docs.hientruyen.online/changelog/v0.5.0#tr%E1%BA%A3i-nghi%E1%BB%87m-theo-s%E1%BB%9F-th%C3%ADch" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trải nghiệm theo sở thích" title="Đường dẫn trực tiếp đến Trải nghiệm theo sở thích" translate="no">​</a></h3>
<ul>
<li class="">Cải thiện UX trang chủ và profile với dữ liệu cá nhân hóa.</li>
<li class=""><strong>Auth gating</strong> thông minh hơn cho người chưa đăng nhập.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="banner-cập-nhật-pwa">Banner cập nhật PWA<a href="https://docs.hientruyen.online/changelog/v0.5.0#banner-c%E1%BA%ADp-nh%E1%BA%ADt-pwa" class="hash-link" aria-label="Đường dẫn trực tiếp đến Banner cập nhật PWA" title="Đường dẫn trực tiếp đến Banner cập nhật PWA" translate="no">​</a></h3>
<ul>
<li class="">Thêm <strong>banner thông báo cập nhật</strong> PWA có thể đóng (dismissible) khi có phiên bản mới.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/v0.5.0#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="trình-đọc-trên-mobile">Trình đọc trên mobile<a href="https://docs.hientruyen.online/changelog/v0.5.0#tr%C3%ACnh-%C4%91%E1%BB%8Dc-tr%C3%AAn-mobile" class="hash-link" aria-label="Đường dẫn trực tiếp đến Trình đọc trên mobile" title="Đường dẫn trực tiếp đến Trình đọc trên mobile" translate="no">​</a></h3>
<ul>
<li class="">Tighten mobile reader control layouts.</li>
<li class="">Restore mobile sidebar scroll position sau khi đóng/mở.</li>
<li class="">Reveal reader controls khi <strong>vuốt lên</strong> (upward swipe).</li>
<li class="">Match reader placeholder <strong>theo chiều cao trang</strong> thực tế.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="phiên-đăng-nhập-và-xác-thực">Phiên đăng nhập và xác thực<a href="https://docs.hientruyen.online/changelog/v0.5.0#phi%C3%AAn-%C4%91%C4%83ng-nh%E1%BA%ADp-v%C3%A0-x%C3%A1c-th%E1%BB%B1c" class="hash-link" aria-label="Đường dẫn trực tiếp đến Phiên đăng nhập và xác thực" title="Đường dẫn trực tiếp đến Phiên đăng nhập và xác thực" translate="no">​</a></h3>
<ul>
<li class="">Tự động <strong>refresh session</strong> khi tab được restore hoặc focus.</li>
<li class="">Back off <strong>redundant session refresh attempts</strong> (tránh spam refresh).</li>
<li class="">Tighten refresh endpoint validation và rate limiting.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="hiệu-năng">Hiệu năng<a href="https://docs.hientruyen.online/changelog/v0.5.0#hi%E1%BB%87u-n%C4%83ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hiệu năng" title="Đường dẫn trực tiếp đến Hiệu năng" translate="no">​</a></h3>
<ul>
<li class="">Giảm motion bundle trong các component chính (<code>perf/ui</code>).</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/v0.5.0#s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h2>
<ul>
<li class=""><strong>Sanitize client-facing errors</strong> để tránh rò rỉ thông tin database.</li>
<li class="">Khắc phục <strong>false positive</strong> devtools blocker trên Safari mobile.</li>
<li class="">Ổn định card mobile và visuals avatar.</li>
<li class="">Sửa <code>mismatch handler</code> cho server actions version mismatch.</li>
<li class="">Mount version mismatch handler globally.</li>
<li class="">Cải thiện logic phát hiện devtools và xử lý events.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.5.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Hash</th><th>Mô tả</th></tr></thead><tbody><tr><td><code>2026-02-27</code></td><td>feat(auth,manga): support Discord sign-in and tighten access filters</td></tr><tr><td><code>2026-02-21</code></td><td>feat(verify-human): add client turnstile verification</td></tr><tr><td><code>2026-02-21</code></td><td>feat(ui): show group website links by social platform</td></tr><tr><td><code>2026-02-20</code></td><td>feat(nsfw): create NSFW content page and update navigation links</td></tr><tr><td><code>2026-02-17</code></td><td>refactor(chapters): migrate ZIP uploader to Uppy</td></tr><tr><td><code>2026-02-17</code></td><td>feat(infra): add docker compose queue worker</td></tr><tr><td><code>2026-02-25</code></td><td>feat(manga): support alternate titles in manga workflow</td></tr><tr><td><code>2026-02-22</code></td><td>feat(search): improve chat facet and hybrid matching</td></tr><tr><td><code>2026-02-28</code></td><td>feat(home,profile,auth): improve personalized reading UX and auth gating</td></tr><tr><td><code>2026-04-05</code></td><td>feat: add dismissible PWA update banner</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="auth" term="auth"/>
        <category label="reader" term="reader"/>
        <category label="security" term="security"/>
        <category label="upload" term="upload"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.6.0 — Kiểm duyệt AI, xử lý nền và đường dẫn nhóm]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.6.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.6.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2026-03-24 → 2026-04-03]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2026-03-24 → 2026-04-03</p>
<p>Phiên bản này cải tổ phần nền tảng: xử lý các tác vụ nặng ở chế độ nền, kiểm duyệt nội dung bằng AI, và chuyển đường dẫn nhóm sang dạng thân thiện hơn.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.6.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="kiểm-duyệt-nội-dung-tự-động">Kiểm duyệt nội dung tự động<a href="https://docs.hientruyen.online/changelog/v0.6.0#ki%E1%BB%83m-duy%E1%BB%87t-n%E1%BB%99i-dung-t%E1%BB%B1-%C4%91%E1%BB%99ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Kiểm duyệt nội dung tự động" title="Đường dẫn trực tiếp đến Kiểm duyệt nội dung tự động" translate="no">​</a></h3>
<ul>
<li class="">Thêm <strong>worker AI moderation</strong> (<code>process-ai-moderation-queue.ts</code>) chạy định kỳ mỗi 30 giây.</li>
<li class="">Xử lý các job kiểm duyệt nội dung tự động bằng AI.</li>
<li class="">Job type <code>AI_MODERATION</code> và <code>AI_GROUP_MODERATION</code> được enqueue vào <code>NotificationQueue</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="xử-lý-nền-cho-tác-vụ-nặng">Xử lý nền cho tác vụ nặng<a href="https://docs.hientruyen.online/changelog/v0.6.0#x%E1%BB%AD-l%C3%BD-n%E1%BB%81n-cho-t%C3%A1c-v%E1%BB%A5-n%E1%BA%B7ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Xử lý nền cho tác vụ nặng" title="Đường dẫn trực tiếp đến Xử lý nền cho tác vụ nặng" translate="no">​</a></h3>
<p>Chuyển các tác vụ nặng từ inline (fire-and-forget) sang <strong>queue bất đồng bộ</strong>:</p>
<table><thead><tr><th>Tác vụ</th><th>Trước</th><th>Sau</th></tr></thead><tbody><tr><td>XP Award</td><td>Inline trong transaction</td><td>Enqueue sau commit</td></tr><tr><td>Manga Embedding</td><td>Inline sau save</td><td>Enqueue sau commit</td></tr><tr><td>Chapter Notifications</td><td>Inline khi publish</td><td>Enqueue sau publish</td></tr></tbody></table>
<ul>
<li class="">Đảm bảo XP award dùng <strong>transaction client</strong> để tránh phantom job khi rollback.</li>
<li class="">Loại <code>MANGA_EMBEDDING</code> và <code>XP_AWARD</code> ra khỏi notification worker, chuyển sang AI worker.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="gộp-các-worker">Gộp các worker<a href="https://docs.hientruyen.online/changelog/v0.6.0#g%E1%BB%99p-c%C3%A1c-worker" class="hash-link" aria-label="Đường dẫn trực tiếp đến Gộp các worker" title="Đường dẫn trực tiếp đến Gộp các worker" translate="no">​</a></h3>
<ul>
<li class="">Gộp tất cả 3 queue workers thành <strong>một process duy nhất</strong> để giảm RAM usage trên server.</li>
<li class="">Chuyển workers sang <strong>long-lived processes</strong> với internal sleep loop thay vì spawn mới mỗi lần.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="nhập-hàng-loạt-dễ-hơn">Nhập hàng loạt dễ hơn<a href="https://docs.hientruyen.online/changelog/v0.6.0#nh%E1%BA%ADp-h%C3%A0ng-lo%E1%BA%A1t-d%E1%BB%85-h%C6%A1n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Nhập hàng loạt dễ hơn" title="Đường dẫn trực tiếp đến Nhập hàng loạt dễ hơn" translate="no">​</a></h3>
<ul>
<li class="">Thêm <strong>admin bulk import tools</strong>: giao diện import manga hàng loạt từ admin dashboard.</li>
<li class="">Import chương <strong>tuần tự có thứ tự</strong> (sequential upload) tránh race condition.</li>
<li class="">Quản lý file ZIP bulk import trong <code>./data/bulk-import-zips</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="đường-dẫn-nhóm-thân-thiện">Đường dẫn nhóm thân thiện<a href="https://docs.hientruyen.online/changelog/v0.6.0#%C4%91%C6%B0%E1%BB%9Dng-d%E1%BA%ABn-nh%C3%B3m-th%C3%A2n-thi%E1%BB%87n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Đường dẫn nhóm thân thiện" title="Đường dẫn trực tiếp đến Đường dẫn nhóm thân thiện" translate="no">​</a></h3>
<p>Hoàn chỉnh migration URL nhóm dịch:</p>
<ul>
<li class="">Thêm field <code>slug</code> vào model <code>ScanlationGroup</code>.</li>
<li class="">Thêm <code>makeUniqueGroupSlug</code> và <strong>backfill script</strong> cho dữ liệu hiện có.</li>
<li class="">Thêm <code>getGroupBySlug</code> service method.</li>
<li class="">Thêm helper <code>groupUrl(slug)</code> dùng toàn platform.</li>
<li class=""><strong>Replace</strong> toàn bộ route <code>/group/[id]/</code> → <code>/g/[slug]/</code>.</li>
<li class="">Thêm <strong>redirect shim</strong> tại <code>/group/[id]</code> → <code>/g/[slug]</code> cho backward compatibility.</li>
<li class="">Migrate tất cả components sử dụng <code>groupId</code> prop → <code>slug</code>.</li>
<li class="">Cập nhật <code>revalidatePath</code> calls theo route mới.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="điều-hướng-chương-tiếp-theo">Điều hướng chương tiếp theo<a href="https://docs.hientruyen.online/changelog/v0.6.0#%C4%91i%E1%BB%81u-h%C6%B0%E1%BB%9Bng-ch%C6%B0%C6%A1ng-ti%E1%BA%BFp-theo" class="hash-link" aria-label="Đường dẫn trực tiếp đến Điều hướng chương tiếp theo" title="Đường dẫn trực tiếp đến Điều hướng chương tiếp theo" translate="no">​</a></h3>
<ul>
<li class="">Thay thế cơ chế "hold" desktop bằng <strong>sticky bottom bar</strong> cho điều hướng chương tiếp.</li>
<li class="">Cải thiện <strong>pull indicator</strong> mobile:<!-- -->
<ul>
<li class="">Dùng <code>position: fixed</code> tránh layout shift.</li>
<li class="">Dùng <code>getBoundingClientRect</code> cho touch gesture chính xác hơn.</li>
<li class="">Dùng <code>IntersectionObserver</code> thay scroll listeners để phát hiện cuối trang.</li>
<li class="">Dùng <code>translateY</code> thay <code>max-height</code> animation cho smooth hơn.</li>
<li class="">Reset pull indicator khi đổi chương.</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="mẫu-email">Mẫu email<a href="https://docs.hientruyen.online/changelog/v0.6.0#m%E1%BA%ABu-email" class="hash-link" aria-label="Đường dẫn trực tiếp đến Mẫu email" title="Đường dẫn trực tiếp đến Mẫu email" translate="no">​</a></h3>
<ul>
<li class="">Migrate toàn bộ email templates sang <strong>EmailMD</strong> format.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="hệ-thống-emoji-bản-thiết-kế">Hệ thống emoji <em>(bản thiết kế)</em><a href="https://docs.hientruyen.online/changelog/v0.6.0#h%E1%BB%87-th%E1%BB%91ng-emoji-b%E1%BA%A3n-thi%E1%BA%BFt-k%E1%BA%BF" class="hash-link" aria-label="Đường dẫn trực tiếp đến hệ-thống-emoji-bản-thiết-kế" title="Đường dẫn trực tiếp đến hệ-thống-emoji-bản-thiết-kế" translate="no">​</a></h3>
<ul>
<li class="">Thêm spec và kế hoạch triển khai hệ thống emoji/reaction cho bình luận.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/v0.6.0#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h2>
<ul>
<li class="">Cập nhật Next.js, React và eslint-config-next lên phiên bản mới nhất.</li>
<li class="">Sync pnpm lockfile với dependencies mới.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/v0.6.0#s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h2>
<ul>
<li class="">Sanitize recommendation payloads tránh lộ thông tin nội bộ.</li>
<li class="">Cập nhật admin group-manga links sang <code>/g/[slug]/</code> đúng format.</li>
<li class="">Resolve các <code>/group/</code> link còn sót và type errors sau migration.</li>
<li class="">Fix dead code trong floating hub reader (unused constants).</li>
<li class="">Sửa scroll jank reader với <code>IntersectionObserver</code>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.6.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Hash</th><th>Mô tả</th></tr></thead><tbody><tr><td><code>3c02684</code></td><td>refactor: merge all queue workers into single unified process</td></tr><tr><td><code>feat</code></td><td>feat: implement AI moderation worker script</td></tr><tr><td><code>feat</code></td><td>feat: enqueue XP award instead of fire-and-forget inline</td></tr><tr><td><code>feat</code></td><td>feat: enqueue manga embedding instead of fire-and-forget inline</td></tr><tr><td><code>feat</code></td><td>feat: enqueue chapter notifications instead of inline processing</td></tr><tr><td><code>3c02684</code></td><td>feat: add admin manga bulk import tools</td></tr><tr><td><code>feat</code></td><td>feat: migrate group URLs from /group/[id] to /g/[slug]</td></tr><tr><td><code>feat</code></td><td>feat: replace desktop hold mechanism with sticky bottom bar for next chapter nav</td></tr><tr><td><code>feat</code></td><td>feat: migrate email templates to EmailMD</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="ai" term="ai"/>
        <category label="workers" term="workers"/>
        <category label="routing" term="routing"/>
        <category label="bulk-import" term="bulk-import"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.7.0 — Tính năng nhóm dịch, trang khám phá và đường dẫn thân thiện]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.7.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.7.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2026-04-04 → 2026-04-08]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2026-04-04 → 2026-04-08</p>
<p>Phiên bản này mở rộng công cụ cho nhóm dịch, tách rõ trang khám phá nội dung và cải thiện bộ nhận diện của site.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.7.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="nền-tảng-dữ-liệu-cho-nhóm-dịch">Nền tảng dữ liệu cho nhóm dịch<a href="https://docs.hientruyen.online/changelog/v0.7.0#n%E1%BB%81n-t%E1%BA%A3ng-d%E1%BB%AF-li%E1%BB%87u-cho-nh%C3%B3m-d%E1%BB%8Bch" class="hash-link" aria-label="Đường dẫn trực tiếp đến Nền tảng dữ liệu cho nhóm dịch" title="Đường dẫn trực tiếp đến Nền tảng dữ liệu cho nhóm dịch" translate="no">​</a></h3>
<p>Bổ sung 4 model mới vào Prisma schema:</p>
<table><thead><tr><th>Model</th><th>Mục đích</th></tr></thead><tbody><tr><td><code>GroupCredit</code></td><td>Theo dõi số dư credit của nhóm dịch</td></tr><tr><td><code>MangaVolume</code></td><td>Quản lý tập (volume) của manga</td></tr><tr><td><code>UploadPermission</code></td><td>Phân quyền nhóm nào được upload chương nào</td></tr><tr><td><code>CollabChapter</code></td><td>Liên kết chương cộng tác giữa nhiều nhóm</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="api-cho-tính-năng-nhóm-dịch">API cho tính năng nhóm dịch<a href="https://docs.hientruyen.online/changelog/v0.7.0#api-cho-t%C3%ADnh-n%C4%83ng-nh%C3%B3m-d%E1%BB%8Bch" class="hash-link" aria-label="Đường dẫn trực tiếp đến API cho tính năng nhóm dịch" title="Đường dẫn trực tiếp đến API cho tính năng nhóm dịch" translate="no">​</a></h3>
<ul>
<li class="">Route <strong>CRUD đầy đủ</strong> cho: credits, volumes, upload-permissions, collab groups.</li>
<li class="">Route <strong>merge manga</strong>: gộp hai manga thành một, chuyển toàn bộ chương và metadata.</li>
<li class="">Thêm <code>collab groups sync/get</code> vào chapter service.</li>
<li class="">Thêm phương thức <code>mergeManga</code> vào manga service.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="giao-diện-cho-tính-năng-nhóm-dịch">Giao diện cho tính năng nhóm dịch<a href="https://docs.hientruyen.online/changelog/v0.7.0#giao-di%E1%BB%87n-cho-t%C3%ADnh-n%C4%83ng-nh%C3%B3m-d%E1%BB%8Bch" class="hash-link" aria-label="Đường dẫn trực tiếp đến Giao diện cho tính năng nhóm dịch" title="Đường dẫn trực tiếp đến Giao diện cho tính năng nhóm dịch" translate="no">​</a></h3>
<ul>
<li class=""><strong>Credit management dialog</strong>: xem và điều chỉnh credit nhóm.</li>
<li class=""><strong>Volume management</strong>: dialog gán/xóa volume cho chương.</li>
<li class=""><strong>Upload permissions</strong>: giao diện cấp/thu hồi quyền upload.</li>
<li class=""><strong>Collab groups</strong>: hiển thị và quản lý nhóm cộng tác trên chương.</li>
<li class=""><strong>Merge manga dialog</strong>: giao diện gộp manga với preview kết quả.</li>
<li class=""><strong>Reader credit display</strong>: hiển thị credit nhóm dịch khi đọc chương.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="khám-phá-truyện">Khám phá truyện<a href="https://docs.hientruyen.online/changelog/v0.7.0#kh%C3%A1m-ph%C3%A1-truy%E1%BB%87n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Khám phá truyện" title="Đường dẫn trực tiếp đến Khám phá truyện" translate="no">​</a></h3>
<ul>
<li class="">Tách trang <strong>Explore</strong> thành hai trang riêng biệt:<!-- -->
<ul>
<li class=""><code>/latest</code> — Manga mới cập nhật</li>
<li class=""><code>/trending</code> — Manga đang thịnh hành</li>
</ul>
</li>
<li class="">Thêm cả hai vào <strong>navbar</strong> của site.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="gợi-ý-quyên-góp-nhóm-dịch">Gợi ý quyên góp nhóm dịch<a href="https://docs.hientruyen.online/changelog/v0.7.0#g%E1%BB%A3i-%C3%BD-quy%C3%AAn-g%C3%B3p-nh%C3%B3m-d%E1%BB%8Bch" class="hash-link" aria-label="Đường dẫn trực tiếp đến Gợi ý quyên góp nhóm dịch" title="Đường dẫn trực tiếp đến Gợi ý quyên góp nhóm dịch" translate="no">​</a></h3>
<ul>
<li class="">Hiển thị <strong>QR code quyên góp</strong> nhóm dịch dạng nổi bật (spotlight card) trên trang nhóm.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="nhận-diện-thương-hiệu">Nhận diện thương hiệu<a href="https://docs.hientruyen.online/changelog/v0.7.0#nh%E1%BA%ADn-di%E1%BB%87n-th%C6%B0%C6%A1ng-hi%E1%BB%87u" class="hash-link" aria-label="Đường dẫn trực tiếp đến Nhận diện thương hiệu" title="Đường dẫn trực tiếp đến Nhận diện thương hiệu" translate="no">​</a></h3>
<ul>
<li class="">Cập nhật icon logo định dạng <strong>PNG</strong> và <strong>ICO</strong> mới.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="yêu-cầu-tham-gia-nhóm">Yêu cầu tham gia nhóm<a href="https://docs.hientruyen.online/changelog/v0.7.0#y%C3%AAu-c%E1%BA%A7u-tham-gia-nh%C3%B3m" class="hash-link" aria-label="Đường dẫn trực tiếp đến Yêu cầu tham gia nhóm" title="Đường dẫn trực tiếp đến Yêu cầu tham gia nhóm" translate="no">​</a></h3>
<ul>
<li class="">Thêm spec và kế hoạch triển khai tính năng <strong>yêu cầu tham gia nhóm</strong> đang tuyển thành viên.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="thay-đổi-hạ-tầng">Thay đổi hạ tầng<a href="https://docs.hientruyen.online/changelog/v0.7.0#thay-%C4%91%E1%BB%95i-h%E1%BA%A1-t%E1%BA%A7ng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Thay đổi hạ tầng" title="Đường dẫn trực tiếp đến Thay đổi hạ tầng" translate="no">​</a></h2>
<ul>
<li class=""><strong>Runtime env vars</strong>: chuyển <code>SITE_NAME</code> và <code>SITE_URL</code> từ build-time <code>NEXT_PUBLIC_*</code> sang runtime environment variables, không còn cần rebuild khi đổi tên miền.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="sửa-lỗi">Sửa lỗi<a href="https://docs.hientruyen.online/changelog/v0.7.0#s%E1%BB%ADa-l%E1%BB%97i" class="hash-link" aria-label="Đường dẫn trực tiếp đến Sửa lỗi" title="Đường dẫn trực tiếp đến Sửa lỗi" translate="no">​</a></h2>
<ul>
<li class="">Xóa phần quản lý donations khỏi admin dashboard (đã deprecated).</li>
<li class="">Backfill group slug qua Next.js instrumentation hook (<code>onRequestError</code>).</li>
<li class="">Fix foreign key <code>MangaUploadPermission</code> sang <code>CASCADE on delete</code>.</li>
<li class="">Loại bỏ biến <code>ctx</code> thừa trong route upload-permissions.</li>
<li class="">Refactor manga API routes: hợp nhất các endpoint <code>follow</code>, <code>chapters</code>, <code>tag suggestions</code>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.7.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Hash</th><th>Mô tả</th></tr></thead><tbody><tr><td><code>54c7457</code></td><td>feat: group features — credits, volumes, upload permissions, collab chapters, merge manga</td></tr><tr><td><code>9b38321</code></td><td>feat(ui): add credit management, volumes, upload permissions, collab groups, merge dialog</td></tr><tr><td><code>45c7309</code></td><td>feat(api): add credits, volumes, upload-permissions, and merge API routes</td></tr><tr><td><code>554df74</code></td><td>feat(services): add collab groups sync/get to chapter service and merge manga method</td></tr><tr><td><code>4d7901d</code></td><td>feat(services): add group-credit, manga-credit, manga-volume, upload-permission services</td></tr><tr><td><code>7c8617a</code></td><td>feat(repos): add group-credit, manga-volume, upload-permission, collab-group repositories</td></tr><tr><td><code>7491a00</code></td><td>feat(schema): add group credits, volumes, upload permissions, collab chapters</td></tr><tr><td><code>4039072</code></td><td>feat: split explore into latest and trending pages</td></tr><tr><td><code>d688ba3</code></td><td>feat: surface latest and trending in site navbar</td></tr><tr><td><code>5b7e2b5</code></td><td>feat: spotlight group donation QR cards</td></tr><tr><td><code>dc9fc03</code></td><td>feat(admin): remove admin donations management section</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="group" term="group"/>
        <category label="explore" term="explore"/>
        <category label="schema" term="schema"/>
        <category label="routing" term="routing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.8.0 — Credit nhóm dịch, quản lý tập và hẹn giờ xuất bản]]></title>
        <id>https://docs.hientruyen.online/changelog/v0.8.0</id>
        <link href="https://docs.hientruyen.online/changelog/v0.8.0"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thời gian: 2026-04-09 → 2026-04-11]]></summary>
        <content type="html"><![CDATA[<p><strong>Thời gian:</strong> 2026-04-09 → 2026-04-11</p>
<p>Phiên bản này hoàn thiện hơn cho nhóm dịch và quản lý chương: credit, tập, lịch xuất bản và thông tin nội dung.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="tính-năng-mới">Tính năng mới<a href="https://docs.hientruyen.online/changelog/v0.8.0#t%C3%ADnh-n%C4%83ng-m%E1%BB%9Bi" class="hash-link" aria-label="Đường dẫn trực tiếp đến Tính năng mới" title="Đường dẫn trực tiếp đến Tính năng mới" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="credit-nhóm-dịch--quyên-góp">Credit nhóm dịch &amp; quyên góp<a href="https://docs.hientruyen.online/changelog/v0.8.0#credit-nh%C3%B3m-d%E1%BB%8Bch--quy%C3%AAn-g%C3%B3p" class="hash-link" aria-label="Đường dẫn trực tiếp đến Credit nhóm dịch &amp; quyên góp" title="Đường dẫn trực tiếp đến Credit nhóm dịch &amp; quyên góp" translate="no">​</a></h3>
<ul>
<li class="">Thêm hệ thống <strong>credit</strong> cho nhóm dịch: mỗi nhóm có credit riêng, quy tắc nhận/trả credit khi đăng chương.</li>
<li class="">Thêm <strong>quy tắc quyên góp</strong> (<code>donate rules</code>) để nhóm cấu hình điều kiện nhận donation.</li>
<li class="">Hiển thị <strong>credit reader</strong> trực tiếp trên trang đọc manga.</li>
<li class="">Thêm <strong>migration</strong> cho layer credit donate.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="quản-lý-tập">Quản lý tập<a href="https://docs.hientruyen.online/changelog/v0.8.0#qu%E1%BA%A3n-l%C3%BD-t%E1%BA%ADp" class="hash-link" aria-label="Đường dẫn trực tiếp đến Quản lý tập" title="Đường dẫn trực tiếp đến Quản lý tập" translate="no">​</a></h3>
<ul>
<li class="">Thêm dialog <strong>gán tập hàng loạt</strong> (batch volume assignment) từ trang nhóm và trang admin.</li>
<li class="">Tích hợp thông tin volume vào luồng <strong>bulk import</strong>, cho phép gán volume khi import ZIP.</li>
<li class="">Thêm <code>batchUpdateVolume</code> và <code>updateChapterOptions</code> vào service và server actions.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="chương-one-shot--lên-lịch-xuất-bản">Chương one-shot &amp; lên lịch xuất bản<a href="https://docs.hientruyen.online/changelog/v0.8.0#ch%C6%B0%C6%A1ng-one-shot--l%C3%AAn-l%E1%BB%8Bch-xu%E1%BA%A5t-b%E1%BA%A3n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Chương one-shot &amp; lên lịch xuất bản" title="Đường dẫn trực tiếp đến Chương one-shot &amp; lên lịch xuất bản" translate="no">​</a></h3>
<ul>
<li class="">Toggle <strong>oneshot</strong> trong form chương: chương oneshot không có số tập/chương.</li>
<li class="">Bộ chọn thời gian (<code>DateTimePicker</code>) trong form chương để đặt <strong>lịch xuất bản</strong>.</li>
<li class=""><strong>Worker tự động xuất bản</strong> (<code>auto-publish worker</code>): quét và publish chương đã đến giờ theo lịch.</li>
<li class="">Wire <code>is_oneshot</code> và <code>scheduled_at</code> xuyên suốt: Prisma schema → service → actions → UI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="phân-loại-nội-dung">Phân loại nội dung<a href="https://docs.hientruyen.online/changelog/v0.8.0#ph%C3%A2n-lo%E1%BA%A1i-n%E1%BB%99i-dung" class="hash-link" aria-label="Đường dẫn trực tiếp đến Phân loại nội dung" title="Đường dẫn trực tiếp đến Phân loại nội dung" translate="no">​</a></h3>
<ul>
<li class="">Thêm bộ chọn <strong>ContentRating</strong> vào form tạo và chỉnh sửa manga.</li>
<li class="">Trường <code>content_rating</code> được chấp nhận trong <code>createManga</code> và <code>updateManga</code>.</li>
<li class="">Wire đầy đủ qua service layer và server actions.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="hiển-thị-tiêu-đề-chương-thông-minh">Hiển thị tiêu đề chương thông minh<a href="https://docs.hientruyen.online/changelog/v0.8.0#hi%E1%BB%83n-th%E1%BB%8B-ti%C3%AAu-%C4%91%E1%BB%81-ch%C6%B0%C6%A1ng-th%C3%B4ng-minh" class="hash-link" aria-label="Đường dẫn trực tiếp đến Hiển thị tiêu đề chương thông minh" title="Đường dẫn trực tiếp đến Hiển thị tiêu đề chương thông minh" translate="no">​</a></h3>
<ul>
<li class="">Thêm tiện ích <code>getChapterDisplayTitle</code> xác định tên hiển thị nhất quán theo quy tắc:<!-- -->
<ul>
<li class="">Oneshot → hiển thị "Oneshot"</li>
<li class="">Có tiêu đề tùy chỉnh → dùng tiêu đề đó</li>
<li class="">Còn lại → format <code>Ch. {number}</code></li>
</ul>
</li>
<li class="">Áp dụng cho danh sách chương công khai và trang chi tiết manga.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="quản-trị-nâng-cao">Quản trị nâng cao<a href="https://docs.hientruyen.online/changelog/v0.8.0#qu%E1%BA%A3n-tr%E1%BB%8B-n%C3%A2ng-cao" class="hash-link" aria-label="Đường dẫn trực tiếp đến Quản trị nâng cao" title="Đường dẫn trực tiếp đến Quản trị nâng cao" translate="no">​</a></h3>
<ul>
<li class="">Tinh chỉnh <strong>admin dashboard</strong>: luồng quản lý truy cập chương rõ ràng hơn.</li>
<li class="">Thêm migration credit donate vào pipeline.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="đường-dẫn-thân-thiện">Đường dẫn thân thiện<a href="https://docs.hientruyen.online/changelog/v0.8.0#%C4%91%C6%B0%E1%BB%9Dng-d%E1%BA%ABn-th%C3%A2n-thi%E1%BB%87n" class="hash-link" aria-label="Đường dẫn trực tiếp đến Đường dẫn thân thiện" title="Đường dẫn trực tiếp đến Đường dẫn thân thiện" translate="no">​</a></h3>
<ul>
<li class="">Chuyển toàn bộ luồng manga sang đường dẫn dựa theo <strong>slug</strong> thay vì ID.</li>
<li class="">Cập nhật links và <code>revalidatePath</code> calls tương ứng.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_x5pS" id="giao-diện-và-điều-hướng">Giao diện và điều hướng<a href="https://docs.hientruyen.online/changelog/v0.8.0#giao-di%E1%BB%87n-v%C3%A0-%C4%91i%E1%BB%81u-h%C6%B0%E1%BB%9Bng" class="hash-link" aria-label="Đường dẫn trực tiếp đến Giao diện và điều hướng" title="Đường dẫn trực tiếp đến Giao diện và điều hướng" translate="no">​</a></h3>
<ul>
<li class="">Cải thiện auth flow, navigation, và các UI component dùng chung.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="cải-tiến">Cải tiến<a href="https://docs.hientruyen.online/changelog/v0.8.0#c%E1%BA%A3i-ti%E1%BA%BFn" class="hash-link" aria-label="Đường dẫn trực tiếp đến Cải tiến" title="Đường dẫn trực tiếp đến Cải tiến" translate="no">​</a></h2>
<ul>
<li class=""><strong>Form manga</strong>: validation ảnh bìa tỷ lệ <strong>3:4</strong> và giới hạn <strong>7MB</strong>.</li>
<li class=""><strong>WASM</strong>: cập nhật artifacts zip parser và tài liệu đi kèm.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_x5pS" id="commits-nổi-bật">Commits nổi bật<a href="https://docs.hientruyen.online/changelog/v0.8.0#commits-n%E1%BB%95i-b%E1%BA%ADt" class="hash-link" aria-label="Đường dẫn trực tiếp đến Commits nổi bật" title="Đường dẫn trực tiếp đến Commits nổi bật" translate="no">​</a></h2>
<table><thead><tr><th>Hash</th><th>Mô tả</th></tr></thead><tbody><tr><td><code>7278c60</code></td><td>chore(wasm): refresh zip parser artifacts and docs</td></tr><tr><td><code>0422d0c</code></td><td>feat(admin): refine dashboards and chapter access workflows</td></tr><tr><td><code>2c02684</code></td><td>fix(group-credit): add credit donate layer migration</td></tr><tr><td><code>9dc62ef</code></td><td>feat(shell): polish auth, navigation, and shared UI</td></tr><tr><td><code>1e494fb</code></td><td>feat(manga): improve manga forms, cards, and metadata surfaces</td></tr><tr><td><code>cc45541</code></td><td>feat(group-credit): add donate rules and reader credit assets</td></tr><tr><td><code>b2e50df</code></td><td>refactor(routes): switch manga flows to slug-based paths</td></tr><tr><td><code>cfe1e51</code></td><td>feat(volume): add volume-aware bulk import and chapter metadata</td></tr><tr><td><code>11ea1ee</code></td><td>feat(scheduled): add auto-publish worker for scheduled chapters</td></tr><tr><td><code>747dee5</code></td><td>feat(chapter-settings): add oneshot toggle and scheduled publish controls</td></tr><tr><td><code>470ba6f</code></td><td>feat(volume): add batch volume assignment dialog to group + admin pages</td></tr><tr><td><code>dee64a4</code></td><td>feat(manga): add ContentRating to edit form + wire through all actions</td></tr><tr><td><code>2688b82</code></td><td>feat(chapter): add getChapterDisplayTitle utility for naming rules</td></tr><tr><td><code>1bd7594</code></td><td>prisma: add is_oneshot and scheduled_at to Chapter model</td></tr></tbody></table>]]></content>
        <category label="release" term="release"/>
        <category label="group" term="group"/>
        <category label="admin" term="admin"/>
        <category label="chapter" term="chapter"/>
        <category label="manga" term="manga"/>
    </entry>
</feed>