A dynamic media platform where content (videos, likes, comments, subscriptions) continuously flows, engaging users in a rich ecosystem of media.
- Backend: Node.js, Express.js
- Database: MongoDB with Mongoose
- Authentication: JWT, bcryptjs
- Media Storage: Cloudinary
- Cookies: Cookie Parser
- Environment Management: dotenv
- Security Management: CORS
- Utilities: express-async-handler, multer, nodemon
- User authentication and management using JWT & bcryptjs
- Video upload, streaming, and management
- Commenting system on videos
- Likes and subscriptions for user engagement
- Tweet-like microblogging feature
- Playlists for organizing videos
- Dashboard for analytics and insights
- RESTful API endpoints for all resources
- Error handling with Express middlewares
- Environment-based configuration support
- Scalable folder structure
VortexStream/
├── public/ # Static files and assets
├── src/ # Source files (app.js, index.js, etc.)
├───── utils/ # Utility functions
├───── config/ # Database and other configurations
├───── routes/ # API route definitions
├───── models/ # Mongoose schemas for User, Video, Comment, etc.
├───── controllers/ # Route logic for users, videos, comments, etc.
├───── middlewares/ # Custom middleware for auth, file upload, etc.
├── .env # Environment variables (not committed)
├── constants.js # Status codes and reusable constants
├── package.json # Project metadata and dependencies
Visual representation of the core models and their relationships:
git clone https://github.com/KalraH/VortexStream.git
cd VortexStreamnpm install# Environment Configuration
PORT = 3001
# Database Configuration
CORS_ORIGIN = http://localhost:3001
MONGO_DB_URI = your_mongodb_connection_string
## JWT Configuration
CLOUDINARY_API_KEY = your_cloudinary_api_key
CLOUDINARY_CLOUD_NAME = your_cloudinary_cloud_name
CLOUDINARY_API_SECRET = your_cloudinary_api_secret
# Cloudinary Configuration
ACCESS_TOKEN_SECRET = your_accessToken_Sectet
REFRESH_TOKEN_SECRET = your_refreshToken_Sectet
REFRESH_TOKEN_EXPIRATION = your_refreshToken_expiration_time
ACCESS_TOKEN_EXPIRATION = your_accessToken_expiration_timenpm run devnpm startTo run this project, you will need to add the following environment variables to your .env file
PORT 3000
CORS_ORIGIN your ORIGIN for avoiding CORS Errors
MONGO_DB_URI your mongodb connection string
CLOUDINARY_API_KEY your Cloudinary API key
CLOUDINARY_CLOUD_NAME your Cloudinary Cloud Name
CLOUDINARY_API_SECRET your Cloudinary API secret key
ACCESS_TOKEN_SECRET your Access Token JWT secret key
REFRESH_TOKEN_SECRET your Refresh Token JWT secret key
REFRESH_TOKEN_EXPIRATION your Refresh Token expiration duration
ACCESS_TOKEN_EXPIRATION your Refresh Token expiration duration
| Endpoint | Method | Public/Private | Description |
|---|---|---|---|
/api/1/dashboard/stats |
Private | Get stats for the creator's channel | |
/api/1/dashboard/videos |
Private | Get all videos for the channel |
📌 Legend
Public: Accessible without authentication
Private: Requires authentication (Authorization: Bearer <token>or secure cookies)
Made with ❤️ by Hariom Kalra