Management Dashboard

2022-01-25

Management Dashboard — Technical Documentation

Comprehensive system design documentation for the B2B Management Dashboard, covering architecture, data flow, authorization, data models, and feature gating.


Table of Contents

  1. High-Level Architecture
  2. Frontend Architecture
  3. Backend Architecture
  4. Authentication & Authorization
  5. Feature Gating System
  6. Data Models
  7. State Management
  8. API Layer
  9. Routing & Navigation
  10. Reporting & Analytics Pipeline
  11. Content Studio & Curriculum Mapping
  12. Assignment System
  13. Seat Management & Billing
  14. Key File Reference

1. High-Level Architecture

The Management Dashboard is a multi-tenant B2B platform that allows company administrators to manage users, assign training content, track progress, and generate reports. It sits within the main TryHackMe monorepo as a feature module in the React frontend, backed by Express API controllers and MongoDB.

Request Lifecycle


2. Frontend Architecture

Module Structure

The management dashboard is a self-contained feature module located at apps/frontend/src/features/management-dashboard/.

Component Hierarchy


3. Backend Architecture

Controller–Service–Model Pattern

All management dashboard endpoints follow the Express MVC pattern: Route → Middleware → Controller → Service → Model.

Middleware Pipeline

Every management dashboard request passes through a shared middleware stack before reaching the controller.


4. Authentication & Authorization

Identity Model

The system distinguishes between two types of company-affiliated users:

Authorization Flow

Role Matrix

CapabilityCompany AdminB2B UserRegular User
View DashboardYesLimitedNo
Manage Users/SeatsYesNoNo
Create AssignmentsYesNoNo
View ReportsYesRead-onlyNo
Configure SettingsYesNoNo
Manage BillingYesNoNo
SSO ConfigurationYes (if enabled)NoNo
API Key ManagementYes (if enabled)NoNo

5. Feature Gating System

Features are gated at two levels: Company Features (stored in MongoDB per company) and GrowthBook Feature Flags (remote config, gradual rollout).

Feature Gating Architecture

Plan Feature Matrix

FeatureTEAMB2B
THM ContentYesYes
Additional ContentYesYes
Learning PathsYesYes
Content StudioYesYes
SOC SimulatorNoYes
Threat HuntingNoYes
Tabletop ExercisesNoYes
CertificationsNoYes
AssignmentsNoYes
Curriculum MappingNoYes
CTF BuilderNoYes
Skills MatrixNoYes
Skills GraphNoYes
MITRE ATT&CKNoYes
SSONoNo (add-on)
API AccessNoYes
Flexible SeatsNoNo (add-on)
Private GroupYesNo
Disable VM InternetYesNo
Transferable LicensesNoYes

GrowthBook Feature Flags

Flag NamePurpose
content-studio-all-tabEnables the unified "All" tab in Content Studio
curriculum-mappingEnables curriculum mapping feature
cta-content-studio-allEnables learning unit creation CTA
display-custom-page-searchEnables custom page search
business-management-dashboard-certsEnables certifications section
self-onboarding-adminsEnables admin self-onboarding flow
ttx-mgt-dashboardEnables TTX section in dashboard
b2b-reportingEnables new reporting UI
b2b-reporting-users-and-groupEnables user/group-level analytics
slack-teams-cardsEnables Slack/Teams integration cards
business-teams-checkoutEnables Teams plan checkout flow

6. Data Models

Entity Relationship Diagram

Company Document Structure (Embedded Documents)

The Company model uses embedded subdocuments extensively rather than separate collections. This design optimizes for read-heavy dashboard operations by keeping related data co-located.

Key Indexes

CollectionIndexPurpose
companiessubscription.stripe.customerIdStripe webhook lookup
companiessubscription.stripe.subscriptionIdSubscription management
companiesreminders (sparse)Reminder queries
company_assignment_completion{ userId, assignmentId, companyId } (unique)Prevents duplicate completions
analytics{ userId, action, inserted }Report aggregation queries
userslocal.emailLogin lookup
userssubscription.stripe.customerIdBilling lookup

7. State Management

State Architecture

RTK Query Data Flow

