Skip to main content
Evaly’s live monitoring dashboard gives you complete visibility into your active tests, allowing you to track participant progress, manage test timing, and respond to issues in real-time.

Monitoring Dashboard

The live monitoring dashboard provides an at-a-glance view of your test’s current state:

Active Participants

Number of participants currently taking the test (started but not finished)

Completed

Number of participants who have finished all sections

Average Progress

Overall completion percentage across all participants

Average Time

Mean time spent by participants who have completed

Real-Time Statistics

Overview Metrics

{
  activeCount: 15,        // Currently in progress
  completedCount: 42,     // Fully finished
  totalParticipants: 57,  // All who started
  averageProgress: 73,    // 0-100 percentage
  averageTime: 2847000    // milliseconds
}

Participant Progress Calculation

Progress is calculated based on completed sections:
// For each participant
completedSections = sections.filter(s => s.finishedAt).length
progressPercentage = (completedSections / totalSections) * 100

// Average across all participants
averageProgress = sum(allProgressPercentages) / totalParticipants
Progress updates automatically as participants complete sections. No refresh needed.

Section Distribution

See how participants are distributed across test sections in real-time:
1

Visual Distribution

Bar chart showing participant count per section
2

Current Section

Identify which section each active participant is working on
3

Bottleneck Detection

Spot sections where participants are spending more time
sectionDistribution: [
  {
    sectionId: "section_1",
    sectionTitle: "Multiple Choice",
    participantCount: 8  // Currently in this section
  },
  {
    sectionId: "section_2",
    sectionTitle: "Essay Questions",
    participantCount: 7
  }
]

Active Participants List

Detailed view of each participant’s status:

Participant Information

  • Name and Email: Participant identification
  • Profile Image: Visual recognition
  • Current Section: Which section they’re working on
  • Progress: Sections completed vs total
  • Time Elapsed: Time since they started
  • Status: In Progress, Completed, or Not Started
participant: {
  participantId: string,
  name: string,
  email: string,
  image?: string,
  isInProgress: true,
  isCompleted: false,
  currentSection: "Essay Questions",
  currentSectionId: string,
  completedSections: 2,
  totalSections: 4,
  timeElapsed: 1847000,  // 30 min 47 sec
  startedAt: timestamp
}

Sorting Options

Participants are sorted intelligently:
  1. In-progress participants first: Those actively taking the test appear at the top
  2. By start time: Most recent starters appear first within each group

Question-Level Progress Tracking

GitHub-style tracker grid showing individual question status:
Visual matrix of all participants × all questions:
  • Green: Correct answer
  • Red: Incorrect answer
  • Yellow: Needs manual review (essay, file upload)
  • Gray: Not answered yet
grid: [
  {
    participant: { name, email, image },
    sections: [
      {
        sectionId: string,
        questions: [
          {
            questionId: string,
            status: "correct" | "wrong" | "needs_review" | "unanswered"
          }
        ]
      }
    ]
  }
]
The question tracker updates in real-time as participants submit answers and grades are calculated.

Test Control Features

Timer Status

Monitor the test timer state:
timer: {
  status: "running" | "paused" | "finished" | "not_started",
  isPublished: boolean,
  scheduledStartAt?: number,
  scheduledEndAt?: number,
  pausedAt?: number,
  totalPausedDuration: number,
  finishedAt?: number
}

Pause and Resume

Pause Test

Freeze time for all participants:
  • Cancels finish job
  • Records pause timestamp
  • Participants see “Test Paused” message
  • No time elapses while paused

Resume Test

Restart the test timer:
  • Calculates pause duration
  • Extends end time by pause duration
  • Reschedules finish job
  • Participants can continue
// Pausing
await pauseTest({ testId })
// Sets: pausedAt = Date.now()
// Cancels: finishJobId

// Resuming
await resumeTest({ testId })
// Calculates: pauseDuration = now - pausedAt
// Updates: totalPausedDuration += pauseDuration
// Extends: scheduledEndAt += pauseDuration
// Reschedules: new finishJobId

Extend Time

Add more time to a running test without pausing:
Extend by a specific duration:
await extendTestTime({
  testId,
  additionalMinutes: 15
})
// New end time = current end + 15 minutes
Time extensions are logged as activity events. Use judiciously and communicate extensions to participants.

Stop Test

Manually end a test before its scheduled conclusion:
await stopTest({
  testId,
  reason: "Technical issues" // Optional
})

// Effects:
// - isPublished = false
// - Cancels activation and finish jobs
// - Clears scheduled times
// - Marks as finished if already started
// - Logs activity event

Activity Logging

Key events are automatically logged for audit trails:
  • Test Paused: When you pause the test
  • Test Resumed: When you resume after pause
  • Time Extended: When you add time (includes minutes added)
  • Test Ended: When you manually stop the test (includes reason)
await logActivity(ctx, {
  testId,
  eventType: "test_paused" | "test_resumed" | "time_extended" | "test_ended",
  metadata: {
    reason?: string,
    minutes?: number
  }
})

Best Practices

  • Keep the monitoring dashboard open during test windows
  • Watch for participants stuck on specific sections
  • Monitor average completion time to gauge appropriateness
  • Be prepared to extend time if technical issues occur
  • Communicate with participants about any test control actions
  • Only pause for critical issues affecting all participants
  • Communicate pause reason to participants immediately
  • Resume as quickly as possible
  • Document pause incidents for records
  • Consider if individual accommodations are more appropriate
  • Verify participant need before extending time
  • Apply extensions fairly (to all or none)
  • Document extension reasons
  • Announce extensions to all participants
  • Consider impact on scheduled end time
  • Identify difficult sections from progress bottlenecks
  • Note questions with high “needs review” rates
  • Track overall pacing to improve future tests
  • Use completion times to calibrate section durations
  • Review question tracker patterns for quality issues

Real-Time Updates

All monitoring data updates automatically:
  • Participant Progress: Updates when sections are completed
  • Section Distribution: Updates when participants move to new sections
  • Question Status: Updates when answers are submitted and graded
  • Timer Status: Updates when you control the test (pause, extend, stop)
Evaly uses Convex’s real-time subscriptions, so your monitoring dashboard always shows current data without manual refresh.

Next Steps

View Results

Analyze completed test data and participant performance

Manual Grading

Grade questions that need manual review

Test Settings

Configure test timing and access settings

Activity Logs

Review detailed test activity history

Build docs developers (and LLMs) love