Skip to main content

Platform features

Evaly provides a complete suite of tools for modern online assessments. Below is an organized overview of all key features available in the platform.

Test creation and management

Rich question editor

Create engaging questions with TipTap’s powerful rich text editor:

Rich formatting

Bold, italic, underline, headings, lists, and more

Images and media

Embed images directly in questions

Links

Add hyperlinks to external resources

Code blocks

Syntax highlighting for programming questions
// TipTap editor configuration
import { useEditor } from '@tiptap/react'
import StarterKit from '@tiptap/starter-kit'
import Image from '@tiptap/extension-image'
import Link from '@tiptap/extension-link'
import CodeBlockLowlight from '@tiptap/extension-code-block-lowlight'

const editor = useEditor({
  extensions: [
    StarterKit,
    Image,
    Link,
    CodeBlockLowlight,
    Underline,
    CharacterCount,
  ],
})

13+ question types

Choose from a comprehensive set of question formats:
Multiple choice
  • Single or multi-select
  • Customizable options
  • Automatic grading
  • Point values per option
Yes or No
  • Simple binary questions
  • Instant grading
  • Perfect for true/false assessments
Image choice
  • Visual options with images
  • Single or multi-select
  • Great for identification tasks
Audio choice
  • Audio file options
  • Useful for language assessments
  • Pronunciation tests
See detailed examples and best practices in the Question Types guide.

Question library

Build reusable question banks for efficiency:
  • Centralized storage: Create questions once, use many times
  • Duplication: Copy questions from library to tests
  • Organization: Categorize by subject or topic
  • Version tracking: Original reference tracking with originalReferenceId
// Question duplication maintains reference
{
  referenceId: "section_xyz",           // Current location
  originalReferenceId: "library_abc",   // Source library
  organizationId: "org_123"
}

AI-powered features

AI question generation

Generate questions automatically using Google Gemini AI:
1

Describe your needs

Provide a topic, difficulty level, and question count
2

AI generates questions

Questions created with options and correct answers
3

Review and edit

Fine-tune generated questions as needed
4

Add to tests

Import questions to your question library or directly to tests
Monthly quotas by plan:
PlanAI QuestionsAI OptionsAI TranslationAI Analysis
Free102010 batchesNot available
Pro250500100 batches100
Max1,0002,000500 batches500
AI generation counts against your monthly quota. Review the AI features guide for best practices.

Test administration

Scheduling and automation

Schedule tests to activate and deactivate automatically:
// Schedule a test for March 1, 2024, 9 AM - 11 AM
await ctx.scheduler.runAt(
  scheduledStartAt,
  internal.internal.test.activateTest,
  { testId }
);

await ctx.scheduler.runAt(
  scheduledEndAt,
  internal.internal.test.deactivateTest,
  { testId }
);
Features:
  • Automatic activation at scheduled start time
  • Automatic deactivation at scheduled end time
  • Background job management
  • Overlap detection for concurrent test limits
  • Job cancellation when schedules change

Access control

Secure your tests with multiple protection layers:

Password protection

Require a password to access the test

Email restrictions

Allow only specific email domains (@school.edu)

IP whitelisting

Restrict by IP addresses or ranges

Participant lists

Add specific participants or groups
// Access control configuration
{
  password: "exam2024",
  allowedEmailDomains: ["university.edu", "school.org"],
  allowedIpAddresses: ["192.168.1.0/24", "10.0.0.1"],
  access: "private"
}

Duration management

Flexible timing options:
  • Test-level duration: Single time limit for entire test
  • Section-level durations: Different limits per section
  • Pause functionality: Organizers can pause tests
  • Time tracking: Monitor time spent on each question
Use section-level durations for complex tests where different sections require different time allocations.

Live monitoring

Real-time presence tracking

Monitor participants during tests with WebSocket-powered updates:

Active participants

See who’s currently taking the test

Progress tracking

Monitor completion by section

Answer submissions

Real-time answer updates

Connection status

Track participant connections

Heartbeat system

Automatic presence detection

Notifications

Get alerts for key events
// Real-time monitoring with Convex subscriptions
const presence = useQuery(
  api.organizer.testMonitoring.getTestPresence,
  { testId }
);

