Master Your Interviews with AI-Driven Confidence
Built with: React · TypeScript · Vite · Cloudflare Workers · Hono · OpenAI · ElevenLabs · Supabase
- Overview
- Features
- Demo
- Tech Stack
- Getting Started
- Architecture
- Usage
- Testing
- Deployment
- Contributing
- License
GrillMe AI is an AI-powered mock interview platform that helps students and early-career professionals practice job interviews. Unlike generic interview prep tools, GrillMe analyzes your specific resume and target job description to create personalized, voice-based interview simulations with actionable feedback.
Traditional interview prep falls short because generic questions don't test your specific experience, text-based practice misses the pressure of real-time conversation, and feedback is subjective and delayed.
GrillMe solves this by:
- Personalized Questions - AI analyzes your resume vs. job requirements to find gaps and probe specific claims
- Real Voice Interviews - Practice with natural voice AI that responds in real-time
- Detailed Feedback - Get timestamped highlights showing exactly what worked and what didn't
- Strategic Insights - Discover buzzwords, vague answers, and missed opportunities with specific improvement suggestions
- Upload resume (PDF, DOCX, DOC) with automatic parsing
- Paste job description and select interview type (Technical, Behavioral, or Mixed)
- AI generates an "Attack Plan" with strategic questions targeting your specific experience
- Natural conversation with ElevenLabs AI interviewer
- Real-time audio interaction with dynamic status indicators
- Live transcript display during the interview
- Pause and ask for strategic "lifeline" help mid-interview
- Overall Performance Score (1-10) - How well you interviewed
- Technical Depth Score (0-100) - Depth of technical knowledge demonstrated
- BS Detection Score (0-100) - Amount of buzzwords and vagueness detected
Color-coded moments in your interview:
- Green - Excellent answers (specific metrics, STAR method, concrete examples)
- Yellow - Warning signs (vague language, missing details, weak structure)
- Red - Blunders (buzzword stuffing, evasion, inconsistencies)
- Dashboard of all past interviews
- Audio playback with visual waveform
- Searchable transcript with highlighted feedback
- Track improvement over time
Coming soon - demo video showcasing the full interview flow
- React 18.2 with TypeScript - Modern UI framework
- Vite - Lightning-fast build tool and dev server
- Tailwind CSS - Utility-first styling
- Radix UI - Accessible component primitives
- ElevenLabs Conversational AI SDK - Voice interview integration
- Lucide React - Beautiful icon library
- Cloudflare Workers - Serverless edge runtime
- Hono - Ultra-fast web framework
- Supabase - PostgreSQL database + authentication
- OpenAI API - GPT-4 and GPT-5 for AI reasoning
- ElevenLabs API - Voice conversation management
zod- Runtime type validationmammoth- DOCX parsingunpdf- PDF text extractionreact-hook-form- Form managementdate-fns- Date utilitiessonner- Toast notifications
Before you begin, ensure you have:
- Node.js (v18 or higher)
- npm (v9 or higher)
- API keys for:
-
Clone the repository:
git clone https://github.com/peteseta/grill-me.git cd grill-me -
Install frontend dependencies:
npm install
-
Install backend dependencies:
cd workers npm install cd ..
Create a .env file in the root directory:
VITE_API_URL=http://localhost:8787
VITE_ELEVENLABS_API_KEY=your_elevenlabs_api_key_hereSet up your Cloudflare Worker secrets:
cd workers
# Supabase configuration
wrangler secret put SUPABASE_URL
wrangler secret put SUPABASE_ANON_KEY
wrangler secret put SUPABASE_SERVICE_ROLE_KEY
# AI service keys
wrangler secret put OPENAI_API_KEY
wrangler secret put ELEVENLABS_API_KEY
wrangler secret put ELEVENLABS_AGENT_ID
cd ..- Create a new project on Supabase
- Run the SQL migrations in
workers/migrations/to set up tables - Enable email authentication in Supabase dashboard
-
Start the backend server:
cd workers npm run devBackend runs on
http://localhost:8787 -
In a new terminal, start the frontend:
npm run dev
Frontend runs on
http://localhost:5173 -
Open your browser:
Navigate to
http://localhost:5173
Note: Vite's proxy configuration automatically forwards /api/* requests to the backend, avoiding CORS issues during development.
grill-me/
├── src/ # Frontend source
│ ├── components/ # React components
│ │ ├── landing-page.tsx
│ │ ├── upload-page.tsx
│ │ ├── interview-page.tsx
│ │ ├── history-page.tsx
│ │ └── ui/ # Reusable UI components
│ ├── lib/ # Utilities and API client
│ ├── App.tsx # Main app with routing
│ └── main.tsx # React entry point
├── workers/ # Backend (Cloudflare Workers)
│ ├── src/
│ │ ├── index.ts # Main API router
│ │ ├── routes/ # API endpoint handlers
│ │ │ ├── auth.ts
│ │ │ ├── sessions.ts
│ │ │ ├── analyze.ts
│ │ │ └── lifeline.ts
│ │ ├── services/ # Business logic
│ │ │ ├── resume-parser.ts
│ │ │ ├── attack-plan-generator.ts
│ │ │ ├── interview-analyzer.ts
│ │ │ └── elevenlabs.ts
│ │ └── types/ # TypeScript definitions
│ └── wrangler.toml # Cloudflare configuration
├── docs/ # Documentation
└── public/ # Static assets
graph TD
A[User Uploads Resume] --> B[AI Parses Resume]
B --> C[User Enters Job Details]
C --> D[AI Generates Attack Plan]
D --> E[Voice Interview Begins]
E --> F[Real-time Conversation]
F --> G[Interview Ends]
G --> H[Fetch Transcript from ElevenLabs]
H --> I[AI Analyzes Performance]
I --> J[Display Detailed Feedback]
The backend exposes a RESTful API with the following key endpoints:
| Endpoint | Method | Description |
|---|---|---|
/api/v1/auth/register |
POST | Create new user account |
/api/v1/auth/login |
POST | Authenticate user |
/api/v1/sessions |
POST | Create interview session |
/api/v1/sessions |
GET | List user's interviews |
/api/v1/sessions/:id/config |
GET | Get ElevenLabs config |
/api/v1/sessions/:id/lifeline |
POST | Get real-time help |
/api/v1/sessions/:id/analyze |
POST | Analyze interview |
/api/v1/sessions/:id/results |
GET | Retrieve results |
See docs/API.md for complete API documentation.
- Sign up or log in to your account
- Upload your resume (PDF, DOCX, or DOC format)
- Paste the job description for your target role
- Enter role details (title, company name)
- Select interview type:
- Technical - Focus on technical skills and problem-solving
- Behavioral - Focus on past experiences and soft skills
- Mixed - Combination of both
- Click "Start Interview" and allow microphone access
- Talk naturally with the AI interviewer
- End the interview when ready
- Review detailed feedback with timestamped highlights
- Be specific - Use concrete examples and metrics
- Use STAR method - Situation, Task, Action, Result
- Avoid buzzwords - Say "implemented caching layer" instead of "leveraged cutting-edge solutions"
- Speak clearly - The AI transcription works best with clear audio
- Use the lifeline - Pause and ask for help if you're stuck
npm run testcd workers
npm run test# Frontend
npm run type-check
# Backend
cd workers
npm run type-checkBuild the production bundle:
npm run buildDeploy the dist/ folder to your hosting provider (Vercel, Netlify, Cloudflare Pages, etc.).
Example for Vercel:
vercel --prodDeploy the Cloudflare Worker:
cd workers
npm run deployMake sure all secrets are configured in your Cloudflare dashboard or via wrangler secret put.
We welcome contributions! Please follow these steps:
- 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
- Write meaningful commit messages
- Follow existing code style (TypeScript, ESLint)
- Add tests for new features
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- OpenAI - For GPT models powering intelligent analysis
- ElevenLabs - For natural voice AI conversations
- Supabase - For database and authentication
- Cloudflare - For serverless edge computing
- Radix UI - For accessible component primitives
Built by the GrillMe team