Tiêu chuẩn UI
Tổng quan
AI App là trải nghiệm do developer xây dựng, chạy bên trong giao diện Chat của V-App. App mở rộng khả năng hội thoại mà không phá vỡ flow — hiển thị qua card nhẹ, carousel, fullscreen view, và các display mode tích hợp liền mạch.
Trước khi thiết kế UI, hãy đảm bảo bạn đã đọc Tiêu chuẩn UX để nắm nguyên tắc trải nghiệm.
Display Modes
Inline Card
Widget nhỏ gọn, nằm trực tiếp trong luồng hội thoại. Xuất hiện trước model response.
Khi nào dùng:
- Widget self-contained (audio player, score card)
- Dữ liệu structured đơn giản (bản đồ, order summary, trạng thái)
- Một action hoặc quyết định (xác nhận booking)
Quy tắc:
- ❌ Không duplicate input của Chat (không tạo text field giống composer)
- ❌ Không nested scrolling — card tự fit nội dung
- ❌ Không deep navigation trong card — tách thành nhiều cards hoặc tools
- Tối đa 2 actions per card: 1 primary CTA + 1 secondary CTA
Inline Carousel
Nhiều cards xếp ngang, cho phép user quét nhanh và chọn.
Khi nào dùng:
- Items có visual content và metadata nhiều hơn simple rows
- Danh sách items tương tự (nhà hàng, playlist, sự kiện)
Quy tắc:
- Visual hierarchy nhất quán giữa các cards
- Mỗi card tối đa 1 CTA ("Đặt bàn", "Phát nhạc")
- Metadata tối đa 3 dòng
- 3–8 items per carousel cho dễ quét
Fullscreen (coming soon)
Toàn màn hình, dành cho workflow phức tạp. Composer vẫn hiển thị overlay — user tiếp tục "nói chuyện với app" trong fullscreen.
Khi nào dùng:
- Duyệt nội dung chi tiết (bất động sản, menu)
- Task phức tạp không gói gọn trong 1 card (bản đồ interactive, editor, diagram)
Quy tắc:
- Dùng fullscreen để đào sâu, không để sao chép native app
- Thiết kế UX tương thích với system composer (luôn hiện)
Picture-in-Picture (PiP) (coming soon)
Cửa sổ nổi persistent, tối ưu cho session liên tục (game, video). PiP vẫn hiển thị khi user tiếp tục chat, và có thể update động theo prompts.
Khi nào dùng:
- Hoạt động chạy song song với hội thoại (game, quiz, collab, video)
- Widget cần phản ứng với chat input
Quy tắc:
- ❌ Không overload PiP với controls hay static content
- Tự đóng PiP khi session kết thúc
- PiP state phải update/respond khi user tương tác qua composer
Visual Design Guidelines
Color
| ✅ Nên | ❌ Không nên |
|---|---|
| Brand accent color cho primary buttons | Custom gradients phá vỡ giao diện Chat |
| System colors cho text, icons, dividers | Thay đổi text colors mặc định |
| Brand color cho accents và badges | Bao phủ toàn bộ widget bằng brand color |
Typography
- Hạn chế variation font size — ưu tiên body và body-small
- Luôn kế thừa system font stack — không dùng custom fonts, kể cả trong fullscreen
Spacing & Layout
- Giữ visual hierarchy: headline → supporting text → CTA theo thứ tự rõ ràng
- Tôn trọng system corner radius
- Padding nhất quán, tránh nhét sát lề
- Dùng system grid spacing cho cards, collections
Icons & Imagery
- Ảnh phải tuân thủ enforced aspect ratios — không bóp méo
- KHÔNG nhúng logo trong response — V-App tự thêm logo + app name trước widget
- Dùng system icons hoặc custom icons đơn sắc, kiểu outline
Accessibility
| Yêu cầu | Mô tả |
|---|---|
| Text resizing | Layout không vỡ khi user tăng cỡ chữ |
| Alt text | Tất cả images phải có alt text |
| Contrast | Text và background tối thiểu WCAG AA contrast ratio |
| Focus states | Keyboard navigation phải có focus indicators |
Responsive Design
Widget chạy trong iframe trên cả desktop và mobile:
- Adaptive breakpoints — Set max-width, layout collapse gracefully trên màn hình nhỏ
- No hover-only actions — Mobile không có hover, cần fallback cho touch
- Launcher transitions — Khi expand sang fullscreen, navigation elements phải giữ visible
- Dark mode — Tôn trọng system dark mode (match
color-scheme)