Rosters, ranks, callsigns, hours, training and discipline — one panel, self-hosted, built the way a real department is structured. Discord decides who gets in the door. VaultFX End of Watch decides everything after that.
A roster spreadsheet nobody fully trusts. Callsigns claimed in a text channel. Promotions handed out by whoever remembered to change the role. Hours logged on the honour system. End of Watch replaces all of it with one panel that owns the department's standing outright — Discord just reflects it.
Discord decides one thing: whether someone may access a department at all. Everything after that — rank, callsign, hours, certifications, history — is owned by the panel. Promote an officer in End of Watch and their Discord rank role and nickname are rewritten to match, in whichever guild that department lives in.
A rate limit, a timeout or a brief Discord outage can't leave the panel saying Sergeant while Discord still says Officer — the change is delivered the moment Discord is reachable again. Anything that can never succeed (missing permission, member left the server, bad token) is listed with the reason and can be retried, instead of failing silently in the dark.
Guilds are first-class records. Departments bind to a guild, and every Discord role reference is stored per-guild, so a role is never ambiguous across a community running more than one server. Link a guild read-only and the panel will not touch it until you say so.
Each department owns a pool of callsigns with a real lifecycle — available, assigned, retired. Assignment is a transaction: the old sign returns to the pool, the new one is taken, and an audit row is written. No two officers ever hold the same callsign at once.
Hires, promotions, demotions, transfers, terminations, discipline and LOA decisions all write an audit row with who did it and when. Rosters are evidence in a dispute — an unattributed change is worthless as a record. A read-only API for FiveM and CAD integrations ships in the box, so in-game duty state and rosters stay in sync with the panel.
Members sign in with the account they already use — no second password to manage.
A single Discord role decides who may enter a department in the panel. Nothing more.
Change a rank in the panel and the matching Discord role and nickname follow automatically.
Departments bind to a specific guild. Role IDs never collide across servers.
Available, assigned, retired — a real lifecycle instead of a shared text file.
Ordered ranks, each carrying its own set of panel permissions.
Badge numbers, characters, divisions, hire dates — the whole file in one place.
Clock in, clock out, and a running total per employee, per department.
Track who holds FTO, SWAT, K9 and any cert your department runs, with expiries.
Verbal warnings through termination, each tied to a penal code reference.
Members file leave requests; command approves or denies with a reason on record.
K9, SWAT, Traffic, Detectives — tag employees and schedule department meetings.
Custom application forms feed straight into a review queue for command staff.
Keep your department's code current — classes, fines and jail time in one table.
A read-only public view of active staff, for players who just need a name and rank.
Pull any table — roster, hours, discipline — into a spreadsheet in one click.
Every write to standing is attributed to a person and a timestamp.
Read-only endpoints for FiveM and CAD tools, keyed per department.
Sign in with the Discord account you already use in the server. If you hold a position in a linked department, your roster record is waiting on the other side. Browsing instead? Public roster pages are open to everyone.