Practitionist/familiarise_web

[Feature] Enterprise Recording Library - B2B Marketplace Expansion

Open

#367 opened on Jan 21, 2026

 (2 comments) (0 reactions) (1 assignee)TypeScript (4 forks)auto 404
Enterpriseappointmentsenhancementhelp wantedlaunch: scalepriority: highquestionstream

Repository metrics

Stars
 (4 stars)
PR merge metrics
 (PR metrics pending)

Description

Problem Statement

  • Platform currently targets only B2C (individual consultees)
  • Companies want to provide learning resources to employees at scale
  • No team/organization management features
  • Missing enterprise billing (invoicing, PO, GST compliance)
  • No way to track team learning progress

Proposed Solution: Enterprise Recording Library

Core Concept: Companies pay monthly subscription for team access to curated consultant recordings.


Pricing Tiers

Plan Seats Price/Month Features
Team 10 ₹9,999 Basic library access, member management
Business 50 ₹39,999 + Admin dashboard, analytics, collections
Enterprise Unlimited Custom + SSO, API, dedicated support, custom branding

Technical Implementation Plan

1. New Data Models

model Organization {
  id              String   @id @default(cuid())
  name            String
  slug            String   @unique
  logoUrl         String?
  industry        String?
  size            OrgSize
  billingEmail    String
  
  // Subscription
  plan            EnterprisePlan @default(TEAM)
  seatsTotal      Int
  seatsUsed       Int      @default(0)
  billingCycle    BillingCycle @default(MONTHLY)
  
  // Relations
  members         OrgMember[]
  collections     RecordingCollection[]
  invoices        OrgInvoice[]
  
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

enum OrgSize {
  SMALL      // 1-50 employees
  MEDIUM     // 51-200
  LARGE      // 201-1000
  ENTERPRISE // 1000+
}

enum EnterprisePlan {
  TEAM
  BUSINESS
  ENTERPRISE
}

enum BillingCycle {
  MONTHLY
  QUARTERLY
  ANNUAL
}

model OrgMember {
  id              String   @id @default(cuid())
  organizationId  String
  userId          String
  role            OrgMemberRole @default(MEMBER)
  invitedAt       DateTime @default(now())
  joinedAt        DateTime?
  
  organization    Organization @relation(...)
  user            User         @relation(...)
  progress        MemberProgress[]
  
  @@unique([organizationId, userId])
}

enum OrgMemberRole {
  MEMBER    // Can view recordings
  MANAGER   // Can view + see team analytics
  ADMIN     // Can manage members + collections
  OWNER     // Full access including billing
}

model RecordingCollection {
  id              String   @id @default(cuid())
  organizationId  String
  name            String
  description     String?
  isPublic        Boolean  @default(false)
  
  organization    Organization @relation(...)
  recordings      RecordingCollectionItem[]
  
  createdAt       DateTime @default(now())
}

model RecordingCollectionItem {
  id              String   @id @default(cuid())
  collectionId    String
  recordingId     String
  order           Int      @default(0)
  
  collection      RecordingCollection @relation(...)
  recording       Recording           @relation(...)
}

model MemberProgress {
  id              String   @id @default(cuid())
  memberId        String
  recordingId     String
  watchedSeconds  Int      @default(0)
  totalSeconds    Int
  completedAt     DateTime?
  lastWatchedAt   DateTime @default(now())
  
  member          OrgMember @relation(...)
  recording       Recording @relation(...)
  
  @@unique([memberId, recordingId])
}

model OrgInvoice {
  id              String   @id @default(cuid())
  organizationId  String
  invoiceNumber   String   @unique  // Format: INV-ORG-YYYYMM-XXXXX
  amount          Int
  currency        String   @default("INR")
  status          InvoiceStatus
  dueDate         DateTime
  paidAt          DateTime?
  pdfUrl          String?
  
  // Tax compliance for Indian enterprises
  gstNumber       String?
  panNumber       String?
  hsnCode         String?  // SAC 999293 for educational services
  
  organization    Organization @relation(...)
}

enum InvoiceStatus {
  DRAFT
  SENT
  PAID
  OVERDUE
  CANCELLED
}

2. New API Routes

/api/organizations
  POST   - Create organization (owner becomes OWNER)
  GET    - List user's organizations

/api/organizations/[orgId]
  GET    - Get organization details
  PATCH  - Update organization (ADMIN+)
  DELETE - Delete organization (OWNER only)

/api/organizations/[orgId]/members
  GET    - List members (all roles)
  POST   - Invite member (ADMIN+)
  PATCH  - Update member role (ADMIN+)
  DELETE - Remove member (ADMIN+)

/api/organizations/[orgId]/collections
  GET    - List collections
  POST   - Create collection (ADMIN+)
  
/api/organizations/[orgId]/collections/[collectionId]
  GET    - Get collection with recordings
  PATCH  - Update collection (ADMIN+)
  DELETE - Delete collection (ADMIN+)

/api/organizations/[orgId]/analytics
  GET    - Team learning analytics (MANAGER+)

/api/organizations/[orgId]/billing
  GET    - Billing info and invoices (OWNER only)
  POST   - Update billing details (OWNER only)

/api/enterprise/recordings
  GET    - Browse available recordings for enterprise purchase
  POST   - Add recording to organization library

3. New Pages/Components

Public Pages:

/enterprise                     - Enterprise landing page
/enterprise/pricing             - B2B pricing comparison
/enterprise/demo                - Request demo form
/enterprise/contact             - Sales contact

Organization Dashboard:

/dashboard/org/[orgId]                - Organization overview
/dashboard/org/[orgId]/members        - Member management
/dashboard/org/[orgId]/members/invite - Invite flow
/dashboard/org/[orgId]/library        - Recording library browser
/dashboard/org/[orgId]/collections    - Curated collections
/dashboard/org/[orgId]/analytics      - Learning analytics
/dashboard/org/[orgId]/billing        - Invoices & billing
/dashboard/org/[orgId]/settings       - Organization settings

Member View:

/dashboard/org/[orgId]/learn          - Member's learning dashboard
/dashboard/org/[orgId]/learn/[recordingId] - Watch recording with progress

4. Key Features by Plan

Feature Team Business Enterprise
Recording library access
Member management
Custom collections -
Progress tracking -
Team analytics -
Learning paths -
SSO (SAML/OAuth) - -
API access - -
Custom branding - -
Dedicated support - -
PO-based billing - -

Implementation Phases

Phase 1: Foundation (4-6 weeks)

  • Create Organization model and migration
  • Create OrgMember model with roles
  • Build organization creation flow
  • Build member invitation flow (email-based)
  • Create basic org dashboard layout
  • Implement recording library access control
  • Build member management UI

Phase 2: Collections & Progress (3-4 weeks)

  • Create RecordingCollection model
  • Create MemberProgress model
  • Build collection creation/management UI
  • Implement progress tracking (video position, completion)
  • Build basic analytics dashboard
  • Create member learning dashboard

Phase 3: Enterprise Features (4-6 weeks)

  • SSO integration (SAML 2.0, OAuth)
  • Advanced analytics (engagement, completion rates, trends)
  • API for LMS integration
  • Custom branding (logo, colors)
  • Learning paths (ordered collections with prerequisites)
  • Certificates on completion

Phase 4: Billing & Compliance (2-3 weeks)

  • Stripe subscription billing integration
  • Razorpay subscription for Indian payments
  • GST-compliant invoice generation
  • PO-based payment flow for large enterprises
  • Seat usage tracking and alerts
  • Plan upgrade/downgrade flows

Analytics Metrics to Track

Organization Level:

  • Total members vs active members
  • Seat utilization rate
  • Total recordings accessed
  • Average completion rate

Member Level:

  • Recordings started vs completed
  • Total watch time
  • Completion streaks
  • Most watched topics

Content Level:

  • Most popular recordings
  • Average watch percentage
  • Drop-off points
  • Re-watch rate

Revenue Model

Assumptions:

  • Target: 100 organizations in Year 1
  • Mix: 60% Team, 30% Business, 10% Enterprise
  • Average revenue per org: ₹25,000/month

Year 1 Projection:

  • 60 Team × ₹9,999 = ₹5,99,940/month
  • 30 Business × ₹39,999 = ₹11,99,970/month
  • 10 Enterprise × ₹75,000 avg = ₹7,50,000/month
  • Total MRR: ₹24,49,910 (~$29,000)

Open Questions

  1. How do we source recordings for enterprise library?

    • Consultants opt-in their recordings?
    • Platform licenses specific content?
    • Revenue share model with consultants?
  2. Should organizations be able to request custom recordings/sessions?

  3. Do we need a separate "Enterprise Consultant" tier for consultants who want to sell to B2B?

  4. How do we handle recordings that span multiple topics/domains?


Success Metrics

  • Organizations onboarded (target: 10 in first 3 months)
  • Seat utilization rate (target: >70%)
  • Recording completion rate (target: >40%)
  • Net Promoter Score from L&D managers (target: >50)
  • Expansion revenue (upgrades + seat additions)

Labels: feature, B2B, enterprise, marketplace

Contributor guide