Skip to content

Repository files navigation

OPTIMUM - Adaptive Testing System

OPTIMUM Logo

A modern, AI-powered adaptive testing platform for educational institutions

React TypeScript Firebase Vite TailwindCSS


πŸ“‹ Table of Contents


🎯 Overview

OPTIMUM is a comprehensive Adaptive Testing System built with modern web technologies. It features intelligent difficulty adjustment, AI-powered question generation, real-time analytics, proctoring capabilities, and a premium user interface with smooth animations.

Key Highlights

  • Adaptive Algorithm: Dynamic difficulty adjustment based on real-time performance
  • AI Integration: OpenRouter AI for automated question generation from PDFs
  • Real-time Database: Firebase Realtime Database for instant synchronization
  • Modern UI/UX: Custom animations, dark mode, responsive design
  • Performance Tracking: Comprehensive analytics and visualization
  • Proctoring: Tab switching and fullscreen monitoring
  • Accessibility: WCAG compliant with keyboard navigation

πŸ—οΈ Architecture

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         Frontend (React)                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚   Student    β”‚  β”‚    Admin     β”‚  β”‚    Auth      β”‚      β”‚
β”‚  β”‚  Dashboard   β”‚  β”‚  Dashboard   β”‚  β”‚   System     β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚                                                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚         Adaptive Test Engine (Client-side)           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Firebase Services                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚     Auth     β”‚  β”‚   Realtime   β”‚  β”‚   Storage    β”‚      β”‚
β”‚  β”‚              β”‚  β”‚   Database   β”‚  β”‚              β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    External Services                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                         β”‚
β”‚  β”‚  OpenRouter  β”‚  β”‚   EmailJS    β”‚                         β”‚
β”‚  β”‚      AI      β”‚  β”‚              β”‚                         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow

  1. Authentication: Firebase Auth β†’ User Context β†’ Protected Routes
  2. Test Taking: Student β†’ Adaptive Engine β†’ Firebase DB β†’ Real-time Updates
  3. AI Generation: PDF Upload β†’ OpenRouter API β†’ Question Parsing β†’ Database
  4. Analytics: Database β†’ Performance Service β†’ Chart.js Visualization

πŸ› οΈ Tech Stack

Frontend Core

  • React 18.3.1 - Component-based UI library
  • TypeScript 5.5.3 - Type-safe development
  • Vite 5.4.2 - Lightning-fast build tool
  • React Router DOM 7.7.1 - Client-side routing

Styling & UI

  • TailwindCSS 3.4.1 - Utility-first CSS framework
  • Custom CSS Animations - Smooth transitions and effects
  • Lucide React - Modern icon library
  • Dark Mode - System-aware theme switching

Backend & Services

  • Firebase 12.0.0
    • Authentication (Email/Password, Google)
    • Realtime Database (NoSQL)
    • Storage (File uploads)
  • OpenRouter AI - Question generation
  • EmailJS - Contact form emails

Data Visualization

  • Chart.js 4.5.0 - Interactive charts
  • React Chart.js 2 - React wrapper

Document Processing

  • XLSX 0.18.5 - Excel file parsing
  • PDF.js 5.4.54 - PDF text extraction
  • jsPDF 3.0.3 - PDF generation
  • html2canvas 1.4.1 - Screenshot capture

Development Tools

  • ESLint - Code linting
  • TypeScript ESLint - TS-specific linting
  • PostCSS - CSS processing
  • Autoprefixer - CSS vendor prefixes

Features

Student Features

  • Adaptive test-taking with real-time difficulty adjustment
  • Performance dashboard with charts and analytics
  • Test history and detailed results
  • Answer review with color-coded feedback
  • Leaderboard with department filtering
  • Profile management with avatar selection
  • Dark mode support
  • Mobile-responsive design

Admin Features

  • Test creation with manual/AI/bulk import
  • Question bank management
  • Student performance analytics
  • Admin user management
  • Test configuration (adaptive/non-adaptive)
  • Difficulty assignment
  • Real-time test monitoring
  • PDF result generation

