π¨βπ» Interview Coder Master Your Technical Interviews. A full-stack, real-time technical interview platform featuring HD video calls, a collaborative code editor, and secure end-to-end encryption.
π Features π₯ HD Video & Audio: Crystal clear calls powered by GetStream.io.
π» Collaborative Code Editor: Real-time syntax highlighting for JavaScript and Python using Monaco Editor.
β‘ Live Synchronization: See what the other person types instantly (with debouncing optimization).
π End-to-End Encryption: Optional AES encryption ensures code is unreadable without a shared secret key.
π₯οΈ Screen Sharing: Built-in screen sharing for architecture diagrams or debugging.
πΎ Auto-Save History: Interviews are saved to MongoDB for later review.
π£οΈ Text-to-Speech: Accessibility feature to read code aloud using the Web Speech API.
π Secure Authentication: Seamless login and user management via Clerk.
π Event-Driven Architecture: Robust user synchronization between Clerk and Database using Inngest.
π οΈ Tech Stack Frontend Framework: React.js (Vite)
Styling: Tailwind CSS
Icons: Lucide React
Editor: Monaco Editor
Encryption: CryptoJS
Backend (Serverless) Runtime: Node.js (Express on Vercel Functions)
Database: MongoDB Atlas (Mongoose)
Events: Inngest (Webhooks & Background Jobs)
Services Auth: Clerk
π Project Structure
interview-coder/ βββ api/ # Vercel Serverless Functions (Backend) β βββ index.js # Express API Entry point β βββ inngest.js # Inngest Event Handler β βββ token.js # Stream Token Generator βββ backend/ β βββ src/ β βββ controllers/ # Logic for saving interviews β βββ lib/ # DB connection & Stream client β βββ models/ # Mongoose Schemas (User, Interview) β βββ routes/ # Express Routes βββ frontend/ β βββ src/ β βββ components/ # StreamProvider & UI Components β βββ pages/ # Home & MeetingRoom β βββ api/ # Compiler API logic βββ vercel.json # Vercel Routing Configuration
β‘ Getting Started
- Clone the Repository
git clone https://github.com/your-username/interview-coder.git cd interview-coder
- Install Dependencies This project uses a monorepo-style structure. You need to install dependencies in the Root and the Frontend.
Root (Backend): npm install
Frontend: npm install --prefix frontend
- Environment Variables
MONGODB_URI=your_mongodb_connection_string CLERK_SECRET_KEY=sk_test_... STREAM_API_SECRET=your_stream_secret INNGEST_SIGNING_KEY=your_inngest_signing_key INNGEST_EVENT_KEY=your_inngest_event_key
CLIENT_URL=http://localhost:5173 # Change to your Vercel URL in production STREAM_API_KEY=your_stream_public_key
VITE_CLERK_PUBLISHABLE_KEY=pk_test_... VITE_STREAM_API_KEY=your_stream_public_key VITE_CLIENT_URL=http://localhost:5173 # Change to your Vercel URL in production
- Run Locally Start the Frontend: npm run dev --prefix frontend
Start the Backend: node backend/src/server.js (Note: For local development of Inngest and Webhooks, use the Inngest Dev Server).
π Deployment This project is optimized for Vercel.
Push code to GitHub.
Import project into Vercel.
Override Build Settings:
Build Command: cd frontend && npm install && npm run build
Output Directory: frontend/dist
Install Command: npm install
Add Environment Variables in Vercel Dashboard.
Deploy!
π€ Contributing Contributions are welcome!
Fork the Project.
Create your Feature Branch (git checkout -b feature/AmazingFeature).
Commit your Changes (git commit -m 'Add some AmazingFeature').
Push to the Branch (git push origin feature/AmazingFeature).
Open a Pull Request.
π License Distributed under the MIT License. See LICENSE for more information.
Built with β€οΈ by Jyoti Dev
Video/Audio: Stream Video SDK
Compiler: Piston API