Skip to main content

Admin config, permissions & frontend

Domain-level configuration

Helix behaviour is configured per-domain via JSON keys on domains.config, all editable from the Admin app's Settings page (frontend/src/admin/pages/settings/index.js, "Helix setup"/"Helix UI settings" sections):

KeyValuesPurpose
helixIntegrationMode'helix' | 'learning' | 'both'The master flag. 'helix' = Helix-only hub (Learning features hidden entirely). 'both' = Helix + Learning. 'learning' = a Learning-only hub with Helix off — also the default when the key is unset.
helixSendAnalysisEmailsboolean (default true)Whether meeting-analysis and weekly-analysis emails are sent
helixUIMode'scoresAndFeedback' | 'onlyScores' | 'onlyFeedback'Whether users see numeric scores, qualitative feedback, or both
helixShowQuotesboolean (default true)Whether transcript quote snippets are shown alongside scores
helixAdminSkillsAnalyticsPageboolean (default true)Shows/hides the admin Skills Analytics nav item
helixReportingTeamTypeteam typeWhich team-type is used for team-level reporting/heatmaps
helixAnonymiseUsersbooleanHides individual names in analytics unless filtered down to a specific team
helixBotImageUrlURL (theming)Custom bot avatar image used when the meeting bot joins a call

Backend permissions

  • Privileges (api/utils/privileges.js): HELIX_READ = 'helix_read', HELIX_WRITE = 'helix_write', plus a 'helix' role preset.
  • Middlewares: checkIsUserOrTeamManagerOrHelixAdmin.js and managerOrAdminUserOrReportOrHelix.js (api/middlewares/) gate routes like /userAnalysis, /skillsAnalysis, and /me/helixAccess-style endpoints to team managers, admins, or users with Helix admin rights.
  • Per-user access: getIsHelixUser()/checkIsHelixUser() (api/routes/userAnalysis/utils/index.js) determine whether a user has access to Helix in the current domain — they must belong to it as their helix_domain_id and have existing data or be targeted by a helix_set. Surfaced via GET /me/helixAccess and GET /users/{userId}/helixAccess.
  • assertUserBelongsToHelixDomain.js guards admin routes (e.g. additional-email management) to prevent cross-domain Helix data leakage.

Frontend flag helpers

frontend/src/common/utils/helix/ wraps helixIntegrationMode/helixUIMode into simple booleans/helpers used throughout the app:

// isHelixEnabled.ts
export const isHelixEnabled =
config.helixIntegrationMode === 'helix' || config.helixIntegrationMode === 'both';
  • isHelixEnabled — Helix features should show at all
  • isHelixOnlyHubmode === 'helix' (Learning features should be hidden)
  • isHelixAndLearningHubmode === 'both'
  • getHelixUIMode() — returns {helixUIMode, showFeedback, showScores} derived from helixUIMode
  • getHelixGraphTooltip() — tooltip copy helper for score graphs

These gate large parts of both apps' navigation — e.g. on a Helix-only hub, Asset Library/Playlists/Nudges/Topics are hidden entirely from both main (Navigation.tsx, HelixOnlyAccessWrapper.tsx) and admin (nav.tsx, ToolsMenu.tsx, LogsMenu.tsx).

Role-editing UI mirrors the backend privileges: frontend/src/common/utils/privileges/constants.ts merges a helixPermission array into the available permission set only when the domain is in helix/both mode (adminRoles/index.js, NewRoleModal.js, PermissionsEditorPanel.js).

Frontend surface area

Main app (frontend/src/common/screens/UserSkills/) — the "My Skills" experience:

  • WelcomePage/TrialWelcomePage — onboarding, explains inviting the agent account
  • SkillAnalysisPage, WeekAnalysisPage, MeetingAnalysisPage — score/feedback views
  • HelixNotAvailablePage — shown when a user lacks Helix access
  • HelixInfoButton/HelixInfoModal — explains what Helix is inline
  • TrialMindsetCard — links out to Mindset Coach (a separate, related feature — see Scoring engine)

Admin app:

  • Settings page — the domain config flags above
  • Skills management (admin/pages/skills/pages/EditSingleSkillPage)
  • Skills Analytics (admin/pages/skillsAnalytics/) — heatmap/progression/weeks-and-teams views
  • Skill Logs (admin/pages/logs/skills/)
  • Meeting Reprocessing (admin/pages/meetingReprocessing/) — see Scoring engine → Manual reprocessing
  • Helix email-watch toggle and the "Run Helix weekly email for all users on all hubs" button (see Scoring engine → weekly roll-up)

Calendar connection UI: CalendarDeAuthorisedContent.tsx plus the OAuth callback handlers under me/calendar/google/auth/callback and me/calendar/microsoft/auth/callback — see Meeting bots → User-side calendar connection.