← Vibe coding với Next.js

Bài 9 · Vận dụng · 22 phút

Dạy AI luật riêng: CLAUDE.md

Biên soạn bởi Nguyễn Anh Tuấn

Dạy AI luật riêng của business bạn qua file CLAUDE.md: ghi quy ước, ngữ cảnh sản phẩm và ràng buộc để Claude bám đúng thay vì đoán mò. Lấy ví dụ web bán hàng: mô tả miền nghiệp vụ (sản phẩm, đơn, thanh toán), quy tắc code và chuẩn chất lượng - để mọi phiên vibe sau đều nhất quán, không phải nhắc lại từ đầu.

Tới giờ mèo con đã có app Next.js, dữ liệu trong PostgreSQL và một lớp cache Redis. Nhưng mỗi lần mở phiên vibe mới, Claude lại như người mới vào việc: nó không nhớ luật riêng của business mèo con. Thế là mèo con phải gõ lại "nhớ là số dư không cache nhé", "tiền lưu số nguyên thôi", "route admin phải kiểm quyền"... mỗi phiên một lần.

Nhắc đi nhắc lại vừa mệt vừa dễ quên - quên một câu là Claude đoán mò, và đoán sai chỗ tiền bạc thì trả giá đắt. Cần một chỗ ghi luật một lần, để mọi phiên sau tự bám.

Chỗ đó là một file tên CLAUDE.md đặt ở gốc repo. Đầu mỗi phiên, Claude Code tự đọc nó - coi như cuốn "nội quy dự án" luôn để sẵn trên bàn. Mèo con ghi vào đây ngữ cảnh sản phẩm, quy ước và những luật đã chốt; từ đó Claude làm theo thay vì đoán.

  • Là file Markdown ở gốc repo, tên đúng CLAUDE.md.
  • Claude tự nạp vào ngữ cảnh đầu mỗi phiên - không cần nhắc.
  • Khác câu chat (chỉ sống trong một phiên): CLAUDE.md là bộ nhớ lâu dài.

Vì Claude đọc CLAUDE.md ở đầu mỗi phiên, luật mèo con ghi một lần sẽ áp cho tất cả các lần vibe sau - trên máy, trên web hay trên điện thoại đều như nhau:

📄 CLAUDE.mdbộ nhớ dự án - gốc repotự đọc trướcPhiên vibe 1bám luật, không hỏi lạiPhiên vibe 2bám luật, không hỏi lạiPhiên vibe 3bám luật, không hỏi lại
Ghi luật một lần vào CLAUDE.md; mọi phiên vibe mới tự đọc trước khi làm, nên bám luật nhất quán mà không phải nhắc lại.

Đây chính là cách biến những điều mèo con phải dặn lặp đi lặp lại thành một bộ nhớ chung, ổn định theo dự án.

Bốn nhóm đáng ghi cho web bán hàng: ngữ cảnh sản phẩm (bán gì, có ví, ai dùng), quy ước code (đặt tên, cấu trúc thư mục), chuẩn chất lượng (a11y, bảo mật, format) và ràng buộc đã chốt. Một file mở đầu có thể trông như sau:

CLAUDE.md mẫu cho web bán hàng (rút gọn) - Claude tự đọc đầu mỗi phiên

# Web bán hàng - Mèo Shop

## Sản phẩm
Web bán hàng online có ví điện tử. Khách tạo tài khoản,
nạp tiền qua QR (SePay), mua hàng thì trừ số dư. Có trang
quản trị (admin) quản lý hàng, kho, giao dịch và số dư.

## Stack
Next.js + PostgreSQL + Redis. Đăng nhập: Better-auth.
Giao diện: shadcn-react + Tailwind. Deploy: VPS riêng.

## Quy ước
- Code chạy qua Prettier trước khi commit.
- Chuỗi bí mật để trong .env, không hardcode.
- Tên bảng/cột tiếng Việt không dấu, snake_case.

Mẹo

Không cần viết hết một lần. Bắt đầu nhỏ với phần "Sản phẩm" và "Stack", rồi bồi dần mỗi khi chốt một quyết định mới. CLAUDE.md là tài liệu sống.

Quan trọng nhất là phần ràng buộc bất biến - những luật mà sai một cái là hỏng sản phẩm hoặc thất thoát tiền. Ghi rõ để Claude không "tối ưu" lại theo ý nó:

Mục ràng buộc trong CLAUDE.md - mỗi dòng một luật, đọc là hiểu

## Đã chốt - đừng phá
- Tiền lưu bằng SỐ NGUYÊN, đơn vị đồng. KHÔNG dùng float.
- Số dư ví KHÔNG cache - đọc thẳng từ database mỗi lần.
- Mọi route /admin phải kiểm quyền trước khi chạy.
- Nạp tiền phải idempotent: một lần chuyển khoản chỉ
  cộng số dư đúng một lần dù webhook gửi lại.

Trung thực

