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.
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
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.
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.
API Workflow
POST /api/school/class/{classId}/invite-expert
Authorization: Bearer {token}
Content-Type: application/json
{
"email": "expert@university.edu"
}
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
{
"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.
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.
API Workflow
POST /api/school/class/{classId}/remove-expert
Authorization: Bearer {token}
Content-Type: application/json
{
"email": "expert@university.edu"
}
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
contentExpertsarray 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
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
{
"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
- 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
- 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
Possible Causes & Solutions:
- Email mismatch: Verify the expert is logging in with the exact email address used in the invitation (case-sensitive).
- Removed from list: Check if the expert was removed from the contentExperts array by the owner.
- Cache issue: Expert should refresh the dashboard to see updated invitation list.
- Owner changed: If ownership was transferred, the new owner must re-invite the expert (invitations don't transfer with ownership).
Duplicate Invitations
Solution:
The system should prevent duplicates, but if this occurs, remove all instances via API and re-invite once.
Expert's Edits Not Appearing
Possible Causes & Solutions:
- Version not active: Check which version is set as active. Expert may have created a new version without marking it active.
- Different content hash: If config changed, edits may be on a different hash. Check version history.
- GCS sync delay: Allow 1-2 seconds for GCS write operations to complete, then refresh.