Lộ trình 90 ngày
Kế hoạch tuần theo tuần, có mốc kiểm được, cho người mỗi ngày bỏ ra 1–2 giờ. Kèm cách xử lý khi bạn tụt lại.
Giáo trình có 42 bài. Bài này xếp chúng vào lịch, để bạn biết hôm nay phải làm gì.
Giả định: 1–2 giờ mỗi ngày, 5 ngày mỗi tuần. Nhanh hơn thì được, nhưng đừng nhảy cấp — các bẫy ở Cấp 4–5 chỉ nhận ra nếu đã tự tay làm Cấp 2–3.
Nguyên tắc xuyên suốt
Mỗi tuần phải có một thứ chạy được mà tuần trước chưa có.
Không phải "đã đọc xong phần X". Phải là thứ bạn mở ra được và cho người khác xem.
Tuần 1–2 — Có web thật trên Internet
| Ngày | Việc | Bài |
|---|---|---|
| 1 | Hiểu Vibe Code là gì, viết ra việc muốn làm trong 90 ngày | 1, 2 |
| 2 | Đọc sơ đồ 7 lớp, khoanh những ô việc của bạn cần | 3, 4 |
| 3 | Dựng máy, chạy đủ 5 lệnh kiểm | 5 |
| 4–5 | Trang web đầu tiên, tự sửa tay 3 lần | 7, 8 |
| 6–7 | Deploy lên Pages, gửi link cho người khác | 9 |
| 8 | Gắn tên miền hoặc subdomain | 10 |
| 9–10 | Cố ý làm hỏng rồi tự chữa 3 lỗi | 11 |
Mốc tuần 2: có một địa chỉ web công khai, bạn sửa chữ và đưa bản mới lên trong dưới 5 phút.
Đây là mốc quan trọng nhất của cả 90 ngày — không phải vì kỹ thuật, mà vì động lực. Rất nhiều người học hai tuần mà chưa có gì cho người khác xem, rồi nguội dần.
Tuần 3 — Git thành phản xạ
| Ngày | Việc | Bài |
|---|---|---|
| 11–12 | 7 lệnh Git, luyện git restore . sau khi AI phá |
12 |
| 13 | Repo riêng tư, README 5 mục, xóa thư mục rồi clone lại | 13 |
| 14 | Một tính năng qua đủ vòng nhánh → PR → review bằng AI → merge | 14 |
| 15 | Actions tự deploy, cố ý làm CI đỏ rồi sửa | 15 |
Mốc tuần 3: git push là web tự cập nhật, và bạn lùi về bản cũ được sau khi cố ý phá.
Tuần 4 — An toàn trước khi có dữ liệu thật
| Ngày | Việc | Bài |
|---|---|---|
| 16 | Rà bí mật trong mọi project cũ, thu hồi khóa lộ | 16 |
| 17–18 | Worker đầu tiên: định tuyến, try/catch, wrangler tail |
17 |
| 19–20 | D1: migration, truy vấn an toàn, thử nghiệm múi giờ | 18 |
Mốc tuần 4: app có backend thật, lưu và đọc được dữ liệu, không có khóa nào trong mã.
Tuần 5–6 — App có dữ liệu, dùng được thật
| Ngày | Việc | Bài |
|---|---|---|
| 21–22 | R2 cho ảnh, 4 chốt chặn khi nhận file, tự tấn công thử | 19 |
| 23–25 | Đăng nhập, phân quyền, chạy 5 phép thử tự tấn công | 20 |
| 26–27 | Rà API theo 7 luật, gộp lệnh gọi lúc mở app, đo trước/sau | 21 |
| 28–30 | UX: đo ở 375px và 1440px, làm 3 màn hình rỗng/tải/lỗi | 22 |
Mốc tuần 6 — mốc vách đá: app có đăng nhập, có dữ liệu, dùng được trên điện thoại, và người khác ngoài bạn dùng thử được.
Theo quan sát khi kèm người thật: hầu hết người bỏ cuộc ở giữa tuần 5–6 — không phải vì khó hiểu, mà vì đây là lần đầu một lỗi không hiện ra ngay. Trang tĩnh sai thì thấy liền; app có cơ sở dữ liệu thì sai lặng lẽ.
Ai qua được mốc này thì gần như không bỏ nữa. Nếu bạn chỉ có ngân sách thời gian cho một chặng, hãy dồn vào tuần 5–6 — và đọc Test như kẻ phá hoại sớm hơn lịch, ngay từ tuần 5.
Tuần 7–9 — Nâng cao (bỏ được nếu chưa cần)
Đây là phần tùy chọn theo nhu cầu. Đọc Bản đồ học tập để chọn đường đi của bạn.
| Tuần | Việc | Bài |
|---|---|---|
| 7 | Realtime hoặc việc chạy nền (chọn cái app bạn cần) | 23, 24 |
| 8 | Đo tốc độ bằng Lighthouse, sửa đúng một thứ, đo lại | 25 |
| 9 | Rate limit đúng cách, chạy đủ 6 lệnh tự tấn công | 26 |
Nếu app của bạn không cần realtime và không cần AI, bỏ tuần 7 và bài 27, đi thẳng tới tuần 10. Thà làm chắc Cấp 5 còn hơn biết sơ Cấp 4.
Tuần 10–11 — Giao được hàng mà không gây sự cố
| Ngày | Việc | Bài |
|---|---|---|
| 46–47 | Chạy đủ 7 bước quy trình, tập rollback dưới 60 giây | 28 |
| 48–49 | Viết TEST.md P0–P2, tự động hóa P0+P1 vào CI |
29 |
| 50 | Viết SU-CO.md, diễn tập sự cố, bấm giờ |
30 |
| 51–52 | Sao lưu tự động + nạp thử vào DB trống | 31 |
| 53 | Tính chi phí, viết báo giá mẫu | 32 |
| 54–55 | Bảng kê HA-TANG.md, đưa mọi Worker lên GitHub |
33 |
Mốc tuần 11: bạn đã từng rollback thành công, đã nạp thử bản sao lưu, và biết app tốn bao nhiêu tiền mỗi tháng.
Tuần 12–13 — Biến thành hệ thống
| Ngày | Việc | Bài |
|---|---|---|
| 56–57 | CLAUDE.md đủ 5 mục, mục "Cấm" tự tay viết |
34 |
| 58 | Rút luật từ lịch sử commit, biến 1 luật thành cổng chặn | 35 |
| 59–60 | Dựng đường nhận lỗi tự động, hỏi 3 người dùng thật | 36 |
| 61–63 | Báo giá, điều khoản hỗ trợ, 5 bài hướng dẫn người dùng | 37 |
| 64–65 | Đọc 8 case thật và sổ tay bẫy | 39, 40 |
Mốc 90 ngày: một app có người khác dùng hằng ngày, có quy trình giao hàng, có sao lưu đã thử phục hồi, có CLAUDE.md, và bạn trả lời được: hỏng lúc 11 giờ đêm thì ai sửa, bằng cách nào, trong bao lâu.
Khi bạn tụt lại — và bạn sẽ tụt
Ai cũng tụt. Ba tình huống và cách xử lý:
"Tôi mất một tuần vì bận." Đừng cố đuổi. Quay lại đúng ngày bạn dừng, làm tiếp. Lịch này không có điểm trừ cho việc chậm.
"Tôi kẹt ở một bài suốt ba ngày." Nhảy qua, làm bài sau, quay lại sau. Rất nhiều lần bài sau giải thích luôn chỗ kẹt. Nếu kẹt vì lỗi kỹ thuật cụ thể, đọc lại Khi nó hỏng — nguyên tắc "ba lượt không xong thì vấn đề không nằm ở chỗ bạn nghĩ".
"Tôi đọc hết rồi nhưng chưa làm gì." Đây là tình huống nguy hiểm nhất, vì nó tạo cảm giác tiến bộ. Dừng đọc, quay lại tuần 1, làm. Giáo trình này không có giá trị nếu chỉ đọc.
Và tôi muốn nói điều đó ra, vì các lộ trình "90 ngày" hay làm người ta thấy mình kém cỏi.
Tôi có việc chính, có con nhỏ, có những tuần không mở máy. Nhưng tôi giữ đúng một thứ: mỗi tuần làm được một việc nhỏ chạy được. Có tuần chỉ là đổi một nút. Nhưng không có tuần nào trống hoàn toàn.
Và điều tôi không ngờ: từ tháng thứ hai, app của tôi đã có người dùng thật — dù nó còn xấu và thiếu tính năng. Chính việc có người dùng kéo tôi đi tiếp, chứ không phải ý chí.
Lời khuyên của tôi: đưa app cho người khác dùng sớm hơn bạn nghĩ là sẵn sàng. Nó vừa cho bạn phản hồi thật, vừa cho bạn lý do để không bỏ.
Tạo file TIEN-DO.md trong project:
## Tuần 5 (06–12/10)
- [x] R2 nhận ảnh, có 4 chốt chặn
- [x] Nén ảnh phía trình duyệt: 6,2 MB → 380 KB
- [ ] Đăng nhập — đang làm, kẹt ở chỗ băm mật khẩu
- Thứ chạy được tuần này: tải ảnh lên và xem lại được
## Việc còn nợ
- [ ] Sao lưu tự động (tuần 11)
- [ ] Chưa test trên iPhone đời cũ
Mục "Thứ chạy được tuần này" là mục bắt buộc. Tuần nào không điền được là tuần bạn đọc chứ không làm — và đó là tín hiệu sớm nhất của việc sắp bỏ cuộc.
- Đủ: lịch 13 tuần, mốc kiểm được từng chặng, phần tùy chọn, cách xử lý khi tụt lại.
- Thành thật về thời gian: 90 ngày là với 1–2 giờ mỗi ngày đều đặn. Thực tế của phần lớn người đi làm là 4–6 tháng, và như thế hoàn toàn bình thường.
- Rủi ro còn lại: lịch này giả định bạn có một việc thật muốn làm. Học chay không mục tiêu thì mọi mốc đều trượt — quay lại bài 1 và viết ra việc đó trước.
- Chép lịch này vào
TIEN-DO.mdcủa project, điều chỉnh theo quỹ thời gian thật của bạn. - Đánh dấu những tuần bạn bỏ qua (phần tùy chọn không cần cho app của bạn).
- Đặt lịch nhắc thứ Sáu hằng tuần: điền mục "Thứ chạy được tuần này".
- Viết ra ngày bạn sẽ đưa app cho người dùng thật đầu tiên. Đặt nó sớm hơn bạn thấy thoải mái.