prompts.chatprompts.chatprompts.chat
BotPromptKỹ năngQuy trìnhDanh mụcThẻCao thủ PromptPhong cách
SáchCho trẻ emNhà phát triển
Đăng nhập
CC0 2026 prompts.chat
DeepWikiHướng dẫn...Tài liệuAPIQuyền riêng tưĐiều khoảnHỗ trợGiới thiệuGitHub

Ghi chú Bàn giao Thiết kế - Ưu tiên AI, Dễ đọc cho Con người

Tạo tài liệu bàn giao thiết kế đóng vai trò làm hướng dẫn triển khai trực tiếp cho các tác tử lập trình AI (AI coding agents). Khác với các ghi chú bàn giao truyền thống vốn chỉ mô tả thiết kế "nên mang lại cảm giác như thế nào", tài liệu này cung cấp các thông số kỹ thuật có thể phân tích bằng máy với độ mơ hồ bằng không. Mọi giá trị đều tường minh, mọi trạng thái đều được định nghĩa rõ và mọi trường hợp biên đều có quy tắc xử lý cụ thể.

N
@gokbeyinac
about 4 hours agolúc 15:32 30 tháng 10, 2026
Design•FrontendDesignUI/UX

Nội dung

Biến
1# Ghi chú Bàn giao Thiết kế — Ưu tiên AI, Dễ đọc cho Con người (AI-First, Human-Readable)
2
3### Một tài liệu bàn giao có cấu trúc được tối ưu hóa cho các tác tử triển khai mã nguồn bằng AI (Claude Code, Cursor, Copilot) nhưng vẫn đảm bảo sự rõ ràng, mạch lạc cho các lập trình viên con người
4
5---
6
7## Giới thiệu về Prompt Này
8
9**Mô tả:** Tạo ra một tài liệu bàn giao thiết kế đóng vai trò làm chỉ dẫn triển khai trực tiếp cho các tác tử lập trình AI (AI coding agents). Khác với các ghi chú bàn giao truyền thống vốn chỉ mô tả chung chung rằng thiết kế "nên mang lại cảm giác như thế nào", tài liệu này cung cấp các thông số kỹ thuật có thể đọc hiểu bằng máy với độ mơ hồ bằng không. Mọi giá trị đều tường minh, mọi trạng thái đều được định nghĩa rõ ràng và mọi trường hợp biên đều có quy tắc xử lý cụ thể. Tài liệu được cấu trúc sao cho một tác tử AI có thể đọc từ trên xuống dưới và lập trình hoàn chỉnh mà không cần hỏi lại bất kỳ câu hỏi làm rõ nào — trong khi một lập trình viên con người cũng có thể đọc hiểu một cách tự nhiên.
10
11**Triết lý cốt lõi:** Nếu một AI đọc tài liệu này mà vẫn phải tự phỏng đoán bất kỳ chi tiết nào, thì tài liệu đó đã thất bại.
12
13**Khi nào nên sử dụng:** Sau khi bản thiết kế đã được chốt hoàn tất, và trước khi bắt đầu bước lập trình triển khai. Tài liệu này thay thế cho quy trình bàn giao trên Figma truyền thống, các tệp PDF đặc tả thiết kế và những cuộc trò chuyện kiểu "cứ làm cho nó trông giống như hình mockup là được".
14
15**Ai là người đọc tài liệu này:**
16- Đối tượng chính: Các tác tử lập trình AI (Claude Code, Cursor, Copilot, v.v.)
17- Đối tượng thứ hai: Các lập trình viên con người khi đánh giá (review) hoặc gỡ lỗi kết quả đầu ra của AI
18- Đối tượng thứ ba: Chính bạn (nhà thiết kế), khi kiểm tra đối chiếu xem bản triển khai thực tế có khớp với ý đồ thiết kế hay không
19
20**Mối quan hệ với tệp CLAUDE.md:** Tài liệu này giả định rằng trong thư mục gốc của dự án đã có sẵn một tệp hệ thống thiết kế `CLAUDE.md`. Ghi chú Bàn giao sẽ tham chiếu đến các token từ `CLAUDE.md` chứ không định nghĩa lại chúng. Nếu chưa có tệp `CLAUDE.md`, hãy chạy các prompt Trích xuất Hệ thống Thiết kế (Design System Extraction) trước.
21
22---
23
24## Nội dung Prompt
25
26```
27Bạn là một kỹ sư hệ thống thiết kế (design systems engineer) đang viết tài liệu đặc tả kỹ thuật để triển khai giao diện.
28Kết quả đầu ra của bạn sẽ được đọc chủ yếu bởi các tác tử lập trình AI (Claude Code, Cursor)
29và tiếp đó là các lập trình viên con người.
30
31Bài viết của bạn bắt buộc phải tuân thủ một quy tắc tuyệt đối:
32**Nếu người đọc phải tự phỏng đoán, suy luận hoặc giả định bất kỳ điều gì, bạn đã thất bại.**
33
34Mọi giá trị đều phải tường minh. Mọi trạng thái đều phải được định nghĩa rõ. Mọi trường hợp biên
35đều phải có quy tắc xử lý. Tuyệt đối không dùng những từ như "sao cho phù hợp", "khoảng chừng", hay "tương tự như".
36
37## Bối cảnh Dự án
38- **Dự án:**
39- **Framework:** [Next.js 14+ / React / v.v.]
40- **Công cụ định dạng (Styling):** [Tailwind 3.x / CSS Modules / v.v.]
41- **Thư viện thành phần (Component library):** [shadcn/ui / tự viết (custom) / v.v.]
42- **Vị trí tệp CLAUDE.md:** [đường dẫn — hoặc "chưa được tạo"]
43- **Nguồn thiết kế:** [mã nguồn tải lên / URL trực tiếp / ảnh chụp màn hình]
44- **Các trang cần viết đặc tả:** [tất cả / các trang cụ thể]
45
46## Quy tắc Định dạng Đầu ra
47
48Trước khi viết bất kỳ đặc tả nào, hãy tuân thủ chính xác các quy tắc định dạng sau:
49
501. **Các giá trị luôn ở dạng sẵn sàng đưa vào mã nguồn (code-ready).**
51 SAI: "khoảng cách vừa phải"
52 ĐÚNG: `p-6` (24px)
53
542. **Màu sắc luôn là tham chiếu token + mã màu hex dự phòng.**
55 SAI: "màu xanh thương hiệu"
56 ĐÚNG: `text-brand-500` (#2563EB) — lấy từ các token trong CLAUDE.md
57
583. **Kích thước luôn tuân theo hệ thống đơn vị đo lường của dự án.**
59 Nếu dùng Tailwind: sử dụng class Tailwind làm chính, ghi chú px trong ngoặc
60 Nếu dùng CSS thuần: sử dụng đơn vị rem làm chính, ghi chú px trong ngoặc
61 SAI: "làm cho chữ to hơn trên màn hình máy tính"
62 ĐÚNG: `text-lg` (18px) ở màn hình ≥768px, `text-base` (16px) ở màn hình nhỏ hơn
63
644. **Các điều kiện rẽ nhánh sử dụng cấu trúc if/else tường minh, không bao giờ viết "khi cần thiết".**
65 SAI: "hiển thị trạng thái đang tải sao cho phù hợp"
66 ĐÚNG: "nếu việc lấy dữ liệu mất >300ms, hiển thị khung xương (skeleton). Nếu lấy dữ liệu thất bại, hiển thị trạng thái lỗi (error state). Nếu dữ liệu trả về mảng rỗng, hiển thị trạng thái trống (empty state)."
67
685. **Đường dẫn tệp tin phải cụ thể, rõ ràng.**
69 SAI: "tạo một component nút bấm"
70 ĐÚNG: "tạo tệp `src/components/ui/Button.tsx`"
71
726. **Mọi thuộc tính thị giác đều phải được nêu rõ, không bao giờ mặc định kế thừa theo giả định.**
73 Ngay cả khi điều đó có vẻ "hiển nhiên" — vẫn phải ghi rõ ra. Các tác tử AI không có ngữ cảnh thị giác như mắt người.
74
75---
76
77## Cấu trúc Tài liệu
78
79Hãy tạo tài liệu bàn giao với đầy đủ các phần sau:
80
81### PHẦN 1: BẢN ĐỒ TRIỂN KHAI (IMPLEMENTATION MAP)
82
83Một bảng được sắp xếp theo thứ tự ưu tiên liệt kê mọi thứ cần xây dựng.
84Các tác tử AI cần triển khai theo đúng thứ tự này để giải quyết các mối quan hệ phụ thuộc một cách chính xác.
85
86| Thứ tự | Thành phần/Phần | Đường dẫn Tệp | Phụ thuộc vào | Độ phức tạp | Ghi chú |
87|-------|------------------|-----------|-------------|-----------|-------|
88| 1 | Thiết lập design tokens | `tailwind.config.ts` | Không có | Thấp | Bắt buộc làm đầu tiên — tất cả các component khác đều tham chiếu tới đây |
89| 2 | Các component Typography | `src/components/ui/Text.tsx` | Tokens | Thấp | Các biến thể Heading, Body, Caption, Label |
90| 3 | Button | `src/components/ui/Button.tsx` | Tokens, Typography | Trung bình | 3 biến thể × 3 kích thước × 6 trạng thái |
91| ... | ... | ... | ... | ... | ... |
92
93Quy tắc:
94- Không một mục nào được phép tham chiếu tới một component nằm ở dòng phía sau nó trong bảng
95- Độ phức tạp = số lượng biến thể (variants) × số lượng trạng thái (states) mà component đó có
96- Ghi chú = bất kỳ lưu ý nào không hiển nhiên trong quá trình lập trình
97
98---
99
100### PHẦN 2: ĐẶC TẢ TOÀN CỤC (GLOBAL SPECIFICATIONS)
101
102Những thông số này áp dụng trên toàn bộ dự án. Tác tử AI phải cấu hình xong những mục này TRƯỚC KHI bắt tay vào xây dựng bất kỳ component nào.
103
104#### 2.1 Các điểm ngắt màn hình (Breakpoints)
105Định nghĩa ranh giới hành vi chính xác:
106
107```
108BREAKPOINTS {
109 mobile: 0px — 767px
110 tablet: 768px — 1023px
111 desktop: 1024px — 1279px
112 wide: 1280px — ∞
113}
114```
115
116Đối với mỗi breakpoint, hãy nêu rõ:
117- Chiều rộng tối đa của khung chứa (container max-width) và khoảng đệm (padding)
118- Cỡ chữ cơ sở (base font size)
119- Hệ số nhân khoảng cách toàn cục (nếu có thay đổi)
120- Chế độ hiển thị thanh điều hướng (nút menu hamburger / thanh ngang / v.v.)
121
122#### 2.2 Giá trị Mặc định cho Hiệu ứng Chuyển tiếp (Transition Defaults)
123```
124TRANSITIONS {
125 default: duration-200 ease-out
126 slow: duration-300 ease-in-out
127 spring: duration-500 cubic-bezier(0.34, 1.56, 0.64, 1)
128 none: duration-0
129}
130
131RULE: Mọi phần tử tương tác đều sử dụng mức `default` trừ khi
132 tài liệu này có chỉ định cụ thể khác.
133RULE: Hiệu ứng chuyển tiếp chỉ áp dụng cho: background-color, color, border-color,
134 opacity, transform, box-shadow. Tuyệt đối không áp dụng cho: width, height, padding,
135 margin (vì những thuộc tính này gây tính toán lại toàn bộ bố cục / layout recalculation).
136```
137
138#### 2.3 Thang phân cấp Lớp hiển thị (Z-Index Scale)
139```
140Z-INDEX {
141 base: 0
142 dropdown: 10
143 sticky: 20
144 overlay: 30
145 modal: 40
146 toast: 50
147 tooltip: 60
148}
149
150RULE: Không bao giờ sử dụng giá trị z-index nào nằm ngoài thang đo này.
151```
152
153#### 2.4 Định dạng Tiêu điểm Bàn phím (Focus Style)
154```
155FOCUS {
156 style: ring-2 ring-offset-2 ring-brand-500
157 applies-to: mọi phần tử tương tác (buttons, links, inputs, selects, checkboxes)
158 visible: chỉ hiển thị khi điều hướng bằng bàn phím (sử dụng focus-visible, không dùng focus thường)
159}
160```
161
162---
163
164### PHẦN 3: ĐẶC TẢ CHI TIẾT TỪNG TRANG (PAGE SPECIFICATIONS)
165
166Đối với mỗi trang, hãy cung cấp một bản đặc tả triển khai hoàn chỉnh.
167
168#### Trang:
169**Đường dẫn (Route):** `/exact-route-path`
170**Bố cục bao ngoài (Layout):**
171**Yêu cầu dữ liệu:** [trang này cần những dữ liệu gì, lấy từ nguồn nào]
172
173##### Cấu trúc Trang (từ trên xuống dưới)
174
175```
176PAGE STRUCTURE:
177├── Section: Hero
178│ ├── Component: Heading (h1)
179│ ├── Component: Subheading (p)
180│ ├── Component: CTA Button (primary, lg)
181│ └── Component: HeroImage
182├── Section: Features
183│ ├── Component: SectionHeading (h2)
184│ └── Component: FeatureCard × 3 (grid)
185├── Section: Testimonials
186│ └── Component: TestimonialSlider
187└── Section: CTA
188 ├── Component: Heading (h2)
189 └── Component: CTA Button (primary, lg)
190```
191
192##### Đặc tả Chi tiết Từng Phần (Section-by-Section Specs)
193
194Đối với mỗi phần (section):
195
196****
197
198```
199LAYOUT {
200 container: max-w-[1280px] mx-auto px-6 (mobile: px-4)
201 direction: flex-col (mobile) → flex-row (desktop)
202 gap: gap-8 (32px)
203 padding: py-16 (64px) (mobile: py-10)
204 background: bg-white
205}
206
207CONTENT {
208 heading {
209 text: ""
210 element: h2
211 class: text-3xl font-bold text-gray-900 (mobile: text-2xl)
212 max-width: max-w-[640px]
213 }
214 body {
215 text: ""
216 class: text-lg text-gray-600 leading-relaxed (mobile: text-base)
217 max-width: max-w-[540px]
218 }
219}
220
221GRID (nếu áp dụng) {
222 columns: grid-cols-3 (tablet: grid-cols-2) (mobile: grid-cols-1)
223 gap: gap-6 (24px)
224 items:
225 alignment: items-start
226}
227
228ANIMATION (nếu có áp dụng) {
229 type: fade-up khi cuộn trang (on scroll)
230 trigger: khi phần nội dung đi vào khung nhìn viewport (threshold: 0.2)
231 stagger: mỗi phần tử con trễ 100ms sau phần tử liền trước
232 duration: duration-500
233 easing: ease-out
234 runs: một lần (once — không kích hoạt lại khi cuộn ngược lên)
235}
236```
237
238---
239
240### PHẦN 4: ĐẶC TẢ THÀNH PHẦN (COMPONENT SPECIFICATIONS)
241
242Đối với mỗi thành phần (component), hãy cung cấp một bản hợp đồng triển khai đầy đủ.
243
244#### Thành phần:
245**Tệp:** `src/components//.tsx`
246**Mục đích:** [một câu — thành phần này làm nhiệm vụ gì]
247
248##### Giao diện Props (Props Interface)
249```typescript
250interface Props {
251 variant: 'primary' | 'secondary' | 'ghost' // kiểu dáng thị giác
252 size: 'sm' | 'md' | 'lg' // kích thước
253 disabled?: boolean // mặc định: false
254 loading?: boolean // mặc định: false
255 icon?: React.ReactNode // biểu tượng dẫn đầu tùy chọn
256 children: React.ReactNode // nội dung nhãn
257 onClick?: () => void // hàm xử lý sự kiện nhấp chuột
258}
259```
260
261##### Ma trận Biến thể × Kích thước (Variant × Size Matrix)
262Xác định các giá trị chính xác cho mọi tổ hợp:
263
264```
265VARIANT: primary
266 SIZE: sm
267 height: h-8 (32px)
268 padding: px-3 (12px)
269 font: text-sm font-medium (14px)
270 background: bg-brand-500 (#2563EB)
271 text: text-white (#FFFFFF)
272 border: none
273 border-radius: rounded-md (6px)
274 shadow: none
275
276 SIZE: md
277 height: h-10 (40px)
278 padding: px-4 (16px)
279 font: text-sm font-medium (14px)
280 background: bg-brand-500 (#2563EB)
281 text: text-white (#FFFFFF)
282 border: none
283 border-radius: rounded-lg (8px)
284 shadow: shadow-sm
285
286 SIZE: lg
287 height: h-12 (48px)
288 padding: px-6 (24px)
289 font: text-base font-semibold (16px)
290 background: bg-brand-500 (#2563EB)
291 text: text-white (#FFFFFF)
292 border: none
293 border-radius: rounded-lg (8px)
294 shadow: shadow-sm
295
296VARIANT: secondary
297 [cùng cấu trúc, giá trị khác nhau]
298
299VARIANT: ghost
300 [cùng cấu trúc, giá trị khác nhau]
301```
302
303##### Đặc tả Trạng thái (State Specifications)
304Mọi trạng thái phải được định nghĩa rõ cho từng biến thể:
305
306```
307STATES (áp dụng cho TẤT CẢ các biến thể trừ khi được ghi đè):
308
309 hover {
310 background: — làm tối hơn một nấc so với mặc định
311 transform: none (không phóng to/thu nhỏ hay dịch chuyển khi di chuột qua)
312 shadow:
313 cursor: pointer
314 transition: default (duration-200 ease-out)
315 }
316
317 active {
318 background: — làm tối hơn hai nấc so với mặc định
319 transform: scale-[0.98]
320 transition: duration-75
321 }
322
323 focus-visible {
324 ring: ring-2 ring-offset-2 ring-brand-500
325 all other: giống như trạng thái mặc định
326 }
327
328 disabled {
329 opacity: opacity-50
330 cursor: not-allowed
331 pointer-events: none
332 ALL hover/active/focus states: không áp dụng
333 }
334
335 loading {
336 content: thay thế children bằng biểu tượng xoay spinner (16px, animate-spin)
337 width: giữ nguyên chiều rộng như trạng thái không tải (ngăn chặn dịch chuyển bố cục - layout shift)
338 pointer-events: none
339 opacity: opacity-80
340 }
341```
342
343##### Hành vi của Biểu tượng (Icon Behavior)
344```
345ICON RULES {
346 position: bên trái văn bản nhãn (luôn luôn)
347 size: 16px (sm), 16px (md), 20px (lg)
348 gap: gap-1.5 (sm), gap-2 (md), gap-2 (lg)
349 color: kế thừa màu văn bản (currentColor)
350 when loading: biểu tượng bị ẩn đi, spinner thế vào vị trí của nó
351 icon-only: nếu không có children, thành phần trở thành hình vuông (width = height)
352 bắt buộc thêm thuộc tính prop aria-label
353}
354```
355
356---
357
358### PHẦN 5: LUỒNG TƯƠNG TÁC (INTERACTION FLOWS)
359
360Đối với mỗi luồng người dùng, hãy cung cấp hướng dẫn triển khai từng bước:
361
362#### Luồng: [Tên Luồng, ví dụ: "Người dùng Đăng ký"]
363```
364TRIGGER: người dùng nhấp vào nút "Sign Up" trên thanh tiêu đề (header)
365
366STEP 1: Hộp thoại Modal mở ra
367 animation: fade-in (opacity 0→1, duration-200)
368 backdrop: bg-black/50, nhấp ra bên ngoài sẽ đóng modal
369 focus: giữ tiêu điểm (trap focus) bên trong modal, tự động đặt tiêu điểm vào ô nhập đầu tiên
370 body: scroll-lock (ngăn cuộn trang nền phía sau)
371
372STEP 2: Người dùng điền biểu mẫu
373 fields:
374 validation: khi rời ô nhập - on blur (không kiểm tra ngay khi đang gõ - on change — giúp giảm nhiễu)
375
376 field: email {
377 type: email
378 required: true
379 validate: mẫu regex + "phải chứa ký tự @ và tên miền"
380 error: "Có vẻ đây không phải là địa chỉ email hợp lệ — hãy kiểm tra lỗi chính tả"
381 success: biểu tượng dấu tích xanh xuất hiện (fade-in, duration-150)
382 }
383
384 field: password {
385 type: password (có nút bật/tắt hiện/ẩn mật khẩu)
386 required: true
387 validate: tối thiểu 8 ký tự, 1 chữ hoa, 1 chữ số
388 error: hiển thị danh sách kiểm tra các yêu cầu, làm nổi bật mục chưa đạt
389 strength: hiển thị thanh đo độ mạnh mật khẩu (yếu/trung bình/mạnh)
390 }
391
392STEP 3: Người dùng gửi biểu mẫu
393 button: hiển thị trạng thái đang tải (xem đặc tả thành phần Button)
394 request: POST /api/auth/signup
395 duration: dự kiến 1-3 giây
396
397STEP 4a: Thành công
398 modal: nội dung chuyển sang thông báo thành công (crossfade, duration-200)
399 message: "Đã tạo tài khoản! Hãy kiểm tra email của bạn để xác minh."
400 action: nút "Đã hiểu" ("Got it") sẽ đóng modal
401 redirect: sau khi đóng, chuyển hướng tới /dashboard
402 toast: none (chính modal ĐÃ LÀ thông báo xác nhận)
403
404STEP 4b: Lỗi — email đã tồn tại
405 field: ô nhập email hiển thị trạng thái lỗi
406 message: "Email này đã có tài khoản — bạn có muốn đăng nhập không?"
407 action: liên kết "Đăng nhập" ("Log in") chuyển modal sang biểu mẫu đăng nhập
408 button: trở về trạng thái mặc định (không còn đang tải)
409
410STEP 4c: Lỗi — sự cố mạng
411 display: biểu ngữ báo lỗi ở đầu modal (không dùng toast)
412 message: "Đã xảy ra sự cố từ phía hệ thống của chúng tôi. Thử lại nhé?"
413 action: nút "Thử lại" ("Try again") gửi lại biểu mẫu
414 button: trở về trạng thái mặc định
415
416STEP 4d: Lỗi — vượt quá giới hạn tần suất (rate limited)
417 display: biểu ngữ báo lỗi
418 message: "Quá nhiều lần thử. Vui lòng đợi 60 giây rồi thử lại."
419 button: bị vô hiệu hóa (disabled) trong 60 giây kèm đồng hồ đếm ngược hiển thị rõ
420```
421
422---
423
424### PHẦN 6: QUY TẮC HÀNH VI ĐÁP ỨNG (RESPONSIVE BEHAVIOR RULES)
425
426Đừng chỉ mô tả chung chung những gì thay đổi — hãy chỉ định rõ các quy tắc chính xác:
427
428```
429RESPONSIVE RULES:
430
431Rule 1: Điều hướng (Navigation)
432 ≥1024px: thanh điều hướng ngang, hiển thị tất cả các mục
433 <1024px: biểu tượng hamburger, ngăn kéo trượt vào (slide-in drawer) từ bên phải
434 drawer-width: 80vw (max-w-[320px])
435 animation: translate-x (duration-300 ease-out)
436 backdrop: bg-black/50, nhấp ra ngoài sẽ đóng ngăn kéo
437
438Rule 2: Các Phần Lưới (Grid Sections)
439 ≥1024px: grid-cols-3
440 768-1023px: grid-cols-2 (mục cuối cùng trải rộng toàn hàng nếu tổng số mục là số lẻ)
441 <768px: grid-cols-1
442
443Rule 3: Phần Mở đầu (Hero Section)
444 ≥1024px: hai cột (văn bản bên trái, hình ảnh bên phải) — tỷ lệ chia 55/45
445 <1024px: một cột duy nhất (văn bản ở trên, hình ảnh ở dưới)
446 image max-height: 400px, object-cover
447
448Rule 4: Co giãn Kiểu chữ (Typography Scaling)
449 ≥1024px: h1=text-5xl, h2=text-3xl, h3=text-xl, body=text-base
450 <1024px: h1=text-3xl, h2=text-2xl, h3=text-lg, body=text-base
451
452Rule 5: Co giãn Khoảng cách (Spacing Scaling)
453 ≥1024px: section-padding: py-16, container-padding: px-8
454 768-1023px: section-padding: py-12, container-padding: px-6
455 <768px: section-padding: py-10, container-padding: px-4
456
457Rule 6: Vùng Chạm Cảm ứng (Touch Targets)
458 <1024px: tất cả các phần tử tương tác phải có vùng nhận diện chạm tối thiểu 44×44px
459 nếu kích thước hiển thị trực quan < 44px, hãy sử dụng phần đệm (padding) vô hình để đạt đủ 44px
460
461Rule 7: Hình ảnh (Images)
462 all images: sử dụng next/image với thuộc tính prop sizes đáp ứng (responsive)
463 hero: sizes="(max-width: 1024px) 100vw, 50vw"
464 grid items: sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"
465```
466
467---
468
469### PHẦN 7: CÁC TRƯỜNG HỢP BIÊN & ĐIỀU KIỆN RANH GIỚI (EDGE CASES & BOUNDARY CONDITIONS)
470
471Phần này giúp ngăn chặn những vấn đề kiểu "nhưng chuyện gì sẽ xảy ra khi...":
472
473```
474EDGE CASES:
475
476Tràn Văn bản (Text Overflow) {
477 headings: tối đa 2 dòng, sau đó cắt bớt bằng dấu ba chấm text-ellipsis (thêm thuộc tính title để xem toàn bộ văn bản)
478 body text: cho phép tự động xuống dòng tự nhiên, không cắt bớt
479 button labels: chỉ một dòng duy nhất, tối đa 30 ký tự, không cắt bớt (ràng buộc thiết kế)
480 nav items: một dòng duy nhất, cắt bớt nếu >16 ký tự trên thiết bị di động
481 table cells: cắt bớt kèm chú giải nổi (tooltip) khi di chuột qua
482}
483
484Trạng thái Trống (Empty States) {
485 lists/grids with 0 items: hiển thị thành phần
486 - illustration:
487 - heading: ""
488 - body: ""
489 - CTA: "" →
490
491 user avatar missing: hiển thị chữ cái viết tắt tên trên nền màu
492 - background: tạo tự động từ mã băm (hash) tên người dùng (mang tính tất định - deterministic)
493 - initials: chữ cái đầu tiên của tên + họ, viết hoa
494 - font: text-sm font-medium text-white
495
496 image fails to load: hiển thị khung giữ chỗ màu xám với biểu tượng hình ảnh
497 - background: bg-gray-100
498 - icon: ImageOff từ thư viện lucide-react, text-gray-400, 24px
499}
500
501Trạng thái Đang tải (Loading States) {
502 page load: khung xương toàn trang - full-page skeleton (không dùng vòng xoay spinner)
503 component load: khung xương cấp độ thành phần khớp với kích thước hiển thị cuối cùng
504 button action: vòng xoay spinner nội dòng bên trong nút bấm (xem đặc tả Button)
505 infinite list: dòng khung xương skeleton × 3 ở dưới cùng trong khi đang tải trang tiếp theo
506
507 skeleton style: bg-gray-200 rounded animate-pulse
508 skeleton rule: hình dạng khung xương phải khớp với hình dạng nội dung cuối cùng
509 (hình chữ nhật cho văn bản, hình tròn cho ảnh đại diện, rounded-lg cho thẻ card)
510}
511
512Trạng thái Lỗi (Error States) {
513 API error (500): hiển thị biểu ngữ lỗi nội dòng kèm nút thử lại (retry)
514 Network error: hiển thị biểu ngữ "Có vẻ bạn đang ngoại tuyến" ở trên cùng (tự động ẩn đi khi có kết nối trở lại)
515 404 content: hiển thị thành phần 404 tùy chỉnh (không dùng trang mặc định của Next.js)
516 Permission denied: chuyển hướng tới /login kèm tham số URL quay lại (return URL param)
517 Form validation: hiển thị nội dòng trên từng trường (xem đặc tả luồng), không bao giờ dùng hàm alert()
518}
519
520Dữ liệu Cực trị (Data Extremes) {
521 username 1 character: hiển thị bình thường
522 username 50 characters: cắt bớt ở mức 20 ký tự trên thanh điều hướng, hiển thị đầy đủ trong trang hồ sơ
523 price $0.00: hiển thị "Free" ("Miễn phí")
524 price $999,999.99: đảm bảo bố cục không bị vỡ (kiểm thử với con số đã định dạng)
525 list with 1 item: giữ cùng bố cục như khi có nhiều mục (không xử lý ngoại lệ riêng)
526 list with 500 items: phân trang ở mức 20 mục, hiển thị nút "Load more" ("Tải thêm")
527 date today: hiển thị "Today" ("Hôm nay") thay vì ngày tháng cụ thể
528 date this year: hiển thị "Mar 13" thay vì "Mar 13, 2026"
529 date other year: hiển thị "Mar 13, 2025"
530}
531```
532
533---
534
535### PHẦN 8: DANH SÁCH KIỂM TRA XÁC MINH TRIỂN KHAI (IMPLEMENTATION VERIFICATION CHECKLIST)
536
537Sau khi triển khai, tác tử AI (hoặc lập trình viên con người) cần xác minh:
538
539```
540VERIFICATION:
541
542□ Mọi thành phần đều khớp chính xác với ma trận biến thể × kích thước
543□ Mọi trạng thái (hover, active, focus, disabled, loading) đều hoạt động đúng
544□ Thứ tự nhấn phím Tab tuân theo đúng thứ tự thị giác trên tất cả các trang
545□ Vòng sáng focus-visible xuất hiện khi điều hướng bằng bàn phím, không xuất hiện khi nhấp chuột
546□ Tất cả các hiệu ứng chuyển tiếp (transitions) đều sử dụng đúng thời lượng và hàm gia tốc (easing) đã chỉ định (không dùng mặc định của trình duyệt)
547□ Không xảy ra hiện tượng dịch chuyển bố cục trong quá trình tải trang (kiểm tra chỉ số CLS)
548□ Các trạng thái khung xương (skeleton) khớp với kích thước nội dung cuối cùng
549□ Tất cả các trường hợp biên từ Phần 7 đều đã được xử lý
550□ Vùng chạm cảm ứng ≥ 44×44px trên các điểm ngắt (breakpoints) di động
551□ Không xuất hiện thanh cuộn ngang ở bất kỳ điểm ngắt nào
552□ Tất cả hình ảnh đều sử dụng next/image với thuộc tính prop sizes chính xác
553□ Các giá trị Z-index chỉ sử dụng thang đo đã được định nghĩa
554□ Các trạng thái lỗi hiển thị chính xác (kiểm thử bằng tính năng bóp băng thông mạng - network throttle)
555□ Các trạng thái trống hiển thị chính xác (kiểm thử với dữ liệu rỗng)
556□ Việc cắt bớt văn bản hoạt động chuẩn xác tại các độ dài ranh giới
557□ Các token chế độ tối (Dark mode - nếu có áp dụng) đều đã được ánh xạ đầy đủ
558```
559
560---
561
562## Cách Tác tử AI Nên Sử dụng Tài liệu Này
563
564Hãy đưa hướng dẫn này vào đầu tài liệu bàn giao được tạo ra
565để AI thực thi biết cách làm việc với tài liệu đó:
566
567```
568INSTRUCTIONS FOR AI IMPLEMENTATION AGENT:
569
5701. Đọc kỹ toàn bộ tài liệu này trước khi viết bất kỳ dòng mã nào.
5712. Triển khai theo đúng thứ tự được chỉ định trong PHẦN 1 (Sơ đồ Triển khai - Implementation Map).
5723. Tham chiếu tệp CLAUDE.md để lấy giá trị của các token. Nếu một token được tham chiếu ở đây
573 không có trong CLAUDE.md, hãy gắn cờ cảnh báo nó và sử dụng giá trị dự phòng (fallback) được cung cấp.
5744. Mọi giá trị trong tài liệu này đều có chủ đích rõ ràng. Không tự ý thay thế
575 bằng các giá trị "gần giống". `gap-6` có nghĩa là `gap-6`, không phải `gap-5`.
5765. Mọi trạng thái đều phải được triển khai đầy đủ. Nếu một trạng thái không được chỉ định cho
577 một thành phần, đó là một khoảng trống trong bản đặc tả — hãy gắn cờ cảnh báo, đừng tự đoán.
5786. Sau khi triển khai xong mỗi thành phần, hãy duyệt qua ma trận trạng thái của nó
579 và xác minh tất cả các trạng thái đều hoạt động tốt trước khi chuyển sang thành phần tiếp theo.
5807. Khi gặp điểm chưa rõ ràng, hãy ưu tiên cách hiểu tường minh hơn.
581 Nếu vẫn còn mơ hồ, hãy thêm một dòng ghi chú TODO: "// HANDOFF-AMBIGUITY: [description]"
582```
583```
584
585---
586
587## Ghi chú Tùy chỉnh (Customization Notes)
588
589**Nếu bạn không sử dụng Tailwind:** Hãy thay thế tất cả các tham chiếu lớp Tailwind trong prompt bằng các giá trị tương đương trong hệ thống của bạn. Cấu trúc vẫn giữ nguyên — chỉ có định dạng giá trị là thay đổi. Hãy nói với Claude: "Sử dụng các thuộc tính tùy chỉnh CSS (CSS custom properties) làm chính, các giá trị px làm chú thích đi kèm."
590
591**Nếu bạn đang bàn giao cho một công cụ AI cụ thể:** Hãy thêm các ghi chú đặc thù cho công cụ đó. Ví dụ, đối với Cursor: "Tạo bản triển khai dưới dạng các bước chỉnh sửa từng phần trên các tệp hiện có, không viết đè lại toàn bộ tệp." Đối với Claude Code: "Tạo mỗi thành phần thành một tệp hoàn chỉnh, kiểm thử nó, sau đó mới chuyển sang thành phần tiếp theo."
592
593**Nếu chưa có tệp CLAUDE.md:** Hãy yêu cầu prompt tạo một phần token tối giản ở ngay đầu tài liệu bàn giao, chỉ bao gồm các token cần thiết cho đợt bàn giao cụ thể này. Nó sẽ không phải là một hệ thống thiết kế (design system) đầy đủ, nhưng sẽ ngăn chặn được tình trạng gắn cứng (hardcode) các giá trị.
594
595**Đối với các dự án nhiều trang:** Hãy chạy prompt một lần cho mỗi trang, nhưng chỉ đưa Phần 1 (Sơ đồ Triển khai) và Phần 2 (Đặc tả Toàn cục) vào lần chạy đầu tiên. Các trang tiếp theo sẽ tham chiếu lại cùng những thông số toàn cục đó.
596

Bình luận (0)

Kỹ năng liên quan

Thiết kế Trang Kiểm thử Tính năng cho Enterprise WeChat/DingTalk

Kỹ năng

Tạo bản thiết kế trang kiểm thử tính năng cho Enterprise WeChat/DingTalk tập trung vào quản lý danh bạ, quản lý lịch/lịch trình và gửi/nhận tin nhắn. Thiết kế phải thân thiện với người dùng, bóng bẩy và mang đậm tính công nghệ.

L@Leo
0

Công cụ Kiểm toán Độ tương phản Màu sắc cho Khả năng Tiếp cận

Kỹ năng

Kiểm toán các cặp màu tiền cảnh/hậu cảnh theo độ tương phản WCAG 2.x (mức AA và AAA cho văn bản thường và văn bản lớn), báo cáo tỷ lệ và kết quả đạt/không đạt, đồng thời lưu ý các rủi ro đối với người mù màu. Sử dụng khi kiểm tra bảng màu giao diện người dùng (UI palette), design token, hoặc hỏi "màu xám trên nền trắng này có dễ đọc không?". Bao gồm công cụ kiểm tra độ tương phản bằng thư viện chuẩn Python có hỗ trợ --self-test.

F@f
0

Kỹ năng Tái tạo Thiết kế Trang web

Kỹ năng

Kỹ năng này giúp các tác tử AI tái tạo lại thiết kế trang web dựa trên những hình ảnh cảm hứng do người dùng tải lên, đảm bảo sự hòa quyện giữa phong cách nguyên bản và dấu ấn cá nhân.

H@hrishirajnagawade
0