← Vibe coding với Next.js

Bài 4 · Vận dụng · 26 phút

Dựng app Next.js đầu tiên

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

Build-along: dùng Claude Code dựng khung một web bán hàng online bằng Next.js (ví dụ xuyên suốt cả khoá) và chạy ở máy mình (localhost) - chiến thắng đầu tiên cầm được. Hiểu cấu trúc một dự án Next.js ở mức nhìn lướt, và thực hành vòng lặp: mô tả rõ ràng, AI dựng, xem kết quả, rồi chỉnh.

Hai bài trước là chuẩn bị: cách mô tảbản đồ sản phẩm. Giờ tới phần vui: mèo con sẽ có một khung web bán hàng chạy trên máy mình trong khoảng mười lăm phút, mà không gõ một dòng code.

Cách làm xuyên suốt bài: mèo con mô tả, Claude Code làm, mèo con xem và chỉnh. Đây là build-along - vừa đọc vừa làm theo trên máy bạn.

Mở Claude Code trong một thư mục mới, đưa nó tài liệu BA từ bài Nghĩ như người làm sản phẩm, rồi nói đại ý: "tạo cho tôi một dự án Next.js cho web bán hàng này". Claude sẽ chạy công cụ tạo khung chuẩn của Next.js:

lệnh Claude tự chạy để tạo khung (minh hoạ - mèo con KHÔNG cần tự gõ)

npx create-next-app@latest shop-cua-toi
cd shop-cua-toi

Nó hỏi vài lựa chọn (TypeScript, Tailwind…) rồi tải các thư viện cần thiết. Mèo con chỉ duyệt khi Claude xin phép. Xong, trong thư mục đã có cả một dự án Next.js - cấu trúc giống cây thư mục mèo con thấy ở bài trước.

  • Bạn mô tả; Claude chạy create-next-app để dựng khung chuẩn.
  • Bạn không gõ lệnh - chỉ duyệt khi Claude xin phép.
  • Đưa tài liệu BA vào để Claude bám đúng ý đồ web bán hàng.

Khung đã có, giờ cho nó chạy. Nhờ Claude (hoặc tự gõ) chạy server phát triển (dev server), rồi mở địa chỉ nó in ra:

chạy server dev rồi mở trình duyệt (minh hoạ)

npm run dev
# Mở trình duyệt vào: http://localhost:3000

localhostchính máy của mèo con; 3000 là cổng app đang chạy. Trang hiện ra là sản phẩm đầu tiên của bạn - dù mới là khung. Lưu ý: lúc này chỉ mình bạn xem được trên máy mình.

Trung thực

localhost chưa phải "lên mạng". Người khác gõ localhost:3000 trên máy họ sẽ ra app của họ, không phải của bạn. Để cả thế giới vào được, cần deploy lên VPS + tên miền - phần đó để các bài cuối khoá. Giờ cứ tận hưởng việc thấy nó chạy đã.

Việc nhỏ thì cứ mô tả là Claude làm ngay. Nhưng việc lớn hơn - thêm cả luồng giỏ hàng hay phần đăng nhập - nên cho nó lập kế hoạch trước. Claude Code có plan mode: chế độ nó trình bày dự định (định sửa file nào, làm những gì) mà chưa đụng vào code, tới khi mèo con gật mới làm.

Cách dùng: bật plan mode, đưa tài liệu BA từ bài Nghĩ như người làm sản phẩm và nói "lập kế hoạch thêm trang giỏ hàng theo BA". Claude đưa ra kế hoạch từng bước; mèo con đọc, sửa chỗ chưa đúng ý, rồi mới cho chạy. Đây là lúc bạn cầm lái: duyệt hướng đi trước khi AI viết một dòng code nào.

  • plan mode: Claude trình bày kế hoạch, chưa sửa code, tới khi bạn duyệt.
  • Dùng cho việc lớn; đưa BA vào để kế hoạch bám đúng nghiệp vụ.
  • Duyệt kế hoạch trước giúp bắt sai sớm - rẻ hơn nhiều so với sửa sau khi đã code.

Trung thực

Cách bật plan mode (phím tắt, tên gọi) có thể đổi theo phiên bản Claude Code; gõ /help để xem cách hiện tại. Muốn đào sâu các chế độ quyền, có khoá kỹ thuật riêng: Tương tác hiệu quả & chế độ quyền.

Từ đây, mọi thay đổi đều đi theo một vòng. Muốn thêm trang danh sách hàng? Mô tả cho Claude. Nó sửa code. Mèo con reload trình duyệt xem. Chưa ưng thì nói tiếp. Cứ thế:

Vòng lặp vibe1Mô tảnói thứ mình muốn2AI dựngClaude sửa/chạy3Xem ở localhostmở trình duyệt4Chỉnhchưa ưng thì sửa
Vòng lặp vibe coding: mô tả → AI dựng → xem ở localhost → chỉnh, rồi quay lại.

Mẹo cho vòng chạy trơn: mỗi lần chỉ xin một thay đổi nhỏ và xem ngay, thay vì đòi mười việc một lúc. Nhỏ và thường xuyên thì dễ thấy chỗ sai và dễ quay lui hơn.

  • Mỗi thay đổi: mô tả → Claude dựng → reload xem → chỉnh nếu chưa ưng.
  • Xin từng thay đổi nhỏ, xem kết quả ngay - đừng dồn mười việc một câu.
  • Thấy kết quả sau mỗi vòng là cách giữ cho mình không lạc.

