InterSync is a modern, full-stack interview platform designed for technical interviews between interviewers and candidates. It features real-time video calls, collaborative code editing, a digital whiteboard, screen sharing, interview scheduling, question management, and an advanced AI-powered resume scorer. The platform is built entirely with Next.js (TypeScript) and leverages best-in-class third-party services for video, authentication, and AI.
- Live Video Calls: Real-time, high-quality video calls between interviewer and candidate using Stream.
- Collaborative Code Editor: In-browser code editor for live coding interviews, supporting multiple languages and real-time collaboration.
- Whiteboard: Digital whiteboard for drawing diagrams and explaining solutions visually.
- Screen Sharing: Candidates can share their screen with the interviewer for transparency and demonstration.
- Question Management: Interviewers can add, edit, and select questions before and during the interview.
- Interview Scheduling: Schedule interviews with calendar integration and notifications.
- AI-Powered Resume Scorer: Candidates can upload their resume and a job description to receive an AI-generated score and actionable feedback, powered by Google Gemini.
- Recordings: Interviews can be recorded for later review.
- Comments & Feedback: Interviewers can leave comments and feedback on interviews.
- Admin Dashboard: Manage users, interviews, and platform settings.
- Authentication: Secure, modern authentication and user management with Clerk.
The resume scorer uses a multi-step, AI-powered process to generate a comprehensive score and actionable feedback:
- How:
- The resume text and job description are both sent to Google Gemini to generate embeddings (vector representations).
- The cosine similarity between these two vectors is calculated.
- The similarity score is normalized to a 0β1 range.
- Why:
- Rewards resumes that are semantically aligned with the job requirements.
- How:
- Gemini is prompted to extract:
- Roles: Job titles found in the resume.
- Organizations: Company names.
- Degrees: Educational qualifications.
- The response is parsed as JSON.
- Gemini is prompted to extract:
- Why:
- Identifies and rewards relevant experience and education.
- How:
- The resume and job description are sent to Gemini with a prompt asking for:
- Strengths
- Weaknesses
- Recommendations
- The response is parsed as JSON (with robust extraction and retry logic).
- The resume and job description are sent to Gemini with a prompt asking for:
- Why:
- Provides advanced, AI-powered, context-aware feedback on the resume.
The final score is a weighted sum of several components:
| Component | Calculation/Weighting | Max Points |
|---|---|---|
| Semantic Similarity | normalizedSimilarity * 50 |
50 |
| Category Match | categoryMatch * 10 (number of times the selected category appears in roles) |
10 per match |
| Degrees | Math.min(degrees.length * 5, 15) |
15 |
| Organizations | Math.min(orgs.length * 2, 10) |
10 |
| Gemini Feedback | strengths.length * 5 - weaknesses.length * 3 |
variable |
- All components are summed.
- The final score is clamped to the 0β100 range.
Suppose:
- Semantic similarity = 0.8 β 0.8 * 50 = 40
- Category appears 1 time in roles β 1 * 10 = 10
- 2 degrees β 2 * 5 = 10
- 3 organizations β 3 * 2 = 6
- 2 strengths, 1 weakness β 2 * 5 - 1 * 3 = 7
Total score: 40 + 10 + 10 + 6 + 7 = 73
- If any step fails (e.g., Gemini returns invalid JSON, or is overloaded), the system retries up to 5 times.
- If all retries fail, a user-friendly error message is returned.
- All parsing and AI calls are wrapped in try/catch blocks.
- Holistic: Combines semantic matching, entity extraction, and LLM feedback.
- Context-aware: Goes beyond keyword matching to understand the actual fit.
- Actionable: Provides not just a score, but also strengths, weaknesses, and recommendations.
- Frontend & Backend: Next.js (App Router, TypeScript)
- Video Calls & Real-Time: Stream (video, audio, chat, screen share)
- Authentication: Clerk (user auth, roles, session management)
- AI & NLP: Google Gemini (semantic similarity, LLM feedback, NER)
- Resume Parsing:
@bingsjs/pdf-parse(PDF),mammoth(DOCX), plain text - UI & Styling: Tailwind CSS, Shadcn UI
- State Management: React Context, hooks
- Other:
- Convex (realtime database, if used)
- Lucide Icons
- Mermaid (for diagrams)
- Monorepo: All logic (frontend, backend API, AI, parsing) is in a single Next.js project.
- API Routes: All backend logic (resume scoring, interview management, etc.) is implemented as Next.js API routes in
/src/app/api/. - Third-Party Services:
- Stream: Handles all video, audio, chat, and screen sharing.
- Clerk: Handles authentication, user management, and roles.
- Google Gemini: Powers AI features (resume scoring, feedback, NER, semantic similarity).
- Powered by Stream.
- Supports video, audio, chat, and screen sharing.
- Real-time, low-latency, and secure.
- Syntax highlighting for multiple languages (Python, Java, C++, JavaScript, etc.).
- Real-time updates for both interviewer and candidate.
- Integrated into the interview room.
- Draw, annotate, and explain visually.
- Useful for system design, flowcharts, and algorithm explanation.
- Candidate can share their screen with the interviewer.
- Useful for debugging, walkthroughs, or showing local projects.
- Interviewers can add, edit, and select questions before and during the interview.
- Questions can be categorized by role, difficulty, etc.
- Schedule interviews with calendar UI.
- Send notifications/reminders to participants.
- Candidates can upload their resume (PDF, DOCX, TXT) and a job description.
- The system parses the resume, compares it semantically to the job description, extracts entities (roles, orgs, degrees), and gets LLM-powered feedback from Gemini.
- Returns a score (0β100), strengths, weaknesses, and actionable recommendations.
- Retries and robust error handling for LLM/API issues.
- Interviews can be recorded and stored for later review.
- Interviewers can leave comments and feedback on interviews.
- Candidates can view feedback post-interview.
- Manage users, interviews, questions, and platform settings.
- Secure sign-up, login, and role-based access using Clerk.
- Supports interviewer, candidate, and admin roles.
/src/app/β Main app directory (pages, layouts, API routes)/src/components/β UI components (CodeEditor, WhiteBoard, MeetingRoom, etc.)/src/constants/β App-wide constants/src/hooks/β Custom React hooks/src/actions/β Server actions/src/lib/β Utility functions/public/β Static assets (images, icons)/convex/β (If using Convex for realtime DB)
- Clone the repo:
git clone <repo-url> cd InterSync
- Install dependencies:
npm install
- Set up environment variables:
GEMINI_API_KEYβ Your Google Gemini API key- (Other keys for Stream, Clerk, etc. as needed)
- Run the development server:
npm run dev
- Open http://localhost:3000 in your browser.
/api/score-resumeβ Resume scoring (file upload, JD, category, experience)/api/other-routesβ (Add more as needed for interviews, scheduling, etc.)
- Fork the repo and create your branch from
main. - Make your changes and add tests if relevant.
- Run
npm run lintandnpm run buildto check for errors. - Open a pull request with a clear description.
MIT