# rajkjain03/vidyavichar-classroom-q-a-sticky-board architecture

> Architecture diagram of the GitHub repository rajkjain03/vidyavichar-classroom-q-a-sticky-board, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board
- Repository: https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board

## Overview

VidyaVichar is a role-based classroom Q&A platform. Teachers and students authenticate, then teachers create classrooms and share join codes; students join classes and post text questions. Teachers review questions, filter by status, update status, or clear a class’s questions. The React client uses Redux for authentication state and calls the Express REST API, whose controllers enforce domain rules and use Mongoose models backed by MongoDB. The README documents the broader client-server and role-based design; some frontend request wiring was not sampled.

Main entry points: [`backend/server.js`](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/server.js) (API server), [`frontend/src/pages/ClassroomPage.js`](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/ClassroomPage.js) (Class Q&A), [`frontend/src/pages/AuthPage.js`](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/AuthPage.js) (Authentication), [`frontend/src/pages/DashboardPage.js`](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/DashboardPage.js) (Class dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_app["App routing<br/>[App.js]"]
  node_authpage["Authentication<br/>[AuthPage.js]"]
  node_dashboard["Class dashboard<br/>[DashboardPage.js]"]
  node_classpage["Class Q&amp;A<br/>[ClassroomPage.js]"]
  node_questionform["Question form<br/>[QuestionForm.js]"]
  node_questioncard["Question card<br/>[QuestionCard.js]"]
  node_filters["Question filters<br/>[FilterControls.js]"]
  node_privateroute["Route guard<br/>[PrivateRoute.js]"]
  node_authstate["Auth state<br/>[authSlice.js]"]
end

subgraph group_api["Express API"]
  node_server["API server<br/>[server.js]"]
  node_useroutes["User routes<br/>[userRoutes.js]"]
  node_classroutes["Classroom routes<br/>[classroomRoutes.js]"]
  node_questionroutes["Question routes<br/>[questionRoutes.js]"]
  node_authmiddleware["JWT and role checks<br/>[authMiddleware.js]"]
end

subgraph group_domain["Classroom domain"]
  node_usercontroller["User controller<br/>[userController.js]"]
  node_classcontroller["Classroom controller"]
  node_questioncontroller["Question controller"]
end

subgraph group_persistence["Data persistence"]
  node_usermodel["User model<br/>[userModel.js]"]
  node_classmodel["Classroom model<br/>[classroomModel.js]"]
  node_questionmodel["Question model<br/>[questionModel.js]"]
  node_dbconfig["Database connection<br/>[db.js]"]
end

node_teacher(("Teacher"))
node_student(("Student"))
node_mongodb[("MongoDB")]

node_teacher -->|"authenticates"| node_authpage
node_student -->|"authenticates"| node_authpage
node_app -->|"routes to"| node_authpage
node_app -->|"guards pages"| node_privateroute
node_privateroute -->|"permits access"| node_dashboard
node_privateroute -->|"permits access"| node_classpage
node_authpage -->|"auth requests"| node_server
node_authpage -->|"sets credentials"| node_authstate
node_dashboard -->|"class requests"| node_server
node_classpage -->|"question requests"| node_server
node_classpage -->|"renders"| node_questionform
node_classpage -->|"renders"| node_questioncard
node_classpage -->|"renders"| node_filters
node_teacher -->|"manages classes"| node_dashboard
node_student -->|"joins classes"| node_dashboard
node_student -->|"asks questions"| node_questionform
node_teacher -->|"filters questions"| node_filters
node_server -->|"dispatches"| node_useroutes
node_server -->|"dispatches"| node_classroutes
node_server -->|"dispatches"| node_questionroutes
node_useroutes -->|"protects endpoints"| node_authmiddleware
node_classroutes -->|"protects endpoints"| node_authmiddleware
node_questionroutes -->|"protects endpoints"| node_authmiddleware
node_useroutes -->|"dispatches"| node_usercontroller
node_classroutes -->|"dispatches"| node_classcontroller
node_questionroutes -->|"dispatches"| node_questioncontroller
node_authmiddleware -->|"loads user"| node_usermodel
node_usercontroller -->|"reads and writes"| node_usermodel
node_classcontroller -->|"reads and writes"| node_classmodel
node_questioncontroller -->|"checks classroom"| node_classmodel
node_questioncontroller -->|"reads and writes"| node_questionmodel
node_server -->|"connects database"| node_dbconfig
node_dbconfig -->|"connects"| node_mongodb
node_usermodel -->|"persists users"| node_mongodb
node_classmodel -->|"persists classes"| node_mongodb
node_questionmodel -->|"persists questions"| node_mongodb

click node_app "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/App.js"
click node_authpage "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/AuthPage.js"
click node_dashboard "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/DashboardPage.js"
click node_classpage "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/ClassroomPage.js"
click node_questionform "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/QuestionForm.js"
click node_questioncard "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/QuestionCard.js"
click node_filters "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/FilterControls.js"
click node_privateroute "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/PrivateRoute.js"
click node_authstate "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/features/authSlice.js"
click node_server "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/server.js"
click node_useroutes "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/routes/userRoutes.js"
click node_classroutes "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/routes/classroomRoutes.js"
click node_questionroutes "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/routes/questionRoutes.js"
click node_authmiddleware "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/middleware/authMiddleware.js"
click node_usercontroller "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/controllers/userController.js"
click node_classcontroller "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/controllers/classroomController.js"
click node_questioncontroller "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/controllers/questionController.js"
click node_usermodel "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/models/userModel.js"
click node_classmodel "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/models/classroomModel.js"
click node_questionmodel "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/models/questionModel.js"
click node_dbconfig "https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/config/db.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_authpage,node_dashboard,node_classpage,node_questionform,node_questioncard,node_filters,node_privateroute,node_authstate toneBlue
class node_server,node_useroutes,node_classroutes,node_questionroutes,node_authmiddleware,node_mongodb toneAmber
class node_usercontroller,node_classcontroller,node_questioncontroller toneMint
class node_usermodel,node_classmodel,node_questionmodel,node_dbconfig toneRose
class node_teacher,node_student toneIndigo
```

## Components

### React client

- [App routing](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/App.js): `frontend/src/App.js`
- [Authentication](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/AuthPage.js): `frontend/src/pages/AuthPage.js`
- [Class dashboard](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/DashboardPage.js): `frontend/src/pages/DashboardPage.js`
- [Class Q&A](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/pages/ClassroomPage.js): `frontend/src/pages/ClassroomPage.js`
- [Question form](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/QuestionForm.js): `frontend/src/components/QuestionForm.js`
- [Question card](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/QuestionCard.js): `frontend/src/components/QuestionCard.js`
- [Question filters](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/FilterControls.js): `frontend/src/components/FilterControls.js`
- [Route guard](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/components/PrivateRoute.js): `frontend/src/components/PrivateRoute.js`
- [Auth state](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/frontend/src/features/authSlice.js): `frontend/src/features/authSlice.js`

### Express API

- [API server](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/server.js): `backend/server.js`
- [User routes](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/routes/userRoutes.js): `backend/src/routes/userRoutes.js`
- [Classroom routes](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/routes/classroomRoutes.js): `backend/src/routes/classroomRoutes.js`
- [Question routes](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/routes/questionRoutes.js): `backend/src/routes/questionRoutes.js`
- [JWT and role checks](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/middleware/authMiddleware.js): `backend/src/middleware/authMiddleware.js`

### Classroom domain

- [User controller](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/controllers/userController.js): `backend/src/controllers/userController.js`
- [Classroom controller](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/controllers/classroomController.js): `backend/src/controllers/classroomController.js`
- [Question controller](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/controllers/questionController.js): `backend/src/controllers/questionController.js`

### Data persistence

- [User model](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/models/userModel.js): `backend/src/models/userModel.js`
- [Classroom model](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/models/classroomModel.js): `backend/src/models/classroomModel.js`
- [Question model](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/models/questionModel.js): `backend/src/models/questionModel.js`
- [Database connection](https://github.com/rajkjain03/vidyavichar-classroom-q-a-sticky-board/blob/main/backend/src/config/db.js): `backend/src/config/db.js`

### Other components

- **Teacher**
- **Student**
- **MongoDB**

## Connections

- Teacher → Authentication: authenticates
- Student → Authentication: authenticates
- App routing → Authentication: routes to
- App routing → Route guard: guards pages
- Route guard → Class dashboard: permits access
- Route guard → Class Q&A: permits access
- Authentication → API server: auth requests
- Authentication → Auth state: sets credentials
- Class dashboard → API server: class requests
- Class Q&A → API server: question requests
- Class Q&A → Question form: renders
- Class Q&A → Question card: renders
- Class Q&A → Question filters: renders
- Teacher → Class dashboard: manages classes
- Student → Class dashboard: joins classes
- Student → Question form: asks questions
- Teacher → Question filters: filters questions
- API server → User routes: dispatches
- API server → Classroom routes: dispatches
- API server → Question routes: dispatches
- User routes → JWT and role checks: protects endpoints
- Classroom routes → JWT and role checks: protects endpoints
- Question routes → JWT and role checks: protects endpoints
- User routes → User controller: dispatches
- Classroom routes → Classroom controller: dispatches
- Question routes → Question controller: dispatches
- JWT and role checks → User model: loads user
- User controller → User model: reads and writes
- Classroom controller → Classroom model: reads and writes
- Question controller → Classroom model: checks classroom
- Question controller → Question model: reads and writes
- API server → Database connection: connects database
- Database connection → MongoDB: connects
- User model → MongoDB: persists users
- Classroom model → MongoDB: persists classes
- Question model → MongoDB: persists questions
