StaffGateway
Admin portal · Employee portal
Information architecture · 21 Oct 2026

StaffGateway: information architecture

How the two StaffGateway web apps are organised, built from the 391 frames of the Figma "Design EN" page plus the admin redesign page (48 frames) and the newer access-management frames (5). Part A covers both portals: who uses them, the navigation, the modules and their routes. Part B goes deep on the Roles module.

A1. The two portals

AppWhoEntryWhat it is for
Admin portalPortal administrators, HR, cluster and facility admins (scope comes from their role, see Part B)app.htmlSet up and run the attendance system (locations, workforce setup, employee assignments, bulk assignment, error logs), read dashboards and reports, manage roles, announcements, banners, the contact form and the portal theme.
Employee portalEvery employee; managers see more (persona switch in the header for review: Employee / Manager)portal.htmlHome with personal dashboard and news, request HR services, act on the worklist, follow ongoing and saved requests, see own attendance, profile, payslip, analytics; managers and specialists act for their team.

Both apps share one shell (header with language, notifications and user; light sidebar with expandable groups; theme switch), one sign-in flow, the StaffGateway design system, English and Arabic, light and dark.

A2. Admin portal sitemap

Admin portal (app.html) ├── Sign in · Forgot password · OTP · New password · Done · Password expired #/login … ├── Home #/home ├── Dashboard ▸ System Activity #/dashboard/activity │ ▸ Feedbacks #/dashboard/feedbacks ├── Attendance System ▸ Daily Attendance (live today · past days · day details) #/attendance/daily │ ▸ Violations (review: excuse · confirm · reopen · bulk) #/attendance/violations │ ▸ Locations: clusters · facilities · sub-facilities #/attendance/locations │ ▸ WorkForce Setup: shifts · work plans · rotation · holidays #/attendance/workforce │ ▸ Employee Assignments → employee details #/attendance/assignments │ ▸ Bulk Location Assignment #/attendance/bulk │ ▸ Error Logs #/attendance/error-logs ├── Reports ▸ Attendance Reports → one report #/reports/attendance │ ▸ Services Error Logs #/reports/services-errors ├── Access Management ▸ Roles by category → users per role · shift-admin team #/roles │ ▸ User Access → Assign User (one role per category) #/roles/user-access │ ▸ Permissions (by category and role, read-only) #/roles/permissions └── System Management ▸ Content Panel: licence · news · banners (redesign) #/system/content ▸ Announcements #/system/announcements ▸ Banners (web · mobile) #/system/banners ▸ Contact Form Settings #/system/contact ▸ Theme Management #/system/theme

A3. Employee portal sitemap

Employee portal (portal.html) ├── Sign in (same flow as the admin portal) #/login … ├── Home: greeting, offers, date and time, my dashboard, news, internal systems, quick actions, SNARK assistant #/home ├── Services: catalogue → request (fill · review · done) #/services ├── Worklist: FYI · For your action · History → request details and actions #/worklist ├── On Going Requests #/requests/ongoing ├── Saved For Later Requests #/requests/saved ├── Attendance Report (own) #/attendance-report ├── Analytics #/analytics ├── Profile: personal · job · payslip · salary · settings (from the header) #/profile ├── Manager Self-Services (manager): team → member → act for them #/manager └── Specialist Self-Services (manager): employees served → act for them #/specialist

A4. Modules, routes and sources

Each module is one script and one stylesheet, built from its slice of the Figma page. Screen counts are Figma frames, including every state and dialog.

