<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Hướng dẫn chi tiết cấu trúc dự án Claude Code Project |  Hoclaptrinh99.com</title>
<meta name="description" content="Hướng dẫn chi tiết cấu trúc dự án Claude Code Project - Savefile - Blog -...">
<meta name="keywords" content="blog lập trình">
<meta name="news_keywords" content="blog lập trình">
<meta name="author" content="Học Lập Trình 99">
<meta name="copyright" content="Học Lập Trình 99 [hoclaptrinh99@gmail.com]">
<meta name="generator" content="NukeViet v5.0">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="google-site-verification" content="BSwsW_B32JEmlT2cuZD1IQZqLeh5J64CB7lFDySkFVY">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Hướng dẫn chi tiết cấu trúc dự án Claude Code Project">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Blog - https&#x3A;&#x002F;&#x002F;hoclaptrinh99.com&#x002F;blog&#x002F;savefile&#x002F;khac&#x002F;huong-dan-chi-tiet-cau-truc-du-an-claude-code-project-24.html">
<meta property="og:site_name" content="Học Lập Trình 99">
<meta property="og:image" content="https://hoclaptrinh99.com/uploads/opengrap.png">
<meta property="og:image:url" content="https://hoclaptrinh99.com/uploads/opengrap.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1058">
<meta property="og:image:height" content="887">
<meta property="og:image:alt" content="Học Lập Trình 99">
<meta property="og:url" content="https://hoclaptrinh99.com/blog/savefile/khac/huong-dan-chi-tiet-cau-truc-du-an-claude-code-project-24.html">
<link rel="shortcut icon" href="https://hoclaptrinh99.com/uploads/500058390_729034789638068_2489363526938716286_n.jpg">
<link rel="canonical" href="https://hoclaptrinh99.com/blog/savefile/khac/huong-dan-chi-tiet-cau-truc-du-an-claude-code-project-24.html">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/" title="Blog" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/nukeviet/" title="Blog - NUKEVIET" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/php-mysql/" title="Blog - PHP MYSQL" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/html-css-js/" title="Blog - HTML CSS JS" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/python/" title="Blog - PYTHON" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/linux/" title="Blog - LINUX" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/khac/" title="Blog - KHÁC" type="application/rss+xml">
<link rel="search" type="application/opensearchdescription+xml" href="https://hoclaptrinh99.com/seek/opensearch/blog/" title="Blog">
<link rel="preload" as="font" href="/assets/fonts/fontawesome-webfont.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="font" href="/themes/default/fonts/NukeVietIcons.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="image" href="/themes/ts_sharecode/images/header.png" type="image/png">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/sweetalert.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/tienganh.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/php-email-form/validate.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/js/bootstrap.bundle.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/waypoints/jquery.waypoints.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/counterup/counterup.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/jquery.easing/jquery.easing.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/owl.carousel.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/select2/select2.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/bootstrap.min.js" type="text/javascript">
<link rel="preload" as="style" href="/assets/css/core.r.min.css?t=1764339859" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/bootstrap.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.responsive.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css_custom/sweetalert.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/animate.css/animate.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/assets/owl.carousel.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/remixicon/remixicon.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/boxicons/css/boxicons.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/icofont/icofont.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/assets/js/select2/select2.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/custom.css" type="text/css">
<link rel="stylesheet" href="/assets/css/core.r.min.css?t=1764339859">
<link rel="stylesheet" href="https://hoclaptrinh99.com/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/bootstrap.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.responsive.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css_custom/sweetalert.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/css/style.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/animate.css/animate.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/assets/owl.carousel.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/remixicon/remixicon.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/boxicons/css/boxicons.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/icofont/icofont.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/assets/js/select2/select2.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.css">
<link rel="StyleSheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/custom.css">
<style type="text/css">
    body{background: #fff;}
</style>
    </head>
    <body>
<div class="container-fluid"style="background-color:#fff;">
<div id="print">
    <div id="hd_print">
        <h2 class="pull-left">Học Lập Trình 99</h2>
        <p class="pull-right"><a title="Học Lập Trình 99" href="https://hoclaptrinh99.com/">https://hoclaptrinh99.com</a></p>
    </div>
    <div class="clear"></div>
    <hr />
    <div id="content">
        <h1>Hướng dẫn chi tiết cấu trúc dự án Claude Code Project</h1>
        <ul class="list-inline">
            <li>Thứ bảy, 07 Tháng Ba 2026 2:48 SA</li>
            <li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="https://hoclaptrinh99.com/#" data-toggle="winCMD" data-cmd="print">In ra</a></li>
            <li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="https://hoclaptrinh99.com/#"  data-toggle="winCMD" data-cmd="close">Đóng cửa sổ này</a></li>
        </ul>
        <div class="clear"></div>
        <div id="hometext">
        </div>
        <div id="bodytext" class="clearfix">
            <figure class="image"><img style="aspect-ratio:1066/1014;" src="https://hoclaptrinh99.com/uploads/blog/2026_03/644672288_1270027015087281_1949076404658511777_n_1.jpg" width="1066" height="1014" /></figure><p><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Hướng dẫn chi tiết cấu trúc dự án Claude Code Project</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">1. Mục đích</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Cấu trúc kho lưu trữ claude_code_project được thiết kế dành riêng cho việc phát triển phần mềm khi sử dụng Claude (Anthropic) làm trợ lý lập trình chính.</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Mục tiêu chính:</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Giữ ngữ cảnh (context) cho Claude luôn sạch sẽ, tập trung và có cấu trúc</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Tạo kho lưu trữ các kỹ năng (skills) có thể tái sử dụng nhiều lần</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Tự động hóa các bước kiểm tra chất lượng, review code, refactor, release…</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Dễ dàng tài liệu hóa các quyết định kiến trúc (Architectural Decision Records – ADR)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Phù hợp với quy trình phát triển dài hạn, nhiều người hoặc solo developer sử dụng AI hỗ trợ</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2. Mô tả thành phần quan trọng</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2.1. CLAUDE.md (tệp quan trọng nhất)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Đây là tệp ngữ cảnh chính mà bạn sẽ copy-paste hoặc attach cho Claude ở mỗi phiên làm việc dài.</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Nội dung thường bao gồm:</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Vai trò của Claude trong dự án (ví dụ: “Bạn là kiến trúc sư kiêm senior developer full-stack…”)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Quy tắc viết code (naming, folder structure, commit message…)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Công nghệ stack đang dùng</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Các quyết định kiến trúc đã được thống nhất</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Link đến các SKILL.md cần dùng thường xuyên</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Các ràng buộc quan trọng (không dùng package X, phải tuân thủ Y…)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Nguyên tắc: Giữ CLAUDE.md dưới 4000–6000 token. Nếu dài hơn → tách thành nhiều CLAUDE.md theo module và tham chiếu.</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2.2. Thư mục .claude/skills/</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Mỗi thư mục con đại diện cho một kỹ năng tái sử dụng.</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Ví dụ nội dung file skills/code-review/SKILL.md:</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);"># Kỹ năng: Code Review Chuyên sâu</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Vai trò khi kích hoạt</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Bạn là một senior code reviewer có 15 năm kinh nghiệm, cực kỳ khắt khe về clean code, performance, security và maintainability.</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Quy trình review bắt buộc</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">1. Tổng quan thiết kế</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2. Đánh giá tên biến/hàm/class theo Clean Code</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">3. Kiểm tra SOLID, DRY, YAGNI</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">4. Security checklist (OWASP Top 10 nếu liên quan)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">5. Performance &amp; Big-O</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">6. Đề xuất cải thiện cụ thể (code snippet nếu cần)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">7. Điểm số chất lượng (1–10) và lý do</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Câu lệnh kích hoạt phổ biến</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">&quot;review&quot;, &quot;cr&quot;, &quot;code review file X&quot;, &quot;đánh giá đoạn code sau&quot;</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Các kỹ năng khác tương tự: refactor, write-test, naming-suggestion, commit-message-generator…</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2.3. Thư mục .claude/hooks/</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Dùng để tự động hóa kiểm tra chất lượng (nếu bạn dùng extension / wrapper Claude).</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Ví dụ:</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">pre-answer hook: kiểm tra xem câu trả lời có vi phạm quy tắc đặt tên không</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">post-answer hook: tự động chạy code linter nếu Claude sinh code</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Hiện tại chủ yếu dùng thủ công hoặc tích hợp với các công cụ bên thứ ba.</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2.4. docs/decisions/</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Sử dụng định dạng ADR (Architectural Decision Records).</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Ví dụ: 0001-use-htmx-instead-of-react.md</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);"># 0001 – Sử dụng HTMX thay vì React cho frontend</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Trạng thái: Đã chấp nhận</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Bối cảnh</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">- Muốn giữ codebase đơn giản, ít JavaScript</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">- Team nhỏ, ưu tiên tốc độ phát triển</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Quyết định</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Sử dụng HTMX + Go templating thay vì SPA React/Vue.</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">## Hậu quả</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">- Giảm bundle size đáng kể</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">- Tăng tốc độ phát triển giao diện</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">- Khó mở rộng thành ứng dụng mobile native sau này</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">2.5. src/{module}/CLAUDE.md</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Khi dự án lớn, mỗi module lớn nên có CLAUDE.md riêng để giữ ngữ cảnh cục bộ.</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">Ví dụ: src/api/CLAUDE.md chỉ chứa thông tin về REST/GraphQL convention, auth middleware, error handling của module api.</span><br /><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">3. Quy trình làm việc đề xuất (Best Practices)</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Mở phiên làm việc mới → copy nội dung CLAUDE.md chính</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Khi cần kỹ năng cụ thể → copy thêm nội dung SKILL.md tương ứng</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Khi Claude sinh code → dán vào file thật → commit</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Trước khi merge → chạy kỹ năng “code-review”</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Trước khi release → chạy kỹ năng “release”</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Mỗi khi quyết định kiến trúc quan trọng → tạo ADR mới trong docs/decisions/</span><br /><span style="background-color:rgb(255,255,255);color:rgb(8,8,9);">. Định kỳ (1–2 tuần) cập nhật lại CLAUDE.md chính cho gọn gàng</span></p>
        </div>
                <div id="author">
                        <p>
                <strong>Tác giả:</strong>
                <a href="https://hoclaptrinh99.com/blog/author/Nguyen-Lam/">Nguyễn Lâm</a>
            </p>
        </div>
    </div>
    <div id="footer" class="clearfix">
        <div id="url">
            <strong>URL của bản tin này: </strong><a href="https://hoclaptrinh99.com/blog/savefile/khac/huong-dan-chi-tiet-cau-truc-du-an-claude-code-project-24.html" title="Hướng dẫn chi tiết cấu trúc dự án Claude Code Project">https://hoclaptrinh99.com/blog/savefile/khac/huong-dan-chi-tiet-cau-truc-du-an-claude-code-project-24.html</a>
        </div>
        <div class="clear"></div>
        <div class="copyright">
            &copy; Học Lập Trình 99
        </div>
        <div id="contact">
            <a href="mailto:hoclaptrinh99@gmail.com">hoclaptrinh99@gmail.com</a>
        </div>
    </div>
</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng site, <a data-toggle="timeoutsesscancel" href="https://hoclaptrinh99.com/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://hoclaptrinh99.com/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_assets_dir="assets",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="blog",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=1,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",nv_turnstile_sitekey="",XSSsanitize=1,nv_jsdate_get="dd-mm-yyyy",nv_jsdate_post="dd/mm/yyyy",nv_gfx_width="150",nv_gfx_height="40",nv_gfx_num="6";</script>
<script src="https://hoclaptrinh99.com/assets/js/language/vi.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/DOMPurify/purify3.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/global.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/site.js"></script>
<script src="https://hoclaptrinh99.com/themes/default/js/news.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/main.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/sweetalert.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/tienganh.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/php-email-form/validate.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/waypoints/jquery.waypoints.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/counterup/counterup.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/jquery.easing/jquery.easing.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/owl.carousel.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/js/main.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/select2/select2.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/custom.js"></script>
<script>        // Debug AOS
        console.log("Checking AOS...");
        function initAOS() {
            if (typeof AOS !== "undefined") {
                console.log("AOS found, initializing...");
                AOS.init({
                    duration: 1000,
                    easing: "ease-in-out",
                    once: false,
                    mirror: true,
                    offset: 50,
                    delay: 0
                });
                console.log("AOS initialized successfully");
            } else {
                console.error("AOS library not found!");
            }
        }
        if (document.readyState === "loading") {
            document.addEventListener("DOMContentLoaded", initAOS);
        } else {
            initAOS();
        }</script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/bootstrap.min.js"></script>
<script>
        $(function() {
            // Check wallet transaction status - chỉ hiển thị 1 lần
            $.ajax({
                url: '/index.php?language=vi&nv=wallet&op=check_transaction',
                type: 'POST',
                dataType: 'json',
                success: function(response) {
                    if (response.status === 'success' && response.transaction_info) {
                        swal({
                            title: "Thông báo",
                            text: response.transaction_info,
                            type: "success"
                        });
                    }
                },
                error: function() {
                    console.log('Error checking wallet transaction');
                }
            });
        });
        </script>
</body>
</html>