const activeParticipants = presence?.activeParticipants ?? [];
const completedCount = presence?.completedCount ?? 0;
Heartbeat mechanism:
  • Participants send heartbeats every 30 seconds
  • Presence expires after 2 minutes of inactivity
  • Tracks connection drops and returns

Grading and results

Automatic grading

Objective questions are graded instantly:
  • Multiple choice
  • Yes/No
  • Image choice
  • Audio choice
  • Matching pairs
  • Ranking (with configurable scoring)
// Automatic grading on submission
const score = await autoGradeAnswer({
  question,
  answer,
  type: question.type
});

Manual grading

Comprehensive tools for subjective questions:
1

Review submissions

View all participants’ answers in one place
2

Assign points

Grade each answer with point values
3

Add feedback

Provide detailed comments and guidance
4

Save and publish

Grades are saved and can be released to participants
Question types requiring manual grading:
  • Text field responses
  • File uploads
  • Audio responses
  • Video responses
  • Fill in the blank (semi-automatic)

Advanced analytics

Gain deep insights into test performance:
Test-level metrics:
  • Total submissions
  • Average score
  • Completion rate
  • Time distribution
  • Score distribution chart (Recharts)

Organization features

Multi-tenancy

Full organization support for teams:
  • Multiple organizations: Users can belong to many organizations
  • Role-based access: Owner, Admin, Member roles
  • Team collaboration: Multiple organizers per organization
  • Organization switching: Easy switching between organizations
// Organization structure
{
  organization: {
    name: "Springfield High School",
    type: "education",
    logoUrl: "..."
  },
  members: [
    { role: "owner", userId: "user_1" },
    { role: "admin", userId: "user_2" },
    { role: "member", userId: "user_3" }
  ]
}

Team invitations

Invite colleagues to join your organization:
  • Email-based invitations via Plunk
  • Token-based security (7-day expiry)
  • Role assignment on invitation
  • Bulk invitation support

User groups

Organize participants efficiently:
  • Create groups (classes, departments, cohorts)
  • Bulk email management
  • Assign entire groups to tests
  • Track group performance

Subscription plans

Evaly offers three tiers with different capabilities:

Plan comparison

FeatureFreeProMax
Price/month$0$39$129
Test results25/month500/month2,000/month
Team members1525
Active tests320100
Concurrent participants102001,000
File upload size10MB50MB100MB
AI questions10/month250/month1,000/month
See full pricing details and feature breakdown at /app/settings?tab=billing

Notifications

Stay informed with intelligent notification system: Instagram-style batching:
  • Similar events grouped together
  • “5 participants joined your test”
  • Reduces notification fatigue
  • Per-organizer read status
Notification types:
  • Participant joined test
  • Test submission completed
  • Grading required
  • Test scheduled start/end
  • Organization invitations
  • System updates
Customizable preferences:
  • Enable/disable by notification type
  • Category-based settings
  • Per-organizer configuration

File management

Cloudflare R2 integration

Reliable file storage for all media:
// File upload flow
import { r2 } from './common/storage';

// 1. Generate upload URL
const uploadUrl = await r2.generateUploadUrl(ctx);

// 2. Client uploads to R2
// ... client-side upload ...

// 3. Save public URL
const publicUrl = keyToPublicUrl(fileKey);
Supported use cases:
  • Question images and media
  • Answer file uploads
  • Audio/video responses
  • Organization logos
  • Editor media embeds

Data management

Soft deletes

Safe deletion with recovery options:
// Soft delete pattern
await ctx.db.patch(testId, {
  deletedAt: Date.now()
});

// Query excludes soft-deleted items
.filter(q => q.eq(q.field("deletedAt"), undefined))
Benefits:
  • Data recovery possible
  • Audit trail preservation
  • Referential integrity maintained
  • Gradual cleanup options

Activity logging

Comprehensive audit trail:
  • Test creation, updates, deletion
  • Participant actions
  • Grading activities
  • Settings changes
  • Access control modifications

View all features

Explore detailed feature documentation

Tech stack

Learn about the technology behind Evaly

Build docs developers (and LLMs) love