Skip to content

fahreziadh/evaly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Evaly - Test & Exam Management Platform

A comprehensive platform designed to help educators create, manage, and conduct online tests and exams. Evaly simplifies the assessment process with intuitive tools for test creation, real-time monitoring, and detailed analytics.

Evaly Platform Convex Tailwind Status

Current Status: Platform is ~85% complete and approaching Beta release! Most core features are fully implemented. See docs/PROJECT_STATUS.md for detailed progress.

πŸš€ Features

For Educators βœ… Implemented

  • βœ… Test Creation & Management: Create tests with 10+ question types and formats
  • βœ… Rich Question Editor: Create questions with images, links, and rich formatting (TipTap)
  • βœ… Live Monitoring: Real-time participant presence tracking and progress monitoring
  • βœ… Comprehensive Analytics: Advanced performance metrics, score distribution, question difficulty analysis
  • βœ… Question Library: Build and reuse question banks with duplication to test sections
  • βœ… Test Scheduling: Automatic activation/deactivation at scheduled times with background jobs
  • βœ… Access Control: Password protection, email domain restrictions, IP whitelisting
  • βœ… Manual Grading: Complete grading system with feedback for subjective questions
  • βœ… Participant Management: Individual, bulk, and group-based participant organization
  • βœ… Organization Management: Multi-tenant support with team invitations

For Students βœ… Implemented

  • βœ… Simple Test Interface: Clean, distraction-free environment for taking tests
  • βœ… Auto-save Progress: Answers automatically saved as students work
  • βœ… Section-based Navigation: Tests organized into manageable sections
  • βœ… Instant Results: Immediate automatic scoring for objective questions
  • πŸ”œ Guest Access: Take tests without account creation (coming in Beta release)

πŸ›  Tech Stack

Frontend

  • Framework: TanStack Start (React 19 meta-framework)
  • Runtime: Bun (fast JavaScript runtime)
  • Routing: File-based routing with TanStack Router
  • Styling: Tailwind CSS v4 with custom design tokens
  • UI Components: shadcn/ui built on Radix UI primitives
  • Rich Text Editor: TipTap for question creation
  • Animations: Motion for smooth interactions

Backend & Database

  • Backend: Convex (serverless backend with real-time capabilities)
  • Database: Convex's built-in database with schema validation
  • Authentication: Convex Auth with multi-provider support
  • Real-time: WebSocket subscriptions for live updates
  • File Storage: Integrated file upload and management

Development & Testing

  • Build Tool: Vinxi bundler
  • Testing: Vitest with React Testing Library
  • Type Checking: TypeScript with strict configuration
  • Deployment: AWS Lambda with streaming support

πŸ“‹ Prerequisites

  • Bun v1.0.0 or higher
  • Node.js v18.0.0 or higher (for Convex CLI)
  • Convex account for backend services

πŸš€ Quick Start

1. Clone and Install Dependencies

# Clone the repository
git clone https://github.com/fahreziadh/evaly.git
cd evaly

# Install dependencies
bun install

2. Environment Setup

Local Environment: Create a .env.local file in the root directory with your Convex deployment info:

# Convex deployment (from your Convex dashboard)
CONVEX_DEPLOYMENT=your-convex-deployment-name

Convex Environment Variables: Set these in your Convex dashboard or via CLI:

# Set via Convex CLI
npx convex env set AUTH_GOOGLE_ID your-google-client-id
npx convex env set AUTH_GOOGLE_SECRET your-google-client-secret
npx convex env set SITE_URL http://localhost:3000

# For file uploads (Cloudflare R2)
npx convex env set R2_ACCESS_KEY_ID your-r2-access-key
npx convex env set R2_SECRET_ACCESS_KEY your-r2-secret-key
npx convex env set R2_BUCKET your-bucket-name
npx convex env set R2_ENDPOINT your-r2-endpoint
npx convex env set R2_CDN_URL your-cdn-url
npx convex env set R2_TOKEN your-r2-token

# JWT config (auto-generated by Convex Auth)
npx convex env set JWKS your-jwks-json
npx convex env set JWT_PRIVATE_KEY your-jwt-private-key

