All-features overview

Toàn bộ tính năng của DSCons

DSCons là cộng đồng thực chiến dành cho kỹ sư Cơ Điện và BIM, tập trung vào học tập, thử thách và phản hồi từ công việc thực tế. Các chủ đề AI và Business sẽ được tách thành community riêng.

Cập nhật 30/10/2026 · Internal use
TL;DR — 30 giây

Admin tạo thử thách trong /admin/challenges: đặt tên, số ngày, và nội dung từng nhiệm vụ. Member đăng ký tham gia, bấm "Bắt đầu" để khởi động đồng hồ cá nhân. Mỗi ngày unlock 1 nhiệm vụ — phải nộp bằng chứng + admin duyệt mới qua ngày kế. Có quiz tương tác, vote chéo, freeze để gia hạn, XP + Level cá nhân, leaderboard cộng đồng, và nhiều cơ chế chống gian lận.

01Thử thách nhiều ngày

Cốt lõi của nền tảng. Mỗi thử thách là 1 chuỗi nhiệm vụ ngày do admin cấu hình (số ngày tuỳ ý), có leader, members, deposit AIP, ngày bắt đầu/kết thúc.

Đăng ký · Duyệt

Flow tham gia 2 bước

Member bấm Đăng ký tham gia → trạng thái pending. Admin duyệt (hoặc reject). Sau khi được duyệt, member tự bấm Bắt đầu thử thách để khởi động đồng hồ cá nhân (`personal_starts_at`).

Đồng hồ cá nhân

Mỗi người 1 lịch riêng

Day 1 mở khi bấm Bắt đầu. Day N mở khi Day N-1 đã hoàn thành. Deadline tính theo giờ start cá nhân — không cố định 8h sáng cho mọi người.

Mới · Completion-gating

Không xong bài trước → khoá bài sau

Day N+1 chỉ unlock khi Day N có submission status ≠ rejected. Quá hạn cũng vẫn phải làm — không auto-skip. Members bị reject → coi như chưa làm, Day kế khoá lại.

Submission · Evidence

Nộp text + screenshot + link

Mỗi task quy định loại bằng chứng (`text` hoặc `screenshot`). Có thể bao gồm link Google Drive/Imgur, mô tả ngắn, hoặc cả hai. Admin xem trên dashboard để duyệt/reject với note giải thích.

Reject · Resubmit

Nộp lại không giới hạn

Bị reject → nộp lại tới khi được duyệt, kèm note giải thích của admin. Số lần bị từ chối lưu ở `reject_count` để admin nhìn ra ai đang chật vật.

Late tracking

Quá hạn không block — chỉ flag

Submit sau deadline → flag `is_late=true`, vẫn được nhận. Hiển thị badge "Hoàn thành (Trễ)". `consecutive_missed_days` ≥ 3 → cảnh báo qua notification.

Freeze · Tạm dừng

Đóng băng đồng hồ cả challenge

Admin có thể đóng băng từ Day X đến giờ Y. Trong window này, đồng hồ tất cả members tạm dừng — Day X+ ẩn, không tính trễ. Hệ thống auto-delay, không ai bị mất tiến độ.

Per-task deadline override

Gia hạn 1 ngày cụ thể

Admin set `deadline_override_at` cho 1 task → mỗi member tự động dời deadline về giờ start cá nhân trên ngày đã chọn. Cascade theo các day sau.

Vote chéo

Vote hay + Vote xuất sắc

Admin vote 2 loại độc lập trên submission của member: ▲ Vote hay (xanh lá) và ★ Vote xuất sắc (đỏ cam). Hiển thị count cho cả cộng đồng để học hỏi.

Contest mode

Nộp nhiều ứng dụng / 1 task

Bật `is_contest=true` → member nộp được nhiều bài cho cùng 1 task (vd: thi đấu app demo). XP chỉ cộng 1 lần, mỗi bài duyệt/reject độc lập.

02Trắc nghiệm tương tác

Quiz nhúng inline trong task page — không chuyển trang, không link out, mỗi câu đúng được +2 XP.

Cấu hình theo task

Bộ câu hỏi gắn vào từng nhiệm vụ

Admin dán JSON bộ câu hỏi vào task (`quiz_json`) — số câu tuỳ ý, mỗi câu đúng +2 XP. Render inline ngay trong trang nhiệm vụ với palette warm-paper.

Gợi ý kỹ thuật

Nút copy prompt cho mỗi câu

Mỗi câu có phần gợi ý tình huống và quy tắc chọn một lần. Thành viên đọc kỹ, đối chiếu với quy trình rồi mới chốt đáp án.

Click-to-commit

Chốt 1 lần, không retry

Click 1 đáp án → confirm → chốt vĩnh viễn. Không có nút "Kiểm tra", không reveal đáp án rồi cho làm lại. Chống farm XP — chỉ +XP khi đúng ngay lần đầu.

