<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title><![CDATA[Khanh Nguyen Blog · Engineering & Insights]]></title>
        <link>https://blog.ndknguyen.io.vn</link>
        <description><![CDATA[Blog công nghệ cá nhân của Nguyễn Đình Khánh Nguyên - Chia sẻ chuyên sâu về Next.js 16, React 19, TypeScript, kiến trúc đám mây Cloud Firestore và giải pháp AI Pair Programming.]]></description>
        <language>vi</language>
        <lastBuildDate>Tue, 10 Nov 2026 16:47:54 GMT</lastBuildDate>
        <atom:link href="https://blog.ndknguyen.io.vn/feed.xml" rel="self" type="application/rss+xml"/>
        
        <item>
            <title><![CDATA[Firestore permission-denied: sửa truy vấn trước khi nới security rules]]></title>
            <link>https://blog.ndknguyen.io.vn/firestore-permission-denied-security-rules-query</link>
            <guid isPermaLink="true">https://blog.ndknguyen.io.vn/firestore-permission-denied-security-rules-query</guid>
            <description><![CDATA[Phân biệt lỗi quyền truy cập với lỗi thiếu index trong Firestore, đồng thời thiết kế truy vấn phù hợp với dữ liệu được phép đọc.]]></description>
            <pubDate>Thu, 15 Oct 2026 08:32:28 GMT</pubDate>
            <author>Nguyễn Đình Khánh Nguyên</author>
            <category><![CDATA[Firestore]]></category><category><![CDATA[Security Rules]]></category><category><![CDATA[permission-denied]]></category><category><![CDATA[Firebase]]></category>
        </item>
        <item>
            <title><![CDATA[NEXT_PUBLIC và .env trong Next.js: vì sao deploy vẫn sai cấu hình?]]></title>
            <link>https://blog.ndknguyen.io.vn/next-public-env-nextjs-deploy-sai-cau-hinh</link>
            <guid isPermaLink="true">https://blog.ndknguyen.io.vn/next-public-env-nextjs-deploy-sai-cau-hinh</guid>
            <description><![CDATA[Phân biệt biến môi trường build và runtime, dữ liệu công khai với secret, rồi kiểm tra cấu hình khi đưa ứng dụng Next.js từ local lên deploy.]]></description>
            <pubDate>Thu, 15 Oct 2026 08:32:28 GMT</pubDate>
            <author>Nguyễn Đình Khánh Nguyên</author>
            <category><![CDATA[Next.js]]></category><category><![CDATA[NEXT_PUBLIC]]></category><category><![CDATA[Biến môi trường]]></category><category><![CDATA[Deploy]]></category>
        </item>
        <item>
            <title><![CDATA[SEO Next.js 16: kiểm tra khi Google chưa thấy nội dung trang]]></title>
            <link>https://blog.ndknguyen.io.vn/seo-nextjs-16-google-khong-thay-noi-dung</link>
            <guid isPermaLink="true">https://blog.ndknguyen.io.vn/seo-nextjs-16-google-khong-thay-noi-dung</guid>
            <description><![CDATA[Một quy trình kiểm tra HTML, canonical, robots và nội dung render cho blog hoặc portfolio Next.js trước khi kết luận website gặp lỗi SEO.]]></description>
            <pubDate>Thu, 15 Oct 2026 08:32:28 GMT</pubDate>
            <author>Nguyễn Đình Khánh Nguyên</author>
            <category><![CDATA[Next.js 16]]></category><category><![CDATA[SEO kỹ thuật]]></category><category><![CDATA[Canonical]]></category><category><![CDATA[Server Components]]></category>
        </item>
        <item>
            <title><![CDATA[Upload file trong Next.js: từ bộ nhớ tạm đến lưu trữ bền vững]]></title>
            <link>https://blog.ndknguyen.io.vn/upload-file-nextjs-serverless-luu-tru-ben-vung</link>
            <guid isPermaLink="true">https://blog.ndknguyen.io.vn/upload-file-nextjs-serverless-luu-tru-ben-vung</guid>
            <description><![CDATA[Thiết kế luồng upload có object storage, quyền truy cập và trạng thái hoàn tất; hiểu vì sao lịch sử localStorage không bảo đảm file còn tồn tại.]]></description>
            <pubDate>Thu, 15 Oct 2026 08:32:28 GMT</pubDate>
            <author>Nguyễn Đình Khánh Nguyên</author>
            <category><![CDATA[Next.js]]></category><category><![CDATA[Upload file]]></category><category><![CDATA[Object storage]]></category><category><![CDATA[Serverless]]></category>
        </item>
        <item>
            <title><![CDATA[AI pair programming với Antigravity: quy trình cho dự án Fullstack]]></title>
            <link>https://blog.ndknguyen.io.vn/ky-nguyen-ai-pair-programming-tro-ly-antigravity-co-the-lam-duoc-gi-cho-du-an-cua-ban</link>
            <guid isPermaLink="true">https://blog.ndknguyen.io.vn/ky-nguyen-ai-pair-programming-tro-ly-antigravity-co-the-lam-duoc-gi-cho-du-an-cua-ban</guid>
            <description><![CDATA[Cách chia nhỏ công việc với Antigravity, review thay đổi Next.js và Firestore, kiểm tra hydration và xác nhận kết quả trước khi tích hợp.]]></description>
            <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
            <author>Nguyễn Đình Khánh Nguyên</author>
            <category><![CDATA[AI pair programming]]></category><category><![CDATA[Antigravity]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[React]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[Firestore]]></category><category><![CDATA[Fullstack]]></category>
        </item>
        <item>
            <title><![CDATA[Dịch PDF giữ bố cục: cách dùng và đánh giá PDFMathTranslate]]></title>
            <link>https://blog.ndknguyen.io.vn/cong-cu-dich-pdf-giu-nguyen-cong-thuc-hinh-anh-va-bo-cuc-pdf-translate</link>
            <guid isPermaLink="true">https://blog.ndknguyen.io.vn/cong-cu-dich-pdf-giu-nguyen-cong-thuc-hinh-anh-va-bo-cuc-pdf-translate</guid>
            <description><![CDATA[Tìm hiểu PDFMathTranslate và quy trình dịch thử, đối chiếu công thức, bảng biểu, hình ảnh trước khi dịch toàn bộ tài liệu kỹ thuật.]]></description>
            <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
            <author>Nguyễn Đình Khánh Nguyên</author>
            <category><![CDATA[PDFMathTranslate]]></category><category><![CDATA[Dịch PDF]]></category><category><![CDATA[Tài liệu kỹ thuật]]></category><category><![CDATA[Bố cục PDF]]></category><category><![CDATA[Công cụ lập trình]]></category>
        </item>
    </channel>
</rss>