Creators can send editing requests, while editors upload finalized videos without ever accessing channel credentials. The platform eliminates unsafe credential sharing using OAuth 2.0 authentication and Cloudinary-powered video storage and streaming, ensuring secure and efficient data handling. Built with Next.js 14, Node.js, MongoDB Atlas, and YouTube Data API v3, MwareX enables one-click video approval and seamless background uploads directly to YouTube—no downloads required.
Problem • Solution • Tech Stack • Quick Start • Deployment
Live Production: mware-x.vercel.app
YouTube creators face a dangerous dilemma:
┌─────────────────────────────────────────────────────────┐
│ Traditional Workflow (❌ INSECURE) │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. Creator shares YouTube password with editor │
│ 2. Editor downloads 10GB render (wasted hours) ⏳ │
│ 3. Creator manually re-uploads to YouTube │
│ 4. Channel security = ZERO │
│ │
└─────────────────────────────────────────────────────────┘
Statistics:
- 🔴 87% of creators share channel credentials unsafely
- ⏱️ Average time wasted: 3+ hours per video
- 💸 Potential revenue loss from account takeovers: $1M+
MwareX = Middleware + Workflow + eXperience
┌─────────────────────────────────────────────────────────┐
│ MwareX Workflow (✅ SECURE + FAST) │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. Editor uploads directly to MwareX Cloud ☁️ │
│ 2. Creator reviews video in-browser 🎥 │
│ 3. ONE-CLICK approval → Auto-upload to YouTube 🚀 │
│ 4. Channel credentials NEVER shared 🔒 │
│ │
└─────────────────────────────────────────────────────────┘
Key Features:
- 🛡️ Zero Credential Sharing – OAuth 2.0 secure authentication
- ⚡ Instant Reviews – Stream videos directly, no downloads
- 🤖 Background Processing – Upload 140MB+ files without timeouts
- 🎯 WhatsApp Notifications – Approve videos on-the-go
- 📊 Full Audit Trail – Track every approval/rejection
|
|
- 🚀 Vercel (Frontend hosting)
- 🌐 Render (Backend API)
- 📦 GitHub (Version control)
node >= 20.x
npm >= 10.x
MongoDB Atlas Account
Cloudinary Account
Google Cloud Console Projectgit clone https://github.com/samay-hash/MwareX.git
cd MwareXcd backend
npm installCreate .env file:
MONGO_URI=mongodb+srv://<user>:<password>@cluster0.xxx.mongodb.net/mwarex
JWT_SECRET_USER=your_super_secret_key_here
JWT_SECRET_ADMIN=another_secret_key_here
# Google OAuth
GOOGLE_CLIENT_ID=your_client_id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REDIRECT=http://localhost:8000/oauth2callback
FRONTEND_URL=http://localhost:3000
# Cloudinary
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# YouTube
YOUTUBE_REFRESH_TOKEN=your_refresh_tokenStart backend:
npm startcd ../frontend
npm installCreate .env.local:
NEXT_PUBLIC_API_URL=http://localhost:8000Start frontend:
npm run devFrontend: http://localhost:3000
Backend: http://localhost:8000
MwareX/
├── backend/
│ ├── index.js # Express server entry
│ ├── db.js # MongoDB connection
│ ├── models/ # Mongoose schemas
│ │ ├── user.js
│ │ ├── video.js
│ │ └── EditorAssignment.js
│ ├── routes/ # API endpoints
│ │ ├── authUser.js
│ │ ├── authAdmin.js
│ │ ├── video.js # Video CRUD + Upload
│ │ ├── invite.js # Editor invitations
│ │ └── googleAuth.js # OAuth flow
│ ├── services/
│ │ └── youtubeUploader.js # YouTube API integration
│ ├── middlewares/
│ │ ├── userMiddleware.js
│ │ └── adminMiddleware.js
│ └── tools/
│ └── googleClient.js # OAuth2 client factory
│
└── frontend/
├── src/
│ ├── app/
│ │ ├── page.tsx # Landing page
│ │ ├── auth/ # Login/Signup
│ │ ├── dashboard/ # Creator dashboard
│ │ ├── privacy-policy/ # Legal pages
│ │ └── terms/
│ ├── components/
│ │ ├── site-header.tsx
│ │ ├── workflow-animation.tsx
│ │ └── VideoCard.tsx
│ └── lib/
│ └── api.ts # Axios instance
└── public/
POST /api/v1/user/signup
POST /api/v1/user/login
POST /api/v1/admin/signupPOST /api/v1/videos/upload # Upload video (Cloudinary)
GET /api/v1/videos/pending # List pending reviews
POST /api/v1/videos/:id/approve # Approve + Upload to YT
POST /api/v1/videos/:id/reject # Reject videoGET /auth/google # Generate OAuth URL
GET /oauth2callback # Handle Google redirect
POST /api/v1/videos/store-youtube-tokensPOST /api/v1/invite # Send editor invite
GET /api/v1/verify?token=xxx # Verify invite tokenWe welcome contributions! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow existing code style
- Write meaningful commit messages
- Test locally before pushing
- Update documentation if needed
- ⏳ Large video uploads (>140MB) take 3-5 minutes due to background processing
- 🔐 Google OAuth shows "unverified" warning until official verification (3-5 days)
- 📱 Mobile UI needs refinement
- Real-time upload progress tracking
- WebSocket notifications
- Multi-language support
- Analytics dashboard
- Scheduled uploads
- AI-powered video quality checks
This project is licensed under the MIT License.
Samay Samrat
- GitHub: @samay-hash
- Email: samaysamrat64@gmail.com