State persist

Reload không mất tiến độ

Mỗi attempt lưu vào DB (`quiz_attempts`). Member quay lại trang vẫn thấy đáp án + giải thích cũ. Admin browse-as-member preview thì không lưu.

Admin authoring

Edit quiz JSON từ form

Admin sửa task → có textarea Quiz (JSON) với validate cấu trúc tự động (báo lỗi rõ field thiếu/sai). Có thể tái sử dụng cho task khác về sau.

Quiz report

Bảng điểm + correct rate

Trong /admin/challenges → bấm 📊 trên task có quiz → expand panel xem: per-question correct rate (highlight đỏ câu <50%), bảng điểm từng user sorted by score.

03XP, Level, Class

Hệ thống RPG-inspired. Engagement tạo ra XP, XP đẩy Level, Level mở khoá tính năng.

Engagement EXP

Người sáng tạo nhận EXP

Đăng bài = 0 EXP. Bài bạn được like/comment/bookmark thì BẠN nhận EXP. Comment hay (likes) cũng được EXP. Khuyến khích chất lượng nội dung, không spam số lượng.

Streak multiplier

Tích cực được nhân EXP

7 ngày streak → ×1.1 · 30 ngày → ×1.2 · 90 ngày → ×1.5. Áp cho mọi nguồn EXP. Streak break khi không login 1 ngày.

100 levels

Bảng EXP MapleStory-inspired

Level 1-10: vài trăm EXP. Level 50: ~60k. Level 100: hàng triệu. Cấp số nhân, càng cao càng khó. Hiện badge `Lv.X` cạnh tên member khắp nền tảng.

5 Class

Định danh archetype

BIM Coordinator · MEP Design Engineer · BIM Automation Specialist · Project Delivery Lead · Digital Construction Lead. Mỗi vai trò có hướng phát triển và nhóm nhiệm vụ riêng.

AIP currency

Aura In Progress

Currency phụ — kiếm qua action, dùng để deposit vào challenge, mua items trong marketplace, refund khi hoàn thành đúng tiến độ.

Đá Không Cực

Reward hiếm

Loại đá quý "không cực" — drop hiếm khi đạt thành tích đặc biệt. Track riêng trong `da_khong_cuc` table. Hiển thị count cạnh avatar.

Power Symbols

Mảnh quyền năng theo trụ cột

Mỗi trụ cột (BIM & điều phối, Thiết kế MEP, Tự động hóa & dữ liệu, Triển khai dự án, Tiêu chuẩn & vận hành) có power symbol. Comment/like content thuộc trụ cột nào → nhặt fragment trụ cột đó. Đủ → upgrade.

04Cộng đồng & Feed

Discord-like 3-column layout. Posts, comments, feed, signal, CỐT, Q&A.

5 trụ cột

Pillar system

Mỗi post thuộc một trụ cột: BIM & điều phối, Thiết kế MEP, Tự động hóa & dữ liệu, Triển khai dự án, Tiêu chuẩn & vận hành. Lọc feed theo trụ cột. Mỗi tuần một trụ cột được "Burning Zone" +50% EXP.

Topics

Format tag (admin-managed)

Case Study, Win, Hỏi đáp, Hành trình... Admin quản lý qua /admin/topics. Mỗi topic có emoji + slug + sort order. Member chọn 1 topic khi đăng bài.

Signal (≤500 words)

Tab feed riêng cho post ngắn

`is_signal=true` → hiện trong tab "Tín hiệu" tách riêng khỏi feed chính. Format quick share: 1 insight, 1 quote, 1 win nhỏ. Khuyến khích chia sẻ thường xuyên.

CỐT

Curated essential posts

Bài "cốt lõi" được nominate bởi user GD3+ (level ≥ 30). Hiển thị badge ★ CỐT, tách riêng tab. Admin review nominations qua /admin/cot-review.

Rune

2× EXP cho first comment

Khi rune kích hoạt trên 1 post, comment đầu tiên trong window thời gian được nhân đôi EXP. Atomic claim — chỉ 1 user thắng. Banner đỏ cam hiện trên feed.

Tag @ user

Mention với typeahead

Gõ @ trong comment → dropdown suggest user (filter theo username/name, ↑/↓ chọn). Sau khi chọn, render thành link xanh tới profile. User được tag nhận notification.

Like · Bookmark · Comment

Tương tác chuẩn social

Like = +2 EXP cho author. Comment = +3 EXP cho author lần đầu mỗi user. Bookmark = +1 EXP. Reply nested trong comment.

Q&A

Hỏi đáp với best answer

Hỏi → community trả lời → asker chọn best answer → người trả lời nhận +25 EXP. Tab Q&A riêng, search được.

