Case study 10
Attendance. Daily operations inside Discord.
An internal HR platform for check-in, remote work, leave, and daily reporting. The team already worked in Discord. The record lives outside the chat.
- Sector
- People operations across eight departments
- Type
- Internal HR bot and attendance record
- Role
- End-to-end owner: HR rules, Discord experience, data model, persistence, deployment, and tests
The business problem
- Managers could not see who was in the office, who was remote and why, and who arrived late.
- Accept or reject had no consistent record.
- Leave had no path from the employee to the team leader and then to HR.
- Daily updates were unstructured.
- A new employee meant repeating rules and task lists by hand.
What the system changes
How long a morning round used to take is not listed.
Check-in in a private message
A second check-in the same day is blocked. Anyone not on the roster is blocked.
On-site or remote
Remote work requires a written reason before the request can be sent.
One lateness rule
11:00 Cairo time, with a 10-minute grace window. The record stores On Time or the delay.
Approval makes it official
An authorized admin approves it. The employee is notified. The row stores the approver.
A live morning board
It shows who is present, who is late, and who is remote. Names are not shown here.
One daily report
Tasks are predefined per section. The report is posted and stored in Sheets, in a company index and on the department sheet.
Leave has two decisions
The team leader can approve, reject, or pass it up. HR records the final decision.
Hiring from Discord
The new hire receives the rules and the section task list. HR can resend tasks to one person or to the roster.
Check-in
- 01Check-in in a direct message
- 02Active, and not already checked in today
- 03On Site, or Remotely plus a reason
- 04Compute delay against the start and the grace period
- 05Admin chooses Allow or Reject
- 06On allow: save date, time, type, delay, and approver, and update the board
Technical architecture
| Bot | Python 3.11 and discord.py |
|---|---|
| Record | Google Sheets through gspread, with a service account |
| Run | Docker, set up for AWS ECS Fargate or EC2. The token and Google credentials stay outside the image |
| Layers | Domain, application, infrastructure, and Discord presentation |
| Tests | Delay rule, check-in, reports, holidays, the board, and the Sheets repositories |