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 Cài Đặt AI với hai phần phẳng, Chế độ API key AI và Model, và nút Lưu ở cuối
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 ý.
Trang tạo bài tập mới, phần Thông tin cơ bản với các trường và công tắc Bài tập công khai đang tắt
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

  1. 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".
  2. 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.
  3. 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ư".
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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

  1. Mở danh sách Bài Tập, bấm "Tạo bài tập mới".
  2. Điền Thông tin cơ bản, Đề bài, Dữ liệu và Chấm điểm tự động.
  3. Bấm "Tạo bài tập" trên thanh ở đầu trang. Nút sáng lên khi form hợp lệ.
  4. 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

  1. Mở bài, xem dòng trạng thái dưới tiêu đề.
  2. Sửa phần cần sửa.
  3. Bấm "Lưu thay đổi". Nút này luôn ở đầu trang khi cuộn.
  4. 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

  1. Cuộn xuống phần cuối, "Lưu trữ".
  2. Bấm "Lưu trữ", hoặc "Khôi phục" nếu đã lưu trữ trước đó.
  3. 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

  1. Từ Quản lý cuộc thi, mở trang "Tạo Cuộc Thi".
  2. Điền tên, đường dẫn và mô tả.
  3. Ở 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".
  4. Bấm "Tạo cuộc thi".

Sửa cuộc thi

  1. Mở cuộc thi, xem dòng trạng thái dưới tiêu đề.
  2. 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".
  3. 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

  1. 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.

    Phần Tệp đầu vào và đáp án khi tạo mới, hai dòng bị mờ với chấm xám Chưa có
    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.
  2. Đọ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ả.

    Đầu trang Chỉnh Sửa Bài Luyện Tập với chấm Đang hoạt động, chấm Công khai và ba tab
    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".
  3. 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.

    Phần Thông tin cơ bản đã điền, ba thẻ và công tắc Bài tập công khai đang bật
    Độ 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.
  4. Đề 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.

    Hai phần Đề bài và Dữ liệu, mỗi phần có một ô Markdown với khung xem trước
    Đề 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 đủ.
  5. 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".

    Tệp đầu vào có chấm xanh Đã tải lên, tệp đáp án có chấm xám Chưa có
    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.
  6. 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.

    Chấm điểm bằng So sánh CSV cơ bản, giới hạn 20 giây và ba công tắc đang bật
    "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.
    Chấm điểm bằng Catalog dùng chung với bộ chấm RMSE Score và chấm tím Điểm thấp hơn tốt hơn
    "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.
  7. 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 tiêu đề và nút Lưu thay đổi vẫn ở đầ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".
  8. 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.

    Phần Lưu trữ với dòng Lưu trữ bài tập này và nút viền đỏ Lưu trữ
    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 với hai nút Hủy và 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

  1. 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.

    Trang Tạo Cuộc Thi với Thông tin cơ bản, Lịch trình, Cố định đang chọn và ba ô ngày giờ, thời lượng
    "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 đủ.
  2. 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.

    Linh hoạt đang chọn, hàng có bốn ô gồm cả Kết thúc
    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."
  3. 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.

    Lịch tháng 10 năm 2026 đang mở, ngày 25 được chọn, giờ 08:00
    "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.
  4. Đọ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".

    Đầu trang sửa cuộc thi với chấm tím Riêng tư và chấm xám Đã liên kết bài học
    "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ý".
    Đầu trang sửa cuộc thi với chấm xám Công khai và chấm đỏ Đã lưu trữ
    "Giải đấu tháng 11 (đã lưu trữ)". Chấm xám "Công khai", chấm đỏ "Đã lưu trữ".
  5. 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.

    Phần Lịch trình bị khóa với dòng cảnh báo màu cam, chỉ ô Mở đăng ký cò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ờ.
  6. 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.

    Phần Quyền truy cập với công tắc riêng tư bị khóa, link bài học liên kết và mật khẩu đăng ký
    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.
  7. 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.

    Danh sách 4 đề bài, mỗi dòng có Điểm sàn, Điểm đích và Điểm tối đa
    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 đủ.
  8. 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".

    Hộp thoại Lưu trữ cuộc thi này với hai nút Hủy và Lưu trữ
    "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.
    Phần cuối của cuộc thi đã lưu trữ với nút Khôi phục
    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ậpBài chưa bị lưu trữ.
Tím, "Công khai"Dòng trạng thái của bài tậpBà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 thiCuộ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 thiCuộc thi có trong danh sách công khai.
Đỏ, "Đã lưu trữ"Dòng trạng thái của cuộc thiCuộ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 thiCuộ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ậpTệ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ậpChư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.

Trang sửa bài tập ở chế độ tối, tab Chi tiết gần như không đọc được
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

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

Các quyết định

Câu hỏiLự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

  1. Đã xong. #517, #518 và #521 merge vào main ngày 03/10/2026, theo đúng thứ tự đó.
  2. Không có migration, cấu hình, job định kỳ hay backfill. Chỉ có frontend.
  3. 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.
  4. 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.
  5. 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.