Hey there! 👋 This is my final project for my web development course - a video review platform that I built from scratch. It's designed to help teachers and students collaborate better through video content with interactive feedback and commenting.
Frontend: [https://class-review.netlify.app] Backend API: [https://project-final-simon.onrender.com/]
I noticed that when learning from videos, it's really hard to give specific feedback or ask questions about particular moments. Traditional video platforms just don't cut it for educational content. I wanted to build something that would let students and teachers have meaningful discussions about specific parts of videos, with time-coded comments and organized feedback.
I built this platform that lets you:
- Comment on specific video moments - no more "around the 3-minute mark" confusion!
- Organize everything by classes and projects - keeps things tidy and easy to find
- Have real conversations - nested comments, replies, and likes make discussions feel natural
- Switch between teacher and student views - different interfaces for different needs
- Use it on any device - responsive design that works everywhere
- React 19 with TypeScript for type-safe development
- Styled Components for component-based styling and theming
- Framer Motion for smooth animations and transitions
- Zustand for lightweight state management (It is were all my fetches are)
- React Router for client-side routing and navigation
- Vite for fast development and building
- Node.js with Express.js framework
- MongoDB with Mongoose ODM for data persistence
- TypeScript for type safety and better development experience
- JWT Authentication with bcrypt for secure user management
- Multer & Cloudinary for file uploads and media management
- Swagger for API documentation
- ESLint for code quality and consistency
- TypeScript for static type checking
- Git for version control
- Upload videos and organize them by classes and projects
- Add time-coded comments at specific moments
- Video player with progress tracking and volume controls
- Generate thumbnails automatically
- Comment threads that can have replies (and replies to replies!)
- Like/unlike comments and replies
- Comments are linked to specific video timestamps
- Secure login/signup with JWT tokens
- Different views for teachers vs. students
- User profiles and activity tracking
- Session management that actually works
- Dark/light theme switching
- Responsive design that works on phones, tablets, and desktops
- Smooth animations and transitions
- Intuitive navigation that doesn't confuse users
- Node.js (v18 or higher)
- MongoDB instance (I used MongoDB Atlas for free)
- npm or yarn
-
Clone my repo
git clone https://github.com/simonfrisk/classync-platform.git cd classync-platform
-
Install backend stuff
cd backend npm install
-
Install frontend stuff
cd ../frontend npm install
-
Set up environment variables Create
.env
files in both backend and frontend directories:Backend (.env)
MONGO_URL=mongodb://localhost/classync PORT=8080 JWT_SECRET=your-secret-key-here CLOUDINARY_CLOUD_NAME=your-cloud-name CLOUDINARY_API_KEY=your-api-key CLOUDINARY_API_SECRET=your-api-secret
Frontend (.env)
VITE_API_BASE_URL=http://localhost:8080
-
Start the servers
Backend
cd backend npm run dev
Frontend
cd frontend npm run dev
-
Open your browser
- Frontend: http://localhost:5173
- Backend API: http://localhost:8080
- API Docs: http://localhost:8080/api-docs
project-final-simon/
├── backend/ # My Node.js/Express backend
│ ├── src/
│ │ ├── controllers/ # API endpoint handlers
│ │ ├── models/ # MongoDB schemas
│ │ ├── middleware/ # Auth & file upload middleware
│ │ ├── routes/ # API route definitions
│ │ └── server.ts # Main server file
│ └── package.json
├── frontend/ # My React frontend
│ ├── src/
│ │ ├── sections/ # Different pages
│ │ ├── global-components/ # Reusable components
│ │ ├── store/ # Zustand state management
│ │ ├── themes/ # Styling and theming
│ │ └── utils/ # Helper functions
│ └── package.json
└── README.md
npm run dev
- Start dev server with hot reloadnpm run build
- Build TypeScript to JavaScriptnpm start
- Start production server
npm run dev
- Start dev servernpm run build
- Build for productionnpm run preview
- Preview production buildnpm run lint
- Run ESLint
- Interactive timeline you can click on
- Comments sync with video playback
- Volume controls and fullscreen
- Progress tracking and time formatting
- Nested comment threads (comments can have replies)
- Real-time updates
- Rich text formatting
- Like/unlike functionality
- Create and organize educational content
- User role-based access control
- Bulk operations
Honestly, this project could go in so many directions! If I had more time, I'd love to add:
- Real-time collaboration - WebSocket integration for live commenting
- More user settings - Make the create user more controlled so that not anyone can be a user.
- Mobile app - React Native
I'd love to see what other developers can add to this! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request