An intelligent, AI-powered interview platform that provides realistic interview experiences using advanced AI models and real-time conversational interfaces.
- AI-Powered Interviews: Fully automated interviews powered by multiple AI providers
- Real-time Conversations: Live chat-like interface between AI and candidates
- Adaptive Questioning: AI adjusts questions based on candidate responses
- Persistent Interview State: Pause and resume interviews seamlessly
- Professional Audio Responses: AI-generated speech using ElevenLabs TTS
- Multi-language Support: English and Indonesian language support
- Customizable Interview Setup:
- Candidate name and profile
- Job role selection (e.g., backend-developer)
- Difficulty levels (beginner, intermediate, expert)
- Number of questions configuration
- Company context for personalized interviews
- Interviewer tone adjustment (formal, casual, etc.)
-
Multiple AI Providers Support:
- Z AI (GLM-4.6) - Primary provider
- OpenAI (GPT models)
- Anthropic (Claude models)
- Mistral AI
- Groq
- XAI (Grok)
- Google Gemini
- DeepSeek
- Ollama (local models)
- OpenRouter
- And many more
-
Intelligent Conversation Flow:
- Contextual understanding throughout interviews
- Dynamic decision making for next actions
- Follow-up question generation
- Clarification requests
- Natural, human-like conversations
- Real-time Updates: Live message updates without page refresh
- Audio Playback: Automatic speech synthesis for AI responses
- Responsive Design: Works seamlessly on desktop and mobile
- Professional Interface: Clean, intuitive chat-like interface
- Loading States: Visual feedback during AI processing
- Backend: Laravel 11.x with PHP 8.0+
- Frontend: Livewire + Volt + Tailwind CSS
- Build Tool: Vite
- Database: SQLite/MySQL/PostgreSQL
- AI Framework: Prism (multi-provider AI management)
- Testing: Pest
- Architecture: Domain-Driven Design (DDD)
βββ Domain Layer (AI/Interviewer/Domain/)
β βββ Primitives (Value Objects)
β βββ Contracts (Interfaces)
β βββ Entities
βββ Application Layer (AI/Interviewer/Application/)
β βββ Data (DTOs)
β βββ Use Cases
βββ Infrastructure Layer (AI/Interviewer/Infrastructure/)
βββ Laravel Integration
βββ Services
βββ Schemas
- Users: Authentication and user management
- Applicants: Interview candidate data with UUID primary keys
- ApplicantMessages: Conversation history with metadata
- PHP 8.0 or higher
- Composer
- Node.js and NPM
- SQLite/MySQL/PostgreSQL
-
Clone the repository
git clone <repository-url> cd ai-interviewer
-
Install dependencies
composer install npm install
-
Environment setup
cp .env.example .env php artisan key:generate
-
Configure environment variables
# Database DB_CONNECTION=sqlite DB_DATABASE=database/database.sqlite # File Storage FILESYSTEM_DISK=public # AI Providers (at least one required) Z_API_KEY=your_z_api_key OPENAI_API_KEY=your_openai_key ANTHROPIC_API_KEY=your_anthropic_key ELEVENLABS_API_KEY=your_elevenlabs_key # Optional: Add other provider keys MISTRAL_API_KEY=your_mistral_key GROQ_API_KEY=your_groq_key GEMINI_API_KEY=your_gemini_key
-
Database setup
php artisan migrate
-
Build assets
npm run build
-
Link storage
php artisan storage:link
-
Start the development server
php artisan serve
The system supports multiple AI providers through the Prism framework. Configure your preferred providers in config/prism.php:
'providers' => [
'z' => [
'api_key' => env('Z_API_KEY'),
'base_url' => 'https://api.z.ai/api',
],
'openai' => [
'api_key' => env('OPENAI_API_KEY'),
],
// Add other providers as needed
],Set your default AI provider in the InterviewerService:
// src/Interviewer/Infrastructure/Services/InterviewerService.php
private string $provider = 'z'; // Change to your preferred provider
private string $model = 'glm-4.6'; // Change to your preferred modelFor audio responses, configure ElevenLabs in your .env:
ELEVENLABS_API_KEY=your_elevenlabs_key- Register/Login to the application
- Navigate to the Interview Dashboard
- Click "Start New Interview"
- Fill in the interview configuration:
- Candidate name
- Job role
- Difficulty level
- Number of questions
- Company context
- Interviewer tone
- Click "Generate Interview Link"
- Welcome Phase: AI introduces itself and sets expectations
- Question Phase: AI asks structured interview questions
- Response Phase: Candidate provides responses
- Analysis Phase: AI analyzes responses and determines next action:
- Move to next question
- Ask follow-up questions
- Request clarification
- Conclude interview
- Real-time Messages: Instant display of AI responses
- Audio Playback: AI responses are automatically spoken
- Progress Tracking: Current question and completion status
- Persistent State: Interview can be interrupted and resumed
Run the test suite:
# Run all tests
php artisan test
# Run specific test file
php artisan test tests/Feature/AuthenticationTest.php
# Run with coverage
php artisan test --coverageAll interviews and conversations are stored in the database:
# View all applicants
php artisan tinker
>>> App\Models\Applicant::all();
# View interview messages
>>> App\Models\Applicant::find('uuid')->messages;Structured responses include metadata for debugging:
{
"message": "AI response text",
"action": "ask_question|ask_followup|complete_interview",
"status": "waiting_for_answer|question_asked|completed",
"is_question": true,
"move_to_next_question": true,
"meta": {
"provider": "z",
"model": "glm-4.6"
}
}-
Environment Configuration:
APP_ENV=production APP_DEBUG=false
-
Optimize Application:
php artisan config:cache php artisan route:cache php artisan view:cache php artisan optimize
-
File Permissions:
chmod -R 755 storage chmod -R 755 bootstrap/cache
-
Queue Configuration (optional):
php artisan queue:work
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Prism Framework: For providing multi-AI provider support
- Livewire: For enabling reactive UI components
- ElevenLabs: For high-quality text-to-speech synthesis
- Laravel Community: For the excellent framework and ecosystem
For support and questions:
- Create an issue in the GitHub repository
- Check the documentation
- Review the existing issues for common solutions
Built with β€οΈ using Laravel and modern AI technologies.
