The AI-powered career copilot that eliminates 80% of the manual work in every job application.
OneStopJob is a full-stack AI platform that automates the most time-consuming parts of job applications. Paste your resume and a job posting URL β and in under 60 seconds you get a complete application package powered by Claude AI.
Analyzes your resume against the job description using Claude AI and returns a detailed match score (0β100%) with breakdown across:
- Technical skills match
- Experience alignment
- Education match
- Soft skills
Includes specific strengths, gaps to address, and a 2-sentence assessment summary.
Claude rewrites your resume bullets specifically for the target role:
- Stronger action verbs
- Quantified impact where possible
- ATS keyword alignment
- Before/after diff view with reasons for each change
- Updated fit score after optimization
Generates a tailored, human-sounding 3-paragraph cover letter for the specific role and company:
- Fully editable in the browser
- Export to PDF via print dialog
- Export to .txt
Finds real email addresses at the target company using Hunter.io and generates personalized cold emails for each contact:
- Cold intro email (max 100 words)
- Follow-up email (max 75 words)
- Email confidence score indicator
When filling out job application forms, paste any question you encounter and get a personalized 50-100 word answer generated from your resume and GitHub profile:
- Specific examples from real projects
- Sounds human, not templated
- One-click copy to paste directly into forms
Connect your GitHub profile to enrich Q&A answers and outreach emails with real project context:
- Pulls top repositories
- Extracts languages, topics, descriptions
- Used automatically in all AI prompts
Paste any job posting URL and the app automatically extracts the job title, company name, and full job description. Works with LinkedIn, Indeed, Greenhouse, Lever, Workday, and more.
| Layer | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS |
| AI | Anthropic Claude Sonnet (claude-sonnet-4-5) |
| Database | Firebase Firestore |
| Auth | Firebase Auth |
| Server DB | Firebase Admin SDK |
| Email Discovery | Hunter.io API |
| GitHub Data | GitHub REST API (no key needed) |
| Deployment | Vercel |
onestopjob/
βββ app/
β βββ api/
β β βββ analyze/route.ts # Main pipeline: fit score + optimize + cover letter
β β βββ scrape/route.ts # Job URL scraper using Claude
β β βββ github/route.ts # GitHub profile fetcher
β β βββ outreach/route.ts # Hunter.io + cold email generator
β β βββ qa/route.ts # Application Q&A answerer
β βββ analyze/
β β βββ [contextId]/
β β βββ page.tsx # Results dashboard (5 tabs)
β βββ lib/
β β βββ firebase.ts # Firebase client init
β βββ page.tsx # Homepage β main input form
βββ .env.local # API keys (not committed)
βββ next.config.ts
βββ tsconfig.json
- Node.js 18+
- npm or yarn
- Anthropic API key
- Firebase project
- Hunter.io API key (free tier works)
git clone https://github.com/shr7q/OneStopJob.git
cd OneStopJob
npm installCreate a .env.local file in the root directory:
# Anthropic
ANTHROPIC_API_KEY=your_anthropic_api_key
# Firebase Client (public)
NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.firebasestorage.app
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
# Firebase Admin (server)
FIREBASE_CLIENT_EMAIL=firebase-adminsdk@your_project.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
# Hunter.io
HUNTER_API_KEY=your_hunter_api_keynpm run devOpen http://localhost:3000.
When a user clicks Analyze, the following happens in sequence:
1. POST /api/analyze
βββ analyzeFitScore() β Claude returns JSON with score + breakdown
βββ optimizeResume() β Claude rewrites bullets, returns diff + new score
βββ generateCoverLetter() β Claude writes tailored cover letter
βββ Firestore.save() β Saves all results, returns contextId
2. Router.push(/analyze/[contextId])
βββ Client fetches from Firestore using contextId
Each Claude call uses structured prompting with:
- Strict JSON output constraints
safeParseJSON()utility that handles malformed responses- Fallback values if parsing fails completely
- Token limits tuned per feature (300 for Q&A, 2048 for resume optimization)
Homepage β /api/scrape (job URL) β /api/github (optional)
β /api/analyze (main pipeline)
β Firestore (save)
β /analyze/[contextId] (results page)
β /api/outreach (on demand)
β /api/qa (on demand, per question)
Body: { resumeText, jobDescription, jobTitle, company, githubData }
Returns: { contextId }
Runs the full analysis pipeline and saves to Firestore.
Body: { url }
Returns: { jobTitle, company, jobDescription }
Fetches and parses a job posting URL using Claude.
Body: { githubUrl }
Returns: { username, summary, languages, topics, repoCount, repos }
Fetches public GitHub profile and repo data.
Body: { company, jobTitle, resumeText }
Returns: { domain, contacts[] } β each contact includes cold + followup emails.
Body: { question, resumeText, jobDescription, jobTitle, company, githubData }
Returns: { question, answer } β 50-100 word personalized answer.
- Create a project at Firebase Console
- Enable Firestore in Native mode
- Enable Authentication with Google provider
- Generate a Service Account key for Admin SDK
- Add all keys to
.env.local
Firestore collection structure:
jobContexts/
βββ {contextId}/
βββ jobTitle
βββ company
βββ jobDescription
βββ resumeText
βββ githubData
βββ fitScore
βββ optimizedResume
βββ coverLetter
βββ createdAt
βββ status
Deploy to Vercel in one command:
npx vercelAdd all environment variables in the Vercel dashboard under Settings β Environment Variables.
Developer: Amaan Mohammed
University: University of Maryland β College Park
Program: M.S. Applied Machine Learning
MIT License β feel free to fork and build on top of this.
- Application Tracker β Kanban board synced to Google Sheets
- Interview Prep β AI-generated behavioral + technical questions
- Chrome Extension β Apply from LinkedIn with one click
- Google Calendar Integration β Auto-schedule follow-up reminders
- Bulk Apply Mode β Apply to 10 jobs at once