Technical Features

  • Real-time database synchronization
  • Custom sliding squares loader animation
  • Smooth page transitions
  • Optimistic UI updates
  • Error boundary handling
  • Protected routes
  • Session management
  • Performance optimization

πŸ“¦ Prerequisites

  • Node.js >= 18.0.0
  • npm >= 9.0.0 or yarn >= 1.22.0
  • Git
  • Firebase Account (free tier sufficient)
  • OpenRouter API Key (optional, for AI features)
  • EmailJS Account (optional, for contact form)

πŸš€ Installation

1. Clone Repository

git clone https://github.com/nareshAiNexus/Optimum-test.git
cd Optimum-test

2. Install Dependencies

npm install

3. Environment Setup

cp .env.example .env

Edit .env with your configuration (see Environment Configuration)

4. Start Development Server

npm run dev

Application will be available at http://localhost:5173


πŸ”₯ Firebase Setup

Step 1: Create Firebase Project

  1. Visit Firebase Console
  2. Click "Add Project"
  3. Enter project name: optimum-test
  4. Disable Google Analytics (optional)
  5. Click "Create Project"

Step 2: Enable Authentication

  1. Navigate to Build β†’ Authentication
  2. Click "Get Started"
  3. Enable Email/Password provider
  4. Enable Google provider (optional)

Step 3: Create Realtime Database

  1. Go to Build β†’ Realtime Database
  2. Click "Create Database"
  3. Select location (closest to your users)
  4. Start in Test Mode

Step 4: Configure Database Rules

{
  "rules": {
    "tests": {
      ".read": "auth != null",
      ".write": "auth != null && root.child('users').child(auth.uid).child('role').val() === 'admin'",
      "$testId": {
        "timesAttempted": {
          ".write": "auth != null"
        }
      }
    },
    "responses": {
      ".read": "auth != null",
      "$testId": {
        "$userId": {
          ".read": "auth != null && ($userId === auth.uid || root.child('users').child(auth.uid).child('role').val() === 'admin')",
          ".write": "auth != null && ($userId === auth.uid || root.child('users').child(auth.uid).child('role').val() === 'admin')"
        }
      }
    },
    "questions": {
      ".read": "auth != null",
      ".write": "auth != null && root.child('users').child(auth.uid).child('role').val() === 'admin'"
    },
    "userTestStates": {
      "$userId": {
        ".read": "auth != null && ($userId === auth.uid || root.child('users').child(auth.uid).child('role').val() === 'admin')",
        ".write": "auth != null && ($userId === auth.uid || root.child('users').child(auth.uid).child('role').val() === 'admin')"
      }
    },
    "users": {
      ".read": "auth != null",
      "$uid": {
        ".write": "auth != null && ($uid === auth.uid || root.child('users').child(auth.uid).child('role').val() === 'admin')",
        "role": {
          ".write": "auth != null && root.child('users').child(auth.uid).child('role').val() === 'admin'"
        }
      }
    }
  }
}

Step 5: Get Configuration

  1. Go to Project Settings (gear icon)
  2. Scroll to "Your apps"
  3. Click web icon (</>)
  4. Register app name: OPTIMUM
  5. Copy configuration values to .env

Environment Configuration

Create .env file in project root:

# Firebase Configuration
VITE_API_KEY=AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
VITE_AUTH_DOMAIN=your-project.firebaseapp.com
VITE_DATABASE_URL=https://your-project-default-rtdb.firebaseio.com
VITE_PROJECT_ID=your-project-id
VITE_STORAGE_BUCKET=your-project.firebasestorage.app
VITE_MESSAGE_SENDER_ID=123456789012
VITE_APP_ID=1:123456789012:web:abcdef123456
VITE_MEASUREMENT_ID=G-XXXXXXXXXX

# AI Service (Optional)
VITE_AI_API_KEY=sk-or-v1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Getting OpenRouter API Key

  1. Visit OpenRouter.ai
  2. Sign up / Log in
  3. Navigate to Keys section
  4. Create new API key
  5. Add to .env as VITE_AI_API_KEY

