diff --git a/README.md b/README.md index 1440e41..66b5cef 100644 --- a/README.md +++ b/README.md @@ -17,20 +17,17 @@ https://github.com/user-attachments/assets/06e5e782-47f5-42d0-8b28-b89102d7ea1b ## Quick Start ```bash -# 1. Setup environment -cp .env.example .env - -# 2. Run with Docker +# 1. Run with Docker docker compose up -d --build -# 3. Access Dashboard +# 2. Open the dashboard # http://localhost:3005 ``` -## Setup -Essential variables in `.env`: -- `OPENROUTER_API_KEY`: For job scoring and tailoring. -- `RXRESUME_EMAIL`/`PASSWORD`: To automate PDF exports. +The app will guide you through setup on first launch. The onboarding wizard helps you: +- Connect your OpenRouter API key (for AI scoring/tailoring) +- Add your RxResume credentials (for PDF export) +- Upload your base resume JSON (exported from RxResume) ## Structure - `/orchestrator`: React frontend + Node.js backend & pipeline. @@ -43,14 +40,8 @@ Orchestrator docs here: `documentation/orchestrator.md` ## Read-only mode (Basic Auth) -Set `BASIC_AUTH_USER` and `BASIC_AUTH_PASSWORD` in `.env` to make the app read-only for the public. +You can make the app read-only for the public by setting a username and password in the **Settings** page. After this, all write actions (POST/PATCH/DELETE) require Basic Auth; browsing and viewing remain public. -2. Put your exported RXResume JSON at `resume-generator/base.json`. -3. Start: `docker compose up -d --build` -4. Open: - - Dashboard/UI: `http://localhost:3005` - - API: `http://localhost:3005/api` - - Health: `http://localhost:3005/health` Persistent data lives in `./data` (bind-mounted into the container). diff --git a/documentation/orchestrator.md b/documentation/orchestrator.md index f235461..e9f57e0 100644 --- a/documentation/orchestrator.md +++ b/documentation/orchestrator.md @@ -38,7 +38,7 @@ Once a job is `ready`, the Ready panel is the "shipping lane": The PDF is generated from: -- The base resume JSON (`resume-generator/base.json`). +- The base resume JSON (uploaded via the Onboarding UI or Settings). - The job description (used for AI tailoring and project selection). - Your tailored summary/headline/skills and selected projects. diff --git a/documentation/self-hosting.md b/documentation/self-hosting.md index 778b074..45dd831 100644 --- a/documentation/self-hosting.md +++ b/documentation/self-hosting.md @@ -1,61 +1,40 @@ # Self-Hosting (Docker Compose) -This project is designed to be self-hostable with a single Docker Compose command. +The easiest way to run JobOps is via Docker Compose. The app is self-configuring and will guide you through the setup on your first visit. ## Prereqs - Docker Desktop or Docker Engine + Compose v2 -- An OpenRouter API key (required for AI scoring and summaries) -- RXResume credentials (only if you want PDF exports) -## 1) Clone and set up environment +## 1) Start the stack -```bash -cp .env.example .env -``` - -Open `.env` and set at least: -- `OPENROUTER_API_KEY` - -Optional but commonly used: -- `RXRESUME_EMAIL`, `RXRESUME_PASSWORD` (for CV PDF generation) -- `UKVISAJOBS_EMAIL`, `UKVISAJOBS_PASSWORD` (if you want to scrape UKVisaJobs) -- `BASIC_AUTH_USER`, `BASIC_AUTH_PASSWORD` (read-only public, auth required for writes) - -## 2) Provide a base resume JSON - -The container mounts a base resume JSON at `resume-generator/base.json`. - -- Create or copy your exported RXResume JSON to: - - `resume-generator/base.json` - -If you do not plan to generate PDFs, you can still provide a minimal JSON file to satisfy the mount. - -## 3) Start the stack +No environment variables are strictly required to start. Simply run: ```bash docker compose up -d --build ``` -This will build a single container that runs the API, UI, scrapers, and resume generator. +This builds a single container that runs the API, UI, scrapers, and resume generator. -## 4) Access the app +## 2) Access the app and Onboard -- Dashboard: http://localhost:3005 -- API: http://localhost:3005/api -- Health: http://localhost:3005/health +Open your browser to: +- **Dashboard**: http://localhost:3005 + +On first launch, you will be greeted by an **Onboarding Wizard**. The app will help you validate and save your configuration: + +1. **Connect AI**: Add your OpenRouter API key (required for job scoring and summaries). +2. **PDF Export**: Add your RxResume credentials (if you want to generate tailored PDFs). +3. **Resume JSON**: Upload your base resume JSON (exported from RxResume). + +The app saves these to its persistent database, so you don't need to manage `.env` files for basic setup. All other settings (like search terms, job sources, and more) can also be configured directly in the UI. ## Persistent data `./data` is bind-mounted into the container. It stores: -- SQLite DB: `data/jobs.db` +- SQLite DB: `data/jobs.db` (contains your API keys and configuration) - Generated PDFs: `data/pdfs/` - -## Common issues - -- First build is slow: Playwright + Camoufox download Firefox during the image build. -- Scraping can be blocked by target sites (LinkedIn/Indeed/UKVisa). Retry or adjust sources. -- Missing `resume-generator/base.json` will break PDF generation (and the mount). +- Resume JSON: Stored internally after upload. ## Updating diff --git a/orchestrator/README.md b/orchestrator/README.md index 12085b3..1adaf7b 100644 --- a/orchestrator/README.md +++ b/orchestrator/README.md @@ -33,7 +33,7 @@ orchestrator/ 2. **Set up environment:** ```bash cp .env.example .env - # Edit .env with your API keys + # The app is self-configuring. You can add keys via the UI Onboarding. ``` 3. **Initialize database:**