XU · APP UI

Voice agent UI · Light & Dark

Bấm thanh điều hướng, thẻ và nút trong từng màn hình để nhảy giữa các màn hình. Token và component nằm ở Design System.

1Trang chủ
Chào buổi sángMinh Anh
Từng kỳ 185k T3T4T5T6T7CNNay
Lũy kế 1,82tr T3T4T5T6T7CNNay
Hôm nay · T2, 26/10 4 khoản
185.000đ
12% so với hôm qua TB ngày 263k
Cà phê tăng 40%175k tuần này · 125k tuần trước
40%

Gần đây

Xem tất cả
Grab về nhàĐi lại · 17:45−40.000đ
Cơm trưaĂn uống · 12:30−65.000đ
Thưởng dự ánThưởng · 10:05+500.000đ
Cà phê sữaCà phê · 25/10 09:10−35.000đ

Hero ở light mode là thẻ sáng ấm (.hero.hero-home: surface → primary-soft, viền --line), số liệu dùng tông đậm --spend / --edu / --save; dark mode giữ khối than. Gần đây: 4 khoản mới nhất, chỉ để xem (không bấm), khoản thu có dấu + và màu --save, khoản không phải hôm nay ghi kèm ngày; “Xem tất cả” mở màn Giao dịch. Chưa có khoản: “Ví đang yên ắng. Chạm micro và kể Xu nghe khoản đầu tiên nhé!”. Lỗi tải: thông báo “Xu chưa tải được số liệu. Kéo xuống để thử lại nha.” thay cho các thẻ số liệu; kéo xuống để làm mới.

2Xu · Đang nghe (trên Trang chủ)
Chào buổi sángMinh Anh
Từng kỳ 185k T3T4T5T6T7CNNay
Lũy kế 1,82tr T3T4T5T6T7CNNay
Hôm nay · T2, 26/10 4 khoản
185.000đ
12% so với hôm qua TB ngày 263k
Tuần này1,24 tr
Tháng này6,85 tr
Grab về nhàĐi lại · 17:45−40.000đ
Cơm trưaĂn uống · 12:30−65.000đ
Đang ngheCứ nói, Xu đang nghe…

Khi Xu vào phiên, ô giọng nói trong hero đổi vai: Nói để ghi → Đang gọi Xu (vòng xoay, tạm khoá) → Dừng Xu (biểu tượng ✕, quầng san hô xu-ring); icon và chữ đổi bằng hiệu ứng pop. Island hiện “Đang nghe / Đang nói” với câu mới nhất của Xu (“Đợi Xu một xíu…” khi đang kết nối); nút gõ phím mờ (“Gõ phím, sắp có”) cho tới khi có tính năng gõ, nút ✕ dừng phiên. Nội dung trang chừa chỗ để island không che dòng cuối; khi phiên kết thúc, Trang chủ tự làm mới số liệu.

3Trợ lý · Mở Thống kê & trả lời

Thống kê

Tiêu vào đâu?

12 danh mục · 6,85 tr
Ăn uống2,10 tr
31%
Đi chợ1,51 tr
22%
Hoá đơn1,23 tr
18%
Đi lại820k
12%
Sức khoẻ460k
7%
Giải trí380k
5%
6,85trĐã chi
263kTB / ngày
−10%So với T9
Xu Tháng 10 bạn chi 6,85 tr. Ăn uống nhiều nhất, chiếm 31%.
Đang nóiĐã mở Thống kê · Tháng 10
4Trợ lý · Điền form & chờ xác nhận

Khoản chi mới

Xu đã điền · chưa lưu 65.000đ
Danh mục
Hôm nay, 12:30
Ăn với đồng nghiệp
Cần bạn xác nhậnLưu 65.000đ · Ăn uống?
5Trợ lý · Cập nhật thông tin & xác nhận

Cá nhân

Chờ xác nhận
Giọng trợ lý Nữ · miền BắcNữ · miền Nam
Ngôn ngữTiếng Việt
Giao diệnTheo hệ thống
Xu Đổi sang giọng nữ miền Nam nhé?
Cần bạn xác nhậnĐổi giọng trợ lý?
6Trợ lý · Bảng chi tiết, có phụ đề của bạn
Xu● Đang nghe
Mở thống kê tháng này09:41
Tháng 10 bạn chi 6,85 tr, ít hơn tháng 9 10%. Đã mở Thống kê
Ghi ăn trưa 65 nghìn với đồng nghiệp09:42
65.000đĂn uống · 12:30Đã lưu
Đổi giọng sang nữ miền Nam09:43
Đổi sang giọng nữ miền Nam nhé?
Giọng trợ lýChờ xác nhận
Nữ · miền BắcNữ · miền Nam
Ừ, đổi điĐang nói…
Đang nghe…
7Danh mục · Chi tiêu

