Forgot password?
📸 Upload Photos (no login needed)
⚠ Invalid credentials. Please try again.
📸 Facility Photo Upload
⏰ Upload deadline: 4:00 PM. Verification deadline: 5:00 PM. Verification is done after logging into the main app — not here.
Who are you?
Pick your name to continue — no password needed for this page.
← Back to normal login
Dashboard
?
👤 My Shift Today
📅 Today's Shifts — All
⚠ Unassigned Alerts
🏢 Department Overview
DepartmentBuildingEmployeesThis Month ShiftsStatus
build: dept-lock-v4
Loading...
Loading...
📍 Building:
With employees · excludes holidays & leave
📅 Mon → Fri
📅 Mon → Sat
📅 Mon → Sun
Loading…
🗓️ Roaster Management
📍 Building:
With employees · excludes holidays & leave
📅 Mon → Fri
📅 Mon → Sat
📅 Mon → Sun
📋
Loading roster...
⏰ Shift Types
👥 Users & Roles
NameUsernamePhoneRoleDepartmentBuildingSub DeptWork DaysStatusActions
🏢 Departments
NameCodeBuildingColorStatusActions
🔀 Sub Departments
NameCodeParent DepartmentColorStatusActions
🏗️ Buildings
NameAddressCityStatusActions
🏖️ Public Holidays
DateNameDayApplies ToActions
🌴 Applied Leaves
EmployeeTypeFromToStatusActions
🗓️ Saturday Off
EmployeeDateNotesActions
🌴 Leave Cover Swaps
Rollback handled from Leave List
Pending Swapper Accepted Manager Approved
ProgressRequesterTheir ShiftSwap WithTarget ShiftNotesActions
🔄 Direct Swap Requests
Pending Swapper Accepted Manager Approved
ProgressRequesterTheir ShiftSwap WithTarget ShiftNotesActions
🗓️ Saturday Leave Swaps
Have a Saturday off assigned but need leave on a different Saturday? Pick your assigned off-date and the Saturday you want leave on — only eligible swap partners are shown.
ProgressRequesterTheir Off DateWants Leave OnSwap PartnerNotesActions
🏖️ Public Holidays
DateHolidayDayTypeApplies To
🔄 My Sunday Shifts
DateShiftStatus
🗓️ My Saturday Offs
DateNotes
🏖️ Public Holidays
DateHolidayType
🌴 My Leave History
TypeFromToDaysStatus
🔄 My Swap Requests
DateShiftWithStatus
🔄 Sunday Duty
Sunday Duty Pool — All Buildings (only employees with "Can work Sundays" enabled in their profile)
🏖️ Public Holiday Duty
🇮🇳 PH Duty Pool — India (covers India-only and shared holidays)
🇺🇸 PH Duty Pool — United States (covers US-only and shared holidays)
🤖 Auto Assignment
Configure which days each employee works, their building and shift — then assign for a month. Existing shifts on those days are replaced. Public Holidays and approved leaves are always skipped.
Assign For Month
Day Preset
Assign For Year
Assigns selected days for the entire year using per-employee presets below. Replaces existing shifts. PH & leaves skipped.
Clear Shifts For Month
Clear Shifts For Year
Deletes all auto-assigned shifts on the selected days (Mon–Fri / Mon–Sat / Custom). Public Holidays are always excluded.
Employee Presets — Building & Shift Per Person
🗓️ Saturday Rotation
Set which employees get Saturday Off each week. Months with 4 Saturdays use the 4-week plan; months with 5 Saturdays use the 5-week plan.
📅 4-Week Plan — months with exactly 4 Saturdays
📅 5-Week Plan — months with 5 Saturdays
📅 6-Week Plan — months with 6 Saturdays (rare)
Click "Preview Year" to see the Saturday rotation for each month.
🔔 Custom Alerts
Set minimum staff thresholds for Sunday duty and Public Holidays, then add any extra custom rules below. Dashboard alerts fire when conditions are not met.
☀️
Sunday / Shuffle Day Alert
Minimum total staff across all buildings
Set 0 to disable alert
Configured in Sunday Duty section above
🏖️
Public Holiday Alert
Minimum total staff across all buildings on PH days
Set 0 to disable alert
Also used when generating PH shifts
Additional Custom Rules
Add rules for specific buildings, days, or shift patterns.
🏢 Organization
⚙️ Roaster Preferences
Mandatory Shift Alerts
Highlight unassigned dates in red
Email Notifications
Send shift reminders via email
🏷️ Department Access for Tools
Restrict each tool below to one department — DMs, managers, and employees outside that department won't see it in their sidebar at all. Leave as "All Departments" for a tool everyone should keep seeing.
🔐 My Security
Email OTP on Login
Send a one-time code to your email each time you log in
Authenticator App (TOTP)
Use Google Authenticator or similar app for login
📧 Email Configuration (SMTP)
Use SSL/TLS
Enable for port 465
🔔 Email Notification Preferences
Choose which events trigger email notifications
🌐 Global MFA Enforcement
Force all employees to use MFA when logging in
Enforce Email OTP for All
Every user must verify via email OTP on each login — overrides individual settings
Enforce Authenticator App for All
Every user must have TOTP authenticator set up — overrides individual settings
⚠️ Enabling these will affect all users on next login. Users without MFA set up will be prompted to configure it.
🖥️ Server Info
Loading…
📋 Audit Log
TimeUserActionEntityDetailsIP
📧 Roaster Emails
Scheduled & manual roster emails sent to all employees
🗓️ Weekly Full Roaster Email
Disabled
Send the full next-week roster to all employees every week
📅 Daily Roaster Emails
E.g. "Every Friday → send Saturday roster", "Every Saturday → send Sunday roster"
🏖️ Public Holiday Roaster Alert
Disabled
Send the holiday roaster to all employees N days before each public holiday
📬 Send Log
Click Refresh to load send history.

