Ứng dụng quản trị nền tảng (platform-admin) là nơi đội SkillPixel quản lý mọi tổ chức trên hệ thống. Giao diện mới chia các mục quản lý tổ chức thành từng nhóm trong menu bên trái. Mỗi trang tập trung vào một công việc và có URL riêng để gửi cho đồng nghiệp.
PR #549 · 9/10/2026
Tình trạng ngày 9/10/2026
Giai đoạn
Đang chờ review. PR chưa được merge vào main, chưa lên beta và chưa có trong bản production nào.
PR
#549 gồm 7 commit trên nhánh main. PR làm lại giao diện và cách xử lý thao tác của ứng dụng quản trị nền tảng. Phần máy chủ (API), cơ sở dữ liệu và client sinh tự động giữ nguyên.
Ticket
PR này chưa liên kết với ticket Jira nào.
Kiểm thử
Đã chạy lint, type check, 194 test tự động (Vitest) và build trên commit cuối. Các thao tác thay đổi dữ liệu đã được QA trên trình duyệt ở máy phát triển. Chưa kiểm thử trên beta.
Ảnh và video
Toàn bộ ảnh chụp và video được thực hiện trên máy phát triển với dữ liệu mẫu. Tên và số liệu không phải dữ liệu khách hàng. Bản mới là bản build production từ commit cuối của PR. Bản cũ chạy từ nhánh main.
Vì sao phải làm lại
Qua nhiều lần cập nhật, các tính năng mới của ứng dụng quản trị nền tảng đều được thêm vào những trang có sẵn. Trang của một tổ chức có mười tab nằm ngang, trộn lẫn mức sử dụng, thanh toán và quyền truy cập. Riêng tab Mức sử dụng đã dài khoảng 8.400 pixel, còn tab Tính năng là một danh sách dài không có ô tìm kiếm. Các tab không có URL riêng, nên không gửi được đường dẫn tới đúng chỗ cho đồng nghiệp. Bản làm lại giữ nguyên mọi tính năng và chỉ sắp xếp lại, để mỗi việc nằm ở đúng một chỗ.
Thay đổi chính
1
Menu chia nhóm
Mười tab ngang thành menu bên trái với bốn nhóm: Mức sử dụng, Thanh toán, Cấu hình, Quyền truy cập.
→
2
Trang gọn hơn
Nội dung dài được chia thành các tab. Bảng số liệu chi tiết được thu gọn và chỉ mở khi cần xem.
→
3
Bảng và biểu mẫu thống nhất
Các thao tác với từng dòng nằm trong menu cuối dòng. Các biểu mẫu như Gói và giới hạn, Thiết lập AI, Thương hiệu chỉ có một nút "Lưu" ở đầu trang.
→
4
URL, giao diện và ngôn ngữ
URL lưu lại trang đang xem, bộ lọc đã chọn và khung chi tiết đang mở. Có thể chọn giao diện sáng, tối hoặc theo cài đặt hệ thống, cùng ngôn ngữ tiếng Anh hoặc tiếng Việt.
Video giới thiệu
Dài 3 phút 41 giây. Giọng đọc tiếng Anh, phụ đề tiếng Việt bật sẵn (có thể chọn phụ đề tiếng Anh). Chấm xanh là con trỏ chuột. Phần đầu là bản cũ (góc trên ghi "TRƯỚC"), phần sau là bản mới ("SAU").
Nội dung video
0:00 Giới thiệu.
0:07 Bản cũ: mười tab trên trang tổ chức, cuộn hết tab Mức sử dụng, rồi tab Tính năng.
1:00 Chuyển sang bản mới.
1:03 Menu bên trái và trang Tổng quan, với một dòng trạng thái cho từng mục.
1:28 Mức sử dụng: chọn tab "Dung lượng" và mở mục "Chi tiết".
1:42 Tính năng: tìm "docx", bật rồi tắt bộ lọc "Chỉ hiện mục đã đổi", bấm "Sửa" để mở khung chỉnh sửa bên phải.
2:00 Cấu hình: mở "Ghi đè của tổ chức" của thiết lập Contests (cuộc thi) để xem giá trị riêng của từng tổ chức.
2:08 Gói và giới hạn: nhập 50 GB vào "Dung lượng", nút "Lưu" bấm được, rồi bấm "Lưu".
2:25 Giao dịch: số giao dịch theo trạng thái, bảng, rồi "Chi tiết giao dịch". Sau đó là Cổng thanh toán.
2:44 Tên miền: mở "Chi tiết" của một tên miền riêng đang chờ xác minh.
2:55 Thành viên: menu thao tác của một dòng. Sau đó là Vùng nguy hiểm.
3:10 Đổi giao diện sáng, tối, theo hệ thống, rồi đổi ngôn ngữ sang English và quay về Tiếng Việt.
3:33 Kết thúc ở danh sách Tổ chức.
Video có ba chỗ khác ảnh chụp. Khi quay video, giới hạn dung lượng 50 GB đã được lưu vào dữ liệu mẫu, rồi xóa sau đó. Vì vậy, ảnh chụp chỉ còn "1 giá trị ghi đè". Tên miền hoc.example.com được tạo riêng cho video và đã xóa sau khi quay. Ở vài cảnh, dòng điều hướng ở đầu trang hiện mã định danh (ID) của tổ chức thay cho tên SkillPixel. Đây là lỗi nhỏ của bản mới, xem phần Giới hạn.
Trước và sau
Bốn thay đổi lớn nhất về cách sắp xếp, kèm lý do của từng thay đổi.
Mười tab ngang thành menu chia nhóm
Mười tab nằm trên một hàng, trộn mức sử dụng, thanh toán và quyền truy cập, nên muốn tìm một thiết lập phải mở lần lượt từng tab. Giờ các mục nằm trong menu bên trái, chia bốn nhóm, và mục nào cũng có URL riêng.
TRƯỚC. Hàng tab: Tổng quan, Mức sử dụng, Thanh toán, Tính năng, Tên miền, Thành viên, Lời mời, Thương hiệu, Email, Vùng nguy hiểm.SAU. Menu bên trái: Tổng quan, bốn nhóm Mức sử dụng, Thanh toán, Cấu hình, Quyền truy cập, và Vùng nguy hiểm ở cuối. Menu hiện số lượng bên cạnh "Tên miền" và "Thành viên", lần lượt là 4 và 103.
Trang Mức sử dụng dài 8.400 pixel thành ba nhóm số liệu
Tab cũ xếp chồng thành viên, dung lượng, email, AI và giới hạn của gói trên một trang dài khoảng 8.400 pixel. Trang Mức sử dụng mới có ba tab: "Thành viên & MAU", "Dung lượng" và "Email". MAU là số người dùng có hoạt động trong tháng. Mỗi tab có một hàng số liệu, một biểu đồ, còn bảng dài thu gọn trong mục "Chi tiết". AI có trang riêng, giới hạn chuyển sang nhóm Thanh toán.
TRƯỚC. Toàn bộ tab Mức sử dụng của SkillPixel, tháng 10/2026, cao 8.478 pixel. Bấm để xem ảnh đầy đủ.SAU. Cùng tổ chức, cùng tháng, cả trang cao 960 pixel: 103 người dùng đã đăng ký (giới hạn 1,000), 8 người mới trong kỳ, 9 người hoạt động trong tháng, biểu đồ hằng ngày và mục "Chi tiết" đang đóng.
Danh sách Tính năng có thêm tìm kiếm và bộ lọc
Tab cũ có danh sách dài, không có ô tìm kiếm hay bộ lọc để xem các thiết lập khác mặc định. Ở bản mới, mỗi thiết lập nằm trên một dòng. Có thể tìm kiếm hoặc chọn "Chỉ hiện mục đã đổi". Các thông số liên quan nằm ngay dưới công tắc bật/tắt tính năng. Bấm "Sửa" để mở khung chỉnh sửa bên phải. Trang Cấu hình của nền tảng cũng dùng cách trình bày này.
TRƯỚC. Toàn bộ tab Tính năng của SkillPixel. Bấm để xem ảnh đầy đủ.SAU. Tìm "docx" và bấm "Sửa" ở mục "DOCX import max file size (MiB)", tức dung lượng tối đa của tệp DOCX được nhập vào hệ thống. Khung bên phải có key của thiết lập, giá trị hiện tại 10, nguồn "Mặc định" và ô nhập giá trị mới.
Chuyển các nút đổi vai trò vào menu thao tác
Ở bản cũ, mỗi dòng thành viên có ba nút để đổi vai trò trực tiếp và một nút xóa, rất dễ bấm nhầm. Giờ mỗi dòng chỉ hiện vai trò, còn thao tác nằm trong menu "⋯": "Sửa vai trò" mở hộp thoại, "Gỡ khỏi tổ chức" cần xác nhận.
TRƯỚC. Mỗi dòng có các nút Quản trị viên, Giảng viên, Học viên và nút xóa.SAU. 103 thành viên, lọc theo vai trò và tìm kiếm được. Menu của một dòng có "Sửa vai trò" và "Gỡ khỏi tổ chức".
Giới thiệu từng mục
Các ảnh dưới đây chụp tổ chức SkillPixel với dữ liệu mẫu, giao diện sáng và ngôn ngữ tiếng Việt, trên màn hình máy tính rộng 1440 pixel.
Danh sách tổ chức
Bốn chỉ số: 4 tổ chức, 3 đang hoạt động, 104 thành viên, 7 tên miền. Bảng sắp xếp được theo từng cột, lọc theo trạng thái (Tất cả, Đang hoạt động, Đã khởi tạo, Tạm ngưng, Đã lưu trữ) và tìm theo tên, slug (mã dùng trong đường dẫn) hoặc tên miền.Nút "Tạo tổ chức" mở hộp thoại này. Ô "Slug" được gợi ý từ tên tổ chức và dùng trong đường dẫn, tên miền phụ do SkillPixel quản lý. Tổ chức mới có trạng thái "Đã khởi tạo". Sau khi thêm tên miền và thành viên, quản trị viên chuyển tổ chức sang "Đang hoạt động".
Tổng quan của một tổ chức
Đầu trang luôn có tên tổ chức, trạng thái, nút "Mở trang" và "Đổi trạng thái". Bốn chỉ số: 103 thành viên, 7 khóa học (5 đã xuất bản), 19 lượt ghi danh, doanh thu thuần 30 ngày khoảng 2 triệu đồng từ 7 đơn hàng. Phía dưới là mục "Các mục", mỗi mục một dòng trạng thái.
Mức sử dụng và AI
Tab "Dung lượng", tháng 10/2026: đã dùng 6.3 GB, trong đó video 4.1 GB, lần đo gần nhất 04/10/2026. Mục "Chi tiết" đang mở, có bảng 6 tháng qua và bảng theo tính năng.Trang AI, tháng 10/2026: 961.8K token qua 117 lượt gọi AI, chi phí ước tính 1.13 USD. Token là đơn vị đo lượng nội dung AI xử lý. Cuối trang là "Bảng kê AI" ở trạng thái "Chưa chốt", với nút "Chốt tháng" và "Tải CSV".
Thanh toán
Gói và giới hạn: tổ chức chưa được gán gói dịch vụ hay kênh bán. Có một giới hạn riêng ("1 giá trị ghi đè"): "Giới hạn tài khoản" đặt ở mức 1,000. Nút "Lưu" ở góc trên chỉ bấm được khi có thay đổi.Giao dịch, tháng 10/2026: doanh thu thuần 798.000 VND, tỷ lệ thất bại 33.3%. Các nút trạng thái (Đang chờ 2, Thành công 2, Thất bại 1...) lọc bảng bên dưới. Danh sách có 16 giao dịch.Bấm một dòng sẽ mở "Chi tiết giao dịch": Thành công qua Alepay, số tiền 699.000 VND, giảm giá 100.000 VND, thành tiền 599.000 VND, cùng mã giảm giá (dòng "Mã voucher"), mã giao dịch và mã đơn hàng của cổng thanh toán.Cổng thanh toán được tách thành mục riêng. Alepay và SePay đang bật, mỗi cổng có nút "Thiết lập". Ngân Lượng đang tắt và không dùng được.
Cấu hình
Trên trang Cấu hình của nền tảng, bấm số tổ chức ở một thiết lập để mở "Ghi đè của tổ chức". Thiết lập cuộc thi ("Contests") đang tắt ở cấp nền tảng (false). Cả 4 tổ chức đều đặt riêng thành bật (true).Thiết lập AI được tách thành trang riêng, để chọn bên cung cấp key AI và mô hình AI. Ảnh đang chọn "Key của SkillPixel" và Gemini 3.8 Flash, nghĩa là SkillPixel quản lý key và trả phí sử dụng AI.Trang Thương hiệu gồm hình ảnh, màu sắc, thông tin liên hệ, liên kết mạng xã hội và mục "SEO" (tên trang và cách công cụ tìm kiếm lập chỉ mục). Cả trang chỉ có một nút "Lưu" ở đầu trang.Email: nội dung email bên trái, bản xem trước bên phải.
Quyền truy cập
Khung chi tiết của tên miền riêng hoc.example.com cho biết cần thêm gì ở nơi quản lý DNS. Bản ghi TXT dùng để xác minh quyền sở hữu. Bản ghi CNAME trỏ tên miền về customers.skillpixel.vn. Trên máy phát triển, hai điều kiện kích hoạt chưa đạt: xác minh quyền sở hữu tên miền và cấu hình Cloudflare. Tên miền này được tạo để minh họa và đã xóa sau đó.Lời mời: 2 lời mời đang chờ. Lọc được theo Đang chờ, Đã chấp nhận, Đã hết hạn, Đã thu hồi. Gửi lại và thu hồi nằm trong menu cuối dòng.Vùng nguy hiểm gom Đổi tên, Lưu trữ và Xóa vĩnh viễn. SkillPixel là tổ chức mặc định nên không lưu trữ hay xóa được, và trang ghi rõ lý do.
Các trang của nền tảng
Người dùng: menu cuối dòng có "Cấp quyền quản trị" (quyền quản trị toàn nền tảng) và "Vô hiệu hóa" (khóa tài khoản).Nhật ký hoạt động: 30 sự kiện gần nhất, chia theo ngày, lọc theo Tổ chức, Tên miền, Thành viên, Lượt đăng ký.
Giao diện sáng và tối
Giao diện sáng.Cùng trang, giao diện tối. Ba nút ở góc trên bên phải chọn sáng, tối hoặc theo hệ thống.
Cách làm những việc thường gặp
Mở một mục của tổ chức
Vào "Tổ chức" và bấm tên tổ chức. Chọn mục trong menu bên trái, ví dụ "Gói và giới hạn" trong nhóm Thanh toán. URL trên thanh địa chỉ trỏ đến mục đang xem. Gửi URL này để đồng nghiệp mở đúng trang.
Tìm một feature flag
Mở "Tính năng" của tổ chức (hoặc "Cấu hình" để xem giá trị toàn nền tảng). Nhập tên, key hoặc mô tả vào ô tìm kiếm. Bấm "Chỉ hiện mục đã đổi" để chỉ xem các thiết lập khác mặc định. Bấm công tắc để bật hoặc tắt tính năng ngay, không cần bấm "Lưu". Với các thông số như dung lượng tệp tối đa, bấm "Sửa", nhập giá trị rồi bấm "Lưu" trong khung bên phải.
Đặt giới hạn riêng cho tổ chức
Mở "Gói và giới hạn" và nhập giá trị vào cột "Ghi đè" của dòng cần đổi. Nút "Lưu" ở góc trên bấm được. Bấm "Lưu", cột "Đang áp dụng" chuyển sang giá trị mới với nhãn "Ghi đè". Muốn dùng lại giá trị của gói, xóa giá trị trong ô "Ghi đè" rồi bấm "Lưu".
Cột "Gói có" là giá trị của gói, "Ghi đè" là giá trị riêng của tổ chức, "Đang áp dụng" là giá trị đang có hiệu lực.
Đổi giao diện và ngôn ngữ
Ba nút ở góc trên bên phải chọn giao diện sáng, tối hoặc theo hệ thống. Nút có lá cờ bên cạnh đổi giữa English và Tiếng Việt. Ứng dụng nhớ lựa chọn trên trình duyệt đó.
Những gì đã kiểm tra
Không bỏ tính năng nào. Đợt review code đã đối chiếu từng tab cũ với màn hình mới và xác nhận các thao tác cũ vẫn còn, chỉ đổi vị trí.
Cách kết nối với máy chủ không đổi. Giao diện mới dùng lại đúng các API đọc và lưu dữ liệu hiện có. PR không thay đổi API hay cơ sở dữ liệu.
Lưu xong là màn hình cập nhật ngay. Khi kiểm thử trên trình duyệt, màn hình cập nhật ngay sau các thao tác thay đổi dữ liệu, không cần tải lại trang. Các thao tác đã thử gồm đổi trạng thái, lưu trữ, khôi phục, đổi tên và đặt giới hạn riêng. Các mục Thương hiệu, Thành viên, Lời mời, Tên miền, Tính năng, Thiết lập AI và quyền quản trị cũng đã được kiểm thử.
Hai ngôn ngữ luôn đủ chữ. Một test tự động đối chiếu nội dung giao diện tiếng Anh và tiếng Việt, rồi báo lỗi nếu bên nào thiếu mục tương ứng. Bản tiếng Việt đã được GPT-6.1 Sol rà soát.
Hạn chế và việc cần xử lý
Dòng điều hướng đôi khi hiện mã định danh thay cho tên tổ chức. Lỗi xuất hiện khi mở trang Tổng quan rồi chuyển sang mục khác, như trong video. Tải lại trang thì hiện đúng tên. Lỗi được phát hiện khi quay video và cần sửa trước khi merge PR.
Trên máy phát triển, chưa chuyển được tổ chức từ "Tạm ngưng" về "Đang hoạt động". Hệ thống yêu cầu tổ chức có đủ quyền sử dụng dịch vụ (entitlement) và ít nhất một quản trị viên của tổ chức. Các tổ chức mẫu chưa đủ điều kiện. Hộp thoại mới hiện rõ lý do chưa kích hoạt được.
Máy chủ chưa từ chối giá trị âm cho các thông số. Giao diện mới chặn số âm, nhưng máy chủ vẫn nhận giá trị này nếu gửi thẳng qua API. Cần bổ sung kiểm tra ở phía máy chủ.
Tên và mô tả trong danh mục cấu hình vẫn là tiếng Anh. Các tên như "DOCX import max file size" lấy từ danh mục cấu hình của máy chủ và giữ bằng tiếng Anh, có chủ ý. Một số dòng giải thích điều kiện kích hoạt tên miền cũng chưa có bản tiếng Việt.
Bộ lọc ở Nhật ký hoạt động chỉ lọc các sự kiện đã tải về. Bộ lọc không tìm trong toàn bộ lịch sử, vì API chỉ nhận một loại sự kiện mỗi lần, còn mỗi nhóm lọc trên giao diện gồm nhiều loại.
Chưa thử được luồng khởi tạo tên miền do SkillPixel quản lý. Quy trình này chỉ chạy trên beta và production. Trên máy phát triển, khung chi tiết báo lỗi 503 (dịch vụ chưa sẵn sàng).
Menu ngôn ngữ phải bấm hai lần ngay sau khi đổi ngôn ngữ. Vừa đổi xong, lần bấm đầu vào nút ngôn ngữ không mở menu, lần thứ hai mới mở. Lỗi nhỏ, cũng phát hiện khi quay video.
Chỉ dành cho màn hình máy tính. Bản mới nhắm tới màn hình rộng 1280 đến 1600 pixel. Giao diện điện thoại không nằm trong phạm vi lần này.
Các quyết định
Câu hỏi
Lựa chọn
Có sửa API không?
Không. Chỉ thay đổi giao diện và cách xử lý thao tác trên trình duyệt.
Giới hạn của gói nằm ở đâu?
Trong "Gói và giới hạn" thuộc nhóm Thanh toán, vì giới hạn là thiết lập của gói, không phải số liệu sử dụng.
Cổng thanh toán nằm ở đâu?
Một mục riêng, tách khỏi Giao dịch, vì đó là cấu hình chứ không phải lịch sử giao dịch.
Thiết lập AI nằm ở đâu?
Một mục riêng trong nhóm Cấu hình, tách khỏi Tính năng.
Đặt tên mục thanh toán trong menu thế nào?
Dùng "Thanh toán" cho tên nhóm và "Giao dịch" cho trang danh sách giao dịch, để dễ phân biệt.
Thao tác nguy hiểm đặt ở đâu?
Trong menu cuối dòng hoặc Vùng nguy hiểm, và luôn có bước xác nhận.
Giao diện và ngôn ngữ?
Hỗ trợ sáng, tối và theo hệ thống trên mọi màn hình. Có giao diện tiếng Anh và tiếng Việt.
Các bước triển khai
Sửa lỗi dòng điều hướng hiện mã định danh thay cho tên tổ chức, rồi review và merge PR #549. Không cần migration cơ sở dữ liệu hay đổi cấu hình triển khai.
Sau khi merge, triển khai ứng dụng quản trị nền tảng lên beta theo quy trình hiện tại.
Kiểm thử trên beta: mở một tổ chức và xem từng mục trong menu. Đặt một giới hạn riêng, lưu rồi khôi phục giá trị ban đầu. Tìm một feature flag, mở chi tiết một giao dịch, đổi giao diện và ngôn ngữ.
Đưa thay đổi vào bản phát hành production tiếp theo theo quy trình hiện tại.