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.
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.
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`).
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.
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.
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.
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.
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.
Đó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 độ.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Đị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.
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 độ.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
Coverage đầy đủ
Comment, like, mention, expedition events (duyệt/reject/late), CỐT nominate, Rune trigger, miss-day warning. Icon emoji + message Vietnamese.
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).
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.
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.
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ẹ.
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.
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.
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.
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.
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.
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.
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.
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.
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+.
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.
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.
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.
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.
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.