Better Class is a reverse-Kahoot classroom app where students ask questions and teachers answer. Students can post anonymously or publicly. Teachers moderate questions in a separate environment. The app includes moderation controls, text-to-speech (TTS), banning, authentication, threaded replies, and custom room creation and deletion.
- Reverse-Kahoot style: students ask questions, teachers answer
- Anonymous or public questions
- Teacher moderation environment
- Moderation tools: approve/reject questions, delete, ban users
- Text-to-Speech (TTS) for questions and replies
- Authentication with profile pictures
- Threaded replies to messages
- Custom room creation and deletion
- Real-time updates via Socket.IO
- Client: React + TypeScript (Create React App)
- Server: Node + TypeScript + Express
- Real-time: Socket.IO
- Authentication: Clerk
- Validation: zod
- Forms: react-hook-form
- UI primitives: ShadCN
- client/ — React front-end
- server/ — TypeScript Node backend
Prerequisites:
- Node.js (LTS recommended)
- npm
Install dependencies:
# from repo root
cd client
npm install
# in a separate terminal
cd ../server
npm installBuild & production:
# build client
cd client
npm run build
# build server
cd server
npm run build
# start server from built output
cd server
npm startTypical ports:
- Frontend: http://localhost:3000
- Backend: http://localhost:4000
- Teachers create a room and share the room code or link.
- Students join the room and submit questions, choosing anonymous or public posting.
- Questions are delivered to teachers for moderation in a dedicated UI.
- Teachers approve to publish, reject/delete content, or ban users.
- Approved questions are visible in the class and can be read with TTS.
- Real-time synchronization uses Socket.IO.
- Ensure anonymous posting does not store or expose metadata that could identify users.
- Track banned users server-side to enforce bans across reconnects.
- Validate and sanitize user-submitted content on the server.
To contribute:
- Open an issue describing the change.
- Create a feature/ or fix/ branch.
- Make changes and ensure TypeScript compiles.
- Open a Pull Request describing the change and include screenshots where helpful.
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2025 Dhruv Goel