SafePath Training — Product Requirements v2
Executive Summary
SafePath is a standalone-first, HazCom-extensible training management module. It serves two distinct use cases:
- Standalone Training Platform — EHS trainers, consultants, and safety managers who need to create courses, assign training, track completions, manage certifications, and prove OSHA compliance. Works without any other Tellus module.
- HazCom-Integrated Training — Companies using the full Tellus platform get auto-generated training from HazCom plans, chemical-change-triggered retraining, and SDS-linked content.
This architecture enables a faster path to revenue (trainers sign up and get value in minutes) while preserving the deeply integrated HazCom experience as an upsell.
Market Context
Why Standalone Training First
| Factor | Data Point |
|---|---|
| EHS professionals in the US | ~164,000 (BLS 2024); est. 25,000-40,000 independent consultants |
| Current tools | Excel spreadsheets, paper binders, email - no dedicated affordable platform |
| Pain points | Certification expiration tracking, audit-ready records, multi-client management |
| Generic LMS gap | TalentLMS ($109-$579/mo), Teachable ($29-$189/mo) - zero OSHA/safety features |
| EHS platform gap | HSI ($4,500+/yr), J.J. Keller (custom), VelocityEHS (enterprise) - too expensive for SMB |
| Price gap | No EHS-specific training platform under $3,600/yr for small businesses |
| OSHA training requirements | Hundreds of standards require training; HazCom is just 1 of the Top 10 most-cited |
| TAM expansion | Moving from HazCom-only to multi-standard training = ~9x larger regulatory-driven demand |
| Safety training spend | 44% of companies spend less than $200/employee/year on safety training |
| OSHA ROI | Employers save $4-$6 for every $1 invested in safety programs |
Competitive Positioning
Enterprise <------- Price -------> SMB
VelocityEHS (enterprise) |
HSI ($4,500+/yr) |
J.J. Keller (custom) |
|
BIStrainer ($350+/mo) |
SiteDocs ($29/user/mo) |
|
| <-- GAP: No affordable EHS training
| platform for SMBs & consultants
|
* Tellus SafePath ($99-$449/mo, flat fee)
|
SafetyCulture ($24/user/mo) | (horizontal, not training-focused)
TalentLMS ($109/mo) | (generic LMS, no safety features)
Architecture: Two-Layer Design
Layer 1: Core Training Platform (Standalone)
Works for any company type - no other Tellus module required.
| Capability | Description |
|---|---|
| Course creation | Manual course builder with video, PDF, slides, text lessons |
| Quiz and evaluation | MCQ, true/false, matching; configurable pass rate and retakes |
| Assignment engine | Assign by user, role, site, or department; set due dates |
| Certification tracking | Track expiring certifications; automated renewal reminders |
| Training matrix | Auto-generate the OSHA-required training matrix by job role |
| Compliance calendar | Single view of all retraining deadlines across sites |
| Completion records | Immutable records with e-signature, timestamp, audit trail |
| Certificate generation | Branded PDF certificates with course, score, date, signatures |
| Reporting | Completion rates, overdue counts, audit-ready exports |
| Multi-language | EN/ES content and UI |
| Multi-company | Trainers/consultants manage multiple client organizations |
Layer 2: HazCom Extension (Activates with ChemIQ + HazCom Plan)
Additional capabilities when company has ChemIQ and HazCom Plan modules enabled:
| Capability | Description |
|---|---|
| Auto-generated courses | Create course outline + quiz from approved HazCom plan + SDS data |
| Chemical-change retraining | New chemical added triggers retraining for affected sites |
| Plan-version retraining | New plan version published triggers retraining assignment |
| SDS-linked content | Training content references specific SDS sections and GHS data |
| GHS pictogram training | Auto-generated lessons from inventory's GHS classifications |
| AI Explainer | Contextual chat during course that retrieves plan/SDS snippets |
Why This Matters
| Scenario | Without layering | With layering |
|---|---|---|
| EHS Trainer signs up | Must set up chemical inventory + HazCom plan before any training value | Creates courses and assigns training immediately |
| Auto body shop owner | Needs full HazCom setup (weeks) before training | Starts manual training on Day 1; HazCom auto-training activates later |
| EHS Consultant | Platform requires per-company chemical setup | Manages 20 client companies' training from one login; adds ChemIQ per client as needed |
| Time to value | Weeks | Minutes |
User Personas
Persona 1: EHS Trainer (Standalone)
Who: Independent safety training provider or small training company.
Context: Manages training programs for 5-50 client companies. Currently tracks everything in Excel and email. Charges clients per training session or monthly retainer.
Needs:
- Create and manage a library of safety courses (fall protection, lockout/tagout, HazCom, etc.)
- Assign courses to employees across multiple client companies
- Track completion, scores, and certifications per employee
- Generate audit-ready reports for each client when OSHA inspects
- Get notified when certifications are expiring
- Show clients a professional dashboard of their training compliance status
Key differentiator from generic LMS: Multi-company management, OSHA-aligned reporting, certification expiration tracking.
Persona 2: Safety Manager / Coordinator (In-House)
Who: Company employee responsible for safety compliance at one or more sites.
Context: Manages 10-200 employees across 1-5 sites. Needs to ensure all employees have required OSHA training. Currently uses paper sign-in sheets and a binder.
Needs:
- Assign required training by job role and site
- Track who has completed what and who is overdue
- Handle new-hire onboarding training
- Manage annual retraining (respiratory, bloodborne pathogens, etc.)
- Produce records when OSHA inspector visits
- Get dashboard showing overall compliance status
Key differentiator: Training matrix auto-generation, retraining schedule automation, compliance dashboard.
Persona 3: Full Platform User (HazCom + Training)
Who: Company using Tellus for chemical inventory, SDS management, and HazCom plans.
Context: Already set up ChemIQ with 50-500 chemicals. HazCom plan approved. Now needs to train employees on chemical hazards.
Needs:
- Everything from Persona 2, plus:
- Auto-generated HazCom training from plan approval
- Training content linked to actual chemicals on-site
- Automatic retraining when chemical inventory changes
- GHS pictogram recognition training
Key differentiator: Deep HazCom integration that no standalone LMS can replicate.
Functional Requirements
7.1 Training Dashboard
All users see a role-appropriate dashboard:
| Role | View |
|---|---|
| Employee | "My Trainings" - assigned, in-progress, completed, overdue |
| Manager / Safety Coordinator | Site-level compliance - completion rates, overdue counts, expiring certs |
| EHS Trainer / Consultant | Multi-company overview - each client's compliance status at a glance |
| Admin | Company-wide roll-up - all sites, all employees, all courses |
Dashboard elements:
- Status chips: Pending, In Progress, Completed, Expired, Overdue
- Filters: site, role, course, due date, certification type
- Compliance percentage bar per site (green/yellow/red)
- Upcoming expirations list (next 30/60/90 days)
- Export current view to CSV/PDF
7.2 Course Management
7.2.1 Manual Course Creation (All Plans)
Course wizard:
- Course details - title, category, description, objectives, estimated duration
- Regulatory mapping - link to OSHA standard(s) (e.g., 1910.134 Respiratory Protection)
- Add lessons - Video, PDF, Slides, Text; upload assets; drag-to-reorder
- Quiz builder - MCQ (single/multi), True/False, Matching; set passing score (default 80%)
- Settings - retake policy (max attempts, cooldown), completion requirements, language (EN/ES)
- Review and publish (or save as Draft)
Course categories (pre-built):
- Hazard Communication (HazCom/GHS)
- Fall Protection
- Lockout/Tagout (LOTO)
- Respiratory Protection
- Confined Space Entry
- Electrical Safety
- Personal Protective Equipment (PPE)
- Bloodborne Pathogens
- Fire Safety / Emergency Action
- Forklift / Powered Industrial Trucks
- Excavation / Trenching
- Scaffold Safety
- General Safety Orientation
- Custom (user-defined)
Course templates (future): Pre-built course outlines for common OSHA topics that trainers can customize. This is a content library play - start with empty templates, build out over time.
7.2.2 Auto-Generated Courses (HazCom Extension - Standard + Pro)
Trigger: HazCom Plan approval (Module 6).
Process:
- System reads approved plan + SDS data for all chemicals in scope
- Generates course outline: GHS overview, hazard categories present, PPE requirements, emergency procedures
- Creates quiz questions from plan content
- Course saved in Draft state - trainer/coordinator reviews and edits before publishing
- Store linkage:
course.plan_version_id
Content auto-generated from:
- Chemical hazard classes present at site
- GHS pictograms in use
- PPE requirements from SDS Section 8
- Emergency procedures from SDS Section 6
- First aid measures from SDS Section 4
7.2.3 Course Versioning
When a published course is edited:
- Create new version; existing assignments stay pinned to their assigned version
- New assignments use latest version
- Audit trail shows all versions with change history
7.3 Assignment Engine
7.3.1 Manual Assignment
Targeting options:
- All employees at a site
- By role (e.g., all warehouse workers)
- By department
- Specific individuals
- Bulk assign from roster
Assignment details:
- Due date (required)
- Reminder schedule: initial notification, +3 days, +7 days, final (1 day before due)
- Priority: Normal / Urgent
- Notes for assignees
7.3.2 Auto-Assignment Rules (Standard + Pro)
Rule builder:
- When: new employee joins + matches role/site, auto-assign courses
- When: employee transfers to new site/role, auto-assign site-specific courses
- When: certification expires in X days, auto-assign refresher course
- When: (HazCom Extension) new chemical added to site, assign HazCom retraining
Rules are configurable per company and persist until modified.
7.3.3 Notifications
| Event | Starter | Standard | Pro |
|---|---|---|---|
| Training assigned | Email + In-app | Email + In-app + Webhook | |
| Reminder (upcoming due) | Email + In-app | Multi-channel | |
| Overdue alert | Email + In-app | Multi-channel + Manager alert | |
| Completed | Email + Certificate | Email + Certificate + Webhook | |
| Certification expiring | - | Email + Auto-assign refresher |
7.4 Training Delivery
7.4.1 Learning Modes
- Video - HTML5 player with watch tracking (must watch X% to complete)
- PDF viewer - Embedded viewer with page tracking
- Interactive slides - Step-through presentation
- Text modules - Rich text content with embedded images
- External link - Link to third-party content (e.g., OSHA website, YouTube)
Play-and-Lock: Quiz unlocks only after lesson completion thresholds are met. Users cannot skip ahead to quiz.
7.4.2 Multi-Language (EN/ES)
- Course/lesson content fields per locale
- Employee default language (from profile) auto-selects locale
- Fallback to English if translation not available
- UI strings in both languages
7.4.3 AI Explainer (Standard + Pro - HazCom Extension)
- Contextual chat during HazCom courses
- Retrieves plan/SDS snippets to answer questions
- Simple definitions, no PII
- Guardrails: cite internal sources only; rate-limited
- Disabled for Starter tier and non-HazCom courses
7.5 Quiz and Evaluation
- Question types: MCQ (single/multi-select), True/False, Matching (e.g., pictogram matching)
- Passing rule: Default 80%, configurable per course (50%-100%)
- Retake policy: Up to 3 attempts (configurable); optional cooldown between attempts
- Feedback: Show correct answers + explanations after submission (configurable)
- Scoring: Server-side only; randomized question order (optional)
- Fail handling: After max attempts exhausted, manager/trainer notified; manual override available
7.6 Certification and Credential Tracking
This is a core standalone feature - critical for EHS trainers and safety managers even without any course delivery.
7.6.1 Certification Records
| Field | Description |
|---|---|
| Certification type | Pre-defined (OSHA 10, OSHA 30, Forklift, CPR/First Aid, etc.) or custom |
| Issuing authority | Who issued the certification (Tellus course, external provider, etc.) |
| Issue date | When the certification was granted |
| Expiration date | When it expires (auto-calculated from type defaults or manual) |
| Status | Active, Expiring Soon (within 60 days), Expired |
| Evidence | Uploaded document (certificate scan, completion record) |
| Employee | Linked to employee record |
7.6.2 Certification Types (Pre-configured)
| Type | Default Validity | Retraining Frequency |
|---|---|---|
| OSHA 10-Hour | No expiration | Recommended every 5 years |
| OSHA 30-Hour | No expiration | Recommended every 5 years |
| Forklift Operator | 3 years | Every 3 years (1910.178) |
| Respiratory Fit Test | 1 year | Annual (1910.134) |
| CPR/First Aid | 2 years | Every 2 years |
| Bloodborne Pathogens | 1 year | Annual (1910.1030) |
| Confined Space Entry | No expiration | As needed per employer |
| HAZWOPER 40-Hour | No expiration | 8-hour annual refresher |
| Fall Protection Competent Person | No expiration | As needed |
| Fire Extinguisher | 1 year | Annual (1910.157) |
| Custom | Configurable | Configurable |
7.6.3 Expiration Dashboard
- Calendar view of upcoming expirations
- Color-coded: green (valid), yellow (expiring within 60 days), red (expired)
- Filter by site, role, certification type
- Bulk actions: assign refresher course, extend expiration, mark renewed
- Export for compliance audits
7.6.4 External Certifications
Employees or managers can log certifications earned outside the platform:
- Upload certificate document (PDF/image)
- Enter issuing authority, dates, certification number
- System tracks expiration and sends reminders just like internal certifications
7.7 Training Matrix
Auto-generate the OSHA-required training matrix showing which training is required for each job role.
| Feature | Description |
|---|---|
| Matrix view | Roles (rows) x Training topics (columns); cells show: Required / Completed / Overdue / N/A |
| Auto-populate | Based on job role hazard profile and OSHA standard mappings |
| Manual override | Coordinator can add/remove requirements per role |
| Gap analysis | Highlight roles with missing training requirements |
| Export | PDF/Excel for audit binder |
7.8 Completion Records and Certificates
7.8.1 Completion Records
Each training completion creates an immutable record:
- Employee name, ID, job title, site
- Course title, version, OSHA standard reference
- Completion date and time
- Quiz score and attempt number
- Duration (time spent on course)
- Delivery method (online, in-person, external)
- Acknowledgment e-signature with timestamp and IP hash
- Instructor/trainer name (for in-person courses)
7.8.2 Certificate Generation
- PDF certificate: course title, employee name, date, score, trainer signature
- Company branding on certificates (Standard + Pro)
- Saved to employee record; downloadable anytime
- Bulk certificate generation for classroom training
7.8.3 In-Person / Classroom Training Records
Not all training happens online. SafePath supports recording in-person training:
- Create a classroom training session (date, location, instructor, topic)
- Take attendance (manual entry or QR code check-in)
- Record pass/fail for each attendee
- Generate completion records and certificates
- This is critical for EHS trainers who deliver live training
7.9 Retraining and Continuous Review
7.9.1 Time-Based Retraining (Core - All Plans)
- Configure retraining schedules per course or certification type
- System auto-creates assignments when retraining is due
- Dashboard shows upcoming retraining needs
7.9.2 Event-Based Retraining (HazCom Extension - Standard + Pro)
| Trigger | Action |
|---|---|
| New chemical added to site (ChemIQ) | Queue HazCom retraining for affected site employees |
| New HazCom plan version published | Queue retraining with updated content |
| Employee transferred to new site/role | Auto-assign site-specific and role-specific courses |
| Safety incident logged (future: IncidentIQ integration) | Trigger corrective training assignment |
7.9.3 Annual Effectiveness Review
- Annual task for Safety Coordinator: review training program effectiveness
- Checklist: completion rates, quiz scores, incident correlation, employee feedback
- Option to clone previous year's curriculum as starting point
7.10 Multi-Company Management (EHS Trainer / Consultant Portal)
This is the key differentiator for the standalone use case.
| Feature | Description |
|---|---|
| Client list | Trainer sees all client companies in a single dashboard |
| Per-client data isolation | Each client's employees, courses, and records are fully isolated |
| Cross-client course library | Trainer maintains a personal course library; assigns copies to client companies |
| Client-branded reports | Export audit-ready reports with client company branding |
| Client access | Client company admins can log in to see their own training status |
| Billing | Trainer account pays for all client companies (or per-client billing - future) |
How it maps to the existing Tellus multi-tenant model:
- EHS Trainer is an "EHS Trainer" company type (already defined in industry types)
- Each client is a separate company in the system
- Trainer has a cross-company role that grants read/write access to client companies
- Client employees only see their own company's data
7.11 Reporting and Compliance
| Report | Description | Format |
|---|---|---|
| Training completion summary | By site, role, course - completion %, overdue count | Dashboard + CSV/PDF |
| Individual training transcript | All training completed by an employee with dates and scores | PDF (audit-ready) |
| Certification status | Active, expiring, expired certifications by employee | Dashboard + CSV |
| Training matrix | Required vs. completed training by role | PDF/Excel |
| OSHA audit package | Bundle of all training records, acknowledgments, certificates for a site | ZIP (PDFs) |
| Course effectiveness | Average scores, pass rates, time to complete per course | Dashboard |
Tier Enforcement
| Feature | Starter | Standard | Pro |
|---|---|---|---|
| Manual course creation | Yes | Yes | Yes |
| Quiz and evaluation | Yes | Yes | Yes |
| Manual assignment | Yes | Yes | Yes |
| Completion records and certificates | Yes | Yes | Yes |
| Certification tracking | Yes | Yes | Yes |
| Training matrix | Basic | Full | Full |
| Multi-language (EN/ES) | Yes | Yes | Yes |
| In-person training records | Yes | Yes | Yes |
| External certification logging | Yes | Yes | Yes |
| Compliance reports | Basic | Full | Full + custom |
| Auto-assignment rules | - | Yes | Yes |
| Reminder automation | - | Yes | Yes |
| Auto-generated HazCom courses | - | Yes | Yes |
| AI Explainer | - | Yes | Yes |
| Chemical-change retraining | - | - | Yes |
| Multi-company management | - | - | Yes |
| Company branding on certificates | - | - | Yes |
| Webhook / LMS API | - | - | Yes |
| SSO for employees | - | - | Yes |
Data Model
New Tables
safepath_courses
course_id (UUID, PK)
company_id (FK -> core_data_companies)
title
description
category (FK -> safepath_course_categories)
osha_standard_ref (e.g., "1910.134")
estimated_duration_minutes
passing_score_percent (default 80)
max_retakes (default 3)
status (draft / published / archived)
plan_version_id (FK -> chemiq_plan_versions, nullable -- HazCom extension)
version_number
locale (en / es)
created_by (FK -> users)
created_at, updated_at
safepath_lessons
lesson_id (UUID, PK)
course_id (FK -> safepath_courses)
title
lesson_type (video / pdf / slides / text / external_link)
content (JSONB -- structured content per type)
sort_order
completion_threshold (e.g., 80% video watched)
locale (en / es)
created_at, updated_at
safepath_lesson_assets
asset_id (UUID, PK)
lesson_id (FK -> safepath_lessons)
file_url (S3 signed URL)
file_type (video/mp4, application/pdf, etc.)
file_size_bytes
created_at
safepath_quizzes
quiz_id (UUID, PK)
course_id (FK -> safepath_courses)
title
sort_order (placement within course)
created_at, updated_at
safepath_quiz_questions
question_id (UUID, PK)
quiz_id (FK -> safepath_quizzes)
question_type (mcq_single / mcq_multi / true_false / matching)
question_text
options (JSONB -- array of options with correct flags)
explanation (shown after answer)
sort_order
locale (en / es)
safepath_assignments
assignment_id (UUID, PK)
company_id (FK -> core_data_companies)
course_id (FK -> safepath_courses)
course_version (pinned at assignment time)
assigned_to (FK -> users)
assigned_by (FK -> users)
site_id (FK -> company_sites, nullable)
due_date
priority (normal / urgent)
status (pending / in_progress / completed / overdue / expired)
notes
created_at, updated_at
safepath_results
result_id (UUID, PK)
assignment_id (FK -> safepath_assignments)
user_id (FK -> users)
course_id (FK -> safepath_courses)
attempt_number
score_percent
passed (boolean)
started_at
completed_at
duration_seconds
delivery_method (online / in_person / external)
instructor_name (for in-person)
acknowledgment_signature (e-sign hash)
acknowledgment_ip_hash
acknowledgment_at
safepath_certifications
certification_id (UUID, PK)
company_id (FK -> core_data_companies)
user_id (FK -> users)
certification_type_id (FK -> safepath_certification_types)
issuing_authority
issue_date
expiration_date (nullable -- some don't expire)
status (active / expiring_soon / expired / revoked)
evidence_file_url (uploaded certificate scan)
source (internal / external)
result_id (FK -> safepath_results, nullable -- if earned via platform)
created_at, updated_at
safepath_certification_types
type_id (UUID, PK)
name (e.g., "OSHA 10-Hour", "Forklift Operator")
default_validity_months (nullable)
retraining_frequency_months (nullable)
osha_standard_ref (nullable)
is_system (boolean -- pre-configured vs. custom)
company_id (FK, nullable -- null for system types, set for custom)
safepath_course_categories
category_id (UUID, PK)
name
is_system (boolean)
company_id (FK, nullable)
sort_order
safepath_auto_assignment_rules
rule_id (UUID, PK)
company_id (FK -> core_data_companies)
course_id (FK -> safepath_courses)
trigger_type (new_hire / role_change / site_transfer / cert_expiring / chemical_added)
trigger_config (JSONB -- role filter, site filter, days before expiry, etc.)
is_active (boolean)
created_by (FK -> users)
created_at, updated_at
safepath_classroom_sessions
session_id (UUID, PK)
company_id (FK -> core_data_companies)
course_id (FK -> safepath_courses)
instructor_name
session_date
location
site_id (FK -> company_sites, nullable)
notes
created_by (FK -> users)
created_at
safepath_audit_log
log_id (UUID, PK)
company_id (FK -> core_data_companies)
event_type (course.created / course.published / assignment.created / training.completed / cert.issued / etc.)
entity_type (course / assignment / result / certification)
entity_id (UUID)
user_id (FK -> users)
details (JSONB)
ip_hash
created_at
Existing Tables Used
core_data_companies- tenant isolationusers- employee/trainer recordscompany_sites- site-level assignment and reportingcompany_roles- role-based training matrixchemiq_plan_versions- HazCom extension linkagechemiq_inventory- chemical-change retraining triggers
API Endpoints
Core Training APIs
POST /api/v1/training/courses -- Create course
GET /api/v1/training/courses -- List courses (with filters)
GET /api/v1/training/courses/:id -- Get course details
PUT /api/v1/training/courses/:id -- Update course
POST /api/v1/training/courses/:id/publish -- Publish course
POST /api/v1/training/courses/:id/archive -- Archive course
POST /api/v1/training/courses/:id/lessons -- Add lesson
PUT /api/v1/training/lessons/:id -- Update lesson
DELETE /api/v1/training/lessons/:id -- Remove lesson
POST /api/v1/training/lessons/:id/assets -- Upload asset
POST /api/v1/training/courses/:id/quizzes -- Add quiz
PUT /api/v1/training/quizzes/:id -- Update quiz
POST /api/v1/training/quizzes/:id/questions -- Add question
PUT /api/v1/training/questions/:id -- Update question
POST /api/v1/training/assignments -- Create assignment(s)
GET /api/v1/training/assignments -- List assignments (with filters)
PUT /api/v1/training/assignments/:id -- Update assignment
POST /api/v1/training/assignments/:id/start -- Start training
POST /api/v1/training/assignments/:id/submit-quiz -- Submit quiz answers
POST /api/v1/training/assignments/:id/complete -- Mark complete (with e-sign)
GET /api/v1/training/results -- List results
GET /api/v1/training/results/:id -- Get result details
GET /api/v1/training/results/:id/certificate -- Download certificate PDF
Certification APIs
POST /api/v1/training/certifications -- Log certification (internal or external)
GET /api/v1/training/certifications -- List certifications (with filters)
PUT /api/v1/training/certifications/:id -- Update certification
GET /api/v1/training/certifications/expiring -- Get expiring certifications
GET /api/v1/training/certification-types -- List certification types
POST /api/v1/training/certification-types -- Create custom type
Dashboard and Reporting APIs
GET /api/v1/training/dashboard -- Training dashboard data
GET /api/v1/training/matrix -- Training matrix (roles x courses)
GET /api/v1/training/reports/completion -- Completion report
GET /api/v1/training/reports/transcript/:user_id -- Individual transcript
GET /api/v1/training/reports/audit-package -- OSHA audit package (ZIP)
Classroom / In-Person APIs
POST /api/v1/training/classroom-sessions -- Create session
GET /api/v1/training/classroom-sessions -- List sessions
POST /api/v1/training/classroom-sessions/:id/attendance -- Record attendance + results
Auto-Assignment APIs (Standard + Pro)
POST /api/v1/training/auto-rules -- Create auto-assignment rule
GET /api/v1/training/auto-rules -- List rules
PUT /api/v1/training/auto-rules/:id -- Update rule
DELETE /api/v1/training/auto-rules/:id -- Delete rule
Implementation Phases
Phase 1: Core Platform (MVP)
Goal: Standalone training management that works without any other module.
| Feature | Priority |
|---|---|
| Course creation (manual) | P0 |
| Lesson builder (text + PDF + external link) | P0 |
| Quiz builder (MCQ + T/F) | P0 |
| Manual assignment with due dates | P0 |
| Training delivery (play-and-lock) | P0 |
| Completion records with e-signature | P0 |
| Basic dashboard (my trainings, site compliance) | P0 |
| Certificate generation (PDF) | P0 |
| Certification tracking (internal + external) | P0 |
| EN/ES multi-language | P1 |
| In-person/classroom training records | P1 |
| Training matrix | P1 |
| Export (CSV/PDF) | P1 |
Phase 2: Automation + HazCom Extension
| Feature | Priority |
|---|---|
| Auto-assignment rules | P0 |
| Reminder automation (email + in-app) | P0 |
| Certification expiration alerts | P0 |
| Auto-generated HazCom courses (from plan) | P1 |
| Chemical-change retraining triggers | P1 |
| AI Explainer for HazCom courses | P2 |
Phase 3: Scale + Differentiation
| Feature | Priority |
|---|---|
| Multi-company management (consultant/trainer portal) | P0 |
| Video lesson support (upload + streaming) | P1 |
| Interactive slides | P1 |
| Compliance calendar view | P1 |
| OSHA audit package export (ZIP) | P1 |
| Webhook / LMS API | P2 |
| SSO for employee access | P2 |
| Pre-built course templates (OSHA topics) | P2 |
Security Checklist
- Tenant isolation (RLS) on all safepath tables via
company_id - Access control: Trainer/Admin manage courses and assignments; Employees view and complete only their assigned courses
- Asset security: S3 signed URLs with short TTL; file type validation on upload
- Quiz integrity: server-side scoring only; optional randomized question order
- Immutability: completed results and certificates are append-only; corrections via admin note, not overwrite
- Audit trail: all create/edit/assign/complete/acknowledge events logged with user, timestamp, IP hash
- AI Explainer (if enabled): restricted to internal corpora (plan/SDS); redact PII; rate-limited
Analytics Events
training.course.created
training.course.published
training.course.autogenerated (HazCom extension)
training.assignment.created
training.assignment.started
training.assignment.completed
training.quiz.submitted
training.quiz.passed
training.quiz.failed
training.certificate.issued
training.certification.logged (external cert)
training.certification.expiring
training.retraining.triggered
training.classroom.recorded
Feature Flags
| Flag | Controls |
|---|---|
training.core | Entire training module |
training.autogen | Auto-generated HazCom courses |
training.ai_explainer | AI Explainer chat during courses |
training.auto_assignment | Auto-assignment rules engine |
training.multi_company | Multi-company trainer portal |
training.video_lessons | Video upload and streaming |
training.lms_api | External LMS/webhook API |
training.certificates | Certificate generation |
training.multilang | Multi-language content |
Success Metrics
| Metric | Target | Why |
|---|---|---|
| Time to first course created | < 15 minutes | Validates ease of use |
| Time to first assignment | < 30 minutes from signup | Fast time-to-value |
| Course completion rate | > 80% | Training is actually being completed |
| Certification tracking adoption | > 60% of companies use it | Core differentiator is sticky |
| Training matrix generated | > 50% of Standard+ companies | Proves compliance value |
| EHS Trainer multi-company usage | > 3 client companies avg | Validates consultant use case |
| OSHA audit package downloaded | > 30% of companies/year | Proves audit-readiness value |