

🍜 Tech stack là gì? Bảng tra để trả lời Claude Code trong 5 giây
Tech stack là bộ công nghệ ghép lại thành một sản phẩm: ngôn ngữ để viết, khung làm sẵn để đỡ viết lại từ đầu, chỗ lưu dữ liệu và nơi để app chạy suốt ngày đêm. Khi bạn làm app cùng Claude Code, nó sẽ dừng lại hỏi bạn chọn món nào. Bài này là bảng tra để bạn trả lời dứt khoát trong năm giây, dù chưa từng viết một dòng code.
Cảnh quen thuộc: bạn tả sản phẩm bằng tiếng Việt, Claude Code chạy được năm phút rồi hỏi "Bạn muốn lưu dữ liệu bằng SQLite hay Postgres?". Bạn không biết SQLite là gì. Trả lời bừa thì sợ phải làm lại, còn nói "cậu chọn đi" thì mất quyền kiểm soát. Có cách thứ ba: biết tên các món và lý do chọn, không cần biết code.
Hiểu nhanh bằng ví dụ đời thường
Hãy nghĩ tới việc mở một quán phở. Bạn cần công thức nấu (ngôn ngữ lập trình), bếp và nồi có sẵn để khỏi tự rèn dao (framework, tức bộ khung làm sẵn phần việc lặp lại), tủ lạnh và kho để giữ nguyên liệu (database, nơi lưu dữ liệu) và mặt bằng để khách tới ăn (máy chủ, nơi app chạy 24/7).
Đổi một món thường kéo theo món khác: đổi bếp ga sang bếp điện thì nồi cũng phải đổi. Vì vậy chốt sớm thì đỡ sửa nhiều.
Một ví dụ có thật về một trang web học trực tuyến: Next.js và TypeScript để làm giao diện, Prisma với SQLite để lưu người dùng và tiến độ, NextAuth để đăng nhập, Docker trên một VPS. Bốn dòng đó là toàn bộ stack.
Nó hoạt động thế nào
Claude Code hỏi bạn ba loại câu:
- Câu chọn gì cũng chạy. Ví dụ chọn thư viện vẽ biểu đồ. Cứ chọn món phổ biến nhất.
- Câu tốn tiền. Ví dụ dịch vụ đăng nhập tính phí theo số người dùng. Hỏi lại giá trước khi gật.
- Câu chọn sai thì phải làm lại. Ví dụ nơi lưu dữ liệu. Dừng lại nghĩ kỹ.
Cách nhanh nhất là đưa sẵn câu trả lời cho Claude trước khi nó hỏi. Dán khối dưới đây vào file CLAUDE.md ở gốc dự án. Claude Code đọc file này trước mỗi phiên làm việc nên sẽ thôi hỏi lại từng món (xem thêm CLAUDE.md giúp Claude Code hiểu dự án của bạn):
## Stack dự án
- Ngôn ngữ: TypeScript
- Framework: Next.js (App Router) + React
- Giao diện: Tailwind CSS + shadcn/ui
- Dữ liệu: Prisma, SQLite khi làm, Postgres khi lên thật
- Đăng nhập: NextAuth (Auth.js), email + mật khẩu
- Kiểm thử: Vitest cho hàm tính toán, Playwright cho luồng chính
- Module AI: gọi claude -p từ trong code
- Nơi chạy: VPS + Docker, sau reverse proxy có HTTPS
- Quy tắc: muốn thêm thư viện mới thì hỏi tôi trước
Vì sao lại là những món này:
| Món | Làm gì | Vì sao chọn |
|---|---|---|
| TypeScript | JavaScript có kiểm tra kiểu dữ liệu | Claude sửa 12 file cùng lúc mà gõ sai tên, lỗi hiện ra ngay thay vì đợi lúc chạy thật |
| Next.js | Gộp phần giao diện và phần xử lý vào một dự án | Một dự án, một lệnh đưa lên mạng. Ví dụ trên mạng nhiều nhất nên Claude viết đúng ngay lần đầu |
| Tailwind + shadcn/ui | Bộ kiểu dáng và bộ nút, bảng làm sẵn | Code nằm trong dự án của bạn, sửa được |
| Prisma | Lớp trung gian nói chuyện với database | Sau này đổi SQLite sang Postgres chỉ sửa một dòng cấu hình |
| SQLite | Database gọn trong một file | Không phải cài gì, đủ cho vài chục người dùng |
| NextAuth | Đăng nhập và phân quyền | Miễn phí, không tính tiền theo số người dùng |
| Docker | Đóng gói app cùng môi trường | Chạy trên máy chủ giống hệt trên máy bạn |
Dòng cuối, "muốn thêm thư viện mới thì hỏi tôi trước", là dòng đáng giá nhất. Thiếu nó, mỗi lần bạn nhờ thêm một tính năng nhỏ, dự án lại phình thêm vài thư viện bạn không biết mình đang dùng.
Điều này có ý nghĩa gì với bạn: bảng tra nhanh
Khi Claude hỏi, tìm câu tương ứng dưới đây.
Loại sản phẩm và ngôn ngữ
| Claude hỏi | Bạn trả lời | Chọn khác khi |
|---|---|---|
| Web hay script dòng lệnh? | Web nếu người khác cần mở xem. Script nếu chỉ bạn chạy để lấy báo cáo | Việc chạy theo lịch, không ai cần giao diện: script + cron |
| TypeScript hay JavaScript? | TypeScript | File dưới 50 dòng, chạy một lần rồi bỏ |
| Python hay Node.js? | Python cho xử lý dữ liệu, xuất Excel. TypeScript khi có giao diện web | Đừng trộn hai ngôn ngữ trong một dự án nhỏ |
| React thuần hay Next.js? | Next.js | Chỉ một trang tĩnh: HTML + CSS thuần là đủ |
Giao diện: chọn Tailwind + shadcn/ui; quyết chuyện chế độ tối (dark mode) ngay từ đầu vì thêm sau tốn công gấp mấy lần; vẽ biểu đồ thì Recharts cho dashboard thường, ECharts khi có hàng chục nghìn điểm dữ liệu.
Dữ liệu
| Claude hỏi | Bạn trả lời | Chọn khác khi |
|---|---|---|
| SQLite hay Postgres? | SQLite để bắt đầu | Nhiều người ghi cùng lúc, hoặc chạy nhiều bản app song song: Postgres |
| Lưu vào Google Sheets được không? | Được, khi dưới vài nghìn dòng và bạn muốn tự sửa tay | Dữ liệu khách hàng, nhiều người ghi: dùng database thật |
| File upload lưu ở đâu? | Trên VPS: thư mục gắn Docker volume | Trên Vercel/Netlify: dùng Cloudflare R2 hoặc S3, vì đĩa bị xóa sau mỗi lần đưa bản mới lên |
| Chạy migration chứ? | Có, và lưu luôn file migration vào Git | Thiếu nó, database trên máy chủ và trên máy bạn sẽ lệch nhau |
Người dùng và quyền: cần đăng nhập ngay khi app có dữ liệu không phải của riêng bạn. Chọn NextAuth (miễn phí); chỉ chọn Clerk khi cần sẵn giao diện quản lý và chấp nhận trả phí theo người dùng. Còn phân quyền (ai xem, ai sửa, ai xóa) thì bạn phải tự tả bằng lời, vì đây là quyết định kinh doanh.
AI trong sản phẩm: dùng Haiku cho việc phân loại đơn giản, Sonnet cho phần lớn việc, Opus cho việc khó. Quy tắc vàng: cộng trừ, tổng hợp, lọc số thì để code làm; đọc hiểu, viết nhận định, phân loại văn bản thì để AI làm. Để AI cộng số thì có ngày nó cộng sai.
Kiểm thử và nơi chạy
| Claude hỏi | Bạn trả lời | Chọn khác khi |
|---|---|---|
| Viết test không? | Có, ít nhất một bài kiểm tra đi hết luồng chính | Bỏ test thì mỗi lần sửa, bạn phải tự bấm lại cả app |
| Đặt API key ở đâu? | File .env, thêm vào .gitignore | Không bao giờ để key trong code hay đưa lên GitHub |
| Vercel hay VPS? | VPS + Docker khi cần chạy theo lịch, lưu file, có database, muốn chi phí cố định | Vercel khi chỉ là web xem dữ liệu, cần link trong 10 phút |
Muốn so sánh thêm các bộ công cụ khác, xem bộ stack vibe coding giúp một người tự làm app hoàn chỉnh.
Khi gặp một món chưa từng nghe tên, dán câu này:
Cậu chọn giúp tôi. Ưu tiên: phổ biến, miễn phí hoặc rẻ, deploy được lên
VPS bằng Docker, ít phụ thuộc dịch vụ trả phí. Ghi lựa chọn kèm một dòng
lý do vào CLAUDE.md rồi làm tiếp, đừng hỏi lại từng món.
Mỗi ý có tác dụng riêng. "Phổ biến" đẩy Claude về công nghệ nó hiểu rõ nhất nên viết đúng hơn. "Deploy được lên VPS bằng Docker" chặn những lựa chọn chỉ chạy trên một nền tảng. "Ghi vào CLAUDE.md" biến lựa chọn thành tài liệu, để lần sau Claude không tự chọn khác.
Ba chỗ chọn sai thì phải làm lại
Phần lớn lựa chọn ở trên sửa được về sau. Ba chỗ này thì không, hoặc sửa rất đau:
- Để dữ liệu và logic ở phía giao diện. Ai mở app cũng đọc và sửa được hết. Sửa nghĩa là gần như viết lại app. Hãy nhờ Claude: "chứng minh cho tôi thấy dữ liệu được kiểm tra ở phía máy chủ, không chỉ ẩn nút trên giao diện".
- Dùng Sheets hay file JSON làm database cho dữ liệu thật. Chạy tốt tới lúc ba người dùng cùng lúc, rồi hai người ghi đè lên nhau và bạn mất dữ liệu mà không biết.
- Ghi file upload vào thư mục app trên nền tảng không giữ đĩa. Lần đưa bản mới lên sau, ảnh của khách biến mất. Nói trước, đừng để sửa sau.
Và ba câu Claude không trả lời thay bạn được, hãy nói ngay từ prompt đầu tiên: Ai dùng? (chỉ bạn, cả nhóm hay khách bên ngoài). Dữ liệu của ai? (của công ty hay của người khác). Ai trả tiền máy chủ, mỗi tháng bao nhiêu?
Hiểu lầm thường gặp
- "Phải biết code mới chọn được stack." Sai. Bạn chỉ cần biết món đó làm gì và vì sao chọn. Bảng tra ở trên là đủ cho phần lớn dự án nhỏ.
- "Để AI tự chọn hết là nhanh nhất." Nhanh lúc đầu, nhưng mỗi phiên Claude có thể chọn một kiểu khác nhau. Ghi lựa chọn vào CLAUDE.md mới giữ được dự án nhất quán.
- "Càng nhiều dịch vụ xịn càng tốt." Mỗi dịch vụ thêm vào là một hóa đơn và một chỗ có thể hỏng. Một VPS vài đô mỗi tháng thường đủ cho công cụ nội bộ.
Nếu bạn mới bắt đầu, đọc trước Vibe coding là gì và Claude Code là gì.
📖 Từ vựng tối thiểu
| Từ | Nghĩa gọn |
|---|---|
| Framework | Bộ khung làm sẵn phần việc lặp lại |
| ORM | Lớp trung gian để code nói chuyện với database mà không viết SQL, ví dụ Prisma |
| Migration | File ghi lại một lần đổi cấu trúc database, để chạy lại ở máy khác |
| .env | File chứa khóa bí mật, không đưa lên Git |
| Container | App đóng gói cùng môi trường, chạy giống nhau ở mọi máy |
| Volume | Thư mục dữ liệu nằm ngoài container, sống qua mỗi lần dựng lại |
| Reverse proxy | Cửa trước của máy chủ: nhận truy cập, gắn HTTPS, chuyển vào app |
Câu hỏi thường gặp
Tôi không biết code, có cần hiểu tech stack không? Không cần hiểu cách viết, chỉ cần biết tên món và lý do chọn. Như vậy bạn trả lời được Claude và không bị dự án phình ra ngoài tầm kiểm soát.
SQLite có đủ dùng cho app thật không? Đủ cho vài chục người dùng và công cụ nội bộ. Khi nhiều người ghi dữ liệu cùng lúc, chuyển sang Postgres; dùng Prisma thì việc chuyển chỉ là sửa một dòng cấu hình.
Nên chọn Vercel hay VPS? Vercel khi bạn cần một trang xem dữ liệu có link ngay. VPS với Docker khi app cần chạy theo lịch, lưu file upload, có database và bạn muốn chi phí cố định.
Claude hỏi một món tôi chưa nghe bao giờ thì sao? Dán câu trả lời an toàn ở trên: ưu tiên món phổ biến, rẻ, chạy được trên VPS bằng Docker, và bảo Claude ghi lựa chọn vào CLAUDE.md.
Lựa chọn nào quan trọng nhất? Chỗ lưu dữ liệu và chỗ lưu file upload, cùng việc kiểm tra dữ liệu ở phía máy chủ. Ba chỗ này chọn sai thì phải làm lại gần như từ đầu.
Doanh nghiệp muốn giới thiệu sản phẩm AI tới bạn đọc Vibe AI Coder? Xem gói tài trợ


