Skip to content

Th3Sp3ct3R/resumereach

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ResumeReach - AI-Powered Autonomous Job Application Platform

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.

πŸš€ Features

Core Features

  • 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

Technical Highlights

  • 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

πŸ“‹ Tech Stack

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)

πŸ—οΈ Architecture

Database Schema

users
  β”œβ”€β”€ profiles
  β”œβ”€β”€ linked_accounts
  β”œβ”€β”€ job_preferences
  β”œβ”€β”€ resumes
  β”œβ”€β”€ applications
  β”‚   β”œβ”€β”€ jobs
  β”‚   └── resumes
  β”œβ”€β”€ credits
  β”œβ”€β”€ subscriptions
  β”œβ”€β”€ transactions
  └── audit_log

job_matches
job_queue

Key Components

  1. Authentication - NextAuth.js with Google, GitHub, and email/password
  2. Resume Service - Generate customized resumes using Claude
  3. Job Matching Service - Score jobs and find matches
  4. Application Service - Handle application lifecycle
  5. Billing Service - Stripe integration and credit management
  6. Background Jobs - BullMQ workers for applications and resume generation

πŸ”§ Installation

Prerequisites

  • Node.js 18+
  • PostgreSQL 14+
  • Redis 6+
  • API Keys:
    • Claude (Anthropic)
    • Stripe
    • Google OAuth
    • GitHub OAuth (optional)

Setup Steps

  1. Clone the repository
cd resumereach-rebuild
  1. Install dependencies
npm install
  1. Set up environment variables
cp .env.example .env.local

Fill 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
  1. Create database and run migrations
npm run db:push
  1. Start the development server
npm run dev

Visit http://localhost:3000 in your browser.

πŸ“– API Documentation

Authentication Endpoints

POST /api/auth/signup

Create a new user account.

{
  "email": "[email protected]",
  "password": "secure_password",
  "name": "John Doe"
}

POST /api/auth/signin (NextAuth)

Sign in with credentials or OAuth.

Profile Endpoints

GET /api/profile

Get user profile.

PUT /api/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": "..."
}

Job Preferences Endpoints

GET /api/preferences

Get job preferences.

POST /api/preferences

Update job preferences.

{
  "targetRoles": ["Backend Developer"],
  "locations": ["Remote"],
  "salaryMin": 120000,
  "salaryMax": 180000,
  "keywords": ["AI", "Python"],
  "autoApplyEnabled": true,
  "applicationsPerDay": 5,
  "minJobFitScore": 75
}

Resume Endpoints

GET /api/resumes

Get all user resumes.

POST /api/resumes

Generate a customized resume.

{
  "jobDescription": "We're looking for a senior React developer...",
  "jobTitle": "Senior React Developer",
  "companyName": "TechCorp",
  "jobId": "uuid-of-job"
}

Application Endpoints

GET /api/applications

Get all applications.

POST /api/applications

Create a new application.

{
  "jobId": "uuid",
  "resumeId": "uuid",
  "appliedVia": "linkedin"
}

Billing Endpoints

POST /api/billing/credits

Create a checkout session for credits.

{
  "creditsPackageId": "credits_100"
}

🎯 Key Flows

Job Application Flow

  1. User sets preferences and uploads resume
  2. System fetches jobs from job platforms
  3. Claude scores each job against user profile (0-100)
  4. High-scoring jobs are queued for application
  5. BullMQ worker generates customized resume
  6. Worker submits application via platform API or Puppeteer
  7. Application status is tracked and displayed

Resume Generation Flow

  1. User provides original resume
  2. Job description is analyzed for key requirements
  3. Claude generates customized version highlighting relevant skills
  4. Multiple versions are stored for comparison
  5. User can preview before submitting application

Monetization Flow

  1. User selects credits package or subscription
  2. Stripe checkout session is created
  3. Payment is processed
  4. Credits/subscription is activated
  5. Each application costs 1 credit
  6. User dashboard shows credit balance and usage

πŸš€ Deployment

Deploy to Vercel

vercel deploy

Deploy to Railway

See DEPLOYMENT.md for detailed instructions on setting up:

  • Database (PostgreSQL)
  • Redis cache
  • Environment variables
  • Background job workers

πŸ“Š Database Migrations

Create a migration

npm run db:generate -- --name "migration_name"

Apply migrations

npm run db:push

Custom migrations

npm run db:migrate

πŸ§ͺ Testing

Run unit tests

npm run test

Run end-to-end tests

npm run test:e2e

Generate coverage report

npm run test:coverage

πŸ“¦ Project Structure

resumereach/
β”œβ”€β”€ 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

πŸ” Security

  • 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)

πŸ“ Environment Variables

# 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

πŸ’‘ Key Decisions

  1. NextAuth.js - Built-in support for OAuth and session management
  2. Drizzle ORM - Type-safe queries with excellent IDE support
  3. BullMQ - Production-grade job queue with Redis
  4. Claude API - State-of-the-art AI for resume generation
  5. Stripe - Industry-standard payment processing
  6. Tailwind CSS - Rapid UI development with consistency

🀝 Contributing

  1. Create a feature branch
  2. Make your changes
  3. Run tests: npm run test
  4. Submit a pull request

πŸ“„ License

MIT License - see LICENSE file for details

πŸ™‹ Support

For issues, questions, or suggestions:

  • Open an issue on GitHub
  • Check existing documentation
  • Review API documentation

🎯 Roadmap

  • 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

About

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors