Skip to content

23f2001414/QuizMaster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Quiz Master

A full-stack quiz system built with Vue.js and a backend using Redis, MongoDB, and Python. Users can attempt scheduled quizzes, with quiz expiration handled via Redis and monthly email summaries automatically sent.

๐Ÿš€ Features

  • ๐Ÿ“… Scheduled Quizzes: Create quizzes that auto-expire at the end of the quiz day (IST).
  • ๐Ÿงฎ Efficient Storage: Uses Redis sorted sets for upcoming quiz scheduling and question management.
  • โœ‰๏ธ Monthly Email Reports: Automatically sends users a summary of their quiz participation and scores every month.
  • ๐Ÿ“Š Score Tracking: Store and track quiz results per user.
  • ๐Ÿง  Pinia-based State Management: Manage frontend state with a clean, centralized store using Pinia.
  • ๐Ÿ“ฌ Instant Feedback: Show results after quiz submission.
  • ๐ŸŒ Vue 3 + Vue Router: Built with a modern SPA architecture.

๐Ÿ› ๏ธ Tech Stack

Backend

  • Python (Flask or FastAPI)
  • Redis
  • Sqlite
  • Celery + Redis (for monthly email reports)
  • SMTP

Frontend

  • Vue 3
  • Vue Router
  • Pinia (state management)
  • Axios (for API requests)
  • Bootstrap Styling

๐Ÿ“ฆ Redis Structure

  • quiz:{quiz_id}:ques_ids โ€“ Set of question IDs for a quiz.
  • upcomming_quiz_ids โ€“ Sorted Set where each quiz ID is scored by its end-of-day timestamp in IST.

Example:

from datetime import datetime, time, timedelta
from zoneinfo import ZoneInfo

ist = ZoneInfo("Asia/Kolkata")
end_of_day = datetime.combine(quiz.date_of_quiz, time(23, 59, 59), tzinfo=ist)

redis_client.sadd(f"quiz:{quiz_id}:ques_ids", *question_ids)
redis_client.zadd("upcomming_quiz_ids", {quiz.id: int(end_of_day.timestamp())})

About

A Quiz project for IITM MADII Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published