ModuleAppRoutesFigma sourceFrames
Sign inboth/login /forgot /otp /new-password /password-done /expired /password-changedLogin, Password Reset, password is expired30
Homeboth/homeHome (admin), Home (employee, manager)15
Dashboardadmin/dashboard/activity /dashboard/activity/clusters/:id /dashboard/feedbacksDashboard, 2 tabs services, system activity variants20
Locationsadmin/attendance/locations?tab=clusters|facilities|subs /attendance/locations/clusters/:id /attendance/locations/facilities/:idAttendance System / Locations22
Employee assignmentsadmin/attendance/assignments /attendance/assignments/:id /attendance/bulkEmployee Assignments, Bulk Location Assignment69
WorkForce setupadmin/attendance/workforce?tab=shifts|plans|rotations|holidays /attendance/workforce/work-plans/:id /attendance/workforce/rotations/:idWorkForce Setup, Holiday Calendar50
Reports and error logsboth/reports/attendance /reports/attendance/:report /attendance/error-logs /reports/services-errors · portal /attendance-reportReports, Attendance Report, error logs26
Daily attendance and violationsadmin/attendance/daily /attendance/violationsNone (side-menu entries only); built from the attendance report screens and their data0
Access managementadmin/roles /roles/user-access /roles/user-access/assign /roles/permissions … (Part B)Roles, Role & Permission Management48
System managementadmin/system/content /system/announcements /system/banners /system/contact /system/themeSystem Management; page "Redesign (Admin Portal)" for the Content Panel43
Services and requestsportal/services /services/:id /requests/ongoing /requests/savedServices, On Going Requests17
Worklistportal/worklist?tab=fya|fyi|history /worklist/:idWorklist (FYI, FYA, History and 8 action flows)43
Profile and analyticsportal/profile?tab=personal|job|payslip|salary|settings /analyticsProfile, Analytics11
Self-servicesportal/manager /manager/team/:id /manager/team/:id/services /manager/requests · /specialist /specialist/employees/:id /specialist/employees/:id/services /specialist/requestsManager and Specialist Self-services26

Daily Attendance and Violations appear in the Figma side menu but have no screens anywhere in the file. They were designed from the attendance report screens and read the same records, so a person's day matches in every report; they need design review. A large "Dark" frame on the page is empty and was skipped; dark mode comes from the design system instead.

A5. Shared building blocks

A6. Key decisions per module

Each module records its full list at the top of its script. The ones that change behaviour or wording:

