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):
| Key | Values | Purpose |
|---|---|---|
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. |
helixSendAnalysisEmails | boolean (default true) | Whether meeting-analysis and weekly-analysis emails are sent |
helixUIMode | 'scoresAndFeedback' | 'onlyScores' | 'onlyFeedback' | Whether users see numeric scores, qualitative feedback, or both |
helixShowQuotes | boolean (default true) | Whether transcript quote snippets are shown alongside scores |
helixAdminSkillsAnalyticsPage | boolean (default true) | Shows/hides the admin Skills Analytics nav item |
helixReportingTeamType | team type | Which team-type is used for team-level reporting/heatmaps |
helixAnonymiseUsers | boolean | Hides individual names in analytics unless filtered down to a specific team |
helixBotImageUrl | URL (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.jsandmanagerOrAdminUserOrReportOrHelix.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 theirhelix_domain_idand have existing data or be targeted by ahelix_set. Surfaced viaGET /me/helixAccessandGET /users/{userId}/helixAccess. assertUserBelongsToHelixDomain.jsguards 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 allisHelixOnlyHub—mode === 'helix'(Learning features should be hidden)isHelixAndLearningHub—mode === 'both'getHelixUIMode()— returns{helixUIMode, showFeedback, showScores}derived fromhelixUIModegetHelixGraphTooltip()— 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 accountSkillAnalysisPage,WeekAnalysisPage,MeetingAnalysisPage— score/feedback viewsHelixNotAvailablePage— shown when a user lacks Helix accessHelixInfoButton/HelixInfoModal— explains what Helix is inlineTrialMindsetCard— 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.