Introduction: CoachMic is a voice-first interview coaching platform that transforms jobseekers from anxious candidates into confident professionals, through AI-driven practice.
Key Features:
- Voice interviews with ElevenLabs Conversational AI
- Text interview mode with Gemini 2.5 Flash
- Smart resume analysis with streaming feedback
- AI-powered resume enhancement
- Company intelligence with Google Search grounding (requires Vertex AI)
- AI career coach (pre/post interview)
- Job discovery with fit analysis
- Smart cover letter generation
- Performance analytics with STAR scoring
- Session history and progress tracking
- Resume version management
Target Users:
- First-generation college students who don't have parents with professional networks to coach them
- Career changers entering unfamiliar industries where they don't know the lingo
- International students practicing English fluency under pressure
- Introverts who need extra reps to feel comfortable speaking about themselves
- Anyone who deserves a fair shot but freezes up when it matters most
| Frontend | Backend |
|---|---|
| React 18 | Python 3.11 |
| TypeScript | FastAPI |
| Tailwind CSS | |
| Vite |
- Google AI Studio / Gemini API - LLM backbone (free tier available)
- Firebase Auth - User authentication
- Cloud Firestore - Database
- Cloud Storage - Resume storage (optional)
- Vertex AI - Advanced features (requires billing)
- ElevenLabs - Voice interviews (Conversational AI, ASR, TTS)
- Node.js v18.0.0 or higher
- Python 3.11 or higher
- Firebase Project (create one)
- Google AI Studio API Key (get one)
- ElevenLabs Account (optional, for voice interviews) (sign up)
git clone https://github.com/patrickndille/coachmic.git
cd coachmic- Go to Firebase Console
- Click "Create a project" (or select an existing one)
- Enter a project name (e.g.,
coachmic-project) - Follow the prompts to complete project creation
- In your Firebase project, click the gear icon → Project Settings
- Scroll down to "Your apps" section
- Click the Web icon (
</>) to add a web app - Enter an app nickname (e.g.,
CoachMic Web) - Click "Register app"
- Copy the
firebaseConfigvalues - you'll need these for the frontend
- In Firebase Console, go to Authentication → Get started
- Go to Sign-in method tab
- Enable Google provider:
- Toggle Enable
- Add your support email
- Click Save
- (Optional) Enable other providers: Microsoft, Apple, GitHub
- Go to Settings tab → Authorized domains
- Click Add domain and add:
localhost
- In Firebase Console, go to Firestore Database → Create database
- Choose Start in test mode (for development)
- Select a location closest to you
- Click Enable
Your Firebase project is linked to Google Cloud. Enable these APIs:
-
Cloud Firestore API:
https://console.cloud.google.com/apis/api/firestore.googleapis.com/overview?project=YOUR_PROJECT_IDClick Enable and wait a few minutes for propagation.
-
Identity Toolkit API (usually enabled automatically with Firebase Auth)
- In Firebase Console, go to Project Settings → Service accounts
- Click "Generate new private key"
- Download the JSON file
- Save it to the
backend/folder (e.g.,backend/firebase-admin-key.json)
⚠️ Important: Never commit this file to git! It's already in.gitignore.
- Go to Google AI Studio
- Click "Create API Key"
- Select your Firebase/GCP project
- Copy the API key
Note: The free tier of Google AI Studio has generous limits for
gemini-2.5-flash. Some advanced features (Company Intel, Reader Mode TTS) require Vertex AI with billing enabled.
The app requires composite indexes for Firestore queries to work properly.
cd frontend
# Install Firebase CLI if not already installed
npm install -g firebase-tools
# Login to Firebase (use the account that owns the project)
firebase logout
firebase login
# Select your project
firebase use YOUR_PROJECT_ID
# Deploy indexes
firebase deploy --only firestore:indexesYou should see:
✔ firestore: deployed indexes in firestore.indexes.json successfully
cd backend
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activatepip install --upgrade pip
pip install -r requirements.txtcp .env.example .envEdit backend/.env with your values:
# Application
APP_NAME=CoachMic
DEBUG=true
ENVIRONMENT=development
# Server
HOST=0.0.0.0
PORT=8000
# CORS
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
# Google Cloud Platform
GCP_PROJECT_ID=your-firebase-project-id
GCP_LOCATION=us-central1
# Google AI Studio API Key (free tier)
# Get yours at: https://aistudio.google.com/app/apikey
GCP_API_KEY=your-google-ai-studio-api-key
# Gemini Model Configuration
# Using gemini-2.5-flash for all tasks (higher free tier limits)
GEMINI_MODEL=gemini-2.5-flash
GEMINI_MODEL_RESUME_PARSE=gemini-2.5-flash
GEMINI_MODEL_ATS_SCORE=gemini-2.5-flash
GEMINI_MODEL_RESUME_IMPROVE=gemini-2.5-flash
GEMINI_MODEL_COVER_LETTER=gemini-2.5-flash
GEMINI_MODEL_TEXT_INTERVIEW=gemini-2.5-flash
GEMINI_MODEL_FEEDBACK=gemini-2.5-flash
# Firebase Admin SDK
FIREBASE_PROJECT_ID=your-firebase-project-id
FIREBASE_ADMIN_KEY_PATH=firebase-admin-key.json
# ElevenLabs (optional - for voice interviews)
ELEVENLABS_API_KEY=your-elevenlabs-api-key
ELEVENLABS_AGENT_ID=your-agent-id
# JSearch API (optional - for job search)
JSEARCH_API_KEY=your-jsearch-api-key
# Cloud Storage (optional - for resume file storage)
# GCS_BUCKET_NAME=your-bucket-name
# Rate Limiting
RATE_LIMIT_REQUESTS=100
RATE_LIMIT_WINDOW=60
# File Upload
MAX_UPLOAD_SIZE=5242880uvicorn app.main:app --reload --port 8000You should see:
[Gemini] Using Google AI Studio with API key
[Firebase] Initialized successfully for project: your-project-id
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000
cd frontend
npm installcp .env.example .env.localEdit frontend/.env.local with your Firebase config:
# Backend API URL
VITE_API_URL=http://localhost:8000
# ElevenLabs (optional - for voice interviews)
VITE_ELEVENLABS_AGENT_ID=your-agent-id
# Firebase Configuration
# Get these values from Firebase Console → Project Settings → Your apps
VITE_FIREBASE_API_KEY=your-firebase-api-key
VITE_FIREBASE_AUTH_DOMAIN=your-project-id.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_STORAGE_BUCKET=your-project-id.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your-messaging-sender-id
VITE_FIREBASE_APP_ID=your-firebase-app-idnpm run devYou should see:
VITE v5.x.x ready in xxx ms
➜ Local: http://localhost:5173/
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:8000 |
| API Docs | http://localhost:8000/docs |
Some features require additional configuration:
| Feature | Google AI Studio (Free) | Vertex AI (Billing) | Other Requirements |
|---|---|---|---|
| Resume Analysis | ✅ | ✅ | - |
| ATS Scoring | ✅ | ✅ | - |
| Resume Improvement | ✅ | ✅ | - |
| Text Interview | ✅ | ✅ | - |
| Feedback Generation | ✅ | ✅ | - |
| Cover Letter | ✅ | ✅ | - |
| Job Search | ✅ | ✅ | JSearch API Key |
| Voice Interview | ✅ | ✅ | ElevenLabs API Key |
| Reader Mode (TTS) | ❌ | ✅ | Vertex AI |
| Company Intel (Search) | ❌ | ✅ | Vertex AI |
- Ensure
FIREBASE_ADMIN_KEY_PATHpoints to a valid JSON file - Check that the JSON file is in the
backend/directory
- Enable the Firestore API:
https://console.cloud.google.com/apis/api/firestore.googleapis.com/overview?project=YOUR_PROJECT_ID - Wait 2-3 minutes for propagation
- Deploy Firestore indexes:
firebase deploy --only firestore:indexes - Make sure you're logged into the correct Firebase account
- Enable Authentication in Firebase Console
- Enable at least one sign-in provider (e.g., Google)
- Add
localhostto authorized domains
- You've hit the free tier limits
- Use
gemini-2.5-flashinstead ofgemini-2.5-pro(higher limits) - Wait for quota reset or enable billing
- Check that the Firebase Admin SDK key has proper permissions
- Ensure Firestore is in test mode or has appropriate security rules
cd frontend
npm run build # Production build
npm run test # Run tests
npm run test:coverage # Test with coverage
npm run lint # Lint codecd backend
pytest tests/ -v # Run all tests
pytest --cov=app # Test with coverage
black . && isort . # Format code
flake8 # Lint code# Build and run backend
docker build -t coachmic-api ./backend
docker run -p 8080:8080 coachmic-api
# Or use docker-compose
docker-compose upContributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style (ESLint for frontend, Black for backend)
- Write tests for new features
- Update documentation as needed
- Keep commits atomic and well-described
Found a bug or have a suggestion? Open an issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
This project is licensed under the MIT License - see the LICENSE file for details.