InterviewLab is a discussion-first technical interview practice studio. Candidates choose their target level and practice either system design or NeetCode 150 coding rounds while an adaptive interviewer challenges their reasoning.
- Junior, mid-level, and senior architect calibration
- Guided learning and realistic mock-interview modes
- A curated catalog of system-design prompts
- NeetCode 150 coding rounds with embedded prompts and submission notes
- Authenticated NeetCode desktop workspace for official test runs
- Automatic desktop discovery for installed Codex, Claude Code, and Antigravity CLI agents
- Session-only API-key fallback for OpenAI, Claude, Gemini, and Antigravity APIs
- Adaptive requirement answers and architecture follow-ups
- Embedded Excalidraw canvas with label/topology-aware review
- Coverage tracking and an end-of-session debrief
- Responsive interview workspace for desktop and mobile
The desktop app can use an installed Codex, Claude Code, or Antigravity CLI directly through that tool's existing account sign-in, so no API key is needed. Local agents run non-interactively from a neutral temporary directory with restricted tool access. API-key mode remains available as a fallback and is the only provider mode exposed by browser, Node.js, and Docker deployments. Keys remain in the active browser tab, pass only through the same-origin interviewer endpoint, and are never persisted. InterviewLab has no server-owned provider credential or shared AI budget.
Requires Node.js 22.13 or newer.
git clone https://github.com/javedshaik1228/interviewlab.git
cd interviewlab
npm ci
npm run devDevelopment and production both use the standard Next.js runtime. Production builds use Next.js standalone output for portable deployment.
InterviewLab can run as a self-contained desktop application. The executable
starts its own server on a random loopback-only port, so no Docker, Node.js
installation, hosted backend, or inbound network access is required. Internet
access is still required when you ask an external AI provider for a response.
On startup, the desktop build checks the executable search path and standard
per-user install directories for codex, claude, and agy. If one is found,
InterviewLab selects it automatically and uses the CLI's existing sign-in and
subscription allowances. The app never reads or copies the CLI's credentials.
Coding rounds can open the official problem in a dedicated NeetCode window
inside the desktop app. That window uses an isolated persistent session, so a
NeetCode sign-in survives app restarts and the official Run Tests controls
work as a first-party page instead of inside a cross-site iframe.
GitHub release builds include:
| Operating system | Architectures | Downloads |
|---|---|---|
| Windows | x64 | Installer .exe and portable .exe |
| macOS | Apple Silicon and Intel | .dmg and .zip |
| Linux | x64 | Portable .AppImage and Debian/Ubuntu .deb |
Download a published build from the repository's Releases page. Community builds are currently unsigned, so Windows SmartScreen or macOS Gatekeeper may show an unknown-publisher warning. Only use artifacts published by this repository. Signing can be added later without changing the runtime design.
Installed builds include a Check for updates control. InterviewLab checks the repository's GitHub Releases, downloads a newer installer in the background, and offers to restart when it is ready. The Windows portable build opens the latest release instead because a running portable executable cannot replace itself safely. Automatic installation on macOS requires releases to be code-signed and notarized; unsigned development releases still need to be downloaded manually.
To build an executable for the operating system you are currently using:
npm ci
npm run desktop:distArtifacts are written to dist-desktop. Run npm run desktop:run to build and
launch the desktop app locally without creating an installer. The release
workflow builds every supported operating system on its native runner; pushing
a version tag such as v0.1.0 synchronizes the app version and publishes all
installers plus their update metadata to a GitHub release.
Docker is the recommended portable deployment path. Host CLI agents are not exposed inside the container. No server-side AI-provider keys are required because candidates supply external-provider keys in their active browser session.
cp .env.example .env
docker compose up -d --buildInterviewLab will be available at http://localhost:3000. Before deploying
behind a public domain, set SITE_URL in .env to the complete public origin,
for example https://interview.example.com. Set PORT to change the host port.
The container exposes /api/health for health checks and runs as a non-root
user. Its network must allow outbound HTTPS requests to any AI providers users
select. Because session API keys pass through /api/interviewer, terminate TLS
at the application or reverse proxy and avoid request-body logging there.
Requires Node.js 22.13 or newer.
npm ci
npm run build
npm startSet SITE_URL, PORT, and HOSTNAME in the process environment as needed.
The production build does not download fonts and does not depend on Sites or
Cloudflare at runtime.
Run the full validation suite with:
npm test
npm run lintIssues and pull requests are welcome. Read CONTRIBUTING.md before proposing a change, and report vulnerabilities according to SECURITY.md.
InterviewLab is an independent project and is not affiliated with or endorsed by NeetCode, Hello Interview, Excalidraw, OpenAI, Anthropic, Google, or their respective owners. Third-party names and links identify compatible services or learning resources; their content, trademarks, and terms remain their owners'.
InterviewLab's source code is available under the MIT License.