Prism Interview is a real-time collaborative coding platform designed for conducting technical interviews. It allows both interviewers and candidates to write and edit code simultaneously in a shared room, with live synchronization. The platform supports private notes for interviewers, time management for interviews, and a seamless coding experience with syntax highlighting for different programming languages.
- Real-time code synchronization: Both the interviewer and the candidate can see each other's code in real-time.
- Private notes: Interviewers can add private notes that are not visible to the candidate.
- Room management: Interviewers can create rooms and send invites to candidates.
- Time management: Interviewers can set a time limit for the interview session.
- Programming language selection: Candidates can choose their preferred programming language for syntax highlighting (e.g., Go, JavaScript, Python).
- Post-interview notes: After the interview, interviewers can save their private notes for future reference.
-
Backend:
- Golang: For the main backend logic and API handling.
- Kafka: For real-time messaging and data synchronization.
- PostgreSQL: For storing user data, room information, tasks, and interview notes.
- WebSocket: For real-time code synchronization between interviewers and candidates.
-
Frontend:
- Nuxt.js: A framework for building server-rendered Vue.js applications.
- Nuxt UI: A UI component library for building a beautiful, responsive interface.
- CodeMirror: For syntax highlighting and code editing.
/backend
├── cmd/ # Main entry point (main.go)
│ ├── migrator/ # Database migration entry point
│ ├── server/ # Main service entry point
├── internal/ # Business logic and services
│ ├── room/ # Room management logic
│ ├── user/ # User management logic
│ ├── note/ # Interviewer notes logic
│ ├── storage/ # Database connection
│ ├── sync/ # Code synchronization logic
│ └── websocket/ # WebSocket server for real-time communication
├── pkg/ # Utility functions and libraries
│ ├── logger/ # Logger utility
│ ├── config/ # Configuration management
│ ├── passwordHash/ # Configuration management
│ ├── utils/ # Utilities
│ └── middleware/ # Middleware (authentication, error handling)
/frontend
├── assets/ # Static files (images, fonts, styles)
├── components/ # Reusable UI components
├── pages/ # Pages (index, room, interview)
├── store/ # Vuex store for application state
├── plugins/ # Nuxt.js plugins (WebSocket, Axios)
├── nuxt.config.ts # Nuxt.js configuration
To get started with Prism Interview, follow the installation steps below.
- Clone the repository:
git clone https://github.com/wtf-keaton/prism-interview.git cd prism-interview/backend
- Install Go dependencies:
go mod tidy
- Create a .env file with the necessary environment variables (database URL, Kafka settings, etc.).
- Run the server:
go run cmd/server/main.go
- Clone the repository:
git clone https://github.com/wtf-keaton/prism-interview.git cd prism-interview/frontend
- Install dependencies:
npm install
- Run the development server:
npm run dev
- Open the app in your browser: http://localhost:3000
- Create an Interview Room: The interviewer creates a new room and sets up a coding task.
- Invite a Candidate: The interviewer sends an invite link to the candidate.
- Solve the Task: The candidate selects a programming language and starts solving the task.
- Real-time Collaboration: Both the interviewer and the candidate see code changes in real-time.
- Private Notes: The interviewer can take private notes during the interview.
- End the Interview: When the interview time is up, or the task is completed, the interviewer can finish the session and save the notes.
Contributions are welcome! Please fork the repository, make your changes, and submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.