Nút chuyển Chi tiêu | Thu nhập đổi cả trang: tổng, thanh tỷ trọng, lưới và nhãn sắp xếp. Mục đang chọn mang màu của loại (--spend / --save) kèm chấm màu, nên không chỉ dựa vào màu. Danh mục dùng cho cả hai loại có nhãn .tag-both và ở tab này chỉ tính khoản chi.

7bDanh mục · Thu nhập

Số tiền thu có dấu + và màu --save; thanh tỷ trọng dùng thang xanh --ch-inc-1…3, phần dưới 8% không ghi nhãn (giá trị vẫn có trong aria-label). Sắp xếp đổi thành “Thu nhiều”.

7cDanh mục · Thu nhập chưa có khoản

Danh mục

Thêm
Tháng 10 chưa có khoản thu nào Nói với Xu “nhận lương 15 triệu” là ghi xong, khỏi gõ. Nói với Xu

Danh mục thu

4 danh mục

Khi kỳ đang xem chưa có khoản thu, thẻ tổng được thay bằng lời mời nói với Xu; lưới vẫn hiện các danh mục thu để người dùng biết có sẵn những gì.

7dThêm danh mục

Danh mục mới

Hoặc nói với Xu: “tạo danh mục Gym màu hồng”, Xu điền giúp bạn.
Gym
Dùng cho
Màu
Biểu tượng
Ảnh của bạn
PNG, JPG hoặc WebP, tối đa 256 KB

Mở từ nút Thêm ở màn 7. “Dùng cho” mặc định theo tab đang xem (Chi tiêu hoặc Thu nhập). Ô xem trước cập nhật ngay theo tên, màu và biểu tượng; lưới biểu tượng tô theo màu đang chọn. Chọn ảnh của bạn thì bỏ chọn biểu tượng có sẵn và ngược lại. Ảnh được thu về 256 px trước khi tải lên. Dòng gợi ý nói với Xu là phần mới, app chưa có. Tên trùng danh mục hệ thống hoặc danh mục của bạn (kể cả “Hóa đơn” / “Hoá đơn”) bị từ chối, xem 7f.

7eSửa danh mục · ảnh của bạn, đang tải ảnh

Sửa danh mục

Gia đình
Dùng cho
Màu
Biểu tượng
Ảnh của bạn
Đang tải
PNG, JPG hoặc WebP, tối đa 256 KB

Mở từ ⋯ → Sửa danh mục ở màn 8 (chỉ danh mục của bạn). Form điền sẵn giá trị hiện tại, nút chính là Lưu và chỉ gửi trường đã đổi. Ảnh đang chọn có viền đậm; khi đang tải ảnh mới, ô Tải ảnh thành vòng xoay “Đang tải” và nút Lưu tạm khoá. Đổi phạm vi mà danh mục đã có khoản loại khác: “Danh mục đã có khoản không hợp với phạm vi mới”.

7fThêm danh mục · trùng tên (đã cuộn xuống cuối)

Danh mục mới

Hoặc nói với Xu: “tạo danh mục Gym màu hồng”, Xu điền giúp bạn.
Ăn uống
Dùng cho
Màu
Biểu tượng
Ảnh của bạn
PNG, JPG hoặc WebP, tối đa 256 KB Tên danh mục này đã có rồi

Lỗi hiện ngay trên nút chính và được đọc cho trình đọc màn hình. Các lỗi khác cùng vị trí: “Tên danh mục từ 1 đến 80 ký tự”, “Chỉ nhận ảnh PNG, JPG hoặc WebP”, “Ảnh lớn hơn 256 KB, chọn ảnh nhỏ hơn nhé”, “Chưa tải được ảnh, thử lại nhé”, “Máy chủ chưa bật tải ảnh”. Khi tạo bằng giọng nói, Xu kiểm tra trước: “Bạn có danh mục Ăn uống rồi nè”, và hỏi có muốn cập nhật danh mục đó không.

8Chi tiết danh mục · Chỉ chi

