An intelligent full-stack interview application powered by Google's Gemini 2.0 Flash that autonomously conducts technical assessments with AI-driven question generation, real-time answer evaluation, and comprehensive candidate analytics.
π Live Demo | π GitHub Repository
I developed this GenAI-powered platform to completely automate technical interviews using Google's latest Gemini 2.0 Flash model. The system intelligently generates contextual questions, evaluates candidate responses in real-time, and provides detailed performance analytics - all powered by generative AI.
- Smart Resume Processing: Upload PDF/DOCX resumes with automatic data extraction
- Interactive Onboarding: Conversational AI interface fills in missing information
- AI-Generated Questions: 6 dynamically created questions that adapt to context (Easy β Medium β Hard)
- Time Management: Built-in timers with auto-submission (20s/60s/120s based on difficulty)
- AI-Powered Evaluation: Real-time scoring with personalized, AI-generated feedback
- Session Recovery: Automatic save allows candidates to continue interrupted interviews
- Centralized Dashboard: Searchable, sortable candidate database
- Deep Insights: Full interview transcripts with AI-generated analysis
- Visual Metrics: Color-coded performance badges and percentage scoring
- AI Summary Reports: Comprehensive candidate assessments generated by Gemini
I implemented Google's Gemini 2.0 Flash model as the core AI engine:
Dynamic Question Generation
- Context-aware prompt engineering for difficulty-specific questions
- Deduplication logic to avoid repetitive questions
- Temperature-controlled generation (0.7) for balanced creativity
- Max 15-word constraint for concise, professional questions
Intelligent Answer Evaluation
- Multi-factor AI analysis: content depth, technical accuracy, code examples
- Structured prompt format for consistent scoring
- AI-generated personalized feedback for each response
- Difficulty-adjusted scoring thresholds
Smart Summary Generation
- Performance analysis across all difficulty levels
- Strength/weakness identification using AI
- Hiring recommendation generation
- Professional report formatting
I designed a robust system that never fails:
Tier 1: Gemini AI (Primary)
- Real-time question generation via Gemini API
- Context-aware evaluation with structured prompts
- Retry logic with exponential backoff for rate limits
Tier 2: Intelligent Fallback Algorithm
// Algorithmic evaluation when API unavailable
- Multi-dimensional answer analysis
- Technical term detection (50+ terms)
- Code example recognition
- Complexity scoring with weighted factorsTier 3: Curated Question Bank
- Hand-crafted questions for each difficulty level
- React, Node.js, JavaScript, TypeScript coverage
- Ensures interview quality even offline
Redux Toolkit with persistence for:
- Type-safe AI response handling
- Automatic localStorage synchronization
- Optimistic UI updates during AI calls
- Loading state management for async operations
GenAI & APIs
- Google Gemini 2.0 Flash API (generative AI)
- Prompt engineering for structured outputs
- Rate limit handling with retry logic
Frontend Framework
- React 18 with TypeScript
- Vite for development
- Tailwind CSS + shadcn/ui
State Management
- Redux Toolkit for predictable state
- Redux Persist for session continuity
Document Processing
- pdfjs-dist for PDF parsing
- mammoth for DOCX handling
# Clone and navigate
git clone https://github.com/thanseerjelani/Crisp-Interview-Assistant-
cd Crisp-Interview-Assistant-
# Install dependencies
npm install
# Add your Gemini API key (get it from Google AI Studio)
echo "VITE_GEMINI_API_KEY=your-key-here" > .env
# Launch development server
npm run devVisit http://localhost:5173 to see it in action.
Get Gemini API Key: Visit Google AI Studio to get your free API key.
I chose Google's Gemini 2.0 Flash because:
- Speed: Fastest response times for real-time evaluation
- Cost-effective: Free tier with generous limits
- Quality: Excellent at structured output generation
- Reliability: Built-in retry handling for rate limits
- Latest tech: Cutting-edge generative AI capabilities
My prompts are designed for consistency:
Question Generation Prompt:
"Generate ONE short ${difficulty} question for Full Stack Developer.
Requirements:
- Maximum 15 words
- Clear and specific
- One question only
- No explanations"Evaluation Prompt:
"Evaluate this answer.
Format:
SCORE: [0-X]
FEEDBACK: [2 short sentences]"This structured approach ensures parseable, consistent AI responses.
File Upload β Format Detection (PDF/DOCX)
β
Text Extraction
β
Pattern Recognition (Email, Phone, Name)
β
Structured DataSTART β UPLOAD β AI_COLLECTION β AI_INTERVIEW β AI_SUMMARY
β β β β β
Idle Parsing AI Chat AI Questions AI Report
src/
βββ components/
β βββ ui/ # Reusable UI components
β βββ interviewee/ # Candidate-facing features
β βββ interviewer/ # Dashboard components
βββ store/
β βββ types.ts # TypeScript definitions
β βββ slices/ # Redux state slices
β βββ index.ts # Store configuration
βββ services/
β βββ gemini.service.ts # Gemini AI integration
β βββ resumeParser.service.ts # Document parsing
βββ utils/
β βββ validators.ts # Input validation
β βββ helpers.ts # Utility functions
βββ pages/ # Route components
Tested with real Gemini AI integration:
- β AI question generation across all difficulties
- β AI answer evaluation with various response types
- β AI summary generation with different scores
- β Rate limit handling and retry logic
- β Fallback activation when API unavailable
- β Resume parsing (PDF/DOCX)
- β Complete interview flow with AI
- β State persistence across refreshes
- β Mobile responsiveness
Netlify (Current):
npm run build
netlify deploy --prodAdd environment variable VITE_GEMINI_API_KEY in Netlify dashboard.
Vercel:
vercel --prodAdd environment variable in Vercel project settings.
AI-powered enhancements I'm considering:
- Multi-language interview support using Gemini
- Voice-based interviews with speech-to-text
- AI-powered candidate ranking and comparison
- Custom interview templates with AI adaptation
- Export functionality (CSV/PDF reports)
- Video recording with AI transcript analysis
// Retry logic with exponential backoff
for (let attempt = 0; attempt < retries; attempt++) {
if (attempt > 0) {
await delay(2000 * attempt); // 2s, 4s delays
}
// API call with structured prompt
}When AI is unavailable, my algorithm analyzes:
finalScore = (
baseScore(wordCount, structure) Γ 0.4 +
technicalTerms(50+ vocabulary) Γ 0.3 +
codeExamples(pattern detection) Γ 0.3
) Γ difficultyMultiplier- Lazy loading for faster initial render
- Debounced API calls to prevent rate limits
- Strategic delay between AI requests (1-2s)
- Route-based code splitting
- Memoized components for expensive renders
Built with GenAI best practices:
- Structured prompt engineering for consistent outputs
- Graceful degradation when AI unavailable
- Rate limit handling with retry logic
- Type-safe AI response parsing
- Comprehensive error boundaries
- Prompt Engineering: Structured prompts for parseable outputs
- Temperature Control: 0.7 for balanced creativity/consistency
- Output Constraints: Token limits and format specifications
- Context Management: Previous questions tracking
- Retry Strategies: Exponential backoff for rate limits
- Fallback Systems: Non-AI algorithms as backup
MIT License - feel free to use and modify
Developed by Thanseer Jelani
GenAI Project showcasing: Gemini 2.0 Flash integration β’ Prompt engineering β’ AI evaluation systems β’ Fallback architecture β’ Full-stack development