Skip to main content

Data model

All Helix tables live in the main Hub database, modelled as dare ORM models in api/db/models/ (camelCase file names, e.g. helixMeeting.js, mapping to snake_case tables, e.g. helix_meeting). These model files are the authoritative schema reference for the helix_* tables.

Tables

TableModel filePurpose
helix_meetinghelixMeeting.jsOne row per analysed meeting: transcript (JSON), raw LLM response (raw_analysis, JSON), model/temperature/reasoning_effort used, platform, organiser email
helix_meeting_skillhelixMeetingSkill.jsWhich skills (and which prompt) were assessed for a given meeting
helix_user_meetinghelixUserMeeting.jsOne row per user per meeting: links to the meeting and to the user's weekly helix_user_analysis bucket
helix_user_meeting_skillhelixUserMeetingSkill.jsPer-user, per-skill scoring detail for one meeting — pos_count/neg_count, context_indicator/sentiment_indicator/keyword_indicator, raw_score/score, skill_usage (JSON quotes), summary, suggestion
helix_user_analysishelixUserAnalysis.jsWeekly summary bucket per user/domain (analysis_week_commencement_date)
helix_user_analysis_skillhelixUserAnalysisSkill.jsAverage score/summary/suggestion per skill for the week
helix_skillhelixSkill.jsA scorable soft skill: name, synonyms, description, prompt_idhelix_prompt, helix_agent_idhelix_agent, hierarchical via parent_id (self-reference)
helix_skill_contenthelixSkillContent.jsLinks a skill to a piece of learning content (content_id)
helix_prompthelixPrompt.jsPrompt text (prompt, negative_prompt) plus the 3Q weights: w1_keyterms, w2_context, w3_sentiment
helix_agenthelixAgent.jsA named agent (e.g. '3Q' or 'open') — its name selects which response schema/scoring path is used, and it has its own helix_prompt_id (the overall system prompt for the analysis call)
helix_sethelixSet.jsA named group of skills, targeted at audience: 'all' or audience: 'teams'
helix_set_skillhelixSetSkill.jsJoin table: helix_sethelix_skill
helix_set_teamhelixSetTeam.jsJoin table: helix_setteam_id, used only when helix_set.audience = 'teams'

See Scoring engine for how helix_set/helix_skill/helix_prompt/helix_agent combine to decide which skills get analysed for a given user, and how the 3Q weight columns are used.

Key relationships

users.helix_domain_id

A user can belong to multiple domains/hubs, so users.helix_domain_id designates which one domain is "their" Helix domain — i.e. where their Helix meeting/skill data is authoritative. It defaults to the domain a new user is first created in — set on federation (SAML/LinkedIn) login for new users (auth/modules/auth.js, see SSO Login: Shared verify function) and on bulk/CSV user import (api/modules/users/processUsers.js, api/modules/importUsers/db/users.js) — and can be changed explicitly via PATCH /me/settings with is_helix_hub: true (api/routes/me/settings/patch.js). It's used throughout helixProcessing and the access-check helpers described in Admin config, permissions & frontend.