Vibe coding tạo cảm giác rất nhanh: app chạy local, preview đẹp, agent nói build pass. Nhưng khoảnh khắc nguy hiểm nhất thường là deploy. Một preview branch vô tình dùng production API key. Một demo URL gửi cho khách nhưng đang ghi vào database thật. Một env var đổi trong dashboard nhưng deployment cũ không được rebuild. Những lỗi này không nằm ở UI.

Preview deploy là lớp đệm bắt buộc nếu bạn muốn đi từ prototype sang thứ người khác có thể bấm thử.

Preview không phải production

Cloudflare Pages và Vercel đều có mô hình preview deployment. Ý tưởng chung: branch hoặc pull request có URL riêng, không đụng custom domain production. Cloudflare Pages còn có hash URL và branch alias cho preview; Vercel có preview deployment cho branch không phải production branch.

Với non-tech, mental model đơn giản:

local = tôi đang thử trên máy
preview = người khác có thể bấm thử nhưng chưa phải bản chính
production = domain thật, user thật, data thật

Đừng dùng cùng một URL cho cả ba trạng thái. Nếu không phân biệt được URL nào là preview, chưa nên gửi cho khách.

Env var là nơi preview hay phản chủ

App nhỏ cũng có env var:

  • API URL;
  • database URL;
  • auth client id;
  • analytics token;
  • payment key;
  • feature flag.

Preview deploy phải dùng preview/staging credential nếu có side effect. Đừng để preview gọi production database chỉ vì “chưa có data riêng”.

Checklist trước khi share preview:

  • URL preview có khác production không?
  • API endpoint preview có khác production không?
  • Database preview/staging có khác production không?
  • Payment có sandbox mode không?
  • Email/SMS có tắt hoặc dùng test recipient không?
  • Analytics có tách host hoặc environment không?

Nếu câu trả lời là “không biết”, coi preview đó là nguy hiểm.

Branch build controls và ai được deploy

Preview deploy tiện, nhưng không phải branch nào cũng nên tự động deploy. Cloudflare Pages có branch deployment controls để điều chỉnh production/preview build theo branch. Vercel cũng tách production branch và preview branch.

Với vibe coding, rule tốt:

  • main hoặc production branch mới được đi production.
  • Feature branch chỉ tạo preview.
  • Branch thử nghiệm của agent không auto-deploy nếu chưa cần share.
  • Nếu deploy có cost hoặc side effect, yêu cầu approval.

Agent rất dễ coi deploy là một command bình thường. Với non-tech, hãy ghi rõ:

Do not run production deploy.
You may build locally.
If preview deploy is needed, explain branch, URL, env vars, and rollback first.

Rollback phải được biết trước khi deploy

Rollback không phải thứ nghĩ sau khi sự cố xảy ra. Trước khi deploy, hỏi:

  • rollback bằng nút trong dashboard hay CLI?
  • rollback có đổi env var không?
  • database migration có rollback được không?
  • custom domain đang trỏ vào deployment nào?
  • ai có quyền rollback?

Vercel có instant rollback/CLI rollback cho production deployments. Cloudflare Pages có lịch sử deployments và preview URLs vẫn truy cập được theo hash. Nhưng rollback frontend không tự rollback database. Nếu deploy đi kèm migration, bạn cần kế hoạch riêng.

Prompt tốt cho agent:

Before deploying, write rollback notes:
- command or dashboard path
- deployment URL to roll back from
- what rollback does not cover
- whether database/data changed

Nếu agent không trả lời được “rollback không cover gì”, nó chưa hiểu blast radius.

Preview URL cũng cần bảo vệ

Preview URL không phải bí mật tuyệt đối. Link có thể bị forward, bot có thể crawl, người ngoài có thể thấy nếu bạn share sai chỗ. Cloudflare Pages docs nói preview deployments có X-Robots-Tag: noindex mặc định, nhưng noindex không phải authentication.

Nếu preview chứa data nhạy cảm, dùng access control. Nếu chưa có access control, dùng fake data.

Không nên đưa vào preview:

  • customer data thật;
  • invoice thật;
  • medical/finance data;
  • admin token;
  • internal document chưa được phép chia sẻ;
  • webhook thật gửi ra Slack/email/customer.

Handoff deploy note

Mỗi preview đáng share nên có note ngắn:

Preview URL:
Environment:
Branch/commit:
Data source:
Known limitations:
What to test:
What not to test:
Rollback:

Note này giúp người review không hiểu nhầm preview là production. Nó cũng giúp agent khác tiếp tục mà không đoán.

Chốt lại

Deploy là lúc vibe coding rời khỏi khung chat và bắt đầu chạm hệ thống thật. Preview deploy tốt giúp bạn share, test, lấy feedback. Preview deploy tệ có thể ghi vào production, gửi email thật, hoặc làm người khác tưởng demo là sản phẩm chính.

Trước khi deploy, biết URL, env, data source, quyền truy cập và rollback. Không biết thì dừng ở local.

Tham khảo