How happymite/testbuddy works
TestBuddy is a dual-portal examination platform with student and administrator access plus unauthenticated guest practice. The main workflow is to discover or create an exam, take it, submit answers for grading, and review results or performance; administration also covers users and subjects, while question media can use Cloudinary or Supabase Storage. The sampled routes, controller references and README support the main boundaries; several frontend API and backend subsystems are unsampled, so their internal call paths are not expanded.
Main entry points: db.js PostgreSQL · examRoutes.js Exam routes · app.js API routing · questionImageService.js Question media
Components 32
User portals
- Student portal
frontend/src/pages - Guest practice
frontend/src/pages/guestTakeExam.jsx - Admin console
frontend/src/pages/admin - Guest session storage
frontend/src/utils/guestSessionStorage.js
Exam lifecycle
- Exam routes
backend/routes/examRoutes.js - Exam management
backend/controllers/examController.js - Question management
backend/controllers/questionController.js - Attempt handling
backend/controllers/attemptController.js - Guest attempts
backend/controllers/guestAttemptController.js - Grading engine
backend/services/gradingService.js - Results
backend/controllers/resultController.js
Results and insights
- Performance analysis
backend/controllers/performanceController.js - Performance metrics
backend/services/performanceService.js - Student insights
frontend/src/pages/performance/PerformanceAnalysis.jsx - Admin insights
frontend/src/pages/admin/AdminPerformance.jsx
Identity and services
- Student identity
frontend/src/context/AuthContext.jsx - Admin identity
frontend/src/context/AdminAuthContext.jsx - Auth API
frontend/src/api - API routing
backend/app.js - Auth routes
backend/routes/authRoutes.js - Student auth
backend/controllers/authController.js - Google sign-in
backend/controllers/googleAuthController.js - Verification email
backend/services/emailService.js - Admin routes
backend/routes/adminRoutes.js - Admin operations
backend/controllers/adminController.js - PostgreSQL
backend/config/db.js - Question media
backend/services/questionImageService.js
Other components
- Student
- Guest candidate
- Administrator
- Cloudinary
- Supabase Storage
Connections 36
- Student → Student portal: uses
- Guest candidate → Guest practice: practices
- Administrator → Admin console: administers
- Student portal → Student identity: maintains session
frontend/src/context/AuthContext.jsx - Admin console → Admin identity: maintains session
frontend/src/context/AdminAuthContext.jsx - Student identity → Auth API: uses
frontend/src/context/AuthContext.jsx - Admin identity → Auth API: uses
frontend/src/context/AdminAuthContext.jsx - Auth API → API routing: HTTP requests
- API routing → Auth routes: mounts
backend/app.js - API routing → Exam routes: mounts
backend/app.js - API routing → Admin routes: mounts
backend/app.js - Auth routes → Student auth: routes to
backend/routes/authRoutes.js - Auth routes → Google sign-in: routes to
backend/routes/authRoutes.js - Student auth → PostgreSQL: reads and writes
backend/controllers/authController.js - Student auth → Verification email: sends verification
backend/controllers/authController.js - Google sign-in → PostgreSQL: provisions account
backend/controllers/googleAuthController.js - Admin routes → Admin operations: routes to
backend/routes/adminRoutes.js - Admin operations → PostgreSQL: reads and writes
backend/controllers/adminController.js - Exam routes → Exam management: routes exam actions
backend/routes/examRoutes.js - Exam routes → Attempt handling: routes student attempts
backend/routes/examRoutes.js - Exam routes → Guest attempts: routes guest attempts
backend/routes/examRoutes.js - Exam routes → Results: routes result reads
backend/routes/examRoutes.js - Exam management → PostgreSQL: reads and writes
backend/controllers/examController.js - Exam management → Question media: removes media
backend/controllers/examController.js - Question management → Question media: uses media service
backend/controllers/questionController.js - Attempt handling → Grading engine: grades attempts
backend/controllers/attemptController.js - Guest attempts → Grading engine: grades attempts
backend/controllers/guestAttemptController.js - Results → Grading engine: uses grading logic
backend/controllers/resultController.js - Grading engine → PostgreSQL: updates scores
backend/services/gradingService.js - Performance analysis → Performance metrics: delegates metrics
backend/controllers/performanceController.js - Performance metrics → PostgreSQL: queries performance data
backend/services/performanceService.js - Student insights → Performance analysis: requests analysis
- Admin insights → Performance analysis: requests analysis
- Guest practice → Guest session storage: stores session result
frontend/src/pages/guestTakeExam.jsx - Question media → Cloudinary: uploads and deletes
backend/services/questionImageService.js - Question media → Supabase Storage: stores and signs URLs
backend/services/questionImageService.js