Claude tạo kha khá file, nhưng mèo con không cần đọc hết. Chỉ cần quen mặt vài chỗ chính, để khi muốn đổi gì thì biết chỉ cho Claude:

vài file chính trong khung (nhìn cho quen, chưa cần hiểu từng dòng)

shop-cua-toi/
├── app/
│   ├── page.tsx        # trang chủ (đổi tiêu đề ở đây)
│   ├── layout.tsx      # khung chung mọi trang
│   └── san-pham/
│       └── page.tsx    # trang /san-pham vừa thêm
└── package.json        # tên dự án & thư viện

Quy ước của Next.js: mỗi thư mục trong app/ là một đường dẫn, và file page.tsx là nội dung trang đó. Biết bấy nhiêu là đủ để nói với Claude "sửa trang chủ" hay "thêm trang /gio-hang".

Trung thực

Khung này mới là vỏ: vài trang tĩnh, chưa nhớ được gì, chưa cho đăng nhập, chưa nhận tiền. Đó là chủ ý - ta dựng nền chạy được trước, rồi các bài sau gắn database, đăng nhập, ví và thanh toán lên nền này.

Mèo con vừa có khung web bán hàng chạy ở máy mình và đã đi qua vài vòng lặp vibe. Nhưng nó mới nằm trên một máy. Trước khi xây tiếp, nên cất code vào nơi an toàn và mở đường để vibe được cả trên web lẫn điện thoại.

Bước tiếp theo

Bài kế ta đưa code lên GitHub và nối Claude Code với nó: GitHub & vibe trên web/điện thoại.

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

Không. Bạn mô tả việc, Claude tự chạy lệnh và xin phép bạn trước khi làm. Lệnh in trong bài chỉ để bạn hiểu nó đang làm gì - nhìn thấy "create-next-app" thì biết nó đang tạo khung dự án, vậy là đủ.

localhost là chính máy của bạn. Khi chạy khung web, nó mở ở địa chỉ như localhost:3000 (cổng 3000 trên máy bạn). Chỉ mình bạn xem được trên máy mình; người khác chưa vào được cho tới khi bạn deploy lên VPS - việc đó để các bài cuối khoá.

Không. Code vẫn nằm trong thư mục dự án; chỉ có server dev (lệnh npm run dev) là dừng. Lần sau mở Claude Code, chạy lại npm run dev là trang lên lại ở localhost. Đưa ra cho người khác xem mới cần deploy.

Không. Next.js có cấu trúc chuẩn, Claude lo phần đó. Bạn chỉ cần quen mặt vài file chính - nhất là trang chủ (app/page.tsx) - để khi muốn đổi gì thì biết chỉ chỗ cho Claude.

Đây là cái vỏ chạy được - nền để gắn thêm hàng hoá, ví tiền, đăng nhập, thanh toán ở các bài sau. Có vỏ chạy trước, rồi thêm thịt sau, là cách đi nhanh mà chắc: mỗi bước đều thấy kết quả ngay.

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

localhost:3000 nghĩa là gì?

Bài tập về nhà

  1. 1

    Tạo khung dự án

    Mở Claude Code trong một thư mục mới, đưa tài liệu BA (bài 2) và nhờ nó tạo một dự án Next.js cho web bán hàng của mèo con.

    ✅ Hoàn thành khi: Có một thư mục dự án với cấu trúc Next.js (thấy thư mục app/, file package.json); Claude báo tạo xong.

  2. 2

    Chạy ở localhost

    Nhờ Claude chạy server dev (hoặc tự chạy npm run dev), rồi mở localhost:3000 trên trình duyệt.

    ✅ Hoàn thành khi: Trình duyệt mở localhost:3000 và hiện ra trang khung - mèo con nhìn thấy sản phẩm đầu tiên của mình.

  3. 3

    Đổi tên shop

    Mô tả cho Claude: đổi tiêu đề trang chủ thành tên shop của mèo con.

    ✅ Hoàn thành khi: Reload localhost:3000 thấy tiêu đề mới - một vòng mô tả → sửa → xem đã khép.

  4. 4

    Lập kế hoạch rồi mới dựng

    Bật plan mode, nhờ Claude lập kế hoạch thêm trang /san-pham (liệt kê 3 món: tên + giá) dựa trên BA; đọc và duyệt kế hoạch rồi mới cho dựng.

    ✅ Hoàn thành khi: Bạn duyệt một kế hoạch TRƯỚC khi Claude code, sau đó mở localhost:3000/san-pham thấy danh sách 3 món.

  5. 5

    Chỉ ra file trang chủ

    Hỏi Claude file nào là trang chủ, rồi tự mở file đó xem.

    ✅ Hoàn thành khi: Bạn xác định được file trang chủ (app/page.tsx) và mở ra nhìn - dù chưa cần hiểu từng dòng.

  6. 6

    Một vòng lặp trọn vẹn

    Nghĩ một thay đổi nhỏ (đổi màu, thêm dòng chữ), mô tả cho Claude, xem kết quả, chỉnh lại nếu chưa ưng.

    ✅ Hoàn thành khi: Ghi lại bạn đã lặp mấy lần mới ưng - mèo con đã tự đi hết vòng mô tả → dựng → xem → chỉnh.