Automate your job search with AI-tailored resumes and intelligent job applications. ResumeReach leverages Claude AI to customize resumes for each job and autonomously submit applications on your behalf.
- AI-Powered Resume Tailoring - Claude generates customized resumes for each job
- Autonomous Job Applications - Automated background job queue processes applications
- Multi-Platform Support - Integrates with LinkedIn, Indeed, and ZipRecruiter
- Job Matching - AI scores jobs against your profile (0-100 fit score)
- Beautiful Dashboard - Real-time application tracking and statistics
- Subscription & Credits Model - Flexible payment plans and credit system
- Full-Stack TypeScript - Type-safe from database to frontend
- NextAuth.js - Secure OAuth and credentials-based authentication
- PostgreSQL + Drizzle ORM - Type-safe database queries
- BullMQ - Robust background job processing
- Stripe Integration - Seamless payment processing
- Responsive Design - Mobile-first Tailwind CSS UI
| Layer | Technology |
|---|---|
| Frontend | React 19, Next.js 15, TypeScript, Tailwind CSS, Shadcn/ui |
| Backend | Node.js, Next.js API Routes, Hono |
| Database | PostgreSQL, Drizzle ORM |
| Queue | BullMQ, Redis |
| AI | Claude API (Anthropic) |
| Auth | NextAuth.js (OAuth + Credentials) |
| Payments | Stripe |
| Deployment | Vercel (Frontend), Railway/AWS RDS (Database/Redis) |
users
βββ profiles
βββ linked_accounts
βββ job_preferences
βββ resumes
βββ applications
β βββ jobs
β βββ resumes
βββ credits
βββ subscriptions
βββ transactions
βββ audit_log
job_matches
job_queue
- Authentication - NextAuth.js with Google, GitHub, and email/password
- Resume Service - Generate customized resumes using Claude
- Job Matching Service - Score jobs and find matches
- Application Service - Handle application lifecycle
- Billing Service - Stripe integration and credit management
- Background Jobs - BullMQ workers for applications and resume generation
- Node.js 18+
- PostgreSQL 14+
- Redis 6+
- API Keys:
- Claude (Anthropic)
- Stripe
- Google OAuth
- GitHub OAuth (optional)
- Clone the repository
cd resumereach-rebuild- Install dependencies
npm install- Set up environment variables
cp .env.example .env.localFill in your API keys and database URL in .env.local:
DATABASE_URL=postgresql://user:password@localhost:5432/resumereach
NEXTAUTH_SECRET=$(openssl rand -base64 32)
ANTHROPIC_API_KEY=sk-ant-...
STRIPE_SECRET_KEY=sk_test_...
# ... other variables- Create database and run migrations
npm run db:push- Start the development server
npm run devVisit http://localhost:3000 in your browser.
Create a new user account.
{
"email": "[email protected]",
"password": "secure_password",
"name": "John Doe"
}Sign in with credentials or OAuth.
Get user profile.
Update user profile.
{
"skills": ["React", "Node.js", "Python"],
"experience": { "years": 5 },
"targetRoles": ["Senior Developer", "Tech Lead"],
"locations": ["Remote", "San Francisco"],
"bio": "Full-stack developer with 5 years of experience",
"originalResume": "..."
}Get job preferences.
Update job preferences.
{
"targetRoles": ["Backend Developer"],
"locations": ["Remote"],
"salaryMin": 120000,
"salaryMax": 180000,
"keywords": ["AI", "Python"],
"autoApplyEnabled": true,
"applicationsPerDay": 5,
"minJobFitScore": 75
}Get all user resumes.
Generate a customized resume.
{
"jobDescription": "We're looking for a senior React developer...",
"jobTitle": "Senior React Developer",
"companyName": "TechCorp",
"jobId": "uuid-of-job"
}Get all applications.
Create a new application.
{
"jobId": "uuid",
"resumeId": "uuid",
"appliedVia": "linkedin"
}Create a checkout session for credits.
{
"creditsPackageId": "credits_100"
}- User sets preferences and uploads resume
- System fetches jobs from job platforms
- Claude scores each job against user profile (0-100)
- High-scoring jobs are queued for application
- BullMQ worker generates customized resume
- Worker submits application via platform API or Puppeteer
- Application status is tracked and displayed
- User provides original resume
- Job description is analyzed for key requirements
- Claude generates customized version highlighting relevant skills
- Multiple versions are stored for comparison
- User can preview before submitting application
- User selects credits package or subscription
- Stripe checkout session is created
- Payment is processed
- Credits/subscription is activated
- Each application costs 1 credit
- User dashboard shows credit balance and usage
vercel deploySee DEPLOYMENT.md for detailed instructions on setting up:
- Database (PostgreSQL)
- Redis cache
- Environment variables
- Background job workers
npm run db:generate -- --name "migration_name"npm run db:pushnpm run db:migratenpm run testnpm run test:e2enpm run test:coverageresumereach/
βββ app/ # Next.js app directory
β βββ (auth)/ # Auth pages
β βββ dashboard/ # Dashboard pages
β βββ api/ # API routes
β βββ layout.tsx
β βββ globals.css
βββ components/ # React components
β βββ auth/
β βββ dashboard/
β βββ ui/
βββ lib/
β βββ auth.ts # NextAuth configuration
β βββ claude.ts # Claude API wrapper
β βββ db.ts # Database client
β βββ utils.ts
βββ services/
β βββ ResumeService.ts
β βββ JobMatchingService.ts
β βββ ApplicationService.ts
β βββ BillingService.ts
βββ db/
β βββ schema.ts # Drizzle schema
β βββ migrations/
βββ jobs/
β βββ worker.ts # BullMQ workers
βββ public/ # Static assets
βββ drizzle.config.ts
βββ next.config.mjs
βββ tailwind.config.ts
βββ tsconfig.json
- Password Hashing: bcryptjs with salt rounds
- JWT Sessions: NextAuth.js with secure cookies
- Database: SQL injection protection via Drizzle ORM
- API Routes: All protected routes require authentication
- Environment Secrets: Stored in
.env.local(never committed) - CORS: Configured for API security
- Rate Limiting: Recommended for production (add nginx/Cloudflare)
# Database
DATABASE_URL=postgresql://...
# NextAuth
NEXTAUTH_SECRET=...
NEXTAUTH_URL=http://localhost:3000
# OAuth Providers
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
# APIs
ANTHROPIC_API_KEY=...
STRIPE_SECRET_KEY=...
STRIPE_PUBLISHABLE_KEY=...
STRIPE_WEBHOOK_SECRET=...
# Job Platforms
LINKEDIN_CLIENT_ID=...
LINKEDIN_CLIENT_SECRET=...
INDEED_API_KEY=...
ZIPRECRUITER_API_KEY=...
# Redis
REDIS_URL=redis://localhost:6379
# App
NODE_ENV=development
NEXT_PUBLIC_APP_URL=http://localhost:3000- NextAuth.js - Built-in support for OAuth and session management
- Drizzle ORM - Type-safe queries with excellent IDE support
- BullMQ - Production-grade job queue with Redis
- Claude API - State-of-the-art AI for resume generation
- Stripe - Industry-standard payment processing
- Tailwind CSS - Rapid UI development with consistency
- Create a feature branch
- Make your changes
- Run tests:
npm run test - Submit a pull request
MIT License - see LICENSE file for details
For issues, questions, or suggestions:
- Open an issue on GitHub
- Check existing documentation
- Review API documentation
- Mobile app (React Native)
- More job platforms (CareerBuilder, Glassdoor)
- Advanced filtering and job recommendations
- Interview preparation with Claude
- Salary negotiation assistant
- Team/organization features
- Analytics dashboard enhancements
Made with β€οΈ for job seekers everywhere