Co May Dormitory Management System
1Public site: admission notices with search, categories, tags and newsletter sign-up
Overview
Co May Dormitory runs on two connected surfaces. The public website carries admission notices, guides, downloadable forms, a blog with categories, tags and search, an online application form and a result lookup. Behind it sits a management system that staff and residents use every day, organised into nine groups and around forty screens; every account only sees the parts its permissions cover, and the whole interface — including the built-in user guide — is available in both Vietnamese and English.
Admissions run season by season through six statuses: submitted, needs revision, ready for scoring, scored, then approved or rejected. Checkers mark completeness and request missing documents with a note back to the applicant; scorers grade against criterion categories whose options, scores and selection rules (single choice, multiple choice, or multiple choice with an exclusive option) are configured in the system, with drafts autosaved while they work. Each application has its own workspace with overview, scoring and messaging tabs, so staff can chat with the applicant and attach files without leaving the record.
Approving results is where most of the manual work disappeared. The system splits scored applications against the season’s male and female quotas into accepted, rejected and missing-data groups, applies ranking priority rules such as a minimum share for a target university and precedence for verified applications, and previews the outcome before anything is committed. Accepted applicants can then be converted into resident students in one pass, with rooms suggested by gender, capacity and hometown, and result emails composed from templates with merge variables and a preview built from a real application before the batch is queued.
Day-to-day residence management covers student records searchable by name, resident code or RFID, room and bed assignment with member roles (captain, secretary, treasurer) and captain handover, a smart assignment tool that proposes rooms from gender, study year, course, university and birthplace, plus organizations such as teams, clubs and classes that carry their own roles and per-organization permissions.
Attendance is taken per room by a duty team in day, week and month views, and can be filled in automatically at 23:59 from the last card swipe of the day. RFID readers feed an access log with current in/out status, daily summaries and a reconciliation tab that flags where swipes and attendance disagree. Alongside it runs an AI camera service: cameras are registered with their zones, recognition thresholds and schedules, an AI zone is drawn directly on a camera snapshot, and face-recognition and intrusion events arrive in a realtime feed — optionally read aloud — where unmatched events can be reconciled to a student and turned into an access record.
Hygiene and conduct are tied together. Room grading runs against a criteria checklist that separates common-area faults from personal violations, records who was on duty, and accepts up to twenty evidence photos per inspection inside a fixed grading window. Common areas follow one weekly master schedule that generates the following weeks automatically, with duties moving from unassigned to done, then inspected and passed or failed. Conduct scores per term combine manual bonuses and deductions with automatic rules — unexcused absence, room hygiene below threshold, repeated personal violations, unfinished common duties, electricity and water over allowance — each with its own first-offence and repeat amounts, applied only from the day the rule is switched on.
The rest of the platform covers a library with a public catalogue, borrow and reserve requests, renewals, donation requests and a management side for books, copies, loans, duty rosters and statistics; a proposal module where each type is a configurable form routed through multi-step approval; internal announcements and a document repository with previews and bulk notifications; and a blog back-office for posts, categories, tags, comments and newsletter subscribers.
Underneath sits role-based access control with a per-module permission matrix, a read-only permission catalogue that can be re-synced from the backend, and an audit log filterable by actor, action, source and result. Notifications are delivered in real time over WebSocket, grouped when the same item fires repeatedly, and pushed to devices even when the tab is closed. I designed the data model, built the NestJS backend and the Next.js frontend, wrote the AI camera worker, and run the deployment: Docker Compose on a VPS behind Cloudflare, with PostgreSQL, Redis and Bull queues, and Cloudflare R2 for file storage with an on-premise mirror.
Key capabilities
- Season-based admissions across six statuses, with completeness review, criteria scoring and autosaved drafts
- Quota-aware approval that previews accepted, rejected and missing-data groups before anything is committed
- One-pass conversion of accepted applicants into residents, with rooms suggested by gender, capacity and hometown
- Templated bulk result emails with merge variables and a preview built from a real application
- Configurable scoring criteria: categories, options, selection rules and ranking priority rules
- Student records searchable by name, resident code or RFID, with Excel import/export and term score import
- Room management with member roles, captain handover, duty rosters and smart room assignment
- Attendance by day, week and month, including automatic recording from the last card swipe at 23:59
- RFID access log with current status, daily summaries and attendance reconciliation
- AI cameras with drawable detection zones, recognition thresholds, schedules and a realtime event feed
- Face identities linked to students or guests, with event reconciliation into access records
- Room hygiene grading separating common-area faults from personal violations, with photo evidence
- Common-area duties generated automatically from one weekly master schedule
- Conduct scoring that combines manual entries with automatic, non-retroactive deduction rules
- Library with catalogue, borrow/reserve, renewals, donations, duty rosters and statistics
- Configurable proposal types routed through multi-step approval workflows
- Role-based permissions per module, a syncable permission catalogue and a filterable audit log
- Realtime notifications over WebSocket with grouping, plus web push to individual devices
- Fully bilingual interface, including a built-in user guide filtered to each account’s permissions
- Deployed with Docker Compose on a VPS behind Cloudflare, with Cloudflare R2 storage and a local mirror