A complete feedback management system for educational institutes with role-based access control for Admins, Teachers, and Students. Features a sophisticated course-subject hierarchy and dynamic feedback forms.
See the system in action! Watch role-specific demonstrations:
Features demonstrated:
- User management and role assignment
- Creating courses with subject collections
- Building dynamic feedback forms
- Viewing detailed feedback with student information
Features demonstrated:
- Creating and managing subjects
- Viewing anonymous student feedback
- Analyzing feedback statistics and trends
Features demonstrated:
- Registration with semester and department
- Browsing and enrolling in courses
- Submitting feedback through dynamic forms
- Viewing submission history
-
Admin:
- Manage all users
- View all subjects created by teachers
- Create courses (collections of subjects) for specific semesters and departments
- Create custom feedback forms with multiple questions
- View all feedback with student names
-
Teacher:
- Create and manage subjects (what they teach)
- View anonymous feedback for their subjects
- View feedback statistics
-
Student:
- Register with semester and department selection
- View courses available for their semester/department only
- Enroll in courses
- Submit feedback using dynamic forms (created by admin)
- Feedback is anonymous to teachers but visible to admin
-
Subject vs Course System:
- Teachers create Subjects (individual teaching units)
- Admins create Courses (collections of subjects) for specific semesters and departments
-
Dynamic Feedback Forms:
- Admins create custom feedback forms with multiple questions
- Questions can be rating-based (1-5 stars), text answers, or multiple choice
- Students submit feedback per subject within a course
-
Semester & Department Filtering:
- Students only see courses matching their semester and department
- Automatic filtering based on registration data
-
Anonymous Feedback:
- Teachers see feedback without student names
- Admins see feedback with student names
-
Modern UI:
- Beautiful gradient cards and animations
- Responsive design
- Interactive elements
- Frontend: React 18 + Vite
- Backend: Node.js + Express
- Database: MySQL
- Authentication: JWT (JSON Web Tokens)
The system uses the following key tables:
users- All users with semester/department for studentssubjects- Created by teacherscourses- Created by admins, collections of subjectscourse_subjects- Junction table linking courses to subjectsenrollments- Student course enrollmentsfeedback_forms- Admin-created feedback formsfeedback_form_questions- Questions in each formfeedback_responses- Student responses to questions
- Node.js (v16 or higher)
- MySQL (v5.7 or higher)
- npm or yarn
- Create a MySQL database:
mysql -u root -p
CREATE DATABASE institute_feedback;- Import the database schema:
mysql -u root -p institute_feedback < backend/database/schema.sql- Update the database credentials in
backend/.env(create from.env.example):
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=institute_feedback
JWT_SECRET=your_secret_jwt_key_here_change_in_production
PORT=5000- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create a
.envfile:
cp .env.example .env-
Edit
.envwith your database credentials and JWT secret. -
Start the backend server:
npm run devThe backend server will run on http://localhost:5000
- Open a new terminal and navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Start the development server:
npm run devThe frontend will run on http://localhost:3000
- Create Subjects (or let teachers create them)
- Create Courses:
- Select semester and department
- Add multiple subjects to the course
- Create Feedback Forms:
- Select a course
- Add multiple questions (rating, text, or choice)
- Activate the form
- View Feedback: See all student feedback with names
- Create Subjects: Add subjects you teach
- View Feedback: See anonymous feedback for your subjects with statistics
- Register:
- Enter semester (1-8)
- Select department
- Browse Courses: Only see courses matching your semester/department
- Enroll: Enroll in available courses
- Submit Feedback:
- Select a subject from enrolled courses
- Fill out the feedback form (created by admin)
- Submit (can update later)
POST /api/auth/register- Register (semester/department required for students)POST /api/auth/login- LoginGET /api/auth/me- Get current user
GET /api/subjects- Get all subjectsPOST /api/subjects- Create subject (Teacher)GET /api/subjects/teacher/:teacherId- Get teacher's subjects
GET /api/courses- Get courses (filtered by semester/department for students)POST /api/courses- Create course with subjects (Admin)PUT /api/courses/:id- Update course (Admin)DELETE /api/courses/:id- Delete course (Admin)
POST /api/feedback-forms- Create feedback form with questionsGET /api/feedback-forms/course/:courseId- Get forms for a courseGET /api/feedback-forms/course/:courseId/active- Get active form (Students)
POST /api/feedback- Submit feedback responses (Student)GET /api/feedback/subject/:subjectId- Get feedback for subject (Teacher/Admin)GET /api/feedback/all- Get all feedback (Admin with names)GET /api/feedback/my- Get my feedback (Student)
POST /api/enrollments/:courseId- Enroll in course (Student)DELETE /api/enrollments/:courseId- Unenroll (Student)
.
├── backend/
│ ├── config/
│ │ └── database.js # Database configuration
│ ├── middleware/
│ │ └── auth.js # Authentication middleware
│ ├── routes/
│ │ ├── auth.js # Authentication routes
│ │ ├── subjects.js # Subject management (Teachers)
│ │ ├── courses.js # Course management (Admins)
│ │ ├── enrollments.js # Enrollment routes
│ │ ├── feedback.js # Feedback routes
│ │ ├── feedbackForms.js # Feedback form management
│ │ └── users.js # User management
│ ├── database/
│ │ └── schema.sql # Database schema
│ ├── server.js # Express server
│ └── package.json
│
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── context/ # React context (Auth)
│ │ ├── pages/ # Page components
│ │ │ ├── AdminDashboard.jsx
│ │ │ ├── TeacherDashboard.jsx
│ │ │ ├── StudentDashboard.jsx
│ │ │ ├── Login.jsx
│ │ │ └── Register.jsx
│ │ ├── services/ # API service
│ │ ├── App.jsx # Main app component
│ │ └── main.jsx # Entry point
│ ├── package.json
│ └── vite.config.js
│
└── README.md
- Subject: A single teaching unit created by a teacher (e.g., "Mathematics", "Physics")
- Course: A collection of subjects for a specific semester and department (e.g., "Semester 1 - Computer Science" containing Math, Physics, Programming)
- Admin creates a feedback form with questions for a course
- Student enrolls in the course
- Student selects a subject within the course
- Student fills out the feedback form
- Feedback is sent to:
- Admin (with student name)
- Teacher (anonymously, for their subject only)
- Set secure environment variables
- Use a strong JWT_SECRET
- Configure CORS properly
- Set up HTTPS
- Use environment-specific database credentials
- Build the frontend:
npm run buildin the frontend directory - Serve the built files using a web server (nginx, Apache, etc.)
This project is open source and available for educational purposes.