Jobber/README.md
2025-12-11 23:56:07 +00:00

128 lines
3.0 KiB
Markdown

# Job Ops 🚀
Automated job discovery, scoring, and resume generation pipeline.
## Features
- **Job Crawler** - Discovers jobs from Gradcracker and other sources
- **AI Scoring** - Ranks jobs by suitability using OpenRouter API
- **Resume Generator** - Creates tailored PDFs via RXResume automation
- **Dashboard UI** - React-based interface for reviewing and applying
## Quick Start with Docker
### 1. Configure Environment
```bash
# Copy the example env file
cp .env.example .env
# Edit with your credentials
nano .env
```
Required environment variables:
- `OPENROUTER_API_KEY` - Get from [openrouter.ai/keys](https://openrouter.ai/keys)
- `RXRESUME_EMAIL` - Your [rxresu.me](https://rxresu.me) account email
- `RXRESUME_PASSWORD` - Your RXResume password
### 2. Add Your Base Resume
Place your resume JSON at `resume-generator/base.json`.
You can export this from RXResume.
### 3. Run
```bash
# Build and start
docker compose up -d
# View logs
docker compose logs -f
# Stop
docker compose down
```
### 4. Access
- **Dashboard**: http://localhost:3001
- **API**: http://localhost:3001/api
- **Health**: http://localhost:3001/health
## Data Persistence
All data is stored in the `./data` directory:
- `data/jobs.db` - SQLite database
- `data/pdfs/` - Generated resume PDFs
## Development
### Without Docker
```bash
# Install dependencies
cd orchestrator && npm install
cd ../job-extractor && npm install
# Set up Python environment for resume generator
cd ../resume-generator
python3 -m venv .venv
source .venv/bin/activate
pip install playwright
playwright install chromium
# Run orchestrator (from orchestrator folder)
cd ../orchestrator
cp .env.example .env # Configure your env
npm run db:migrate
npm run dev
```
### Build Docker Image
```bash
docker build -t job-ops:latest .
```
### Push to Docker Hub
```bash
docker tag job-ops:latest yourusername/job-ops:latest
docker push yourusername/job-ops:latest
```
## API Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/jobs` | List all jobs |
| GET | `/api/jobs/:id` | Get job details |
| PATCH | `/api/jobs/:id` | Update job |
| POST | `/api/jobs/:id/process` | Generate resume for job |
| POST | `/api/jobs/:id/apply` | Mark as applied |
| POST | `/api/jobs/:id/reject` | Skip job |
| POST | `/api/jobs/process-discovered` | Process all discovered jobs |
| GET | `/api/pipeline/status` | Pipeline status |
| POST | `/api/pipeline/run` | Trigger pipeline |
| GET | `/api/pipeline/progress` | SSE progress stream |
| DELETE | `/api/database` | Clear all data |
## Architecture
```
job-ops/
├── orchestrator/ # Node.js backend + React frontend
│ ├── src/server/ # Express API, services, DB
│ └── src/client/ # React dashboard
├── job-extractor/ # Crawlee-based job crawler
├── resume-generator/ # Python Playwright automation
├── data/ # SQLite DB + generated PDFs
├── Dockerfile
└── docker-compose.yml
```
## License
MIT