Editor bài tập và cuộc thi theo bố cục trang Cài Đặt AI
Hai trang giảng viên dùng để tạo và sửa bài tập, cuộc thi giờ có cùng bố cục với trang Cài Đặt AI của tenant admin. Mọi trường, nút và quy tắc kiểm tra cũ vẫn còn. Chỉ cách sắp xếp thay đổi.
SP-781 · 03/10/2026
Trạng thái tính đến ngày 3 tháng 10 năm 2026
Giai đoạn
Đã merge vào main, nên đã có trên beta. Chưa phát hành lên production. Tag production mới nhất là v0.0.49 của ngày 28/09/2026, và tag này không chứa PR nào dưới đây.
PR
#517 Khóa thiết kế, chỉ có tài liệu: phương án đã chọn, bảng design token và các bản mock. Merge vào main ngày 03/10/2026.
PR
#518 Các thành phần dùng chung của bố cục settings, và editor bài tập. Merge vào main ngày 03/10/2026, sau #517.
PR
#521 Editor cuộc thi và ô chọn ngày giờ kiểu ô nhập. Merge vào main ngày 03/10/2026, sau #518. PR này thay cho #519. GitHub tự đóng #519 khi nhánh của #518 bị xóa.
Sau review
#521 có thêm hai bản sửa. Lưu trữ và khôi phục cuộc thi giờ hỏi lại bằng hộp thoại, và chữ trong ô chọn ngày có cùng cỡ với các ô nhập. Ảnh và video chụp sau khi cả ba PR đã merge, nên đã có hai bản sửa này.
Ticket
SP-781. Trạng thái Jira ngày 03/10/2026 là Testing.
Beta
Chưa có ai đi thử bốn màn hình trên beta.
Ảnh và video
Toàn bộ ảnh và video đến từ một local stack chạy main ở commit 83167cd1, với mock data. Tên và số liệu không có thật. Không có ảnh nào chụp trên beta.
Vì sao đổi
Giảng viên mở editor bài tập và editor cuộc thi mỗi lần soạn đề hay tổ chức một cuộc thi. Bản cũ chia nội dung thành nhiều card với tiêu đề nhỏ viết hoa. Phần đầu trang bài tập dồn nút quay lại, tiêu đề, badge lưu trữ, công tắc công khai, nút lưu trữ và nút lưu vào một hàng, và trạng thái hiện bằng bốn kiểu badge khác nhau. Chủ sản phẩm đánh giá hai trang này khó dùng. Trang Cài Đặt AI của tenant admin đã có bố cục gọn hơn, nên hai editor dùng lại bố cục đó. Các phần giờ phẳng và có tiêu đề. Trường nào cũng gồm nhãn, ô nhập và dòng gợi ý. Chấm trạng thái thay cho badge. Thanh lưu dính ở đầu trang, và phần lưu trữ nằm cuối trang, có hộp thoại xác nhận. Công tắc công khai chuyển vào phần Thông tin cơ bản, lựa chọn cách tính giờ thành một danh sách radio phẳng, và ô chọn ngày giờ trông như một ô nhập.
Trang mẫu, Cài Đặt AI của tenant admin. Một câu mô tả dưới tiêu đề. Phần "Chế độ API key AI" có chấm xám "Managed bởi SkillPixel". Phần "Model" có nhãn, ô chọn Gemini 3.8 Flash và dòng gợi ý.Editor bài tập mới, cùng kiểu. Link "Quay lại danh sách bài tập", tiêu đề "Bài Luyện Tập Mới" với nút "Tạo bài tập", một câu mô tả, rồi phần "Thông tin cơ bản". Nút "Tạo bài tập" còn mờ vì form chưa hợp lệ. Dòng "Bài tập công khai" ở cuối phần, đang tắt.
Thay đổi chính, trong một hình
1
Phần phẳng
Mỗi phần có tiêu đề và một đường kẻ dưới. Không còn card hay bóng đổ.
→
2
Nhãn, ô nhập, gợi ý
Trường nào cũng có ba tầng như nhau, giống trang Cài Đặt AI.
→
3
Chấm trạng thái
Một chấm màu với vài chữ thay cho badge, ví dụ "Đã tải lên" hay "Đã lưu trữ".
→
4
Thanh lưu dính
Tiêu đề và nút lưu ở yên dưới header khi cuộn. Nền đặc, không làm mờ.
→
5
Lưu trữ ở cuối
Nút Lưu trữ hoặc Khôi phục nằm ở phần cuối trang và luôn hỏi lại.
Video demo
Khoảng 2 phút 27 giây, không có tiếng. Chấm xanh là con trỏ chuột. Phần đăng nhập ở đầu đã được cắt.
Trong video
0:00 đến 0:21. Danh sách "Bài Tập" có 7 dòng, 5 dòng là bài demo. Bấm "Tạo bài tập mới", gõ tiêu đề "Dự đoán giá vé máy bay nội địa", slug, mô tả ngắn và thẻ "regression, travel".
0:21 đến 0:38. Chuột chỉ vào công tắc "Bài tập công khai" nhưng để nó tắt, vì bài tập cần đủ hai tệp mới công khai được. Gõ đề bài và mô tả dữ liệu vào hai ô Markdown.
0:38 đến 0:45. Cuộn xuống "Tệp đầu vào & đáp án", có câu nhắc lưu trước và hai dòng bị mờ. Bấm "Tạo bài tập" trên thanh dính khi trang đang cuộn. Toast "Đã tạo bài luyện tập." hiện, và trang sửa của bài mới mở ra với trạng thái "Đang hoạt động · Riêng tư".
0:50 đến 1:07. Mở "Dự đoán giá căn hộ Hà Nội", đang "Công khai". Tắt "Bài tập công khai", bấm "Lưu thay đổi", toast "Đã cập nhật bài luyện tập." hiện. Video mở lại trang, và dòng trạng thái mới đổi sang "Riêng tư". Bước mở lại là để né một lỗi, xem mục Giới hạn đã biết.
1:08 đến 1:26. Cuộn qua phần tệp với hai dòng "Đã tải lên", phần chấm điểm, rồi phần Lưu trữ. Thanh dính có viền dưới vẫn ở đầu trang. Mở hộp thoại "Lưu trữ bài tập này?" rồi bấm Hủy.
1:27 đến 1:42. Cuộc thi "Thử thách dữ liệu mùa thu 2026". Dòng trạng thái "Riêng tư · Đã liên kết bài học", phần Lịch trình có dòng cảnh báo màu cam vì giờ đã khóa, phần Quyền truy cập có bài học liên kết và mật khẩu.
1:42 đến 1:58. Cuộc thi "Cuộc thi dự báo mùa đông". Mở ô "Bắt đầu", chọn ngày 27, bấm OK, ô hiện 27/10/2026, 08:00. Bấm "Lưu cuộc thi", toast "Đã cập nhật cuộc thi." hiện.
1:58 đến 2:21. Chỉ vào "Sao chép link mời", xem danh sách 3 đề bài, chỉ vào "Lưu danh sách đề bài". Mở hộp thoại "Lưu trữ cuộc thi này?" rồi bấm Hủy.
2:21 đến 2:27. Cuộn lên đầu trang và dừng.
Video và ảnh khác nhau ở đâu. Video có đổi dữ liệu. Nó tạo một bài tập mới, chuyển bài căn hộ sang riêng tư, và dời giờ bắt đầu của cuộc thi mùa đông sang 27/10. Ảnh chụp trước video, nên trong ảnh bài căn hộ vẫn "Công khai" và cuộc thi mùa đông vẫn bắt đầu 25/10. Sau video, dữ liệu đã được đặt lại. Danh sách đề bài trong video là của cuộc thi mùa đông, có 3 bài. Ảnh danh sách đề bài bên dưới là của cuộc thi mùa thu, có 4 bài.
Cách dùng
Tóm tắt nhanh
Tạo bài tập
Mở danh sách Bài Tập, bấm "Tạo bài tập mới".
Điền Thông tin cơ bản, Đề bài, Dữ liệu và Chấm điểm tự động.
Bấm "Tạo bài tập" trên thanh ở đầu trang. Nút sáng lên khi form hợp lệ.
Trang sửa mở ra. Tải tệp đầu vào và tệp đáp án ở đó, rồi bật "Bài tập công khai" nếu muốn.
Sửa bài tập
Mở bài, xem dòng trạng thái dưới tiêu đề.
Sửa phần cần sửa.
Bấm "Lưu thay đổi". Nút này luôn ở đầu trang khi cuộn.
Muốn thấy dòng trạng thái mới thì tải lại trang.
Lưu trữ hoặc khôi phục
Cuộn xuống phần cuối, "Lưu trữ".
Bấm "Lưu trữ", hoặc "Khôi phục" nếu đã lưu trữ trước đó.
Xác nhận trong hộp thoại. Bấm "Hủy" thì không có gì thay đổi.
Tạo cuộc thi
Từ Quản lý cuộc thi, mở trang "Tạo Cuộc Thi".
Điền tên, đường dẫn và mô tả.
Ở Lịch trình, chọn "Cố định" hoặc "Linh hoạt", rồi chọn ngày giờ trong từng ô. "Linh hoạt" có thêm ô "Kết thúc".
Bấm "Tạo cuộc thi".
Sửa cuộc thi
Mở cuộc thi, xem dòng trạng thái dưới tiêu đề.
Sửa Thông tin cơ bản, Lịch trình hoặc Quyền truy cập, rồi bấm "Lưu cuộc thi".
Danh sách đề bài có nút lưu riêng, "Lưu danh sách đề bài", ở cuối phần đó.
Editor bài tập, từng phần
Tạo bài mới, chưa tải tệp được
Phần đầu trang tạo bài là ảnh thứ hai ở mục "Vì sao đổi". Ở phần tệp, editor nhắc lưu trước. Tệp chỉ tải lên được sau khi bài đã có trên hệ thống.
Câu "Lưu bài tập trước để có thể tải tệp lên." Hai dòng "Tệp đầu vào (.zip, .txt, .csv)" và "Tệp đáp án (.csv)" bị mờ, có chấm xám "Chưa có" và nút "Tải tệp lên" bị khóa. Bản cũ dùng một hộp viền nét đứt ở chỗ này.
Đọc phần đầu trang sửa
Dưới tiêu đề là dòng trạng thái của bài đã lưu. Nút "Lưu thay đổi" ở bên phải. Ba tab nằm ngay dưới câu mô tả.
Bài "Dự đoán giá căn hộ Hà Nội". Chấm xanh lá "Đang hoạt động", chấm tím "Công khai". Ba tab "Chi tiết", "Bài nộp", "Bảng xếp hạng".
Thông tin cơ bản và công tắc công khai
Công tắc "Bài tập công khai" giờ là dòng cuối của phần này, không còn nằm trên đầu trang. Thay đổi chỉ có hiệu lực khi bấm lưu.
Độ khó "Trung bình". Thẻ "regression, tabular, real-estate" hiện thành 3 badge viền, chỗ duy nhất còn dùng badge. "Bài tập công khai" đang bật.
Đề bài và Dữ liệu
Hai ô Markdown giữ nguyên cách dùng: bên trái gõ, bên phải xem trước. Chúng không còn nằm trong card.
Đề bài có ba mục "Nhiệm vụ", "Bài nộp", "Chấm điểm". Phần Dữ liệu có bảng 5 cột, từ area_m2 đến has_parking. Bấm vào ảnh để mở cỡ đầy đủ.
Kiểm tra tệp bằng chấm trạng thái
Mỗi tệp có một chấm. Tệp đã có thì có nút "Tải xuống" và "Thay thế tệp". Tệp chưa có thì chỉ có "Tải tệp lên".
Bài "Dự báo doanh số cửa hàng theo tuần". Tệp đầu vào chấm xanh "Đã tải lên". Tệp đáp án chấm xám "Chưa có". Ảnh ở bước 7 cho thấy một bài có đủ cả hai tệp.
Chọn cách chấm điểm
Ba lựa chọn nằm trong một thanh chọn: "So sánh CSV cơ bản", "Catalog dùng chung" và "Riêng bài này". Các trường bên dưới đổi theo lựa chọn.
"So sánh CSV cơ bản". Giới hạn thời gian chấm 20 giây. Ba công tắc đang bật: bỏ khoảng trắng đầu/cuối, chuẩn hóa ký tự xuống dòng, phân biệt chữ hoa/thường."Catalog dùng chung" với bộ chấm RMSE Score. Cột ID dòng là id. Cạnh nhãn "Bộ chấm metric" có chấm tím "Điểm thấp hơn tốt hơn", tức thứ tự xếp hạng của bộ chấm. Dòng mô tả bộ chấm bằng tiếng Anh là nội dung của bộ chấm, không phải bản dịch.
Lưu ở bất kỳ đâu trên trang
Khi cuộn xuống, tiêu đề và nút "Lưu thay đổi" dính dưới header của ứng dụng và có thêm một viền dưới. Không cần cuộn lên đầu để lưu.
Trang đã cuộn xuống khoảng 1950 px. Thanh "Chỉnh Sửa Bài Luyện Tập" với "Lưu thay đổi" vẫn ở trên. Bên dưới là bài căn hộ với hai tệp "Đã tải lên" và phần đầu của "Chấm điểm tự động".
Lưu trữ bài tập
Lưu trữ giờ là phần cuối của trang. Bấm nút viền đỏ thì hộp thoại hỏi lại. Bài đã lưu trữ bị ẩn khỏi học viên và khôi phục được sau.
Dòng "Lưu trữ bài tập này", gợi ý "Bài tập đã lưu trữ sẽ bị ẩn khỏi học viên. Bạn có thể khôi phục sau.", nút "Lưu trữ".Hộp thoại "Lưu trữ bài tập này?". Trong demo đã bấm Hủy, không có gì bị lưu trữ.
Editor cuộc thi, từng phần
Tạo cuộc thi và chọn cách tính giờ
"Cách tính giờ" là danh sách radio phẳng, mỗi lựa chọn có một dòng giải thích. Bản cũ dùng hai card để chọn. Ô ngày giờ trông như ô nhập, có icon lịch màu xám.
"Cố định" đang chọn, thời lượng 120 phút, nên dòng giải thích ghi "Cuộc thi kết thúc sau 2h kể từ lúc bắt đầu". Hai ô "Mở đăng ký" và "Bắt đầu" còn trống, ghi "Chọn ngày và giờ". Thanh đầu trang có "Hủy" và "Tạo cuộc thi". Bấm vào ảnh để mở cỡ đầy đủ.
Chọn "Linh hoạt" thì có thêm ô Kết thúc
Hàng ô ngày giờ tăng từ 3 lên 4 ô. Dòng gợi ý của phần đổi theo.
Gợi ý mới: "Mở đăng ký ≤ Bắt đầu < Kết thúc. Thời lượng phải nằm gọn trong khoảng Bắt đầu đến Kết thúc."
Chọn ngày giờ
Bấm vào ô để mở lịch. Chọn ngày, chỉnh giờ ở ô "Thời gian", rồi bấm OK.
"Cuộc thi dự báo mùa đông", chưa có ai bắt đầu. Mở đăng ký 20/10/2026, 09:00. Bắt đầu 25/10/2026, 08:00. Kết thúc 01/11/2026, 22:00. Thời lượng 90, nên dòng giải thích ghi "1h 30m". Lịch "Tháng 10 2026" đang mở, ngày 25 được chọn. Tên thứ trong lịch còn bằng tiếng Anh, xem mục Giới hạn đã biết.
Đọc dòng trạng thái
Trang sửa cuộc thi có dòng trạng thái giống trang bài tập: riêng tư hay công khai, đã lưu trữ, đã liên kết bài học. Thanh đầu trang có "Hủy" và "Lưu cuộc thi".
"Thử thách dữ liệu mùa thu 2026". Chấm tím "Riêng tư", chấm xám "Đã liên kết bài học". Hai tab "Thông tin" và "Đã đăng ký"."Giải đấu tháng 11 (đã lưu trữ)". Chấm xám "Công khai", chấm đỏ "Đã lưu trữ".
Khi giờ đã bị khóa
Với cuộc thi Linh hoạt đã có học viên bấm bắt đầu, phần Lịch trình hiện một dòng cảnh báo màu cam. Cách tính giờ, Bắt đầu, Kết thúc và Thời lượng bị mờ. Mở đăng ký vẫn sửa được.
Cuộc thi mùa thu, 4 người đăng ký, 2 người đã bắt đầu. Dòng cam "Không thể đổi thời gian vì đã có học viên bắt đầu làm bài. Bạn vẫn có thể đổi thời điểm mở đăng ký." Mở đăng ký 28/09/2026, 09:00 sửa được. Bắt đầu 01/10/2026, 08:00, Kết thúc 12/10/2026, 23:00 và Thời lượng 120 bị mờ.
Quyền truy cập
"Cuộc thi riêng tư" là một dòng có công tắc. Bài học liên kết và mật khẩu đăng ký nằm ngay dưới, không còn trong hộp viền.
Công tắc "Cuộc thi riêng tư" bật và mờ đi, vì cuộc thi đã liên kết bài học phải giữ riêng tư. Bài học liên kết "Data Science Essentials / Tuần 6: Cuộc thi trực tiếp". Mật khẩu hiện trong một ô có nút sao chép, cùng hai nút "Sao chép link mời" và "Tạo mật khẩu mới". Mật khẩu là giá trị demo trên local.
Danh sách đề bài
Tìm bài để thêm ở ô trên cùng. Mỗi bài là một dòng phẳng có số thứ tự, nút lên, xuống và xóa. Trong trang sửa, nút "Lưu danh sách đề bài" nằm ở cuối phần, bên phải.
Cuộc thi mùa thu, 4 bài. Ví dụ dòng 1, "Dự đoán giá căn hộ Hà Nội": Điểm sàn 1,2, Điểm đích 0,35, Điểm tối đa 100. Dòng 4, "Phân loại ảnh động vật và phương tiện": 0,25, 0,9 và 150. Bấm vào ảnh để mở cỡ đầy đủ.
Lưu trữ và khôi phục cuộc thi
Giống trang bài tập, lưu trữ nằm ở phần cuối và hỏi lại trước khi làm. Cuộc thi đã lưu trữ thì phần này đổi thành "Khôi phục cuộc thi này".
"Lưu trữ cuộc thi này?" với câu "Cuộc thi đã lưu trữ sẽ bị ẩn khỏi học viên. Bạn có thể khôi phục sau." Trong demo đã bấm Hủy.Cuộc thi tháng 11 đã lưu trữ. Gợi ý "Cuộc thi này đã được lưu trữ và đang bị ẩn khỏi học viên." và nút "Khôi phục". Hộp thoại khi bấm Khôi phục không có trong ảnh.
Đọc màn hình
Chấm trạng thái thay cho badge ở mọi chỗ, trừ thẻ của bài tập. Bảng dưới liệt kê các chấm có trong ảnh.
Chấm
Ở đâu
Ý nghĩa
Xanh lá, "Đang hoạt động"
Dòng trạng thái của bài tập
Bài chưa bị lưu trữ.
Tím, "Công khai"
Dòng trạng thái của bài tập
Bài hiện trên trang Bài tập của học viên.
Tím, "Riêng tư"
Dòng trạng thái của cuộc thi
Cuộc thi không có trong danh sách công khai. Học viên cần mật khẩu để đăng ký.
Xám, "Công khai"
Dòng trạng thái của cuộc thi
Cuộc thi có trong danh sách công khai.
Đỏ, "Đã lưu trữ"
Dòng trạng thái của cuộc thi
Cuộc thi bị ẩn khỏi học viên. Khôi phục ở phần cuối trang.
Xám, "Đã liên kết bài học"
Dòng trạng thái của cuộc thi
Cuộc thi gắn với một bài học và phải giữ riêng tư.
Xanh lá, "Đã tải lên"
Dòng tệp của bài tập
Tệp đã có. Tải xuống hoặc thay thế được.
Xám, "Chưa có"
Dòng tệp của bài tập
Chưa có tệp. Bài thiếu tệp thì chưa công khai được.
Tím, "Điểm thấp hơn tốt hơn"
Trường "Bộ chấm metric"
Thứ tự xếp hạng của bộ chấm dùng chung đang chọn.
Màu tím nghĩa là "Công khai" ở bài tập nhưng là "Riêng tư" ở cuộc thi. Hãy đọc chữ cạnh chấm, đừng chỉ nhìn màu.
Chế độ tối
Ứng dụng chưa có nút đổi sang chế độ tối. Ảnh dưới bật chế độ tối bằng script, chỉ để kiểm tra màu của bố cục mới. Người dùng hiện không thấy màn hình này.
Cùng bài căn hộ như ảnh đầu trang sửa. Tiêu đề, chấm trạng thái, các ô nhập và đường kẻ dùng màu tối đúng. Hai chỗ chưa ổn: tab "Chi tiết" đang chọn có chữ trắng trên nền tab sáng nên gần như không đọc được, và khung tab cùng ô Markdown vẫn nền sáng. Bấm vào ảnh để mở cỡ đầy đủ.
Vì sao tin được
Không mất gì so với bản cũ. Một lượt review bằng Opus lập danh sách 62 hành vi của editor bài tập và 47 hành vi của editor cuộc thi, rồi so bản cũ với bản mới. Cả 109 hành vi đều còn.
Cách lưu dữ liệu không đổi. Theo hai PR, cách đọc và lưu dữ liệu, các quy tắc kiểm tra và các tab giữ nguyên. Chỉ phần hiển thị được chia lại thành các phần nhỏ.
Chỉ có frontend. Không có migration, không đổi API, không có cấu hình mới.
Quy tắc cũ vẫn chạy. Khi dựng demo, hệ thống từ chối công khai một bài thiếu tệp, và từ chối thêm vào cuộc thi một bài chưa có tệp đáp án. Đây là quy tắc có từ trước, không phải quy tắc mới.
Đã chạy test. Theo PR #518 và #521, 590 test frontend đạt, build và lint đạt, và trang không cuộn ngang ở 360px. Tôi chưa chạy lại các kiểm tra này khi viết trang.
Kiểm tra bằng tay. Dòng giải thích dưới mỗi cách tính giờ đọc giá trị từ ô Thời lượng. Ở trang tạo cuộc thi, Thời lượng là 120 phút, tức 2 giờ, và dòng giải thích ghi "kết thúc sau 2h". Ở cuộc thi mùa đông, Thời lượng là 90 phút, tức 1 giờ 30 phút, và dòng giải thích ghi "1h 30m". Cả hai khớp.
Giới hạn đã biết
Dòng trạng thái của bài tập không cập nhật sau khi lưu. Đổi "Bài tập công khai" rồi bấm "Lưu thay đổi" thì toast báo thành công, nhưng dòng dưới tiêu đề vẫn hiện giá trị cũ cho đến khi tải lại trang. Dữ liệu đã lưu đúng. Editor cuộc thi không bị lỗi này. Chưa sửa. Nên mở một ticket follow-up.
Chế độ tối chưa dùng được. Tab "Chi tiết" đang chọn gần như không đọc được. Ứng dụng chưa có nút đổi theme, nên hiện chưa ai gặp. Cần sửa trước khi bật chế độ tối.
Ô chọn ngày giờ còn chữ chưa dịch. Tên thứ trong lịch là tiếng Anh ("Su Mo Tu ..."), trong khi tên tháng là "Tháng 10". Nút hủy của lịch ghi "Huỷ", còn các nút trên trang ghi "Hủy". Lỗi nhỏ, sửa trong bản dịch.
Cảnh báo khóa giờ chỉ có ở cuộc thi Linh hoạt. Dòng cam chỉ hiện khi cuộc thi là Linh hoạt và đã có học viên bấm bắt đầu. Cuộc thi Cố định đã bắt đầu không bao giờ hiện dòng này. Quy tắc này nằm ở backend và có từ trước SP-781. Nếu muốn khóa cả cuộc thi Cố định, cần một ticket riêng.
Công khai cần đủ hai tệp, danh sách đề cần tệp đáp án. Một bài thiếu tệp đầu vào hoặc tệp đáp án thì không công khai được. Một bài chưa có tệp đáp án thì không thêm được vào cuộc thi. Đây là quy tắc có sẵn. Hãy tải đủ tệp trước.
Ô chọn ngày giờ đổi ở mọi nơi. Ô này dùng chung với các form voucher, live class, essay, assignment, quiz và cài đặt khóa học. Theo PR #521, các form đó build và test đạt, nhưng chưa ai mở chúng trên trình duyệt sau thay đổi.
Chỉ chụp desktop. Mobile không phải trọng tâm. Ảnh và video chỉ có màn hình 1440px.
Các tab khác hẹp hơn. Bài nộp, Bảng xếp hạng và Đã đăng ký giờ nằm trong cùng cột giữa với form, nên hẹp hơn trên màn hình rộng. Đã chấp nhận.
Chưa kiểm tra trên beta. Ảnh và video cho thấy code chạy đúng với mock data trên máy local, không cho thấy beta.
Các quyết định
Câu hỏi
Lựa chọn
Bố cục nào?
Phương án A: một cột ở giữa, các phần phẳng. Phương án B có thanh mục lục dính bên trái đã bị bỏ.
Thanh lưu dính ở trang nào?
Cả hai editor. Nền đặc, không trong suốt, không làm mờ.
Ô chọn ngày giờ trông thế nào?
Như một ô nhập: viền xám, chữ thường, icon lịch màu xám. Bỏ viền màu tím.
Công tắc công khai của bài tập để đâu?
Dòng cuối của Thông tin cơ bản. Trạng thái đã lưu hiện thành chấm dưới tiêu đề.
Lưu trữ để đâu?
Phần cuối trang, nút viền đỏ, có hộp thoại xác nhận. Hộp thoại cho cuộc thi được thêm sau review.
Badge còn dùng ở đâu?
Chỉ cho thẻ của bài tập. Mọi trạng thái khác dùng chấm.
Nội dung các tab Bài nộp, Bảng xếp hạng, Đã đăng ký?
Giữ nguyên.
Checklist rollout
Đã xong. #517, #518 và #521 merge vào main ngày 03/10/2026, theo đúng thứ tự đó.
Không có migration, cấu hình, job định kỳ hay backfill. Chỉ có frontend.
Chưa làm: đi thử trên beta. Tạo một bài tập. Sửa một bài, lưu, rồi mở và hủy hộp thoại lưu trữ. Tạo một cuộc thi Linh hoạt. Sửa một cuộc thi, chọn ngày trong lịch và lưu. Mở thêm một form khác có ô chọn ngày giờ, ví dụ form voucher.
Mở ticket follow-up cho dòng trạng thái của bài tập. Có thể gộp phần dịch tên thứ và chữ "Huỷ" vào cùng ticket.
Phát hành lên production với tag tiếp theo sau v0.0.49. Sau đó chuyển SP-781 từ Testing sang Done.