A real-time collaborative technical interview platform with video calling, live code editing, and session management.
- Overview
- Features
- Tech Stack
- Project Structure
- Getting Started
- Environment Variables
- API Endpoints
- Available Problems
- Screenshots
TalentROX is a full-stack technical interview platform that allows developers to conduct and participate in live coding sessions. Hosts can create sessions for specific LeetCode-style problems, participants can join in real-time, write code together, run it against test cases, and collaborate over video/chat β all in one place.
The platform integrates:
- Clerk for authentication
- Stream for video calls and chat
- Inngest for background jobs (user sync)
- JDoodle API for sandboxed code execution
- π Authentication β Secure sign-up/sign-in via Clerk
- π₯ Video Calls β HD real-time video using Stream Video SDK
- π¬ Live Chat β In-session messaging via Stream Chat
- π§© Collaborative Code Editor β Monaco Editor with multi-language support (JavaScript, Python, Java)
βΆοΈ Code Execution β Run code in-browser via the JDoodle API- π Session Management β Create, join, and end coding sessions
- π Problem Library β Curated DSA problems with difficulty levels
- π Dashboard β View active sessions and past session history
- π Confetti Celebration β Triggers when all test cases pass
- π± Responsive UI β Mobile-friendly layout with DaisyUI + Tailwind CSS
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| Vite | Build tool |
| Tailwind CSS v4 | Styling |
| DaisyUI v5 | Component library |
| React Router v7 | Client-side routing |
| TanStack Query v5 | Server state management |
| Clerk React | Authentication UI |
| Stream Video React SDK | Video calling |
| Stream Chat React | Chat interface |
| Monaco Editor | Code editor |
| React Resizable Panels | Resizable layout |
| Axios | HTTP client |
| canvas-confetti | Celebration effects |
| Technology | Purpose |
|---|---|
| Node.js 20+ | Runtime |
| Express 5 | Web framework |
| MongoDB + Mongoose | Database |
| Clerk Express | Auth middleware |
| Stream Chat SDK | Chat management |
| Stream Node SDK | Video call management |
| Inngest | Background job processing |
| dotenv | Environment config |
git clone https://github.com/shahnawaz-codes/Video-Calling-Interview-Platform.git
cd Video-Calling-Interview-Platform# Install frontend dependencies
cd frontend && npm install
# Install backend dependencies
cd ../backend && npm installCreate .env files as described in the Environment Variables section below.
# Start backend (from /backend)
npm run dev
# Start frontend (from /frontend)
npm run devThe frontend will be available at http://localhost:5173 and the backend at http://localhost:3000.
# From root
npm run build
npm startPORT=3000
MONGODB_URI=mongodb://localhost:27017/talentrox
NODE_ENV=development
CLIENT_URL=http://localhost:5173
# Clerk
CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
# Stream
STREAM_API_KEY=your_stream_api_key
STREAM_API_SECRET=your_stream_api_secret
# Inngest
INNGEST_API_KEY=your_inngest_api_key
INNGEST_SIGNING_KEY=your_inngest_signing_keyVITE_CLERK_PUBLISHABLE_KEY=pk_test_...
VITE_BACKEND_URL=http://localhost:3000/apiAll protected routes require a valid Clerk session token.
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/ |
Create a new session | β |
GET |
/active |
Get all active sessions | β |
GET |
/my-recent |
Get current user's completed sessions | β |
GET |
/:sessionId |
Get session by ID | β |
POST |
/:sessionId/join |
Join a session as participant | β |
POST |
/:sessionId/end |
End session (host only) | β |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/stream-token |
Get Stream chat token for current user | β |
Handles Clerk webhooks for user lifecycle events:
clerk/user.createdβ Creates user in MongoDB + Streamclerk/user.deletedβ Removes user from MongoDB + Stream
| # | Title | Difficulty | Category |
|---|---|---|---|
| 1 | Two Sum | Easy | Array, Hash Table |
| 2 | Reverse String | Easy | String, Two Pointers |
| 3 | Valid Palindrome | Easy | String, Two Pointers |
| 4 | Maximum Subarray | Medium | Array, Dynamic Programming |
| 5 | Container With Most Water | Medium | Array, Two Pointers |
Each problem includes:
- Problem description with examples and constraints
- Starter code for JavaScript, Python, and Java
- Expected output for automated test validation
1. User signs up via Clerk
β
2. Clerk webhook fires β Inngest syncs user to MongoDB + Stream
β
3. Host creates a session (problem + difficulty)
β
4. Stream video call + chat channel created automatically
β
5. Participant joins via dashboard β added to Stream channel
β
6. Both users code in Monaco Editor, run code via JDoodle API
β
7. Host ends session β Stream call/chat deleted, session marked completed
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m 'Add your feature' - Push to the branch:
git push origin feature/your-feature - Open a Pull Request
This project is licensed under the ISC License.