Key RTK Query Slices

SliceLocationKey QueriesKey Mutations
Dashboarddashboard/dashboard.slice.tsactiveUserStats, assignmentStats, leaderboard, skillsProgression, usersActivityStatussendInactiveUsersEmailReminder
Assignmentsassignments/assignments.slice.tscompanyAssignments, assignmentDetails, assignmentScoreboard, assignmentProgress, assignmentMetricscreateAssignment, cloneAssignment, deleteAssignment, updateDetails, bulkDelete
User Mgmtusers/.../user-management.slice.tsestimateCost, groupsLatestAssignments, jobStatusbulkImportUsers, addUserToSeat, removeUserFromSeat, redeemTokens, addFlexibleSeats
Settingssettings/settings.slice.tscompanyDomains, companyInviteLink, isTeamsBotInstalledupdateBranding, regenerateAPIKey, cancelSubscription, toggleVmInternetAccess
Analyticsreports/.../analytics.slice.tsuserAnalytics, userKPIs, groupAssignments
Content Studiocontent-studio/content-studio.slice.tscontentSearch

8. API Layer

Endpoint Map

All endpoints are prefixed with /api/v2/companies/ and require the standard middleware stack (isLoggedInisCorporatePartnerisDashboardExpired).


9. Routing & Navigation

Route Tree

All management dashboard routes are nested under /client/:companyId/.

Route Protection Layers

Each route can apply multiple protection checks, evaluated in order:


10. Reporting & Analytics Pipeline

Data Collection and Aggregation

KPI Calculation Flow


11. Content Studio & Curriculum Mapping

Content Studio Architecture

Curriculum Mapping Flow


12. Assignment System

Assignment Lifecycle

Assignment Data Flow


13. Seat Management & Billing

Seat Lifecycle

Billing Integration

Bulk Import Flow


14. Key File Reference

Frontend

FilePurpose
features/management-dashboard/management-dashboard.tsxEntry wrapper component
features/management-dashboard/use-mgt-dashboard.tsMain initialization hook
features/management-dashboard/dashboard/dashboard.tsxDashboard overview page
features/management-dashboard/dashboard/dashboard.slice.tsDashboard RTK Query slice
features/management-dashboard/assignments/assignments.tsxAssignments list page
features/management-dashboard/assignments/assignments.slice.tsAssignments RTK Query slice
features/management-dashboard/content-studio/content-studio.tsxContent Studio page
features/management-dashboard/users/views/user-management/User management views
features/management-dashboard/reports/All reporting views
features/management-dashboard/settings/settings.tsxSettings page
features/management-dashboard/v3/components/navigation/Sidebar navigation
features/management-dashboard/contexts/company/Company context provider
router/sub-routes/management-dashboard.tsxRoute definitions
common/hooks/use-company-features.tsFeature checking hook
router/route-protector.tsRoute protection utility

Backend

FilePurpose
routes/companies/index.tsMain company router
controllers/companies/index.tsCore company controller
controllers/companies/assignments.tsAssignment endpoints
controllers/companies/analytics.tsAnalytics endpoints
controllers/companies/company-seats.tsSeat management endpoints
controllers/companies/reports.tsReport generation endpoints
services/companies/index.tsCore company service (2800+ LOC)
services/companies/details.tsCompany detail transformation
services/companies/assignments.tsAssignment business logic
services/companies/company-seats.tsSeat management logic
services/companies/reports.tsReport aggregation pipelines
services/companies/active-user-stats.tsActive user statistics
services/companies/user-activity-status.tsUser activity classification
services/companies/content-studio-search.tsUnified content search
services/companies/curriculum/Curriculum parsing & matching
services/companies/sso.tsWorkOS SSO integration
services/companies/stripe-subscription.tsStripe billing integration
models/company/index.tsCompany Mongoose model
models/company/company-user.tsCompany user subdocument
models/company/assignment.tsAssignment subdocument
models/assignment-completion/index.tsAssignment completion model
common/constants/companies/features.tsPlan feature configuration
common/interfaces/company/features.tsFeature interfaces
middlewares/is-corporate-partner/index.tsCorporate partner middleware