Ăn uống

Danh mục chi
2,10 tr 42 khoản · TB 50k
8%

Hôm nay

110k
12:30Cơm trưaĂn với đồng nghiệp65.000đ
07:30Phở bò

Hôm qua · 25/10

250k
19:00Lẩu nấmCuối tuần cùng gia đình210.000đ
11:45Bún chả40.000đ

T7 · 24/10

105k
18:30Cơm tối80.000đ
07:15Bánh mì25.000đ

Danh mục chỉ dùng cho một loại không có nút chuyển; dòng phụ dưới tên cho biết loại bằng chữ và chấm màu. Danh mục thu (Lương, Thưởng) dùng cùng bố cục với nền --save-bg như màn 8b.

8bChi tiết danh mục · Thu & chi, đang xem Thu

Gia đình

Thu & chi
+500k 2 khoản thu · TB 250k
25%

Hôm qua · 25/10

+300k
18:00Mẹ gửiTiền mừng sinh nhật+300.000đ

T2 · 05/10

+200k
09:15Anh hai trả tiền+200.000đ

Danh mục Thu & chi có nút chuyển ngay dưới tiêu đề, mỗi bên hiện luôn tổng của kỳ để thấy cả hai mà không cần bấm. Tab Thu đổi hero sang --save-bg, cột tuần sang --ch-inc-1, số tiền có dấu +; danh sách chỉ gồm khoản thu.

9Thống kê · Tháng

Thống kê

Tháng 10, 2026
6,85trĐã chi
263kTB / ngày
−10%So với T9

Tiêu vào đâu?

12 danh mục · 6,85 tr
Ăn uống2,10 tr
31%
Đi chợ1,51 tr
22%
Hoá đơn1,23 tr
18%
Đi lại820k
12%
Sức khoẻ460k
7%
Giải trí380k
5%

6 tháng gần đây

TB 7,2tr

Lịch chi tiêu

ÍtNhiều
T2T3T4T5T6T7CN

Tiết kiệm

+0,6tr so với T9
1,82,21,12,51,4 2,0 T5T6T7T8T9T10 Trung bình 1,8 tr/tháng · cao nhất T8

Khoản lớn nhất

1Tiền điện05/10820.000đ
2Đi chợ cuối tuần18/10450.000đ
3Lẩu nấm25/10210.000đ
9bThống kê · Ngày

Thống kê

Hôm nayThứ Hai, 26/10/2026
185kĐã chi
4Khoản
−30%So với TB ngày

Tiêu vào đâu?

3 danh mục · 185k
Ăn uống110k
59%
Đi lại40k
22%
Cà phê35k
19%

7 ngày gần nhất

TB 263k

Các khoản hôm nay

4
10Cá nhân

Cá nhân

Minh Anh[email]
12danh mục
248khoản đã ghi
36hội thoại

Giọng trợ lý

Tất cả 8 giọng
M Mai Đang dùngNữMiền Bắc
Giọng của bạnThu 15 giây hoặc tải file

Hội thoại gần đây

Tất cả
Học tài chính & đầu tưTrò chơi nhỏ để tiền lớn dần Sắp có

CHUNG

Ngôn ngữTiếng Việt
Giao diệnTheo hệ thống
Tiền tệVND

THÔNG BÁO

Nhắc ghi chi tiêuMỗi ngày · 21:00
Tóm tắt cuối tuần

BẢO MẬT

Thiết bị đăng nhập2
Đổi mật khẩu

Phiên bản 1.0.0

10bGiọng trợ lý

Giọng trợ lý

Giọng của bạn MớiXu sẽ nói bằng giọng của bạn
Thu 15s
MP3, WAV, M4A · 10–15 giây · chỉ dùng cho tài khoản của bạn
10cThu giọng của bạn

Thu giọng của bạn

Đọc to đoạn sau
Hôm nay mình đi chợ hết một trăm hai mươi nghìn, mua rau, thịt và một ít trái cây cho cả nhà.
0:09/ 0:15 Âm thanh rõ
Huỷ

Khởi động splash gốc tĩnh → hoạt ảnh khi app sẵn sàng

S0Splash gốc (tĩnh)
XuNói là ghi
S1Màn khởi động
XuNói là ghi

Xác thực khớp API /auth: đăng ký → xác minh → tự đăng nhập · quên → đặt lại → đăng nhập lại

A1Đăng nhập
Chào bạn!