πŸƒ Running the Project

Development

npm run dev

Runs on http://localhost:5173 with hot module replacement (HMR)

Production Build

npm run build

Outputs to dist/ directory

Preview Production

npm run preview

Linting

npm run lint

πŸ“ Project Structure

optimum/
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ optimum.png              # App logo
β”‚   β”œβ”€β”€ sliding-squares.gif      # Loading animation
β”‚   └── avatars/                 # Profile avatars
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ assets/                  # Static assets
β”‚   β”‚   └── avatars.js           # Avatar configuration
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ admin/               # Admin-only components
β”‚   β”‚   β”‚   β”œβ”€β”€ AdminDashboard.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ AdminManagement.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ AiGenerationModal.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ CreateTestModal.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ EditTestModal.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ResultsView.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ StudentProgressModal.tsx
β”‚   β”‚   β”‚   └── TestManagement.tsx
β”‚   β”‚   β”œβ”€β”€ auth/                # Authentication components
β”‚   β”‚   β”‚   β”œβ”€β”€ AdminLoginForm.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ AdminRegisterForm.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ EmailVerification.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ LoginForm.tsx
β”‚   β”‚   β”‚   └── RegisterForm.tsx
β”‚   β”‚   β”œβ”€β”€ common/              # Shared components
β”‚   β”‚   β”‚   β”œβ”€β”€ DifficultyBadge.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ LoadingSkeleton.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Navbar.tsx
β”‚   β”‚   β”‚   └── ProtectedRoute.tsx
β”‚   β”‚   β”œβ”€β”€ debug/               # Debug utilities
β”‚   β”‚   β”‚   └── EmailVerificationDebug.tsx
β”‚   β”‚   └── student/             # Student-only components
β”‚   β”‚       β”œβ”€β”€ Dashboard.tsx
β”‚   β”‚       β”œβ”€β”€ Leaderboard.tsx
β”‚   β”‚       β”œβ”€β”€ PerformanceTracker.tsx
β”‚   β”‚       β”œβ”€β”€ Profile.tsx
β”‚   β”‚       β”œβ”€β”€ TestInterface.tsx
β”‚   β”‚       └── TestResult.tsx
β”‚   β”œβ”€β”€ contexts/
β”‚   β”‚   └── AuthContext.tsx      # Authentication context
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   β”œβ”€β”€ useTestProctor.ts    # Proctoring logic
β”‚   β”‚   └── useTheme.ts          # Theme management
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   └── firebase.ts          # Firebase initialization
β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   β”œβ”€β”€ AboutUs.tsx
β”‚   β”‚   β”œβ”€β”€ ContactUs.tsx
β”‚   β”‚   β”œβ”€β”€ Home.tsx
β”‚   β”‚   └── PublicDashboard.tsx
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ adaptiveTestService.ts    # Adaptive algorithm
β”‚   β”‚   β”œβ”€β”€ aiService.ts              # AI question generation
β”‚   β”‚   β”œβ”€β”€ emailService.ts           # Email verification
β”‚   β”‚   β”œβ”€β”€ performanceTrackingService.ts
β”‚   β”‚   └── registrationValidation.ts
β”‚   β”œβ”€β”€ styles/
β”‚   β”‚   └── animations.css       # Custom animations
β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”œβ”€β”€ pdfUtils.ts          # PDF processing
β”‚   β”‚   β”œβ”€β”€ testResultsPdfGenerator.ts
β”‚   β”‚   └── xlsxUtils.ts         # Excel processing
β”‚   β”œβ”€β”€ App.tsx                  # Main app component
β”‚   β”œβ”€β”€ main.tsx                 # Entry point
β”‚   └── index.css                # Global styles
β”œβ”€β”€ .env                         # Environment variables (gitignored)
β”œβ”€β”€ .env.example                 # Environment template
β”œβ”€β”€ .gitignore
β”œβ”€β”€ eslint.config.js
β”œβ”€β”€ index.html
β”œβ”€β”€ package.json
β”œβ”€β”€ postcss.config.js
β”œβ”€β”€ tailwind.config.js
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ tsconfig.app.json
β”œβ”€β”€ tsconfig.node.json
β”œβ”€β”€ vite.config.ts
└── README.md