ModuleDecisions
Sign inNewest Figma set used. One left-to-right OTP field with a 60-second resend. Live password checklist (icon and word per rule). Done pages count down to sign-in with "Stay on this page".
HomeEmployee home follows the latest StaffGateway home (greeting, offers, date and time, My Dashboard, News, Internal Systems, Quick actions · Notes · Social media bar, SNARK assistant). Salary hidden until shown, never saved. Manager adds For Your Action. The header bell and user menu open from every page.
DashboardNewest system-activity frames win; older variants kept as options (source tabs, Compare, list layout). "Ma'an / Mawared" became "StaffGateway / HR system". Cluster-admin view scopes every figure. Feedback totals made consistent.
Locations"Subsidiary" is called Sub-facility. Cluster and facility details are pages. Delete added at every level (a cluster with facilities can't be deleted). Map is a token-drawn placeholder; latitude before longitude.
Employee assignmentsNewest list with two tabs; older tab became status chips. Details is a page with pending requests and history. Transfers are pending until their start date and can be cancelled. Bulk upload really parses CSV with the template header; other files are simulated.
WorkForce setupWork week is Sunday-first. "Work System" is called work plan. Shift/plan in use can't be deleted ("Action not allowed"). Holiday calendar is Gregorian with Hijri under each day and a Hijri month view; Saudi official holidays seeded.
ReportsAll reports, error logs and the employee report read one set of attendance records, so figures agree. Shortfall = delay + early leave. "On leave" status added. CSV export opens correctly in Excel (Arabic included).
Daily attendance and violationsNo Figma screens; designed from the attendance reports. Daily: today is live from the clock (Not started, Not checked in, On shift), other days show final status; check-in at another facility is flagged. Violations: late arrival, early leave, absence without leave, missing check-out, punch outside the location, fake location; approved excuse minutes cover lateness first; each can be excused (reason + note), confirmed or reopened, alone or in bulk, with Undo.
Access managementNewest Figma ("Role & Permission Management"): three control categories (Attendance, Management, Care), one role per category per person. Manager moved to Management. Four new roles: Announcements Controller, News Controller, Care Admin, Care Ads Controller. Changing a person's role in a category is done on Assign User with "Replace role"; a role's own assign dialog leaves out people who already hold a role in that category. One Cluster CEO per cluster (4, not the Figma's 12).
System managementThe redesigned Content Panel manages the same news and banners as the Announcements and Banners pages, adds drag-to-reorder for news and a Hidden state (Figma "Suspended": Hide / Show again), and shows the licence cards; its "Admin | System Activity" header pills were not built (the sidebar has both). Statuses: Published, Scheduled, Draft, Expired, Hidden ("Disabled" became Unpublish). Titles and descriptions required in English and Arabic. Theme presets only (contrast checked), with live preview and Apply + Undo.
ServicesRequest form is a page with fill · review · submitted. In-progress requests can be updated or deleted, rejected ones re-submitted, approved ones only give output files. Output letters download as generated files.
Worklist"Previous" is called History. HCM / SCM / Finance chips merged into one category row. Approve note optional, reject note required. Every action moves the item to History with Undo.
Profile and self-servicesProfile pages are tabs on one page. Payslips generated from the salary history and downloadable. Specialist flow mirrors the manager flow for the employees a specialist serves. Self-services explain themselves to non-managers.

Admin portal → employee portal

Part B · Roles module

7roles, all listed with permissions
4screens: roles, permissions, users list, shift admin team
6assign-dialog variants, plus edit facilities
8decisions taken on the design's open points

The module answers three questions for a portal administrator: which roles exist, what each role may do (read-only), and who holds each role, where people can be assigned for a period or removed. Shift Admin goes one level further: each shift admin has a team of employees that can be edited.

1. Organisation and role model

Organisation hierarchy

Every scope in the module is expressed against this tree. Employees belong to a facility; a role assignment can carry a cluster or facility scope.

Organisation (tenant) └── Area (exists as a hidden field in the assign dialog) └── Cluster └── Facility └── Sub-facility └── Employees, shifts, work systems, rotation plans

Roles

RoleLevelWhat it is forScope set on assignHolders (sample)
Organization AdminOrganisationOwns all configuration: clusters, facilities, shifts, work systems, rotation plans, holidays, assignments.None (whole organisation). Assigned by the platform owner, not from the portal; its holders are visible read-only.1
Organization HeadOrganisationExecutive viewer: the dashboard only.None6
Cluster AdminClusterRuns one cluster: its facilities, sub-facilities, shifts, rotation and location assignments.Cluster (required)6
Cluster CEOClusterRead-only view of their cluster and its facilities.Cluster (required). One per cluster: a new CEO replaces the current one.4
Facility AdminFacilityRuns one or more facilities: sub-facilities, shifts, work systems, rotation plans.Cluster + one or more facilities (step 2), editable per person later24
ManagerFacilityLine manager inside a facility: reads its shifts, plans, people and attendance.Cluster + facility (filters in step 1)10
Shift AdminTeamSupervises a named team of employees in one facility: reads shifts and plans, manages rotation assignments for the team.Cluster + facility, then the team (step 2)12

2. Sitemap and routes

The portal shell is shared: the header (logo, language switch, notifications, user), the sidebar (Home, Dashboard, Attendance System, Reports, Roles, System Management) and the theme switch. Only Roles is in scope here.

Admin portal ├── Home ├── Dashboard ▸ ├── Attendance System ▸ ├── Reports ▸ ├── Roles #/roles │ ├── Roles permissions (read-only) #/roles/permissions?role={roleId} │ └── {Role} users list #/roles/{roleId}/users │ ├── ◻ Assign user (dialog, 1–2 steps, variant per role) │ │ └── ◻ Discard changes? (confirm) │ ├── ◻ Remove role from user? (confirm) │ ├── Facility Admin only: │ │ └── ◻ Edit facilities (dialog, per person) │ └── Shift Admin only: │ └── {Person} team #/roles/shift-admin/users/{userId}/team │ ├── ◻ Add employees (dialog) │ │ └── ◻ Discard changes? (confirm) │ └── ◻ Remove from team? (confirm) └── System Management ▸ ◻ = overlay on the parent screen, not a page. Every overlay can be opened from the URL with ?dialog=… for review.

3. Screen inventory

#ScreenContentActionsStatesSource frames
S1RolesTable: role name (sortable), level, assigned-to count. Search.Roles permissions (outline button, top end). Row action: open users list (read-only for Organization Admin).Default, search with no result.1
S2Roles permissionsRole chips (single choice), "Permissions are read-only" note with a lock, table: entity, create, read, update, delete, scope.Back, switch role.One per role (6 frames).6
S3{Role} users listFilters: search field selector (employee name / ID / email / job), search, cluster, facility, clear filters. Table: user, ID, email, job, cluster, facility, assigned date with validity (starts on, ends in N days, until), action. Pagination. Shift Admin adds an Employees count column.Back, Assign user (primary), remove (per row), Facility Admin: edit facilities, Shift Admin: open team. Organization Admin: read-only, no action column.Default, empty, no result, scheduled, ending soon.6 lists + 24 overlays
S4{Person} team (Shift Admin)Same table as S3 for the employees this shift admin supervises.Back, Add employees (primary), remove from team.Default, empty.2
D1Assign user dialogEmployee picker: field selector, search, scrolling checklist (EN + AR name, ID, job), selected chips, counter. Role-specific scope fields. Last step: Effective from (required, today by default) and Until (optional).Cancel, Add / Next / Save.Empty, selected, error (no employee, no cluster, dates), CEO replacement warning, discard prompt.20
D2Remove role from user?Warning icon, title, consequence (for a shift admin: their team is left without one).Cancel, Remove role (destructive).—5
D3Discard changes?Shown when Cancel or × is pressed with unsaved choices.Continue editing, Discard changes.—5
D4Edit facilitiesOne facility admin: cluster, facility checklist, chips.Cancel, Save.Error (no facility), discard prompt.new

4. Assign dialog by role

One dialog component, configured per role. The employee picker is the same everywhere; what changes is where the scope is asked and whether there is a second step.

RoleTitleStep 1Step 2Main button
Organization HeadAssign userEmployees—Add
Cluster AdminAssign userEmployees, then Cluster* below the picker—Add
Cluster CEOAssign Cluster CEOOne employee (radio list), then Cluster*. Each cluster option names its current CEO; picking one shows a replacement warning.—Add
Facility AdminAssign users to Facility AdminEmployeesCluster, then facilities (multi-select with chips). A note says the set applies to everyone selected.Next → Save
ManagerAssign ManagerCluster + Facility filters above the picker, then employees—Add
Shift AdminAssign Shift AdminCluster + Facility filters, then the people who become shift admins"Add employees to Shift Admin": the team they superviseNext → Add

Rules for every variant: the last step ends with Effective from (required, today by default, not in the past) and Until (optional, after the start). The main button is always enabled; pressing it with nothing selected shows the error under the picker and tints it. A required scope or date field shows its own error and takes focus. People who already hold the role are not offered again. An assignment that starts later counts as a holder and shows "Starts …"; one that has ended no longer counts.

5. Flows

F1 · Review what a role can do

flowchart LR
  A[Roles] -->|Roles permissions| B[Permissions: first role selected]
  B -->|pick another chip| B
  B -->|Back| A

F2 · Assign people to a role

flowchart TD
  A[Roles] -->|row action| B[Role users list]
  B -->|Assign user| C{Role needs filters first?}
  C -->|Manager, Shift Admin| C1[Pick cluster and facility]
  C -->|others| D[Pick employees]
  C1 --> D
  D -->|Add / Next with none picked| E[Error: select at least one employee]
  E --> D
  D -->|Cluster Admin, Cluster CEO| F[Pick cluster*]
  D -->|Facility Admin: Next| G[Pick cluster, then facilities]
  D -->|Shift Admin: Next| H[Pick the team]
  D -->|Org Head: Add| T[Effective from, until]
  F -->|Add| T
  G -->|Save| T
  H -->|Add| T
  T -->|start in the past or end before start| T
  T --> S[Saved: toast, list refreshed]
  D -->|Cancel or close with changes| X{Discard changes?}
  X -->|Continue editing| D
  X -->|Discard| B

F3 · Remove a role from a person

flowchart LR
  A[Role users list] -->|trash on a row| B{Remove role from user?}
  B -->|Cancel| A
  B -->|Remove role| C[Row removed, count updated, toast with Undo]

F5 · Replace a cluster's CEO

flowchart LR
  A[Cluster CEO users] -->|Assign user| B[Pick one employee]
  B --> C[Pick cluster]
  C -->|cluster has a CEO| D[Warning: this replaces NAME]
  C -->|no CEO yet| E[Add]
  D -->|Add| F[New CEO saved, old CEO loses the role, toast names both]
  E --> F

F6 · Change one facility admin's facilities

flowchart LR
  A[Facility Admin users] -->|pencil on a row| B[Edit facilities]
  B -->|Save with none| B
  B -->|Save| C[Row updated, toast]
  B -->|Cancel with changes| D{Discard changes?}

F4 · Edit a shift admin's team

flowchart LR
  A[Shift Admin users list] -->|Employees count| B[Person team]
  B -->|Add employees| C[Employee picker]
  C -->|Add| B
  B -->|trash on a row| D{Remove from team?}
  D -->|Delete| B

6. Permission matrix

C, R, U, D = create, read, update, delete. Read-only in the portal. Scope wording is normalised (for example "Within Cluster" and "Within Cluster Only" are one value).

7. Objects and fields

ObjectFieldsNotes
Roleid, name (EN, AR), level, assignable, scopeType (none · cluster · facilities · team)Fixed list; permissions come with the role.
Permissionrole, entity, create, read, update, delete, scope12 entities, see the matrix.
Role assignmentemployee, role, cluster?, facilities[]?, assignedDate, start (required), end?Status is derived: scheduled (start later), active, ending (≤ 14 days left), ended (no longer a holder). Cluster CEO: at most one active per cluster.
Shift teamshiftAdmin (assignment), employees[]Shown as the Employees count.
Employeeid (10 digits), name EN, name AR, email, job title, cluster, facilityComes from the HR feed; read-only here.
Cluster · Facilityid, name EN, name AR, parentFeed the filters and scope fields.

8. Messages and copy

WhereEnglishArabic
Permissions notePermissions are read-only.الصلاحيات للعرض فقط.
Remove confirmRemove role from user? This removes all of this role's permissions from them.إزالة الدور من المستخدم؟ ستُزال كل صلاحيات هذا الدور منه.
Picker errorSelect at least one employee before adding.اختر موظفًا واحدًا على الأقل قبل الإضافة.
Scope errorSelect a cluster.اختر التجمع.
Discard confirmDiscard changes? If you leave now, your selections will be lost.تجاهل التغييرات؟ إذا خرجت الآن فستضيع اختياراتك.
Saved toast2 people assigned to Cluster Admin.تم إسناد دور مسؤول التجمع. عدد الأشخاص: 2.
Date errorsThe start date can't be in the past. · The end date must be after the start date.لا يمكن أن يكون تاريخ البدء في الماضي. · يجب أن يكون تاريخ الانتهاء بعد تاريخ البدء.
CEO warningThis replaces the current CEO. NAME is the CEO of CLUSTER now. When you save, NAME loses the Cluster CEO role.سيحل محل الرئيس التنفيذي الحالي. الرئيس التنفيذي الحالي لهذا التجمع هو NAME. عند الحفظ سيفقد هذا الدور.
ValidityStarts 01 Nov 2026 · Ends in 12 days · Until 31 Mar 2027يبدأ 01 نوفمبر 2026 · الأيام المتبقية: 12 · حتى 31 مارس 2027
Remove shift adminNAME will lose all Shift Admin permissions. Their team of 8 employees will have no shift admin until you assign one.سيفقد NAME كل صلاحيات دور مسؤول المناوبة، وسيبقى فريقه بلا مسؤول مناوبة حتى تُسند أحدًا.

9. Design system mapping

Brand data-brand="staffgateway", comfortable density, cards with border and a small shadow, underline tabs. No IT-RANKS endorsement anywhere.

Sidebar: light, with a blue pill for the current page, as in the StaffGateway employee app and the source Figma. The design-system server's StaffGateway setting was changed from brand (navy) to sidebar.style: "light" on 21 Oct 2026 to match (contrast 66/66, no color roles changed).

Figma elementDesign system component
Top bar with language, notifications, userApp header · LanguageSwitch · NotificationsButton · Avatar
Side menu with expandable groups, theme switch, versionSidebar (light style, pill for the current page), ToggleGroup segmented for light/dark
Roles, users and permission tablesData table (search, sort, pagination), Table
Role chips on permissionsToggleGroup, segmented (single choice)
✓ / ✗ cellsStatus icon + visually hidden word, so meaning is not colour-only
Assign user popupDialog · Field · Combobox (multiple, Arabic-aware filter) · Select
Remove role / Discard changes popupsAlert dialog (Cancel first, verb on the action)
Red trash in rowsIconButton (ghost, destructive tone) with a label and tooltip
Selected employeesBadge chips with remove buttons
After save / removeToast (bottom end), with Undo on remove

10. Decisions

The design left eight points open. Each has a recommended answer, and the build follows it. Recommended means it still needs the client's confirmation.

#Open pointDecisionIn the build
1Manager has screens but is missing from the roles list and the permission chips. Manager is a real role. Read-only inside its own facility: facilities, shifts, work systems, rotation plans, employee data, rotation assignments and attendance; holidays for all. No create, update or delete. Listed on Roles, has a permissions tab, 10 holders.
2Organization Head scope says "All" on rows where nothing is allowed. Dashboard only. A row with no permission shows "No access", whatever the stored scope. Applied to every role's permissions table.
3Organization Admin has no row action. Not assignable from the portal: the platform owner sets it during onboarding. Its holders are visible, read-only, for audit. Row shows "Managed by the system owner" and a view link; the list has no Assign, no remove, no action column.
4Hidden dialog fields: Area, effective start, effective end, "Apply shift for all days". Keep the dates: every assignment has a start date (today by default) and an optional end date, for acting roles and cover. Drop Area (the cluster already implies it) and "Apply shift for all days" (it belongs to shift planning, not roles). Date fields on the last step with validation; the list shows Starts / Ends in N days / Until; ended assignments stop counting.
5Cluster CEO uses the Cluster Admin dialog; several CEOs per cluster? One CEO per cluster. Assigning a CEO to a cluster that has one replaces them, after a clear warning. Single-choice picker, cluster options name the current CEO, warning callout, toast names both people. Seed data: 4 CEOs, one per cluster.
6Facility Admin facilities chosen once for everyone selected. Keep the shared set when assigning several people (the usual case), say so in the dialog, and allow per-person changes afterwards. Note in step 2; pencil action per row opens "Edit facilities".
7Users-list filters differ between frames. One toolbar on every users list: search field (name, ID, email, job), search, cluster, facility, and Clear filters once any is set. Same toolbar on all six lists; the team page keeps field + search.
8Removing a role is immediate in the design. Keep the confirmation and add Undo for 6 seconds, restoring the same dates and team. Removing a shift admin says their team is left without one. Remove dialog, Undo in the toast, team warning in the dialog text.