Elevasis LogoElevasis Docs

LMS Implementation Execution Plan

Wave-based parallel execution strategy for Training App LMS features implementation

Overview

This document describes the wave-based execution strategy used to implement the Training App LMS features. The implementation was structured into 5 waves with parallel task execution where possible.

Implementation Summary:

  • Total Waves: 5
  • Total Tasks: 10
  • Parallel Efficiency: 60% (6/10 tasks parallelizable)
  • Status: ✅ All waves complete

Wave Structure

Wave 1: Foundation (Parallel)

Dependencies: None (foundational wave)

TaskDescriptionStatus
1aAuthentication setup (simple - no org switching)
1bUI Components (LessonContainer, Callout, CodeBlock, etc.)

Key Simplification: Training app uses simple auth model without organization switching layer.

Wave 2: Content

Dependencies: Wave 1 (needs UI components)

TaskDescriptionStatus
2aContent system + example course

Created course registry, types, and example "Platform Basics" course with 3 lessons + 1 quiz.

Wave 3: Data Access (Parallel, Simplified)

Dependencies: Wave 1 + Wave 2

TaskDescriptionStatus
3aProgress tracking hooks (direct Supabase)
3bAssessments hooks (direct Supabase)

Key Simplification: Used direct Supabase client via useSupabase() instead of API routes. KISS principle applied.

Wave 4: Integration

Dependencies: Wave 3

TaskDescriptionStatus
4aCertifications system (auto-award logic)

Wave 5: Verification

Dependencies: All previous waves

TaskDescriptionStatus
TypeScriptpnpm --filter training check-types
Buildpnpm --filter training build

Critical Path

Wave 1 (Foundation) → Wave 2 (Content) → Wave 3 (Data) → Wave 4 (Certs) → Wave 5 (Verify)
     ↓                      ↓                  ↓
  [Auth + UI]            [Content]        [Progress + Assessments]
  (parallel)                              (parallel)

Simplifications Applied

1. Direct Supabase Client (No API Layer)

Original Plan: Create API routes in apps/api/src/training/

Simplified To: Direct Supabase access via useSupabase() hook

Rationale:

  • Training data is user-scoped only
  • No complex business logic requiring server-side processing
  • Supabase RLS can enforce access control
  • Fewer moving parts = fewer bugs

2. Simple Authentication

Original Plan: Copy full command-center auth setup

Simplified To: Use @repo/ui shared modules without org switching

What's Used:

  • AuthKitProvider + useAuth() from @workos-inc/authkit-react
  • useRefocusSessionCheck() from @repo/ui/auth
  • useUserProfile() from @repo/ui/profile
  • useSupabase() from @repo/ui/supabase

What's Skipped:

  • Organization initialization layer
  • Complex 3-layer init process
  • Org switching capabilities

Deferred Items (YAGNI)

Items not implemented per YAGNI principle:

  • PDF certificate generation
  • Admin course management UI
  • SSE real-time updates
  • Course analytics dashboard

These can be added when requirements emerge.



Last Updated: 2026-01-10