Alternatively, set these through the Convex Dashboard under Settings β†’ Environment Variables.

3. Start Development Servers

You'll need two terminal windows:

Terminal 1 - Convex Backend:

npx convex dev

Terminal 2 - Frontend Development Server:

bun run dev

The application will be available at http://localhost:3000

πŸ“ Project Structure

evaly/
β”œβ”€β”€ convex/                     # Backend logic and database schema
β”‚   β”œβ”€β”€ organizer/             # Organizer-specific server functions
β”‚   β”œβ”€β”€ participant/           # Participant-specific server functions
β”‚   β”œβ”€β”€ schemas/               # Database schema definitions
β”‚   β”œβ”€β”€ auth.config.ts         # Authentication configuration
β”‚   └── schema.ts              # Main schema file
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ pages/             # Full page components
β”‚   β”‚   β”œβ”€β”€ shared/            # Reusable business components
β”‚   β”‚   └── ui/                # Base UI primitives (shadcn/ui)
β”‚   β”œβ”€β”€ hooks/                 # Custom React hooks
β”‚   β”œβ”€β”€ lib/                   # Utility functions and configurations
β”‚   β”œβ”€β”€ routes/                # File-based routing structure
β”‚   β”‚   β”œβ”€β”€ (organizer)/       # Protected organizer routes
β”‚   β”‚   β”œβ”€β”€ (participant)/     # Public participant routes
β”‚   β”‚   └── __root.tsx         # Root layout component
β”‚   └── main.tsx               # Application entry point
β”œβ”€β”€ public/                    # Static assets
β”œβ”€β”€ docs/                      # Additional documentation
β”œβ”€β”€ CLAUDE.md                  # AI assistant instructions
β”œβ”€β”€ components.json            # shadcn/ui configuration
β”œβ”€β”€ package.json               # Dependencies and scripts
└── vite.config.ts            # Vite configuration

🎯 Key Routes

Organizer Routes (Protected)

  • /app - Dashboard home
  • /app/tests - Test management
  • /app/tests/:testId - Individual test details
  • /app/tests/:testId/questions - Question management
  • /app/tests/:testId/results - Test results and analytics
  • /app/settings - Account settings

Participant Routes (Public)

  • / - Landing page
  • /pricing - Pricing information
  • /use-cases - Platform use cases
  • /s/:testId - Test lobby
  • /s/:testId/:attemptId - Active test session
  • /s/:testId/results - Test results

πŸ§ͺ Testing

Run the test suite:

# Run all tests
bun run test

# Run tests in watch mode
bun test --watch

# Run specific test file
bun run test -- path/to/test.spec.tsx

πŸ”§ Development Scripts

# Development
bun run dev          # Start development server
bun run build        # Build for production
bun run start        # Start production server

# Code Quality
bun run typecheck    # Type checking with TypeScript
bun run test         # Run test suite

# Convex Backend
npx convex dev       # Start Convex development server
npx convex deploy    # Deploy to production

🚒 Deployment

Frontend Deployment

The application is configured for deployment on platforms that support Vinxi:

# Build the application
bun run build

# The dist/ folder contains the production build

Backend Deployment

Deploy your Convex backend:

# Deploy to production
npx convex deploy

# Set production environment variables
npx convex env set VARIABLE_NAME value

🌟 Key Features

Live Test Monitoring

  • Track student presence during exams
  • Monitor answer submissions in real-time
  • Receive instant notifications when tests are completed
  • Connection monitoring to ensure exam integrity

Flexible Question Types

  • Multiple choice questions
  • Rich text with images and formatting
  • Code highlighting for programming assessments
  • Mathematical expressions and formulas

Detailed Analytics

  • Individual student performance analysis
  • Question-level statistics and difficulty metrics
  • Time tracking and completion analysis
  • Export results for further analysis

Security & Reliability

  • Secure authentication and access control
  • Data validation and integrity checks
  • Automatic backup and recovery systems
  • Protection against cheating and abuse

🀝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“š Documentation

Project Documentation

External Documentation

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ”— Links


Built with ❀️ for educators using TanStack Start and Convex.

About

A modern platform for AI-powered assessments, quizzes, and surveys.

Topics

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •