Sup! is a full-stack video meeting workspace built for innovators, it has various tools integrated in your meeting to make your calls more productive and to make the workflow faster.
- Email/password auth with email verification
- Google and GitHub OAuth login/linking
- User profiles
- Instant and scheduled meetings
- Shareable meeting links
- WebRTC video/audio rooms
- Pre-join lobby with mic/camera controls
- In-meeting chat, attachments, reactions, raised hands, and host controls
- Tools: timer, checklist, notes, polls, transcription, whiteboard, breakout rooms
- Meeting recordings with optional Google Drive/GitHub sync
- Google Calendar and ICS support
- Past meeting audit logs with durations and activity history
- Admin APIs and dashboards for global users, meetings, and audit logs
- React + TypeScript migration started under
client/
- Node.js, Express, Socket.IO
- PostgreSQL, Drizzle ORM
- JWT, bcryptjs, Passport
- WebRTC
- React, TypeScript, Vite
- Multer, Nodemailer
- Three.js, HTML, CSS, vanilla JS
npm installCreate a PostgreSQL database:
CREATE DATABASE sup_video_call;Create .env:
DATABASE_URL=postgresql://postgres:your_password@localhost:5432/sup_video_call
JWT_SECRET=replace-with-a-long-random-secret
BASE_URL=http://localhost:3000
PORT=3000
NODE_ENV=developmentApply schema and compatibility backfills:
npm run db:push
node scripts/db-backfill.jssRun locally:
npm run devOpen http://localhost:3000.
React client:
npm install --prefix client
npm run client:dev
npm run client:buildldEmail:
EMAIL_SERVICE=gmail
EMAIL_USER=
EMAIL_PASSWORD=OAuth:
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/callback
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_CALLBACK_URL=http://localhost:3000/auth/github/callback
EMAIL_SERVICE=gmail
EMAIL_USER=
EMAIL_PASSWORD=
GOOGLE_DRIVE_RECORDINGS_FOLDER_ID=
Admin:
ADMIN_EMAILS=[email protected]
ADMIN_USER_IDS=1
# Password gate for the admin panel pages (/admin.html, /admin-stats.html).
# Layered on top of the ADMIN_EMAILS/ADMIN_USER_IDS checks: a visitor must both
# know this password AND sign in with an authorized admin account.
# Set ONE of the following. If neither is set, the admin panel stays locked (503).
ADMIN_PANEL_PASSWORD=change-this-strong-password
# ...or a bcrypt hash instead of plaintext (takes precedence if both are set):
# ADMIN_PANEL_PASSWORD_HASH=$2a$10$...
# Optional: how long an unlock lasts, in hours (default 8, max 168):
# ADMIN_PANEL_SESSION_HOURS=8npm start # start server
npm run dev # start with nodemon
npm run client:dev
npm run client:build
npm run db:push sh # push Drizzle schema
npm run db:studioo/- login/register/dashboard.html- meetings and audit history/app/dashboard- React dashboard afternpm run client:build/admin.html- legacy admin dashboard/app/admin- React admin dashboard afternpm run client:build/profile.html- profile and account connections/meeting.html?room=CODE- meeting room/join/:code- shareable join link/api/admin/*- admin-only JSON APIs
- Node.js 18.x is expected.
- Run
node scripts/db-backfill.jsafter pulling schema changes. - Audit logs use
meeting_audit_logs; the server creates it on startup if needed. - Camera/mic access requires
localhostor HTTPS. - Keep
.envout of git.
ISC