CLAUDE.md giúp Claude bám luật, nhưng không thay được việc mèo con kiểm lại. Nó là hàng rào, không phải bảo hiểm. Vẫn phải đọc lướt diff và kiểm những chỗ nhạy cảm (tiền, quyền) như các bài trước đã làm.

CLAUDE.md càng phình thì Claude càng loãng và mèo con càng lười đọc lại. Giữ nó gọn: chỉ luật quan trọng và ngữ cảnh cần thiết. Khi chốt quyết định mới (đổi cách đăng nhập, thêm quy ước), cập nhật rồi commit - để lần vibe sau bám đúng ngay.

  • Ngắn gọn, đúng trọng tâm - đừng nhồi mọi thứ.
  • Commit CLAUDE.md lên GitHub để đồng bộ khi vibe trên web/điện thoại.
  • KHÔNG để bí mật (mật khẩu, khoá API) trong CLAUDE.md - thứ đó thuộc .env.

Bước tiếp theo

CLAUDE.md dạy Claude luật của mèo con. Bài kế trang bị cho nó đồ nghề chuyên gia - bộ Skills/Subagents rà bảo mật, a11y, SEO: Bộ Skills & Subagents như chuyên gia.

Câu hỏi thường gặp

Là một file văn bản (Markdown) đặt ở gốc repo. Claude Code tự đọc nó khi mở phiên, coi như "nội quy dự án" để bám theo. Tên file viết hoa đúng CLAUDE.md để Claude nhận ra.

Tự đọc. Đầu mỗi phiên Claude Code nạp CLAUDE.md vào ngữ cảnh, không cần mèo con nhắc. Đó là điểm khác với việc gõ luật trong một câu chat - câu chat chỉ sống trong phiên đó.

Mô tả trong một phiên (prompt) chỉ có hiệu lực ở phiên đó; mở phiên mới là mất. CLAUDE.md là bộ nhớ lâu dài: ghi một lần, mọi phiên sau đều bám. Luật chung của business thì để CLAUDE.md; yêu cầu nhất thời thì gõ trong phiên.

Ngắn và đúng trọng tâm. CLAUDE.md càng dài thì Claude càng loãng sự chú ý và bạn càng khó đọc lại. Ghi luật quan trọng, ràng buộc đã chốt, ngữ cảnh sản phẩm; đừng nhồi mọi thứ. Là tài liệu sống - thêm khi có quyết định mới, bỏ khi đã lỗi thời.

Có. Commit để nó đi cùng dự án và đồng bộ khi mèo con vibe trên web hay điện thoại. Nhờ vậy mọi nơi mở dự án đều thấy cùng một bộ luật. Đừng để bí mật (mật khẩu, khoá API) trong CLAUDE.md - thứ đó thuộc về .env.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

CLAUDE.md dùng để làm gì?

Bài tập về nhà

  1. 1

    Tạo CLAUDE.md với ngữ cảnh sản phẩm

    Ở gốc repo web bán hàng, tạo file CLAUDE.md và viết 3-5 câu mô tả sản phẩm: bán gì, có ví điện tử, khách nạp tiền rồi mua, có trang quản trị.

    ✅ Hoàn thành khi: File CLAUDE.md tồn tại ở gốc repo, mở phiên mới Claude nhắc lại đúng được sản phẩm của bạn khi được hỏi.

  2. 2

    Ghi 3 ràng buộc "đã chốt, đừng phá"

    Thêm một mục liệt kê 3 luật bất biến, ví dụ: tiền lưu bằng số nguyên (đồng), số dư KHÔNG cache, mọi route admin phải kiểm quyền trước khi chạy.

    ✅ Hoàn thành khi: CLAUDE.md có mục ràng buộc với ít nhất 3 luật rõ ràng, mỗi luật một dòng đọc là hiểu.

  3. 3

    Kiểm tra Claude có bám luật

    Mở một phiên mới, hỏi Claude "trong dự án này tiền được lưu kiểu gì?" mà không nhắc lại. Xem nó có trả lời theo CLAUDE.md không.

    ✅ Hoàn thành khi: Claude trả lời đúng theo luật bạn ghi (vd "số nguyên, đơn vị đồng") mà bạn không phải nhắc trong phiên đó.

  4. 4

    Nhờ Claude đề xuất bổ sung

    Bật plan mode, nhờ Claude đọc code hiện có và đề xuất vài mục nên thêm vào CLAUDE.md (quy ước đặt tên, cấu trúc thư mục, chuẩn chất lượng). Duyệt rồi thêm những mục hợp lý.

    ✅ Hoàn thành khi: CLAUDE.md có thêm 2-3 mục bạn đã tự duyệt (không thêm mù quáng), và bạn giải thích được vì sao giữ từng mục.

  5. 5

    Cập nhật sau một quyết định mới

    Sau khi chốt một lựa chọn (vd "đăng nhập dùng Better-auth", "giao diện dùng shadcn-react"), ghi quyết định đó vào CLAUDE.md rồi commit.

    ✅ Hoàn thành khi: CLAUDE.md phản ánh quyết định mới và đã được commit lên GitHub - lần vibe sau Claude bám theo ngay.