πŸ”§ Core Systems

1. Adaptive Testing Engine

Location: src/services/adaptiveTestService.ts

Algorithm:

// Difficulty progression logic
if (correctStreak >= 2) {
  increaseDifficulty();
} else if (wrongStreak >= 2) {
  decreaseDifficulty();
}

// Weighted scoring
const points = {
  easy: 1,
  medium: 2,
  hard: 3
};

Features:

  • Real-time difficulty adjustment
  • Streak-based progression
  • Weighted scoring system
  • Performance analytics

2. AI Question Generation

Location: src/services/aiService.ts

Process:

  1. PDF text extraction using PDF.js
  2. Text chunking (max 4000 chars)
  3. OpenRouter API call with prompt engineering
  4. JSON response parsing
  5. Question validation and formatting

Supported Models:

  • DeepSeek R1 (default)
  • GPT-4
  • Claude 3

3. Performance Tracking

Location: src/services/performanceTrackingService.ts

Metrics:

  • Average score calculation
  • Test completion rate
  • Performance trends
  • Difficulty progression
  • Time analytics

4. Proctoring System

Location: src/hooks/useTestProctor.ts

Features:

  • Tab switch detection
  • Fullscreen monitoring
  • Violation tracking
  • Warning system
  • Auto-submission on violations

🎨 Component Architecture

Component Hierarchy

App
β”œβ”€β”€ AuthContext Provider
β”‚   β”œβ”€β”€ Navbar
β”‚   β”œβ”€β”€ Routes
β”‚   β”‚   β”œβ”€β”€ Public Routes
β”‚   β”‚   β”‚   β”œβ”€β”€ Home
β”‚   β”‚   β”‚   β”œβ”€β”€ About
β”‚   β”‚   β”‚   β”œβ”€β”€ Contact
β”‚   β”‚   β”‚   └── PublicDashboard
β”‚   β”‚   β”œβ”€β”€ Auth Routes
β”‚   β”‚   β”‚   β”œβ”€β”€ Login
β”‚   β”‚   β”‚   └── Register
β”‚   β”‚   β”œβ”€β”€ Protected Routes (Student)
β”‚   β”‚   β”‚   β”œβ”€β”€ Dashboard
β”‚   β”‚   β”‚   β”œβ”€β”€ TestInterface
β”‚   β”‚   β”‚   β”œβ”€β”€ TestResult
β”‚   β”‚   β”‚   β”œβ”€β”€ Profile
β”‚   β”‚   β”‚   └── Leaderboard
β”‚   β”‚   └── Protected Routes (Admin)
β”‚   β”‚       β”œβ”€β”€ AdminDashboard
β”‚   β”‚       β”œβ”€β”€ TestManagement
β”‚   β”‚       β”œβ”€β”€ AdminManagement
β”‚   β”‚       └── ResultsView
β”‚   └── Theme Provider

Key Components

TestInterface

  • Manages test state
  • Implements adaptive logic
  • Handles proctoring
  • Timer management
  • Question navigation

PerformanceTracker

  • Fetches performance data
  • Renders charts (Chart.js)
  • Calculates metrics
  • Displays trends

CreateTestModal

  • Test creation form
  • Question management
  • AI generation integration
  • Bulk import support

πŸ“Š State Management

Context API

AuthContext (src/contexts/AuthContext.tsx):

interface AuthContextType {
  currentUser: User | null;
  userData: UserData | null;
  loading: boolean;
  login: (email: string, password: string) => Promise<void>;
  register: (data: RegisterData) => Promise<void>;
  logout: () => Promise<void>;
}

