# Beru > Full-stack developer based in Ho Chi Minh City, crafting performant web applications with Vue, React, and Next.js. Currently building AI-powered products at EasyAI. Every URL below has a markdown version: prefix its path with `/md`, for example https://beru.io.vn/md/blog/some-post. To read the whole site in one request, fetch [https://beru.io.vn/llms-full.txt](https://beru.io.vn/llms-full.txt). ## About - [About Nguyen Hoang Loc (Beru)](https://beru.io.vn/about): Nguyen Hoang Loc (Beru), full-stack developer at Easy AI in Ho Chi Minh City, writing first-hand notes on Claude Code, Next.js, AI crawlers and self-hosting. ## Services - [Frontend Development](https://beru.io.vn/services/frontend-development): Building responsive, performant web interfaces with modern frameworks. From single-page apps to server-rendered sites, I craft pixel-perfect UIs that deliver smooth user experiences across all devices. - [Fullstack Development](https://beru.io.vn/services/fullstack-development): End-to-end application development from database design to API architecture. Experienced with Laravel + Inertia.js stack for building robust, scalable web applications with seamless frontend-backend integration. - [AI Product Development](https://beru.io.vn/services/ai-product-development): Currently building AI-powered products at EasyAI. Experienced in integrating large language models, designing chatbot architectures, and creating intelligent user interfaces that make AI accessible. - [DevOps & Server Management](https://beru.io.vn/services/devops-server-management): Managing server infrastructure, setting up deployment pipelines, and ensuring application reliability. From VPS configuration to automated deployments, I handle the full operational stack. ## Projects - [Crypto Tracker](https://beru.io.vn/projects/crypto-tracker): Cryptocurrency price tracker built with Vue 3, TypeScript and Tailwind CSS. Live market data via API, with Firebase and Vuex for state management. - [Music Streaming App](https://beru.io.vn/projects/music-streaming-app): Music player web app built with React, TypeScript and Vite. Browse and play tracks through a clean, responsive Tailwind UI. - [Viet Bookstore](https://beru.io.vn/projects/book-store): Online store for Vietnamese books & manga (US) with collections, search and pre-order via Zalo. Responsive e-commerce storefront. - [Weather App](https://beru.io.vn/projects/weather-app): Weather forecast app built with React, TypeScript and Vite. Location-based, real-time weather data fetched from a public API. - [Landing Page V1](https://beru.io.vn/projects/landing-page-v1): Marketing landing page built with Vue 3, Pinia and Sass. Responsive layout with smooth, hand-crafted animations. - [Vue SVG Sparkline](https://beru.io.vn/projects/vue-svg-sparkline): Open-source Vue component for rendering lightweight sparkline charts with pure SVG. Published for reuse across projects. - [Easy AI Platform](https://beru.io.vn/projects/easy-ai-platform): AI-native customer engagement platform for Vietnamese e-commerce — omnichannel chatbot, livechat, customer data platform (CDP) and marketing automation across web, Zalo and social channels. Built large parts of the Laravel backend (payments, real-time messaging and AI conversation workflows) plus the embeddable Vue chat widget. Runs in production at scale, handling tens of thousands of AI-assisted conversations per day for major retail brands. - [Minh Gia Phat](https://beru.io.vn/projects/minh-gia-phat): Corporate and catalog website for Minh Gia Phat, a Vietnamese education and books company. Built the Nuxt 3 frontend on a headless CMS so the team can manage products, news and landing pages without a developer. Focused on fast, SEO-friendly server-rendered pages and a clean, responsive layout. - [DJI Enterprise Vietnam](https://beru.io.vn/projects/dji-enterprise-vietnam): Official e-commerce site for DJI Enterprise Vietnam, the commercial-drone division of DJI. Built a Nuxt 3 storefront with product catalog, industry solution pages and a B2B quote/inquiry flow. A headless backend keeps the large product range and technical specs easy to maintain. - [Benocode](https://beru.io.vn/projects/benocode): Marketing website for Benocode, an AI and software development partner for Vietnamese businesses. Built the Nuxt 3 frontend backed by a headless CMS, covering service pages, case studies and a blog. Engineered for performance and SEO with a polished, modern UI. - [The WY Group](https://beru.io.vn/projects/the-wy-group): Corporate website for Thewy Group, presenting their business-operations and consulting solutions. Built with Nuxt 3 and Tailwind, with a headless CMS driving the services, news and recruitment sections. Clean, content-driven design optimised for credibility and lead generation. - [Rang Dong Store](https://beru.io.vn/projects/rang-dong-store): E-commerce store for Rang Dong specialised LED lighting, with products tailored to each industry vertical. Built a Nuxt 3 storefront with catalog, search and product detail pages, integrated with the Easy AI chatbot for sales support — contributing to roughly +8% conversion. The headless backend keeps pricing and stock current in real time. - [TTC Land](https://beru.io.vn/projects/ttc-land): Corporate and project-showcase website for real-estate developer TTC Land. Built the Nuxt 3 frontend on a headless CMS to present property projects, company news and investor information. Emphasis on rich imagery, page performance and a trustworthy brand presence. - [Alexander Ferros](https://beru.io.vn/projects/alexander-ferros): Brand and product website for watchmaker Alexander Ferros. Built with Nuxt 3 and Tailwind — collection pages, brand storytelling and a refined, premium visual style. A headless CMS lets the team manage products and seasonal campaigns. - [Real Logistics](https://beru.io.vn/projects/real-logistics): Corporate website for Real Logistics, an import/export and freight-forwarding company. Built with Nuxt 3 and Tailwind, presenting services, global network and contact flows in both Vietnamese and English. Content-managed so the team can update services and news independently. - [Anpha-AG](https://beru.io.vn/projects/anpha-ag): Corporate website for ANPHA-AG, the Konoike cold-chain logistics venture in Vietnam. Built with Nuxt 3 and Tailwind — services, facilities and company information in a bilingual, professional layout. A headless CMS makes content updates straightforward. - [Nexpo](https://beru.io.vn/projects/nexpo): Website and platform front for Nexpo, an exhibition business and operations solution in Vietnam. Built with Nuxt 3 and Tailwind to present their products, services and event offerings. Designed for clarity and lead generation with a modern, content-driven UI. ## Writing - [Doanh nghiệp vừa và nhỏ nên chọn AI hay tự động hóa theo quy tắc?](https://beru.io.vn/blog/doanh-nghiep-vua-va-nho-nen-chon-ai-hay-tu-dong-hoa-theo-quy-tac-34064e4808126405) (vi) - [Khách hỏi ở Facebook, chốt đơn ở Zalo: giữ liền mạch hành trình mua hàng](https://beru.io.vn/blog/khach-hoi-o-facebook-chot-don-o-zalo-giu-lien-mach-hanh-trinh-mua-hang): Cách kết nối hội thoại Facebook, Zalo, website và tổng đài để nhân viên giữ được ngữ cảnh khách hàng, phân công rõ người xử lý và dùng AI đúng giới hạn. (vi) - [AI trực Fanpage ngoài giờ: khi nào trả lời, khi nào chuyển người thật?](https://beru.io.vn/blog/ai-truc-fanpage-ngoai-gio-khi-nao-tra-loi-khi-nao-chuyen-nguoi-that): Cách tổ chức AI trực Facebook ngoài giờ cho shop bán lẻ: phân định câu hỏi AI xử lý, tình huống chuyển nhân viên và các chỉ số vận hành cần theo dõi. (vi) - [AI ra quyết định: TypeSafe giới thiệu System One và Jev](https://beru.io.vn/blog/typesafe-system-one-jev-ai-ra-quyet-dinh): TypeSafe đặt Jev vào lớp System One để trả quyết định có cấu trúc cho phần mềm. Bài viết giải thích API, benchmark và giới hạn trước khi dùng thực tế. (vi) - [Revenue AI OS: Câu chuyện kỹ thuật đằng sau lớp hạ tầng AI doanh thu — góc nhìn từ một developer Easy AI](https://beru.io.vn/blog/revenue-ai-os-cau-chuyen-ky-thuat-tu-mot-developer-easy-ai): Từ một developer tại Easy AI: câu chuyện thật về cách xây dựng Revenue AI OS — lớp hạ tầng AI doanh thu — từ Harness, tri thức doanh nghiệp đến vận hành ở quy mô hơn 10 tỷ tokens/tháng. (vi) - [Luật cầu lông đôi cho người mới: ô giao cầu, xoay vòng và những lỗi hay cãi nhau nhất ở sân phong trào](https://beru.io.vn/blog/luat-cau-long-doi-cho-nguoi-moi-choi-phong-trao): Luật cầu lông đôi đối chiếu trực tiếp với văn bản BWF: sân có hai vùng cầu hợp lệ khác hẳn nhau, ô giao cầu chỉ phụ thuộc điểm chẵn hay lẻ, và ba thói quen phổ biến ở sân phong trào thực ra là luật đã bị bỏ từ năm 2006. (vi) - [OAuth Today, DPoP Tomorrow: What MCP's August Roadmap Means for My Own MCP Server](https://beru.io.vn/blog/oauth-today-dpop-tomorrow-what-mcp-s-august-roadmap-means-for-my-own-mcp-server): On August 22, 2026, MCP's roadmap said agent identity should move past pasted API keys toward DPoP-bound tokens and Workload Identity Federation. I run one of those OAuth-protected MCP servers -- it's the tool that filed this post -- so I traced what already shipped July 28, verified my own robots.txt and API catalog, and worked out what's actually mine to build versus aspirational. (en) - [Two Critical Next.js RCEs Shipped the Same Day: What I Actually Checked Before Patching My Server](https://beru.io.vn/blog/two-critical-next-js-rces-shipped-the-same-day-what-i-actually-checked-before-patching-my-server): On August 25, 2026, Next.js shipped 15.5.24 and 16.3.3 to patch two unrelated critical RCEs at once. I run this blog's CMS as a self-hosted Next 15 app behind nginx, PM2, and Cloudflare, so nobody patched it for me. Here's the exposure check I ran before touching npm install, the actual patch commands, and why "not currently exposed" still wasn't a reason to skip the upgrade. (en) - [WebMCP Is Not MCP: I Tested Chrome's New Agent-Tool API With Google's Own Polyfill](https://beru.io.vn/blog/webmcp-is-not-mcp-i-tested-chrome-s-new-agent-tool-api-with-google-s-own-polyfill): WebMCP isn't MCP. It's a separate, browser-native standard for exposing page-level tools to AI agents, now backed by a Chrome origin trial and this week's OpenAI-run hackathon. I tested the real API with Google's own polyfill against a Kiwi-style form: the declarative form API, the imperative registerTool API, real generated JSON Schema, real tool calls, and why WebMCP's trust model differs sharply from a backend MCP server. (en) - [Claude Code Shipped --restricted Mode. Here's What It Actually Locks Down on My CMS Repo](https://beru.io.vn/blog/claude-code-shipped-restricted-mode-here-s-what-it-actually-locks-down-on-my-cms-repo): Claude Code's new --restricted flag (v2.1.248, Aug 27 2026) strips a coding agent to file-scoped tools, ignores settings files, and refuses bypassPermissions outright. I checked the mechanics against the docs, tested it against a scratch repo shaped like this blog's self-hosted Next.js + Prisma CMS, hit an auto-mode classifier block nesting a session, and worked out what it fixes versus dontAsk mode and the OAuth-scoped MCP server that already gates this blog's submission pipeline. (en) - [Claude Code Shipped Model-Switch Hooks. Here's What They Actually Send When You Block One](https://beru.io.vn/blog/claude-code-shipped-model-switch-hooks-here-s-what-they-actually-send-when-you-block-one): Claude Code 2.1.251 shipped PreModelSwitch and PostModelSwitch hook events on August 28, 2026. I wired both into a real settings.json, ran them against a live session in the sandbox that files this blog's drafts, blocked a mid-session model switch, and confirmed it stuck -- then compared the real hook payload against Anthropic's own docs. (en) - [GPTBot Says It's GPTBot. I Stopped Taking Its Word for It](https://beru.io.vn/blog/gptbot-says-it-s-gptbot-i-stopped-taking-its-word-for-it): Every AI-crawler User-Agent string is just a claim anyone can send. I fetched the real IP allowlists OpenAI, Anthropic, and Perplexity publish for GPTBot, ClaudeBot, and PerplexityBot, found out how differently the three actually maintain them, and added verified/unverified crawler logging to this blog's own Next.js + Prisma CMS instead of trusting the header. (en) - [Prisma Shipped an Agent-Native CLI With Compute GA. I Ran It Against My Blog's Own Schema](https://beru.io.vn/blog/prisma-shipped-an-agent-native-cli-with-compute-ga-i-ran-it-against-my-blog-s-own-schema): Prisma Compute went GA on August 28, 2026, quietly bundled with a Prisma 8 CLI that drops schema.prisma for a signed "contract" model and auto-syncs Claude/Cursor/Devin skill files on install. I ran it end-to-end against a schema modeled on this blog's own Post fields, found prisma@latest is still an 8.0.0-rc.12 release candidate despite the GA changelog, and mapped exactly what would break if beru.io.vn's self-hosted Next.js + Prisma CMS moved onto it. (en) - [Claude Code 2.1.257 đưa Fable 5.1 lên làm mặc định — sandbox nộp bài này lại đang ôm một bản Claude Code từ tháng 2](https://beru.io.vn/blog/claude-code-2-1-257-dua-fable-5-1-len-lam-mac-dinh-sandbox-om-ban-cu-tu-thang-2): Ngày 1/9/2026, Claude Code 2.1.257 đặt Fable 5.1 (1M context, $10/$50 mỗi triệu token) làm model mặc định. Tôi kiểm claude --version ngay trên sandbox nộp bài viết này, lần theo symlink, và phát hiện một bản Claude Code npm khác nằm im từ tháng 2, lệch hơn 200 version — cùng vài ví dụ trong docs chính thức của Anthropic đã lạc hậu so với chính model nó vừa ra mắt. (vi) - [Web Bot Auth: IETF vừa chuẩn hoá xác thực bot bằng chữ ký số, tôi tự ký một request thử trên beru.io.vn](https://beru.io.vn/blog/web-bot-auth-ietf-vua-chuan-hoa-xac-thuc-bot-bang-chu-ky-so-toi-tu-ky-mot-request-thu-tren-beru-io-v): Ngày 1/9/2026, IETF xuất bản draft-ietf-webbotauth-httpsig-protocol-00 — chuẩn hoá Web Bot Auth, xác thực bot bằng chữ ký số Ed25519 thay cho IP allowlist và User-Agent dễ giả. Tôi trích spec, tự dựng một request ký đúng công thức RFC 9421 bằng Node.js, verify ra true, rồi đem well-known path mà spec yêu cầu ra test trên beru.io.vn — kết quả 404 — và phát hiện hai nguồn (Cloudflare 2025, IETF 2026) viết well-known path lệch nhau một chữ. (vi) - [Chặn AI train dữ liệu website: AIPREF của IETF đề xuất Content-Usage, tôi bắt được bẫy cú pháp y/n trên robots.txt của beru.io.vn](https://beru.io.vn/blog/chan-ai-train-du-lieu-website-ietf-ra-chuan-content-usage-toi-bat-duoc-bay-cu-phap-y-n-ngay-tren-rob): IETF vừa cập nhật hai draft AIPREF ngày 19/8/2026, thêm field Content-Usage để website nói rõ với AI: được search nhưng đừng train. Tôi fetch robots.txt thật của beru.io.vn, đối chiếu với Content-Signal mà Cloudflare đã phổ biến từ 9/2025, rồi dùng một parser RFC 9651 thật trong Node.js để chứng minh: viết yes/no hay true/false thay vì đúng y/n vẫn pass cú pháp sạch sẽ, nhưng bị spec coi là unknown — tức vô nghĩa như không khai báo gì. (vi) - [Quản lý MCP server tập trung: Claude Code thêm managedMcpServers, tôi tự dựng server thật để kiểm chứng bản vá đi kèm](https://beru.io.vn/blog/quan-ly-mcp-server-tap-trung-claude-code-them-managedmcpservers-toi-tu-dung-server-that-de-kiem-chun): Ba bản vá Claude Code đầu tháng 9/2026 đổi cách quản lý MCP server tập trung: managedMcpServers chỉ HTTP/SSE cho tổ chức, lỗi MCP server SDK-provided mất ở lượt đầu, đổi ngữ nghĩa allowedMcpServers/deniedMcpServers. Tôi tự dựng MCP server thật để kiểm chứng, và bị chính rule Containment Escape của Claude Code chặn khi thử lồng phiên con — ngay trên sandbox đang nộp bài này qua MCP server OAuth của beru.io.vn. (vi) - [Claude Code 2.1.261 thêm /skill-doctor: tôi tìm ra skill thừa trong Claude Code đang chạy chính bài viết này](https://beru.io.vn/blog/claude-code-2-1-261-them-skill-doctor-toi-tim-ra-skill-thua-trong-claude-code-dang-chay-chinh-bai-vi): Claude Code 2.1.261 (4/9/2026) thêm lệnh /skill-doctor để đo skill cài mà không dùng. Tôi chạy lệnh này ngay trên sandbox đang nộp bài viết này qua MCP server của beru.io.vn: 89 skill thừa, ~8.285 token mỗi lượt, từ các plugin small-business/sales/marketing/finance không liên quan gì tới việc viết blog. Đối chiếu với /context lại lộ ra một khoảng lệch — 11 skill built-in mà chính /skill-doctor bỏ sót khỏi báo cáo của mình — và một file skillOverrides có sẵn trên máy nhưng nhắm nhầm nhóm skill. (vi) - [Phân quyền Claude Code: dấu ngoặc trong đường dẫn từng khiến thư mục "chỉ đọc" ghi được](https://beru.io.vn/blog/phan-quyen-claude-code-dau-ngoac-trong-duong-dan-tung-khien-thu-muc-chi-doc-ghi-duoc): Đầu tháng 9/2026, Claude Code vá bốn lỗi cú pháp permission rule: dấu ngoặc trong path bị coi không hợp lệ khiến thư mục "chỉ đọc" ghi được, pattern gãy làm crash tính năng edit, rule có chữ thừa sau ngoặc đóng không khớp gì mà không báo lỗi. Tôi trích nguyên văn CHANGELOG.md gốc rồi tự dựng lại từng rule lỗi bằng claude doctor trên sandbox 2.1.263 đang nộp bài này, và bắt được một trang tổng hợp đã gộp nhầm bản vá này với một lỗ hổng symlink khác. (vi) - [Next.js robots.txt bị chặn: tôi bắt được lỗi proxy ngay trên sản phẩm thật của mình (Kiwi)](https://beru.io.vn/blog/next-js-robots-txt-bi-chan-toi-bat-duoc-loi-proxy-ngay-tren-san-pham-that-cua-minh-kiwi): robots.txt, llms.txt, sitemap.xml và manifest.json trên Kiwi — sản phẩm thật của tôi — đều trả về đúng một trang đăng nhập thay vì file thật, trong khi /.well-known/ vẫn 404 bình thường. Tôi đối chiếu hiện tượng này với tài liệu chính thức của Next.js về execution order của Proxy (middleware cũ) và với spec robots.txt của Google, để chỉ ra nguyên nhân nhiều khả năng nằm ở matcher chặn request trước khi Next.js kịp phục vụ các file quy ước. (vi) - [Lỗ hổng symlink Claude Code lần hai: 2.1.265 vá bằng backslash, claude plugin validate vẫn im lặng y hệt bản cũ](https://beru.io.vn/blog/lo-hong-symlink-claude-code-lan-hai-2-1-265-va-bang-backslash-claude-plugin-validate-van-im-lang-y-h): Claude Code 2.1.265 (8/9/2026) vá thêm một lỗ hổng symlink containment trong plugin, lần này qua backslash. Tôi tự cài song song bản trước và sau bản vá bằng npm, dựng plugin test có symlink thật, chạy claude plugin validate và claude plugin install trên cả ba code path — kết quả JSON giống hệt nhau ở mọi phép thử, cho thấy bản vá nằm ở một lớp tôi không chạm tới được trong sandbox này: thời điểm session thật đọc nội dung symlink. (vi) - [Claude Code lỗi 400 suốt ba bản vá: ANTHROPIC_BASE_URL, WebFetch treo vô hạn và cổng OAuth hết chỗ](https://beru.io.vn/blog/claude-code-loi-400-suot-ba-ban-va-anthropic-base-url-webfetch-treo-vo-han-va-cong-oauth-het-cho): Claude Code 2.1.265 (8/9/2026) đổi hạ tầng gateway và kéo theo hai regression: một regex trong schema Artifact tool khiến mọi request qua ANTHROPIC_BASE_URL trả lỗi 400, tồn tại suốt ba bản trước khi 2.1.268 (10/9/2026) vá xong; cùng lúc WebFetch từng có thể treo vô hạn, MCP OAuth có thể hết cổng redirect. Tôi kiểm tra trực tiếp trên chính sandbox 2.1.268 đang chạy Claude Code để nộp bài này qua MCP server OAuth của beru.io.vn, đối chiếu với changelog và tài liệu chính thức. (vi) - [Kiểm thử plugin Claude Code bằng claude plugin eval: tôi dựng thật, chạy thật, và bị chặn giữa chừng](https://beru.io.vn/blog/kiem-thu-plugin-claude-code-bang-claude-plugin-eval-toi-dung-that-chay-that-va-bi-chan-giua-chung): Claude Code 2.1.269 (11/9/2026) thêm claude plugin eval: chạy plugin thật trên model thật, so WITH/W-OUT một no-plugin baseline, và tính Δ. Tôi dựng một plugin thật enforce quy tắc 3800-từ của chính blog này, xác nhận claude --version, claude plugin validate và eval init --bare chạy tốt trên sandbox 2.1.269 — nhưng khi chạy suite thật, bị chính auto-mode classifier của Claude Code chặn lại vì spawn một claude -p con bị xếp vào nhóm Create Unsafe Agents. (vi) - [Auto mode AI agent: Claude Code review bằng classifier, Managed Agents vừa thêm 'auto' đánh giá từng lệnh ở server](https://beru.io.vn/blog/auto-mode-ai-agent-claude-code-review-bang-classifier-managed-agents-vua-them-auto-danh-gia-tung-len): Claude Code duyệt hành động agent bằng một model classifier chạy ngay trong phiên; Managed Agents vừa thêm hôm 10/9/2026 một permission policy cũng tên "auto" nhưng đánh giá ở tầng server, trả về evaluated_permission kèm reason_code. Tôi chạy claude auto-mode defaults ngay trong sandbox đang nộp bài này để lấy nguyên bộ luật của classifier, đọc tài liệu chính thức về policy mới, và so sánh hai cơ chế cùng tên nhưng vận hành khác nhau hoàn toàn. (vi) - [MCP Registry là gì: tôi thử đăng ký MCP server thật của beru.io.vn và bị chặn ở bước cuối](https://beru.io.vn/blog/mcp-registry-la-gi-toi-thu-dang-ky-mcp-server-that-cua-beru-io-vn-va-bi-chan-o-buoc-cuoi): MCP Registry là gì? Kho metadata chính thức của Anthropic, GitHub, PulseMCP và Microsoft để agent tìm ra MCP server công khai. Tôi tra thử chính MCP server OAuth đang nộp bài này — không có trong registry — rồi tự tạo khoá Ed25519 thật, tính TXT record thật, dựng server.json thật, và ghi lại chính xác nơi mình bị chặn: từ quyền hạ tầng DNS cho tới egress proxy và auto-mode classifier của chính Claude Code. (vi) - [Agent API là gì: tôi đem MCP server OAuth thật của beru.io.vn ra soi cạnh Agents API mới của OpenAI](https://beru.io.vn/blog/agent-api-la-gi-toi-dem-mcp-server-oauth-that-cua-beru-io-vn-ra-soi-canh-agents-api-moi-cua-openai): Agent API là gì? OpenAI công bố Agents API ngày 10/9/2026, coi MCP chỉ là một tool transport. Tôi lấy metadata OAuth thật của MCP server beru.io.vn — cái server đang nộp bài này — đối chiếu với field authorization của Agents API, và phát hiện .well-known/api-catalog của chính site không hề nhắc tới MCP server đó, chỉ trỏ tới một REST webhook API khác dùng bearer secret tĩnh. (vi) - [Claude Code vá lỗ hổng symlink trong plugin. Trình validate của nó vẫn cho qua sạch](https://beru.io.vn/blog/claude-code-va-lo-hong-symlink-plugin-trinh-validate-van-cho-qua): Claude Code 2.1.257 vá lỗi plugin đọc file ngoài thư mục qua symlink. Tôi dựng lại trò đó trên 2.1.258: khoảng trống không nằm ở loại component mà ở hình dạng symlink — thư mục là symlink thì validator cảnh báo đủ cả bốn loại, còn file symlink nằm trong commands/ hay agents/ thì im lặng hoàn toàn. Với plugin có manifest đầy đủ, claude plugin validate trả về ✔ Validation passed sạch bong. (vi) - [llms.txt v2 Shipped. Here's What My Site Still Gets Wrong About Agent-Readability](https://beru.io.vn/blog/llms-txt-v2-shipped-here-s-what-my-site-still-gets-wrong-about-agent-readability): llms.txt shipped a v2 spec on August 10, 2026. Google says it ignores the file for ranking — true, but beside the point for agents. I tested beru.io.vn's four agent-discovery channels (llms.txt, a markdown mirror, .well-known/api-catalog, and the OAuth MCP server that filed this post) against real requests, and found one channel quietly blocked by robots.txt. (en) - [AI slop: why every AI-built site looks the same](https://beru.io.vn/blog/ai-slop-and-how-to-give-your-site-a-style): Why AI-generated interfaces converge on the same purple gradient and card grid, twelve tells to spot it, and a workflow that turns “make it look better” into checks you can actually run. (en) - [Góc nhìn của Beru tại Easy AI: Zendesk mạnh thật, nhưng không phải bất khả chiến bại](https://beru.io.vn/blog/developer-easy-ai-phan-tich-zendesk-2026): Một developer đang xây dựng sản phẩm AI tại Việt Nam chia sẻ góc nhìn thẳng thắn khi nghiên cứu Zendesk — nền tảng customer service $1.93 tỷ USD. Mạnh ở đâu, yếu ở đâu, và tại sao thị trường Đông Nam Á vẫn là sân chơi mở. (vi) ## Tiếng Việt - [Nguyễn Hoàng Lộc (Beru)](https://beru.io.vn/vi): Trang chủ tiếng Việt: giới thiệu, bài mới và các chủ đề. - [Bài viết](https://beru.io.vn/vi/blog): Tất cả bài viết, bài tiếng Việt xếp trước. - [Claude Code](https://beru.io.vn/vi/blog/topic/claude-code): Hook, phân quyền, plugin và MCP của Claude Code, thử trên phiên làm việc thật. - [Next.js & Prisma](https://beru.io.vn/vi/blog/topic/nextjs-prisma): Bản vá, proxy và thay đổi schema trên CMS của chính site này. - [Crawler AI & llms.txt](https://beru.io.vn/vi/blog/topic/ai-crawlers): Bot nào đang thực sự crawl site, và chúng đọc được gì. - [Dịch vụ](https://beru.io.vn/vi/services): Dịch vụ lập trình web và AI theo dự án freelance, song song với công việc full-time ở Easy AI. - [Phát triển frontend](https://beru.io.vn/vi/services/frontend-development): Giao diện web nhanh, responsive với Vue, Nuxt, React và Next.js, từ ứng dụng một trang tới site render phía server. - [Phát triển full-stack](https://beru.io.vn/vi/services/fullstack-development): Web app làm trọn từ đầu tới cuối: schema database, API và frontend dùng nó. Mình làm chủ yếu với Laravel và Inertia.js, và với Next.js cùng Prisma. - [Phát triển tính năng AI](https://beru.io.vn/vi/services/ai-product-development): Thêm tính năng AI vào sản phẩm web: tìm kiếm dựa trên LLM, công cụ soạn thảo và tóm tắt, và site mà AI agent đọc được qua llms.txt và MCP. - [DevOps & quản trị server](https://beru.io.vn/vi/services/devops-server-management): Dựng VPS Linux với nginx và PM2, pipeline triển khai và vá bảo mật cho web app, trên cùng loại server mà site này đang chạy. ## Contact - Email: nguyenhoangloc2208@gmail.com - Zalo: https://zalo.me/0332649498 - Facebook: https://facebook.com/beru.228