Managing Content Experts

Content experts are trusted collaborators who can edit all cached content for a specific class, including assessment items, explanations, and learning materials. This guide covers how to invite experts, manage permissions, and collaborate effectively.

⚠️ Important Security Notice

Content experts have full access to:

  • All assessment questions AND correct answers
  • Answer explanations and distractors
  • Knowledge Explorer content and concept maps
  • Socratic Playground dialogue scripts
  • SBCAT scenario contexts and items
  • Historical content versions and edit history
Only invite trusted colleagues as content experts!

What Content Experts Can Do

Allowed Actions

  • Edit all cached content
  • View/modify assessment items
  • See correct answers
  • Edit explanations
  • Create new content versions
  • Access Knowledge Explorer editor
  • Access Socratic Playground editor
  • Access SBCAT editor
  • View content version history

Restricted Actions

  • Cannot modify class settings
  • Cannot invite other experts
  • Cannot remove experts
  • Cannot transfer ownership
  • Cannot view student analytics
  • Cannot delete/archive class
  • Cannot regenerate enrollment code
  • Cannot change DSC/curriculum

Inviting Content Experts

UI Workflow (Recommended)

Open Class Details

Navigate to your Teacher Dashboard and click on the class card for which you want to invite an expert.

Find Content Experts Section

In the class details modal, scroll down to the "Content Experts" section. Click "Show Content Experts" to expand the list.

Click "Add Content Expert"

This opens the "Invite Content Expert" modal with a form.

Enter Expert's Email

Type the email address of the teacher you want to invite. This must be the email they use to log into UALS.

💡 Tip: Verify the email address is correct before submitting. The system does not validate if the email belongs to an existing teacher account.

Review Permissions Warning

The modal displays a blue info box listing all permissions granted to content experts. Read this carefully to understand what access you're granting.

Submit Invitation

Click "Invite" to add the expert. The invitation takes effect immediately - no acceptance required by the invitee.

✅ Success! The expert can now see the class in their "Content Expert Invitations" section and start editing immediately.

API Workflow

HTTP Request
POST /api/school/class/{classId}/invite-expert
Authorization: Bearer {token}
Content-Type: application/json

{
  "email": "expert@university.edu"
}
JavaScript Example
async function inviteContentExpert(classId, expertEmail) {
  const response = await fetch(`/api/school/class/${classId}/invite-expert`, {
    method: 'POST',
    credentials: 'include',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ email: expertEmail })
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(error.error || 'Failed to invite expert');
  }

  const result = await response.json();
  console.log('Expert invited:', result.class.contentExperts);
  return result.class;
}

await inviteContentExpert('class-ailc-abc123', 'expert@university.edu');

Success Response

JSON - 200 OK
{
  "success": true,
  "class": {
    "id": "class-ailc-abc123",
    "title": "AI Literacy - Fall 2025",
    "teacherEmail": "owner@school.edu",
    "contentExperts": ["expert@university.edu"],
    ...
  }
}

Content Expert Dashboard View

When a teacher is invited as a content expert, they will see a new section on their dashboard titled "Content Expert Invitations".

What Experts See

Class Card in "Content Expert Invitations" Section

  • Class title and description
  • Name of the class owner
  • "Edit Content" button that links to content editor
  • DSC/Curriculum information

Accessing Content Editor

Expert Logs In

Expert navigates to their Teacher Dashboard.

Finds Invitation

Expert sees the class listed under "Content Expert Invitations".

Clicks "Edit Content"

This navigates to /content-editor.html?classId={classId}&dscId={dscId} with full editing permissions.

Makes Edits

Expert can browse all cached content, view versions, make edits, and create new versions as needed.

💡 No Acceptance Required: Unlike ownership transfers, content expert invitations are active immediately. There is no pending state.

Removing Content Experts

Class owners can remove content experts at any time. This immediately revokes their editing access.

UI Workflow

Open Class Details

Click on the class card in your dashboard.

Expand Content Experts List

Click "Show Content Experts" to see all invited experts.

Click "Remove" Button

Each expert email has a red "Remove" button next to it. Click this button to revoke their access.

Confirm Removal

A confirmation dialog appears. Confirm to proceed with removal.

⚠️ Immediate Effect: Removal takes effect immediately. The expert will no longer see the class in their invitations.

API Workflow

HTTP Request
POST /api/school/class/{classId}/remove-expert
Authorization: Bearer {token}
Content-Type: application/json

