
JustHireMe
github.com/vasu-devs/justhireme- Category
- AI Tools
- Rank
- No. 686Tools index
- Pricing
- Open Source
- Type
- APP
- Use case
- Workflow Automation
- Interfaces
- Desktop
- Builder
- @Vasu_Devs
- GitHub
- 2.3k stars
- Latest release
- v1.7.0
- Date
About
A local-first AI workbench for job hunting that scrapes roles from multiple sources, ranks them by fit using transparent criteria, and generates tailored application materials like resumes and cover letters. Designed for people tired of noisy job boards and black-box AI apply tools.
What it does
This is a desktop application, not a browser extension, that runs entirely on your own machine and pulls job postings in from many different channels: company career pages, RSS feeds, forums, and configured APIs. Before anything is shown to you, incoming listings pass through a rules-based filter that discards stale, thin, or spammy postings. What survives gets scored against your own resume and experience footprint using a profile graph, and the app can then draft a resume, cover letter, and outreach notes for roles that clear your threshold.
Why it's ranked here
AGPL-3.0 licensing and a genuinely offline default set this apart from the wave of cloud-dependent apply bots: local embeddings, a local graph database, and support for locally-run language models mean the core matching and generation pipeline needs no API key and no data leaving the machine. The backend also takes real security precautions for a piece of software that talks to a webview, restricting which hosts can reach it and refusing to leak internal errors. The macOS build is not yet notarized and the automation lab is explicitly unsupported, but the reviewed core is stable enough to trust with real job data.
What's good
The lead pipeline runs a deterministic quality gate before anything reaches ranking, so stale, senior-only, or spammy postings get filtered out early rather than polluting every score downstream. When a lead is evaluated, matching draws on a profile graph built from an imported resume rather than simple keyword overlap, and the whole pipeline can run on a local model with no subscription required. Generated output goes past a single resume: cover letters, a founder message, a LinkedIn note, a cold email, and a keyword coverage summary all come from the same pass, giving a reviewer several drafts instead of one template filled in.
Tradeoffs
The macOS build is ad-hoc signed rather than notarized, so Gatekeeper blocks it on first launch until a user manually approves the app, a real speed bump next to a signed installer. The advertised thin installer is misleading on its own: the actual runtime, including a browser engine and vector libraries, downloads separately on first run before anything works. Browser automation and auto-apply exist in the codebase but are explicitly experimental and off by default, so anyone wanting automated submissions rather than reviewed drafts has to opt into an unsupported path.
How to use it well
This fits someone running a real search across weeks who wants to see why a role scored the way it did rather than trust a black box, and who is comfortable reviewing AI-drafted resumes and cover letters before sending them rather than approving one-click submissions. Start on the keyless path with a local model before adding a paid provider, since the whole matching and generation flow is designed to work without one. It is a weaker fit for someone who wants full automated applying out of the box, since that capability is present but deliberately unsupported and disabled until turned on.
Technical notes+
backend/main.py reserves the listening socket before announcing its port to the desktop shell and hands that same socket straight to uvicorn, closing a TOCTOU window where another process could grab the port after it was announced, and it lazily builds the FastAPI singleton through a module-level __getattr__ so the gateway app is constructed once rather than twice. backend/api/app.py pairs a CORS policy scoped to a local-origin regex with TrustedHostMiddleware restricted to localhost, 127.0.0.1 and [::1], a defense against DNS rebinding against the local API, plus a global exception handler that returns a generic 500 with a request id instead of the underlying exception text. backend/graph/__init__.py implements the evaluate/generate/persist flow as a LangGraph StateGraph, and each node (evaluate_node, generate_node, persist_node) catches its own exceptions and returns a partial result with an error field so one failed step degrades the pipeline instead of crashing it. src/App.tsx runs a 15-minute watchdog that clears stuck scanning/reevaluating/cleaning flags if no backend progress event arrives, and polls a health/subsystems endpoint every 30 seconds. backend/core/__init__.py, backend/discovery/__init__.py, and backend/generation/__init__.py are one-line docstring stubs with no logic, consistent with a domain-per-package layout at the top of the backend tree. package.json pins React 19.2.6, the Tauri 2 API, and Vitest 4.1.7, and defines separate release:windows, release:linux, and release:macos scripts that each chain a frontend build, sidecar build, runtime pack, and platform-specific packaging step.
Observed
- License
- AGPL-3.0-only
- Desktop framework
- Tauri 2 desktop shell with a React/TypeScript frontend
- Backend stack
- Python 3.13 backend served over FastAPI with WebSockets
- Local CRM storage
- SQLite
- Profile graph store
- Kuzu
- Vector store
- LanceDB
- Embeddings
- Bundled local ONNX model with a deterministic hashing fallback, no API key required for semantic matching
- Backend network exposure
- Local API restricts accepted Host headers to localhost, 127.0.0.1, and [::1]
- Automation stack
- Browser automation for auto-apply is present in the repository but shipped disabled and marked experimental
- Platform packaging
- Desktop installers built for Windows, macOS, and Linux with built-in auto-update
Read from README.md, package.json, backend/main.py, backend/api/app.py, backend/core/__init__.py, backend/discovery/__init__.py, backend/generation/__init__.py, backend/graph/__init__.py, src/App.tsx.
What it can do
Scrape job postings from multiple sources
Job board URLs or search criteria → Raw job posting data
Filter out low-quality job postings
Raw job posting data → Filtered list of quality job postings
Rank job postings by fit using transparent criteria
User profile/preferences and filtered job postings → Ranked list of jobs with fit scores
Generate tailored resumes
User profile and specific job posting → Customized resume document
Generate tailored cover letters
User profile and specific job posting → Customized cover letter document
Store all job data locally
Job postings and application materials → Local database of job hunting data
Tags
Tech Stack
Featured in Intel
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.