This repository is to track IIT Madras Modern Application Development II Project for Quiz Master V2.
A comprehensive quiz management system built with Flask RESTful API and Vue.js 3, designed for educational institutions to create, manage, and track quiz activities with role-based access control.
- Role-Based Access Control (RBAC) with Admin and User roles.
- Dedicated dashboards for both Admin and Users.
- Admin capability to modify user access rights
- Secure authentication and authorization using jwt tokens.
- Hierarchical Content Structure: Subjects β Chapters β Quizzes
- Complete CRUD operations for all content types (Admin only)
- Search functionality for both users and admins
- Organized content discovery and navigation
- Interactive quiz-taking interface for users
- Comprehensive response tracking and history
- User performance analytics and attempt history
- CSV export functionality for quiz attempt data
- Admin Analytics Dashboard with graphical statistical overview
- Performance metrics and usage statistics
- Data visualization for insights
- Google Workspace Integration with automated reminders on quiz creation
- Monthly automated email reports
- Asynchronous task processing for seamless user experience
- Modern, Minimal UI Design with responsive layout
- Intuitive navigation and user-friendly interface
- Fast and efficient content loading
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Python 3.12 - Core programming language
- Flask - Web framework
- Flask-RESTful - RESTful API development
- Flask-Security-Too - Role based access control
- Flask-JWT-Extended - Token based authentication
- Flask-SQLAlchemy - Database ORM
- Flask-Whooshee - Databse Indexing
- Celery - Asynchronous task queue
- Redis - Message broker for Celery
- Vue.js 3 - Progressive JavaScript framework
- Vuex - State management pattern and library
- Vue Router - Official router for Vue.js
- Modern JavaScript (ES6+) - Enhanced language features
- Redis - In-memory data structure store
- Google Workspace API - Integration for notifications
- Email Services - Automated reporting system
- CSV Processing - Data export functionality
Before running this application, ensure you have the following installed:
- Python 3.12
- Node.js 24.3
- Redis Server
- Git
NOTE - Since this project uses Redis Server, it can only run on linux systems or WSL on Windows.
-
Install NVM Follow the installation instructions given on: Official NVM GitHub Page to install NVM.
-
Install Node.JS and NPM Once NVM is installed use the following command to install Node.
$ nvm install 24.3.0After the command finishes running, check if node and npm are installed using the following commands:
$ node --version
$ npm --version- Install Redis Server
For ubuntu based systems run:
$ sudo apt install redis-serverto install redis For other distributions follow the instructions given to install Redis OpenSource: Installation Instructions
-
Clone the repository
$ git clone https://github.com/22f1001082/MindQuest.git $ cd MindQuest -
Setup virtual environment and install Python dependencies This project can be managed either using UV or pip. It is highly recommended to use uv as it provides improved performance and usability.
For UV Run the following command to install uv:
$ curl -LsSf https://astral.sh/uv/install.sh | shAfter uv installs, make sure you are in the project folder (MindQuest) and execute the following commands:
$ cd backend $ uv syncUV will automatically create a virutal environment and install the required packages.
For pip Make sure pip is installed on your system.
$ pip --version
If pip is installed the output should look like this:
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)
If you get an error, install pip on your system using either of the following commands based on your distribution type: For Ubuntu or Debian based distributions (Linux Mint, PoP!_OS, KDE Neon, Kubuntu, etc.)
sudo apt install python3-pip
For Red Hat based distributions (Fedora, CentOS, OpenSuse, etc)
$ sudo dnf install python3-pip
For Arch based distributions (Arch Linux, Manjaro, EndeavourOS, Garuda, etc.)
$ sudo pacman -S python-pip
Once pip is installed, navigate to the backend folder and create a virtual environment using the following command:
$ cd backend $ python3 -m venv .venvNow install the dependencies using the following command:
$ pip install -r requirements.txt
-
G-Space Integration In order to implement G-Space notifications provide your own api keys and endpoints. For G-Space, create a new space and under settings generate a webhook and add it in backend/applications/tasks.py in the generate_msg function replacing the existing value in:
response = requests.post( "Webhook Here", json={"text": text}) -
Start Redis server
$ redis-server
-
Start Celery worker and Celery beat
$ celery -A app.celery worker --loglevel=info $ celery -A app.celery beat --loglevel=info
-
Start Flask application
$ flask run
-
Navigate to frontend directory
$ cd frontend -
Install Node.js dependencies
$ npm install
-
Create .env file with api key for Unsplash This app uses Unsplash API to provide cover images for subject.
- Create an Unsplash account and follow the instructions on Unsplash website to get your api key.
- Once you have your key, create a .env file in the frontend folder.
- Open it using any text editor of your choice.
- Put in your api key as follows:
VITE_UNSPLASH_ACCESS_KEY=<YOUR API KEY> - Save and close the file.
-
Start frontend server To run a development version run:
$ npm run dev
MindQuest/
βββ backend/
β βββ applications/
β β βββ auth.py
β β βββ celery_init.py
β β βββ config.py
β β βββ extensions.py
β β βββ mail.py
β β βββ models.py
β β βββ resources.py
β β βββ routes.py
β β βββ tasks.py
β βββ instance/
β βββ migrations/
β βββ static/
β βββ whooshee_index/
β βββ requirements.txt
β βββ pyproject.toml
β βββ uv.lock
β βββ celery_config.py
β βββ app.py
βββ frontend/
β βββ src/
β β βββ assets/
β β βββ components/
β β βββ router/
β β βββ store/
β β βββ utils/
β β βββ views/
β β βββ App.vue
β β βββ main.js
β βββ public/
β βββ .env
β βββ index.html
β βββ package.json
β βββ vite.config.js
βββ README.md
- Full CRUD access to subject, chapters, and quizzes
- User management and access control
- Analytics dashboard access
- User activity monitoring
- System configuration management
- Data download for all quiz attempts
- Quiz attempt capabilities
- Personal dashboard access
- Response history viewing
- Content search functionality
- Performance tracking
- Data download for quiz attempts
POST /api/auth/login- User loginPOST /api/auth/logout- User logoutPOST /api/auth/register- User registration
GET /api/users- Get all usersPOST /api/reset-password- Rest passwordPOST /api/delete_account- Delete user accountPOST /api/user_activation- Toggle user activation status (Admin access only)
GET /api/subject- Get all subjectsPOST /api/subject- Create new subjectGET /api/subject/<id>- Get subject by idPUT /api/subject/<id>- Update subjectDELETE /api/subject/<id>- Delete subject
GET /api/subject/<subject_id>/chapters- Get all chapters for a subjectPOST /api/subject/<subject_id>/chapters- Create new chapter for a subjectGET /api/chapter/<chapter_id>- Get a chapter by idPUT /api/chapter/<chapter_id>- Update a chapterDELETE /api/chapter/<chapter_id>- DELETE a chapter
-
GET /api/chapter/<chapter_id>/quiz- Get all quizzes for a chapter -
POST /api/chapter/<chapter_id>/quiz- Create new quiz for a chapter -
GET /api/quiz/<quiz_id>- Get a quiz by id -
PUT /api/quiz/<quiz_id>- Update a quiz -
DELETE /api/quiz/<quiz_id>- Delete a quiz -
GET /api/quiz/<quiz_id>/view- Get quiz data for viewing
GET /api/quiz/<quiz_id>/questions- Get questions for a quizPOST /api/quiz/<quiz_id>/questions- Create a question for a quizPUT /api/question/<question_id>- Update a questionDELETE /api/question/<question_id>- Delete a question
POST /api/quiz/<quiz_id>/response- Submit responses for a quizGET /api/response/<attempt_id>- Get the responses for a attempt
GET /api/attempts- Get all attempts for all quizzesGET /api/attempts/<quiz_id>- Get all attempts for a specific quiz
GET /users/search- Search usersGET /search- Search other resources
GET /api/admin/stats- Statistical dataGET /api/export_attempt_csv/<subject_id>- Data export for subject
This project is licensed under the MIT License - see the LICENSE file for details.
This project was developed as a college assignment to demonstrate proficiency in:
- Full-stack web development
- RESTful API design
- Modern JavaScript frameworks
- Database design and management
- User authentication and authorization
- Asynchronous task processing
- UI/UX design principles
Note: This is an educational project developed for academic purposes.