{
  "email": "expert@university.edu"
}
JavaScript Example
async function removeContentExpert(classId, expertEmail) {
  if (!confirm(`Remove ${expertEmail} as content expert?`)) {
    return;
  }

  const response = await fetch(`/api/school/class/${classId}/remove-expert`, {
    method: 'POST',
    credentials: 'include',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ email: expertEmail })
  });

  if (!response.ok) {
    throw new Error('Failed to remove expert');
  }

  const result = await response.json();
  console.log('Expert removed. Updated list:', result.class.contentExperts);
  return result.class;
}

await removeContentExpert('class-ailc-abc123', 'expert@university.edu');

What Happens When an Expert is Removed

  • Expert's email removed from contentExperts array in xAPI statement
  • Class no longer appears in expert's "Content Expert Invitations" section
  • Expert loses access to content editor for this class
  • Expert's previous edits remain in version history (audit trail preserved)
  • Owner can re-invite the same expert later if needed

Content Versioning & Collaboration

All content edits by experts are versioned and tracked in Google Cloud Storage (GCS) with full metadata about who made changes and when.

Version Control System

🔄

Version Rotation

Up to 4 versions maintained per content hash. When a 5th version is created, the oldest version is deleted.

👤

Author Tracking

Each version stores the editor's email, name, and timestamp for complete audit trail.

🎯

Active Version

Owner or expert can designate which version students see. Other versions remain accessible for comparison.

📊

Performance Tracking

Analytics track student performance per version, enabling A/B testing of content improvements.

GCS Folder Structure

GCS Path Structure
uals-storage/cache/
└── class-{classId}/
    ├── ke/                       # Knowledge Explorer
    │   └── {hash}/
    │       ├── 1/content.json   # Version 1
    │       ├── 2/content.json   # Version 2
    │       ├── 3/content.json   # Version 3
    │       └── 4/content.json   # Version 4 (newest)
    ├── spl/                      # Socratic Playground
    │   └── {hash}/
    │       └── [1-4]/content.json
    └── sata/                     # SBCAT Assessments
        └── {hash}/
            └── [1-4]/content.json

Version Metadata Example

metadata.json
{
  "hash": "a1b2c3d4e5f6",
  "system": "ke",
  "classId": "class-ailc-abc123",
  "versions": [
    {
      "versionNumber": 1,
      "createdAt": "2025-11-01T10:00:00.000Z",
      "createdBy": "owner@school.edu",
      "createdByName": "Dr. Jane Smith"
    },
    {
      "versionNumber": 2,
      "createdAt": "2025-11-15T14:30:00.000Z",
      "createdBy": "expert@university.edu",
      "createdByName": "Prof. John Doe"
    }
  ],
  "activeVersion": 2
}

Collaboration Best Practices

For Class Owners
  • Communicate your pedagogical goals and approach with experts
  • Set clear expectations about content quality and style
  • Review expert edits periodically and provide feedback
  • Use the active version feature to test improvements before deploying to students
  • Remove experts promptly when collaboration ends
  • Document any content guidelines in the class description
For Content Experts
  • Understand the class owner's teaching philosophy before editing
  • Make incremental improvements rather than wholesale changes
  • Add comments or notes explaining significant edits
  • Test content thoroughly before setting as active version
  • Respect the academic integrity of assessment items
  • Coordinate with owner before making major content changes

Communication Strategies

Version Comments

Add brief notes when creating new versions explaining what changed and why. This helps collaborators understand your edits.

Regular Check-ins

Schedule periodic meetings to review content improvements, discuss student performance, and plan future enhancements.

Shared Documentation

Maintain external documentation (e.g., Google Doc) listing content standards, style guidelines, and improvement priorities.

Common Issues

Expert Can't Access Content Editor

Symptoms: Expert sees 403 Forbidden error when clicking "Edit Content"

Possible Causes & Solutions:

  1. Email mismatch: Verify the expert is logging in with the exact email address used in the invitation (case-sensitive).
  2. Removed from list: Check if the expert was removed from the contentExperts array by the owner.
  3. Cache issue: Expert should refresh the dashboard to see updated invitation list.
  4. Owner changed: If ownership was transferred, the new owner must re-invite the expert (invitations don't transfer with ownership).

Duplicate Invitations

Symptoms: Same email appears multiple times in contentExperts list

Solution:

The system should prevent duplicates, but if this occurs, remove all instances via API and re-invite once.

Expert's Edits Not Appearing

Symptoms: Owner doesn't see expert's content changes

Possible Causes & Solutions:

  1. Version not active: Check which version is set as active. Expert may have created a new version without marking it active.
  2. Different content hash: If config changed, edits may be on a different hash. Check version history.
  3. GCS sync delay: Allow 1-2 seconds for GCS write operations to complete, then refresh.