Chào mừng trở lại

Nói là ghi, Xu lo phần còn lại.

Quên mật khẩu?

Chưa có tài khoản? Đăng ký

POST /auth/login trả cặp token. Sai email hoặc mật khẩu (401 invalid_credentials) hiện một lời nhắn chung dưới ô mật khẩu, không nói ô nào sai.

A1bĐăng nhập · email chưa xác minh
Còn một bước nữa!

Chào mừng trở lại

Nói là ghi, Xu lo phần còn lại.

Chưa có tài khoản? Đăng ký

Khi POST /auth/login trả 403 email_not_verified. Banner chỉ hiện ở lỗi này. Nút gọi /auth/resend-verification rồi mở A3 (mật khẩu vừa nhập được giữ trong bộ nhớ để dùng ở bước xác minh).

A2Đăng ký
Cùng gom vàng nào!

Tạo tài khoản

Miễn phí · chỉ cần email

Mạnh

Đã có tài khoản? Đăng nhập

POST /auth/register. Backend chỉ yêu cầu mật khẩu 8–128 ký tự; thanh độ mạnh chỉ là gợi ý. App giữ mật khẩu trong bộ nhớ (không lưu xuống máy) để dùng ở A3.

A3Xác minh email
Kiểm tra hộp thư nhé!

Nhập mã xác minh

Mã 6 số được gửi tới minhanh@xu.app · Đổi

Hết hạn sau 9:42

Không nhận được mã? Email có thể đã có tài khoản: Đăng nhập hoặc Quên mật khẩu

POST /auth/register luôn trả 202 kèm challenge_id, kể cả khi email đã tồn tại (khi đó không gửi mã), nên lời nhắn không khẳng định mã đã đến. Không có ô mật khẩu: app gửi lại mật khẩu đã nhập ở A2 cùng mã tới /auth/verify-email. Hết hạn 600 giây (expires_in), gửi lại sau 60 giây (resend_after).

A3bXác minh · mã chưa đúng
Ối, chưa khớp rồi…

Nhập mã xác minh

Mã 6 số được gửi tới minhanh@xu.app · Đổi

Hết hạn sau 7:15

Backend trả cùng một lỗi invalid_code cho mã sai, mã hết hạn và mã đã sai quá 5 lần, nên lời nhắn gộp cả ba và luôn mời gửi mã mới. Không hiển thị số lần thử còn lại (API không trả). Khi bị chặn tạm (429 rate_limited), nút gửi lại đếm ngược theo retry_after.

A3cXác minh xong · tự đăng nhập
Wow! Chào mừng tới Xu!

Xác minh xong!

Đang đăng nhập cho bạn…

Sau POST /auth/verify-email (204, không token), app tự gọi POST /auth/login bằng email và mật khẩu đã giữ từ A2 rồi vào Trang chủ. Nếu đăng nhập tự động lỗi, chuyển về A1 với email điền sẵn.

A4Quên mật khẩu
Quên mật khẩu? Không sao! ??
  1. 1Email
  2. 2Mã & mật khẩu mới

Quên mật khẩu

Nhập email, Xu gửi mã đặt lại cho bạn.

Nhớ ra rồi? Đăng nhập

POST /auth/forgot-password luôn trả 202, không cho biết email có tồn tại hay không, nên luôn chuyển sang A5.

A5Đặt lại mật khẩu
Sắp xong rồi!
  1. 1Email
  2. 2Mã & mật khẩu mới

Đặt mật khẩu mới

Nhập mã đã gửi tới minhanh@xu.app

Rất mạnh
Hết hạn sau 8:20

Mã và mật khẩu mới gửi cùng lúc tới POST /auth/reset-password. "Gửi lại mã" gọi lại /auth/forgot-password với email ở bước 1. Mã sai dùng cùng lời nhắn với A3b. Thành công thì sang A1c.

A1cĐăng nhập · sau khi đặt lại mật khẩu
Xong rồi! Đăng nhập lại nhé
Đổi mật khẩu thành côngMật khẩu mới đã có hiệu lực
  • Đã đăng xuất khỏi mọi thiết bị
  • Đăng nhập lại bằng mật khẩu mới

Đăng nhập lại

Chưa có tài khoản? Đăng ký

POST /auth/reset-password trả 204, không có token và thu hồi mọi phiên. Vì vậy quay về đăng nhập, điền sẵn email.