| # Real-Time Quiz Application | |
| A Python-based real-time quiz application designed to mimic the functionality of **Mentimeter**, allowing a host to control the quiz and participants (clients) to join, answer questions, and receive immediate feedback. The application is built using **Flask** and **Socket.IO** for seamless web-based interaction, and it offers a clean, responsive front-end using **HTML**, **CSS**, and **Bootstrap**. | |
| ## Features | |
| - **Real-Time Communication**: Uses **Socket.IO** for instant updates between the host and clients. | |
| - **Participant Management**: Tracks connected clients, showing their usernames and responses in real time. | |
| - **Interactive Host Control**: The host can change questions, see live results, and control the flow of the quiz. | |
| - **Simple and Responsive Front-End**: Clean design using Bootstrap for a pleasant user experience across devices. | |
| - **Scalable Design**: Easily expandable to support more questions, features, and visualizations. | |
| ## Project Structure | |
| ```bash | |
| Real-Time-Quiz-Application/ | |
| β | |
| β | |
| βββ app.py # Main Flask application | |
| βββ backend.py # Backend logic for loading and managing exams | |
| βββ templates/ | |
| β βββ index.html # Main index page with client and host buttons | |
| β βββ client.html # Client interface | |
| β βββ host.html # Host interface | |
| βββ static/ | |
| β βββ style.css # Custom styles to mimic the OnVUE exam appearance | |
| β βββ script.js # JavaScript for real-time interactions | |
| βββ questions/ # Folder containing exam JSON files | |
| β βββ exam1.json # Example JSON file for exam 1 | |
| β βββ exam2.json # Example JSON file for exam 2 | |
| βββ requirements.txt # Python dependencies | |
| βββ README.md # Project documentation | |
| ``` | |
| ## Requirements | |
| Ensure you have Python 3.6+ installed. The required dependencies are listed in `requirements.txt`: | |
| - **Flask**: The web framework used for developing the application. | |
| - **Flask-SocketIO**: Enables real-time WebSocket communication between the server and clients. | |
| Install dependencies with: | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| ## How to Run the Application | |
| 1. **Clone the repository**: | |
| ```bash | |
| git clone https://github.com/ruslanmv/Real-Time-Quiz-Application.git | |
| cd Real-Time-Quiz-Application | |
| ``` | |
| 2. **Install dependencies**: | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| 3. **Run the application**: | |
| ```bash | |
| python app.py | |
| ``` | |
|  | |
| 4. **Access the application**: | |
| - **Host interface**: [http://127.0.0.1:5000/host](http://127.0.0.1:5000/host) | |
|  | |
| - **Client interface**: [http://127.0.0.1:5000/client](http://127.0.0.1:5000/client) | |
|  | |
| ## Application Overview | |
|  | |
| ### Host Interface | |
| The host controls the flow of the quiz: | |
| - **View Questions**: See the current question and available options. | |
| - **Next Question**: Advance to the next question. | |
| - **Live Results**: View participant responses and statistics in real time. | |
| ### Client Interface | |
| Participants join the quiz and interact with the questions: | |
| - **Join the Quiz**: Enter a temporary username to participate. | |
| - **Receive Questions**: Answer questions as they appear, with four possible options. | |
| - **Live Feedback**: See the result of each question based on group responses. | |
| ## Demonstration | |
| For demonstration purposes, this version includes only **two questions**. The questions are stored in `app.py` as follows: | |
| ```python | |
| questions = [ | |
| {"question": "What is the capital of France?", "options": ["Paris", "London", "Berlin", "Rome"]}, | |
| {"question": "What is the largest planet?", "options": ["Earth", "Mars", "Jupiter", "Saturn"]} | |
| ] | |
| ``` | |
| ### Adding More Questions | |
| To add more questions, simply update the `questions` list in `app.py`. Ensure each question follows the structure: | |
| ```python | |
| {"question": "Your question here?", "options": ["Option1", "Option2", "Option3", "Option4"]} | |
| ``` | |
| ## Scaling the Application | |
| This application is built to be easily scalable: | |
| - **Add More Features**: Integrate additional features such as timed questions, answer explanations, or leaderboard tracking. | |
| - **Expand Real-Time Visuals**: Enhance client-side interactivity with more detailed results or progress tracking. | |
| - **Deploy the App**: Use services like **Heroku**, **AWS**, or **Docker** to deploy the application for larger audiences. | |
| ## Dependencies | |
| Ensure you have the following dependencies installed, as listed in `requirements.txt`: | |
| ``` | |
| Flask | |
| Flask-SocketIO | |
| ``` | |
| ### Installing Dependencies | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| ## Troubleshooting | |
| - **No participants showing up**: Ensure all participants join the `/client` interface and submit their usernames correctly. | |
| - **WebSocket issues**: Make sure your firewall or browser settings are not blocking WebSocket connections. | |
| - **Server not starting**: Check that Flask and Flask-SocketIO are installed correctly. | |
| ## Contributing | |
| Contributions are welcome! Feel free to submit a pull request or open an issue to improve the functionality, design, or documentation of this application. | |
| ## License | |
| This project is open-source and licensed under the MIT License. | |
| ## Contact | |
| For any inquiries or suggestions, please reach out to: | |
| - **Name**: Ruslan Magana Vsevolodovna | |
| - **Email**: [email protected] | |
| - **GitHub**: [https://github.com/ruslanmv](https://github.com/ruslanmv) | |