🤖 Interview Bot
AI-powered interviewer bot with video call interface and calendar scheduling, built on Cloudflare Workers.
Features
- 📅 Calendar Scheduling - Visual calendar with drag-and-click scheduling
- 📹 Video Call Interface - Simulated video call with AI avatar
- 🧠 AI Interviewer - Streaming responses via Workers AI + AI Gateway
- 💬 Real-time Chat - Server-sent events for smooth streaming
- 📱 Responsive UI - Works on desktop and mobile
Architecture
┌─────────────────────────────────────────────────────────┐
│ Cloudflare Edge │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ Worker │──│ AI Gateway │──│ Workers AI │ │
│ │ (index.ts) │ │ (optional) │ │ (Llama 3.1 8B) │ │
│ └──────┬──────┘ └──────────────┘ └────────────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ KV Store │ ← Interview data │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
Quick Start
1. Install dependencies
npm install
2. Create KV namespaces
# Create production namespace
npx wrangler kv namespace create INTERVIEWS
# Create preview namespace for local dev
npx wrangler kv namespace create INTERVIEWS --preview
3. Update wrangler.toml
Replace the placeholder IDs with the ones from the previous step:
[[kv_namespaces]]
binding = "INTERVIEWS"
id = "<YOUR_PRODUCTION_ID>"
preview_id = "<YOUR_PREVIEW_ID>"
4. (Optional) Configure AI Gateway
For analytics, caching, and rate limiting:
- Create an AI Gateway in the Cloudflare dashboard
- Uncomment and update the AI Gateway config in
wrangler.toml:
[ai.gateway]
id = "your-gateway-id"
5. Run locally
npm run dev
6. Deploy to production
npm run deploy
API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/interviews |
List all interviews |
| POST | /api/interviews |
Create new interview |
| PUT | /api/interviews/:id |
Update interview |
| DELETE | /api/interviews/:id |
Delete interview |
| POST | /api/chat |
Stream AI chat response |
Interview Data Structure
interface Interview {
id: string;
candidateName: string;
email: string;
scheduledAt: string; // ISO 8601
duration: number; // minutes
status: 'scheduled' | 'in-progress' | 'completed' | 'cancelled';
notes: string[];
transcript: string[];
}
Customization
Change AI Model
In src/index.ts, update the model in handleChat():
const stream = await env.AI.run('@cf/meta/llama-3.3-70b-instruct-fp8-fast', {
// ...options
});
Available models: https://developers.cloudflare.com/workers-ai/models/
Modify Interview Prompts
Edit the SYSTEM_PROMPT constant in src/index.ts to customize:
- Interview style and tone
- Question categories
- Evaluation criteria
Add Real Video (WebRTC)
To add actual video calls using Cloudflare Realtime:
- Enable Realtime SFU in your Cloudflare dashboard
- Add the RealtimeKit SDK to the frontend
- Replace the simulated video with real WebRTC streams
See: https://developers.cloudflare.com/realtime/
Tech Stack
- Runtime: Cloudflare Workers
- AI: Workers AI with Llama 3.1 8B Instruct
- Storage: Cloudflare KV
- Streaming: Server-Sent Events (SSE)
- Frontend: Vanilla JS with inline styles
Cost Estimation
| Resource | Free Tier | Paid |
|---|---|---|
| Workers requests | 100k/day | $0.30/million |
| Workers AI | 10k neurons/day | $0.011/1k neurons |
| KV reads | 100k/day | $0.50/million |
| KV writes | 1k/day | $5.00/million |
License
MIT
Description
Languages
TypeScript
100%