| # JobPortal AI β Open Source Job Search OS |
|
|
| An open-source, local-first job search platform with AI career tools, multi-source scraping, and application tracking. |
|
|
| > **Status: Early Beta.** Core tracker and scraping work. AI features require Ollama or cloud API key. Not production-hardened yet. |
|
|
| ## What Works Today |
|
|
| ### β
Stable |
| - **User auth** β register, login, JWT refresh, OAuth (Google/GitHub) |
| - **Application tracker** β kanban board, status tracking, interviews, reminders |
| - **Job scraping** β Greenhouse, Lever, Ashby public APIs + universal URL scraper |
| - **Job search** β filter by remote/salary/seniority/location/type |
| - **Profile editor** β experience, education, skills, preferences |
| - **Resume CRUD** β create versions, PDF/DOCX export, upload & parse |
| - **Cover letters** β create, edit, AI generate |
| - **Alerts** β saved searches with email/webhook/in-app notifications |
| - **Admin** β source management, health dashboard, bulk import |
| - **Chrome extension** β detect jobs, one-click save (prototype) |
| - **Dark/light theme** β neo-brutalism UI with working toggle |
|
|
| ### β οΈ Beta (works but needs evaluation) |
| - **AI resume review** β ATS scoring, keyword gaps (requires LLM) |
| - **AI job matching** β compare resume vs JD |
| - **Interview prep** β question generation, STAR coaching |
| - **Cover letter generation** β AI-written, tone selection |
| - **Resume tailoring** β optimize bullets for specific job |
| - **Networking messages** β LinkedIn/email drafts |
| - **Salary insights** β aggregate from scraped data |
| - **Skill gap analysis** β identifies missing skills + learning plan |
|
|
| ### π§ͺ Experimental |
| - **Career path explorer** β AI trajectory mapping |
| - **Culture match** β work style assessment |
| - **Salary negotiation coach** β offer analysis + scripts |
| - **Elevator pitch generator** |
| - **Job comparison tool** |
| - **Market trends** β skill demand tracking |
| - **Gamification** β streaks, achievements |
| - **Semantic search** β pgvector embeddings (infrastructure ready, indexing TODO) |
|
|
| ### π« Not Implemented Yet |
| - Chrome Web Store distribution |
| - Email/Gmail sync |
| - Mobile native app |
| - Billing/quotas |
| - Workday/iCIMS/BambooHR connectors |
| - Hosted public demo |
|
|
| ## Architecture |
|
|
| ``` |
| Frontend: Next.js 15 Β· React 19 Β· Tailwind v4 Β· Framer Motion |
| Backend: FastAPI Β· SQLAlchemy 2.0 async Β· Pydantic v2 Β· LiteLLM |
| Database: PostgreSQL 17 (pgvector) Β· Redis 7 |
| Workers: Celery Β· Scheduled scraping + alerts |
| Storage: Cloudflare R2 (production) Β· Local (development) |
| AI: Ollama (default, free) Β· OpenAI Β· Anthropic Β· Gemini Β· Mistral Β· DeepSeek Β· Grok Β· HF |
| ``` |
|
|
| ## Supported Job Sources |
|
|
| | Source | Type | Status | |
| |--------|------|--------| |
| | Greenhouse (30+ boards) | Public API | β
Working | |
| | Lever (15+ boards) | Public API | β
Working | |
| | Ashby | Public API | β
Working | |
| | RemoteOK | Free API | β
Working | |
| | Arbeitnow | Free API | β
Working | |
| | HN Who's Hiring | Algolia API | β
Working | |
| | WeWorkRemotely | RSS | β
Working | |
| | Remotive | RSS | β
Working | |
| | Any URL (universal) | HTML/JSON-LD/LLM | β
Working | |
| | Workday | Planned | β | |
| | SmartRecruiters | Planned | β | |
| | iCIMS | Planned | β | |
|
|
| ## Quick Start |
|
|
| ```bash |
| git clone https://github.com/anky2002/best |
| cd best |
| make setup # Installs deps, starts DB/Redis, runs migrations, seeds demo data |
| make dev # Starts DB + Redis |
| make backend # Terminal 1: API on :8000 |
| make frontend # Terminal 2: Web on :3000 |
| |
| # Optional: Local AI (free, no API key needed) |
| ollama pull llama3.2 |
| ``` |
|
|
| **Demo login:** `demo@jobportal.dev` / `demo123` |
| **Admin:** `admin@jobportal.dev` / `admin123` |
| **API docs:** http://localhost:8000/api/v1/docs |
|
|
| ## LLM Providers |
|
|
| Default is **Ollama (free, local, private)**. Add cloud keys in Settings for better quality: |
|
|
| | Provider | Env Var | Best For | |
| |----------|---------|----------| |
| | Ollama | (none needed) | Privacy, free, offline | |
| | OpenAI | `OPENAI_API_KEY` | Best quality overall | |
| | Anthropic | `ANTHROPIC_API_KEY` | Cover letters, long-form | |
| | DeepSeek | `DEEPSEEK_API_KEY` | Cheapest cloud option | |
| | Google | `GOOGLE_API_KEY` | Fast, good value | |
| | Mistral | `MISTRAL_API_KEY` | European hosting | |
| | xAI | `XAI_API_KEY` | Grok models | |
| | HuggingFace | `HUGGINGFACE_API_KEY` | Open models | |
|
|
| ## Security |
|
|
| - Passwords: Argon2 hashing |
| - API keys: Fernet AES encryption at rest (PBKDF2 key derivation) |
| - Tokens: JWT with enforced secret in production |
| - See [SECURITY.md](SECURITY.md) and [PRIVACY.md](PRIVACY.md) |
|
|
| ## Known Limitations |
|
|
| - Tokens stored in localStorage (XSS risk β HttpOnly cookies planned) |
| - No token revocation on logout (blacklist planned) |
| - Rate limiter fails open if Redis down |
| - AI features not evaluated for accuracy yet |
| - No hosted demo available |
|
|
| ## Contributing |
|
|
| See [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
| ## License |
|
|
| MIT β see [LICENSE](LICENSE) |
|
|