Intersped is a real-time, AI-powered technical interview simulator designed to give job seekers a personalized and immersive preparation experience. By scraping company-specific data—including mission, culture, technical stacks, and even company-relevant LeetCode problems—Intersped tailors every interview to the specific role and company you're targeting.
- Company-Specific Scraping: Automatically gathers insights on company mission, culture, and interview processes using the agentic JobScraper powered by Yellowcake.
- Real-Time Voice Interaction: Seamless, low-latency voice interviews using ElevenLabs for industry-leading Speech-to-Text (STT) and Text-to-Speech (TTS).
- Dynamic AI Personas: Powered by Solace Agent Mesh (SAM), the AI interviewer ("Rachel") adapts its personality and technical focus based on the scraped company data.
- Barge-In Support: Natural conversation flow where users can interrupt the AI, just like in a real interview.
- Technical & Behavioral Depth: Covers everything from system design and coding challenges to cultural fit and behavioral questions.
- Integrated Environment: Built-in code editor and dashboard to track your progress and interview history.
- Framework: Next.js 15 (App Router)
- Styling: Tailwind CSS, Framer Motion
- UI Components: Radix UI, Lucide React
- Authentication: Better-Auth
- State Management: React Hooks & Context API
- Framework: FastAPI
- Orchestration: Solace Agent Mesh (SAM)
- AI/LLM: LangChain, Groq, DSPy
- Voice/Audio: ElevenLabs (STT, TTS, VAD)
- Scraping Engine: Yellowcake, Playwright, BeautifulSoup4
- Database: Better-SQLite3 (via Better-Auth)
.
├── Backend/ # FastAPI backend
│ ├── app/
│ │ ├── models/ # Pydantic data models
│ │ ├── routers/ # API endpoints (voice, scraper, interview)
│ │ ├── services/ # Business logic (SAM, voice, scraper)
│ │ │ └── job_scraper/ # Advanced agentic scraping engine
│ │ └── utils/ # Helper functions
│ ├── pyproject.toml # Python dependencies
│ └── Dockerfile
├── Frontend/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # Next.js pages & layouts
│ │ ├── components/ # UI components (interview room, dashboard)
│ │ ├── hooks/ # Custom React hooks (voice logic)
│ │ └── lib/ # Utilities and auth config
│ ├── package.json # Node.js dependencies
│ └── Dockerfile
├── app.yaml # Deployment configuration
└── intersped.db # Local SQLite database
- Python 3.11+
- Node.js 20+
- uv (recommended for Python package management)
Create a .env file in the root directory with the following:
# Backend
YELLOWCAKE_API_KEY=your_key
GROQ_API_KEY=your_key
ELEVENLABS_API_KEY=your_key
LLM_SERVICE_API_KEY=your_key
LLM_SERVICE_ENDPOINT=your_endpoint
# Frontend
NEXT_PUBLIC_API_URL=http://localhost:8000
BETTER_AUTH_SECRET=your_secret
DISCORD_CLIENT_ID=your_id
DISCORD_CLIENT_SECRET=your_secret
NEXT_PUBLIC_APP_URL=http://localhost:3000You can start both the frontend and backend with a single command using the provided setup script:
chmod +x start.sh
./start.shThis script will sync dependencies, migrate the database, and launch both services (Frontend on 3000, Backend on 8000/8001).
cd Backend
uv sync
uv run python run_all.pycd Frontend
npm install
npm run devThe application will be available at http://localhost:3000.
- Scraping Phase: When you start an interview, the JobScraper uses multi-source agents to research the company and the specific role.
- Context Injection: This data is fed into the Solace Agent Mesh, which configures a specialized technical interviewer persona.
- Voice Loop: The frontend opens a WebSocket connection to the backend. Audio is captured from your mic, transcribed via ElevenLabs, processed by the AI persona, and synthesized back into speech.
- Analysis: After the session, the platform analyzes your performance based on the specific requirements of the company you "interviewed" for.
To ensure uninterrupted service during high traffic or hackathon usage, Intersped implements a comma-separated key rotation system.
- Automatic Failover: The backend automatically cycles through multiple API keys for ElevenLabs, Groq, and Yellowcake.
- Rate-Limit Handling: If one key hits a rate limit or fails, the system seamlessly moves to the next available key without interrupting the user's interview.
The project is optimized for deployment on DigitalOcean App Platform using the provided app.yaml.
- Push the repository to GitHub.
- Create a new App on DigitalOcean.
- Link the repository and the App Platform will automatically detect the components via
app.yaml. - Define your environment variables in the DigitalOcean Control Panel (use comma-separated strings for keys you want to rotate).
This project was built for uOttahack 2026.