05Notification & UX

Đẩy đúng thông tin đúng người, không spam.

Bell badge

Notification center top-right

Đếm unread real-time, badge đỏ. Click mở dropdown 320px hiện 10 notification gần nhất. Đánh dấu đã đọc bằng 1 nút. Click 1 noti → redirect tới context (post/task/profile).

7 loại noti

Coverage đầy đủ

Comment, like, mention, expedition events (duyệt/reject/late), CỐT nominate, Rune trigger, miss-day warning. Icon emoji + message Vietnamese.

Anti-spam

Rate limit + dedup

Comment ≤ 20/giờ/user. Notification dedup: post owner chỉ nhận noti lần đầu mỗi user comment, không repeat. Mention không tự notify chủ post (đã có noti riêng).

Auto-expand textarea

Input mượt như Discord

Textarea tự cao theo content, không scroll bar bên trong. Enter để submit, Shift+Enter xuống dòng. Paste markdown từ Notion/Word tự convert sang plain text.

Mobile responsive

Cùng UX, chỉnh layout

≥1200px: 3-column desktop. <1200px: hamburger sidebar trượt từ trái, content full width. Bottom nav cố định cho mobile. Tap target ≥44px.

Toast

Feedback inline

Toast bottom-right cho mọi action (đăng bài, nộp xong, +XP). Auto-dismiss 4s. 3 type: success xanh, error đỏ, info trắng.

06Quản trị

Custom Livewire admin (không Filament). Mỗi feature có view riêng, gọn nhẹ.

/admin/challenges

CRUD expedition + tasks

Quản lý challenge, leader, capacity, deposit AIP. Thêm/sửa/xóa task per day với title, description (markdown), SOP, video URL, meeting time, evidence label, admin note, quiz JSON.

Review submissions

Duyệt/reject với note

Admin xem feed submissions theo task, search theo user/email/content. Approve/reject inline. Reject phải kèm note giải thích → user nhận noti có lý do.

Pending member

Approve/reject join requests

Trong panel challenge → list pending members. 1 click approve hoặc reject. Bulk-approve all pending. User nhận noti ngay.

Freeze · Override · Locked

3 cơ chế điều phối thời gian

Freeze: đóng băng cả challenge. deadline_override_at: dời deadline 1 task per-member. locked_until: tạm khoá submit 1 task.

Mới · Preview as member

Admin xem như member

Admin chưa join challenge vẫn vào trang xem được như member: full task UI, quiz tương tác, evidence form. Banner vàng "Admin preview" nhắc rõ. Quiz/submit không lưu DB, không nhận XP.

Impersonate user

Login as bất kỳ user

Admin click "Login as" trong /admin/users → vào hệ thống với tư cách user đó. Banner đỏ trên cùng "Đang giả mạo X" + nút thoát. Debug user-specific issues nhanh.

/admin/topics, /courses, /cot-review

Quản lý content khác

Topics CRUD + sort order. Courses + Modules + Lessons + Tasks (academy). Review CỐT nominations. Báo cáo CRUD digital products + giao dịch.

XP transactions log

Truy vết mọi XP

Bảng `xp_transactions` ghi lại mọi lần award: amount, type, multiplier (streak), reference (post/task/comment), description. Audit + analytics.

07Kỹ thuật & UX nhỏ

Những thứ user không thấy nhưng cảm nhận được.

Stack

Laravel 12 · Livewire 3 · Tailwind v4

Server-rendered, Livewire reactive, Alpine.js cho client interactivity. Tailwind v4 với JIT. PostgreSQL 17 + JSONB. PHP 8.2+.

Anti-flicker

Tối ưu Macbook Retina

Bỏ will-change trên paint properties, CSS containment 3-column, font-display: optional, html bg match body. Tab-switch flicker giảm rõ rệt.

Multi-tenant

Brand-scoped data

Hệ thống đa thương hiệu — mỗi brand có theme riêng (color, logo), data isolation qua `brand_id`. User có thể follow nhiều brand, switch trên top bar.

Telegram integration

Notify admin khi có submission

Mỗi lần member nộp bài → bot Telegram nhắn admin chính kèm link review. Hỗ trợ duyệt nhanh trên di động không cần mở dashboard.

Sepay payment

VietQR phí tham gia

Thử thách có giá → member bấm đăng ký là ra QR VietQR sinh sẵn nội dung `CHAL{id}U{user}`. Trang tự poll 5s; webhook SePay xác nhận đủ tiền là duyệt luôn, không cần admin gật tay. Số tài khoản + API Key cấu hình ở /admin/settings.

Anti-cheat

XP exploit guards

Quiz: `xp_awarded` flag chống re-award. Vote: UNIQUE(completion, user, type) chống double-vote. Comment: rate limit 20/giờ. Membership: middleware check active.