A modern, full-featured platform connecting students, tutors, and parents for an enhanced online learning experience.
TutorHQ is a comprehensive web-based tutoring management system built with React and TypeScript. It provides separate portals for students, tutors, and parents, offering a complete ecosystem for online education including live classes, test management, progress tracking, and seamless communication.
- Dashboard: Overview of upcoming classes, recent grades, and assignments
- Live Classes: Real-time video conferencing with WebRTC technology
- Interactive Calendar: View scheduled classes, tests, and assignments
- Materials Library: Access course materials and resources
- Progress Tracking: Monitor grades, test scores, and performance analytics
- Test System: Take tests with multiple question types (text, multiple choice, multiple select, scale, images)
- Test Results: View detailed results with correct answers and score breakdown
- Messaging: Direct communication with tutors and parents
- Dashboard: Manage upcoming classes and student overview
- Class Management: View and join scheduled classes
- Smart Scheduler: Create classes, tests, and assignments with Google Forms-style test builder
- Test Builder: Design tests with 5 question types:
- Text answer questions
- Multiple choice
- Multiple select
- Scale/rating questions
- Image-based questions
- Student Management: Track student progress and performance
- Materials Upload: Share resources with students
- Messaging: Communicate with students and parents
- Account Management: Profile and settings
- Multi-Child Dashboard: Monitor all children's progress in one place
- Schedule Overview: View all classes and appointments
- Payment Tracking: Manage tuition payments in South African Rand (ZAR)
- Messaging: Communicate with tutors
- Progress Reports: Access detailed performance reports
- Account Management: Family settings and preferences
The test system is a standout feature of TutorHQ:
-
Tutor-Friendly Test Builder:
- Drag-and-drop style expandable question cards
- Rich question content (text + images)
- Configurable points per question
- Auto-calculated total points
- Real-time question preview
-
Smart Student Test Taking:
- Countdown timer with auto-submit
- Progress indicator (Question X of Y)
- Question navigation with overview grid
- Auto-save draft answers
- Visual feedback for answered questions
- Mobile-responsive design
-
Comprehensive Results Display:
- Overall score with percentage and letter grade
- Pass/fail status
- Question-by-question review
- Visual indicators (β correct, β wrong)
- Correct answer display for missed questions
- Points breakdown per question
- Downloadable results (PDF)
-
Status-Based Access Control:
- Upcoming: Students see test but cannot access until scheduled time
- Available: Full access to take the test
- Completed: Access to results with detailed feedback
- React 19.1.1 - Modern UI framework
- TypeScript 5.9.3 - Type-safe JavaScript
- React Router DOM 6.x - Client-side routing
- CSS Modules - Component-scoped styling
- Vite 7.1.9 - Lightning-fast build tool
- WebRTC - Peer-to-peer video conferencing
- Socket.IO - WebSocket signaling server (coming soon)
- Custom CSS with gradient themes
- Responsive design (mobile, tablet, desktop)
- Accessibility-focused UI components
Before you begin, ensure you have the following installed:
- Node.js (v18.0.0 or higher) - Download
- npm (v9.0.0 or higher) or yarn (v1.22.0 or higher)
- Git - Download
node --version # Should be v18 or higher
npm --version # Should be v9 or higher
git --version # Any recent versiongit clone https://github.com/Teboho02/Tutor_HQ.git
cd Tutor_HQnpm installThis will install all required packages including:
- React and React DOM
- React Router DOM
- TypeScript and type definitions
- Vite and build tools
- Development dependencies
Create a .env file in the root directory if you need to configure API endpoints or other environment variables:
# API Configuration (update with your backend URL)
VITE_API_URL=http://localhost:3000/api
# WebRTC Configuration
VITE_SIGNALING_SERVER=ws://localhost:3001
# Other Configuration
VITE_APP_NAME=TutorHQStart the development server with hot module replacement:
npm run devThe application will be available at:
http://localhost:5174
Features in development mode:
- Hot Module Replacement (HMR) - changes reflect instantly
- Source maps for debugging
- TypeScript type checking
- Fast refresh for React components
Build the application and preview it locally:
npm run build
npm run previewThis runs the optimized production build on:
http://localhost:4173
npm run buildThis command:
- Compiles TypeScript to JavaScript
- Bundles all assets with Vite
- Optimizes and minifies code
- Creates a
distfolder with production-ready files
dist/
βββ index.html # Entry point
βββ assets/
β βββ index-[hash].js # Bundled JavaScript
β βββ index-[hash].css # Bundled CSS
β βββ [images] # Optimized images
βββ ...
Or manually:
# Install Vercel CLI
npm install -g vercel
# Deploy
vercel
# Deploy to production
vercel --prodEnvironment Variables on Vercel:
- Go to Project Settings β Environment Variables
- Add your variables (VITE_API_URL, etc.)
- Redeploy the project
# Install Netlify CLI
npm install -g netlify-cli
# Build the project
npm run build
# Deploy
netlify deploy
# Deploy to production
netlify deploy --prodBuild Settings for Netlify:
- Build command:
npm run build - Publish directory:
dist
- Update
vite.config.ts:
export default defineConfig({
base: '/Tutor_HQ/', // Your repo name
// ... rest of config
})- Install gh-pages:
npm install --save-dev gh-pages- Add scripts to
package.json:
{
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d dist"
}
}- Deploy:
npm run deployTutor_HQ/
βββ public/ # Static assets
βββ src/
β βββ assets/ # Images, fonts, etc.
β βββ components/ # Reusable React components
β β βββ Header.tsx
β β βββ Footer.tsx
β β βββ TestBuilder.tsx # Test creation component
β β βββ ...
β βββ pages/ # Page components
β β βββ users/
β β β βββ students/ # Student portal pages
β β β β βββ StudentDashboard.tsx
β β β β βββ StudentTests.tsx
β β β β βββ TakeTest.tsx # Test taking interface
β β β β βββ TestResults.tsx # Results display
β β β β βββ ...
β β β βββ tutors/ # Tutor portal pages
β β β β βββ TutorSchedule.tsx # Test builder integration
β β β β βββ ...
β β β βββ parents/ # Parent portal pages
β β βββ ... # Landing and auth pages
β βββ types/ # TypeScript type definitions
β β βββ test.ts # Test system types
β β βββ index.ts # Global types
β βββ styles/ # Global styles
β βββ App.tsx # Main app component with routing
β βββ main.tsx # Application entry point
β βββ vite-env.d.ts # Vite type declarations
βββ .gitignore
βββ eslint.config.js # ESLint configuration
βββ index.html # HTML template
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ tsconfig.app.json # App-specific TS config
βββ tsconfig.node.json # Node-specific TS config
βββ vite.config.ts # Vite configuration
βββ README.md # This file
Vite build configuration including plugins and dev server settings.
TypeScript compiler options for strict type checking.
Code quality and style rules.
Project metadata, dependencies, and npm scripts:
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
The application has three main portals:
- Student Portal:
/student/dashboard - Tutor Portal:
/tutor/dashboard - Parent Portal:
/parent/dashboard
-
Create a Test (Tutor):
- Navigate to
/tutor/schedule - Select "Test" as schedule type
- Fill in basic information (title, subject, date, time)
- Click on question cards to expand and configure
- Add questions of different types
- Set points for each question
- Submit to create
- Navigate to
-
Take a Test (Student):
- Navigate to
/student/tests - Click on an "Available" test
- Answer questions using appropriate input methods
- Navigate between questions using Next/Previous
- View progress in the overview grid
- Submit when complete (or wait for auto-submit)
- Navigate to
-
View Results (Student):
- From
/student/tests, click on a "Completed" test - Review overall score and grade
- Scroll through question-by-question review
- See correct answers for missed questions
- Download results as PDF
- From
- Open two browser windows (or use different devices)
- Navigate to
/student/live-classesin both - Click "Join Class" on the same class
- Allow camera and microphone permissions
- WebRTC will establish peer-to-peer connection
If port 5174 is already in use:
# Windows
netstat -ano | findstr :5174
taskkill /PID <PID> /F
# macOS/Linux
lsof -ti:5174 | xargs kill -9Or change the port in vite.config.ts:
export default defineConfig({
server: {
port: 3000 // Your preferred port
}
})Clear TypeScript cache and reinstall:
rm -rf node_modules
rm package-lock.json
npm installClear Vite cache:
rm -rf node_modules/.vite
npm run build- Check browser permissions for camera/microphone
- Ensure HTTPS is used in production (WebRTC requires secure context)
- Check browser console for specific errors
- Verify signaling server is running (if applicable)
If you see "Cannot find module" errors:
npm installIf specific package is missing:
npm install <package-name>Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes
- Commit with descriptive messages:
git commit -m "Add amazing feature" - Push to your branch:
git push origin feature/amazing-feature
- Open a Pull Request
- Follow TypeScript best practices
- Use functional components with hooks
- Write descriptive variable and function names
- Add comments for complex logic
- Ensure responsive design for all components
- Test on multiple browsers before submitting
This project is licensed under the MIT License - see the LICENSE file for details.
- Repository: https://github.com/Teboho02/Tutor_HQ
- Issues: GitHub Issues
- Author: Teboho02
For questions or support, please open an issue on GitHub.
- React team for the amazing framework
- Vite team for the blazing-fast build tool
- TypeScript team for type safety
- WebRTC community for real-time communication
- All contributors and users of TutorHQ
Made with β€οΈ for better education
π Empowering students, supporting tutors, engaging parents.