A production-ready, single-page video management dashboard with enhanced security features.
- Admin authentication: Username/password + email OTP (2FA)
- Password reset: Email reset link
- API proxy: The browser calls only the local backend (
/api/*). Provider credentials are stored server-side in the session.
- Admin Sign-in: Username/password + email verification code
- Session-based library connection: Enter Library ID and API Key per session
- Video Gallery: Grid layout with thumbnails
- Video Upload: Multi-file, parallel uploads, per-file progress bars
- Video Management: Delete videos with confirmation
- Video Details / Edit: Rename videos and move between collections
- Responsive Design: Works on desktop and mobile
- Modern UI: Clean, professional interface
- Node.js 18+
- An SMTP account (required to send OTP + reset emails)
-
Create and configure
.env- Use the included
.env/.env.exampleas a template - Set:
SESSION_SECRETADMIN_USERNAME/ADMIN_PASSWORDADMIN_2FA_EMAILSMTP_*settings
- Use the included
-
Install dependencies
npm install
-
Start the server
npm start- Or double-click
start-dashboard.bat
-
Open the app
To access the dashboard from another device on the same network:
- Start the server (it binds to all interfaces by default via
HOST=0.0.0.0). - Open:
http://<YOUR-PC-IP>:5173
- If it does not load, allow Node.js through Windows Firewall for private networks.
- Provider API keys are not placed in the static frontend source code.
- Provider API calls are made server-side via
/api/*routes. - OTP and password reset require properly configured SMTP.
index.htmlFrontendserver.jsBackend (auth + proxy).envLocal configuration (not for committing).env.exampleTemplate
- Chrome 60+
- Firefox 55+
- Safari 12+
- Edge 79+
For production use, consider:
- Adding HTTPS
- Implementing rate limiting
- Adding file size validation
- Implementing progress indicators for uploads
- Adding video preview functionality
- Implementing bulk operations
MIT License - Feel free to use in commercial projects