The submission version of this project is preserved on the hackathon-submission branch. The main branch contains active post-hackathon development.
AI-powered technical phone screens for software engineers. We handle first-round interviews so your engineering team can focus on building.
Currently offering mock interviews (D2C) to gather feedback on developer experience.
Shadows conducts live technical interviews with candidates using a conversational AI agent. Candidates solve coding problems while the AI asks clarifying questions, provides hints when appropriate, and evaluates problem-solving approach in real-time.
- Frontend: Next.js 15, TypeScript, Tailwind CSS
- State Management: Zustand
- Data Fetching: TanStack React Query
- Code Editor: Monaco Editor
- Realtime Voice: WebRTC + OpenAI Realtime API
- Code Execution: Judge0 API
- Database: Supabase (Postgres + pgvector)
- Auth: Supabase Auth with OAuth providers
- Node.js 18+
- npm or yarn
- Supabase project
- OpenAI API key
- Judge0 API key (RapidAPI)
npm installCopy .env.example to .env and fill in your credentials:
cp .env.example .envSee docs/ENVIRONMENT_VARIABLES.md for detailed configuration.
npm run devOpen http://localhost:3000 in your browser.
┌─────────────────────────────────────────────────────────────────┐
│ Frontend (Next.js) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Monaco Editor │ │ Voice I/O │ │ Session Manager │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Realtime │ │ Judge0 │ │ Supabase │
│ Agent │ │ (Code Exec)│ │ (Storage) │
└──────────────┘ └──────────────┘ └──────────────┘
- Start Session → User selects a problem and begins interview
- Live Conversation → Realtime agent introduces the problem and engages with candidate
- Code & Test → Candidate writes code in Monaco, runs tests via Judge0
- End Session → Session data bundled and sent to evaluator model
- Scorecard → Detailed feedback with per-dimension scores and evidence
Key tables in Supabase:
questions- Interview problems with difficulty levelsstarter_codes- Language-specific boilerplate per questiontest_cases- Input/output pairs for validationsessions- Interview session state and metadatasubmissions- Code submissions with results
src/
├── app/ # Next.js app router pages
├── auth/ # Authentication utilities
├── components/ # React components
├── hooks/ # Custom React hooks
├── lib/ # Utilities and API clients
├── middleware.ts # Auth middleware
└── store.ts # Zustand store
See LICENSE for details.