📧 Report Config

Configure the mailbox integration for Daily Reports and manage which employees are required to send reports.

📬 Mail Provider
🔐 Microsoft 365 — Azure App Credentials
Register an app in portal.azure.com → App Registrations → API Permissions → Microsoft Graph → Mail.Read (Application)
📋 Setup Steps — How to register the Azure App
  1. Go to portal.azure.com → search App registrations
  2. Click + New registration → Name: DutyFlow Reports → Single tenant → Register
  3. Go to API permissions → Add a permission → Microsoft Graph → Application permissions → search Mail.Read → Add
  4. Click Grant admin consent → Yes
  5. Go to Certificates & secrets → New client secret → Copy the Value
  6. Go to Overview → Copy Application (client) ID and Directory (tenant) ID
⚙️ Report Settings
🚫 Exclude Employees from Daily Reports
Excluded employees will not appear in the Daily Reports grid and won't be counted as missed.

📸 Server Room Photos

Upload today's server room photo for each building, then get it verified. Verification is only possible once a photo is uploaded.

📅 Daily
📊 Reports
Loading…

🔥 Firewall Screenshots

Upload today's firewall screenshot for each building, then get it verified. Verification is only possible once a screenshot is uploaded.

📅 Daily
📊 Reports
Loading…

🔌 Crimping Tracker

Each week, tracked employees upload a photo + the number of cables crimped, then get it tested and approved.

📅 Weekly
📊 Reports
Loading…

💾 Server Backup Screenshots

Each server has its own cadence — some daily, some weekly. This always shows the live status for right now, not a specific date to browse.

Loading…

💬 WhatsApp Notifications

Configure which alerts get posted to your WhatsApp group, and when. Requires the WhatsApp bridge service to be running.

Connection
Checking…
Bridge Auto-Restart

The WhatsApp bridge can occasionally go stale over a long uptime — it still shows "Connected" but silently stops sending. Cycling the process fixes it without needing to re-scan the QR code. Optionally schedule this daily so it doesn't need to be caught manually.

: (IST)
Disconnect Email Alert

WhatsApp can't notify about its own disconnection — this emails you the moment it goes down, so it's not discovered only when someone happens to check. Sends once per disconnection, not repeatedly.

Alert Recipients

Anyone or any group who should get tailgating alerts.

Add Recipient
For a group: paste its invite link and click Resolve — the Label and Target fill in automatically.
Recipients
Label Target Type Active
Loading…
Loading…
🔧 Backup Configuration
Auto Backup
Automatically create backups
📦 Create Backup

Create a full snapshot of all DutyFlow data (users, roster, leaves, swaps, settings).

Local backups stored in: /opt/duty-roaster/backups/
📤 Restore from File
⚠️ Restoring will overwrite all current data. A safety backup is automatically created before restore.
🕐 Backup History
FilenameDateTypeSizeActions
Click a day to assign shifts
Week
Actions:
📋 Clipboard ready
📅
Select a day above