Local State Patterns

  1. Component State: useState for UI state
  2. Side Effects: useEffect for data fetching
  3. Custom Hooks: Reusable logic (useTestProctor, useTheme)
  4. Refs: DOM manipulation, timers

Data Flow

Firebase DB β†’ Service Layer β†’ Component State β†’ UI
     ↑                                          ↓
     └──────────── User Actions β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🌐 API Integration

Firebase Realtime Database

Structure:

{
  "users": {
    "userId": {
      "name": "string",
      "email": "string",
      "role": "student | admin",
      "department": "string",
      "registrationNumber": "string"
    }
  },
  "tests": {
    "testId": {
      "title": "string",
      "description": "string",
      "questions": ["questionId"],
      "duration": "number",
      "isAdaptive": "boolean"
    }
  },
  "questions": {
    "questionId": {
      "question": "string",
      "options": ["string"],
      "correctAnswer": "number",
      "difficulty": "easy | medium | hard"
    }
  },
  "responses": {
    "testId": {
      "userId": {
        "score": "number",
        "answers": ["number"],
        "completedAt": "timestamp"
      }
    }
  }
}

OpenRouter AI API

Endpoint: https://openrouter.ai/api/v1/chat/completions

Request:

{
  model: "deepseek/deepseek-r1",
  messages: [{
    role: "user",
    content: "Generate questions from: [PDF_TEXT]"
  }]
}

🎨 Styling System

TailwindCSS Configuration

Custom Theme (tailwind.config.js):

theme: {
  extend: {
    colors: {
      'warp-primary': '#6366f1',
      'warp-secondary': '#8b5cf6'
    },
    animation: {
      'slide-in-right': 'slideInRight 0.3s ease-out',
      'slide-out-right': 'slideOutRight 0.3s ease-in'
    }
  }
}

Custom Animations

Sliding Squares Loader (src/styles/animations.css):

@keyframes slide-square-loader-1 {
  0%, 100% { transform: translate(0, 0); }
  25% { transform: translate(0, 32px); }
  50% { transform: translate(32px, 32px); }
  75% { transform: translate(32px, 0); }
}

.sliding-squares-loader {
  width: 64px;
  height: 64px;
}

Dark Mode

Implementation:

  • System preference detection
  • localStorage persistence
  • CSS variables for theming
  • Smooth transitions

πŸ§ͺ Testing

Manual Testing Checklist

  • User registration and login
  • Admin creation and permissions
  • Test creation (manual, AI, bulk)
  • Adaptive test taking
  • Performance analytics
  • PDF generation
  • Dark mode switching
  • Mobile responsiveness

Test Accounts

Admin:

  • Email: admin@gmail.com
  • Password: admin@123

Student:

  • Email: student@gmail.com
  • Password: student@123

πŸš€ Deployment

Vercel (Recommended)

  1. Push code to GitHub
  2. Import project in Vercel
  3. Add environment variables
  4. Deploy

Configuration (vercel.json):

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/index.html" }
  ]
}

Netlify

  1. Connect GitHub repository
  2. Build command: npm run build
  3. Publish directory: dist
  4. Add environment variables
  5. Deploy

Firebase Hosting

npm install -g firebase-tools
firebase login
firebase init hosting
npm run build
firebase deploy

🀝 Contributing

Development Workflow

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

Code Style

  • Use TypeScript for type safety
  • Follow React best practices
  • Use TailwindCSS for styling
  • Write meaningful commit messages
  • Add comments for complex logic

Commit Convention

feat: Add new feature
fix: Bug fix
docs: Documentation update
style: Code style changes
refactor: Code refactoring
test: Add tests
chore: Maintenance tasks

πŸ“„ License

MIT License - see LICENSE file


πŸ™ Acknowledgments

  • React Team for the framework
  • Firebase for backend services
  • Vite for build tooling
  • TailwindCSS for styling
  • Lucide for icons
  • OpenRouter for AI capabilities

πŸ“ž Support


Made with by the OPTIMUM Team

Report Bug Β· Request Feature

About

Upload you pdf - generate quizes using AI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages