TalentIQ is a full-stack MERN interview practice platform for live pair-programming sessions. It combines problem solving, real-time video + chat, and in-browser code execution in a single workspace.
The project is split into:
frontend/- React + Vite client appbackend/- Express API, auth middleware, session management, Stream + Inngest integrations
In production, the backend serves the built frontend (frontend/dist) as static files.
- Clerk authentication (sign in/up + protected routes)
- Session creation with selected problem and difficulty
- Active session discovery and recent session history
- Real-time collaborative interview room:
- Stream Video call
- Stream Chat channel
- Shared interview problem view
- In-browser code editor (Monaco)
- Code execution via Piston API (JavaScript, Python, Java)
- Session lifecycle controls:
- join active session
- host-only end session
- automatic redirect on completion
- Background user sync/deletion using Inngest functions triggered by Clerk events
- Frontend: React 19, Vite, React Router, TanStack Query, Tailwind CSS, DaisyUI, Stream Video/Chat SDK
- Backend: Node.js, Express, Mongoose, Clerk Express, Inngest, Stream Node SDK
- Database: MongoDB
- External Services: Clerk, Stream, Inngest, Piston API
Install before running locally:
- Node.js 18+
- npm 9+
- MongoDB Atlas (or local MongoDB)
- Clerk account and app
- Stream account (Chat + Video enabled)
- Inngest account/project
Create env files for backend and frontend.
PORT=3000
NODE_ENV=development
DB_URL=mongodb+srv://<username>:<password>@<cluster>/<db>?retryWrites=true&w=majority
CLIENT_URL=http://localhost:5173
STREAM_API_KEY=<stream_api_key>
STREAM_API_SECRET=<stream_api_secret>
INNGEST_EVENT_KEY=<inngest_event_key>
INNGEST_SIGNING_KEY=<inngest_signing_key>
# Required by @clerk/express
CLERK_SECRET_KEY=<clerk_secret_key>VITE_CLERK_PUBLISHABLE_KEY=<clerk_publishable_key>
VITE_STREAM_API_KEY=<stream_api_key>
VITE_API_BASE_URL=http://localhost:3000/api- Clone and enter the repository:
git clone https://github.com/coughlmao/MERN-Interview-Platform-talent-IQ.git
cd MERN-Interview-Platform-talent-IQ- Install dependencies for all parts:
npm install
npm install --prefix backend
npm install --prefix frontend- Add env files:
backend/.envfrontend/.env
- Start backend (terminal 1):
npm run dev --prefix backend- Start frontend (terminal 2):
npm run dev --prefix frontend- Open app:
- Frontend:
http://localhost:5173 - Backend health check:
http://localhost:3000/health
This repository is ready for a single Render Web Service deployment where the backend serves the frontend build.
- Connect this GitHub repository in Render
- Service Type: Web Service
- Branch: your deployment branch (usually
main)
- Build Command:
npm run build- Start Command:
npm startThese use root package.json scripts:
buildinstalls backend + frontend deps and runs frontend buildstartruns backend server
Add the following in Render service settings:
NODE_ENV=productionPORT(Render injects this automatically, but do not hardcode another port)DB_URLCLIENT_URL=https://<your-render-service>.onrender.comSTREAM_API_KEYSTREAM_API_SECRETINNGEST_EVENT_KEYINNGEST_SIGNING_KEYCLERK_SECRET_KEYVITE_CLERK_PUBLISHABLE_KEYVITE_STREAM_API_KEYVITE_API_BASE_URL=/api
Important: VITE_* variables are used at frontend build time. They must be present in Render before build runs.
In Clerk dashboard:
- Add your Render URL to allowed origins/redirect URLs
- Set webhook(s) for user create/delete flows to your deployed Inngest endpoint if needed
After env vars are set, trigger a manual deploy (or push a commit) and verify:
https://<your-render-service>.onrender.com/health- App root URL loads
- Authentication and session creation work
GET /healthGET /api/chats/token(protected)POST /api/sessions(protected)GET /api/sessions/active(protected)GET /api/sessions/my-recent(protected)GET /api/sessions/:id(protected)POST /api/sessions/:id/join(protected)POST /api/sessions/:id/end(protected)POST /api/inngest(Inngest function endpoint)
Root:
npm run buildnpm start
Backend:
npm run dev --prefix backendnpm run start --prefix backend
Frontend:
npm run dev --prefix frontendnpm run build --prefix frontendnpm run preview --prefix frontend
- Session capacity is currently 2 participants max (host + one participant).
- Only the host can end a session.
- Completed sessions are visible in recent sessions.