Open Source · Self-hosted · Local-first

A self-hosted job search
intelligence platform.

Scrape job postings from Greenhouse, Lever, and LinkedIn. Score them against your profile. Auto-tailor resumes with a local LLM. Track your entire pipeline — all on your machine.

View on GitHub See how it works
🔍
Scrape
📊
Score
📋
Review
✍️
Tailor
📄
Compile
🚀
Apply

Everything your job search needs.
Nothing you don't.

Built for engineers who want signal over noise, and their data staying local.

🔍

Multi-source Job Scraper

Pulls from Greenhouse, Lever, and LinkedIn on a configurable schedule. Deduplicates across sources, scores every posting 0–10 against your profile.

📊

Ranked Live Feed

A real-time dashboard showing jobs ranked by relevance. Filter by tier, company, location, or remote. Never scroll through noise again.

✍️

LLM Resume Tailoring

Paste a JD and the local LLM selects your best bullets from your personal bank, assembles a one-page LaTeX resume, and compiles to PDF. Zero API cost.

🛡️

Truth-first Bullet Bank

You write your bullets once, tagged by tech and theme. The LLM selects — it can't hallucinate a skill that isn't in your allowlist.

📡

Recon + Email Finder

Find recruiter emails via Hunter.io. Save contacts, manage outreach templates, compose emails directly from the dashboard.

📈

Full Pipeline Tracking

Track every job from discovery → applied → interviewing → offer. Activity feed, weekly archive, applied-but-unclicked audit. Nothing falls through.

⚔️

Arsenal (Skills Gap)

Analyzes what the market is asking for vs. what's on your resume. Identifies which skills are appearing in top jobs and missing from your profile.

🔒

Local-first by Design

Your resume data, job history, and LLM inference never leave your machine. Cloudflare (optional) stores only job metadata — never personal content.

☁️

Flexible Deployment

Deploy to Cloudflare Pages in 10 minutes for free. Or self-host entirely on OpenShift / Docker Compose. Your call.


From job posting to PDF resume
in one pipeline.

1

Scraper runs hourly

A Python scraper polls Greenhouse and Lever's public APIs (no auth needed). Optionally LinkedIn with your credentials. Results are scored and pushed to your server.

2

Dashboard shows ranked feed

Jobs scored by keyword match, location preference, recency, and source quality. You see the best fits at the top, every time you open the app.

3

Click Tailor on any job

The local sidecar sends the JD + your bullet bank to Ollama. The LLM selects the best 8–10 bullets, writes a .tex file, and tectonic compiles a PDF in seconds.

4

Apply and track

Mark the job applied. The activity feed tracks every stage. The Recon page helps you find the hiring manager's email. Templates let you send outreach in one click.

5

Weekly review + Arsenal

The Weekly page shows jobs you missed. Arsenal analyzes skill trends across every JD you've seen — so you know exactly what to learn next.

atriveo — pipeline:status
$ npm run pipeline:status

Atriveo — Service Status

Resume Sidecar (localhost:8787)
✓ Responding on :8787

Ollama
✓ Running — 2 models loaded
✓ gemma3:12b is available

LaunchAgents (macOS)
✓ com.atriveo.scraper
✓ com.atriveo.feed-sync
✓ com.atriveo.tailor

Resume Engine
✓ experience.md found
✓ QUESTION_ANSWERS.md found

$ python -m scraper.main --dry-run

[scraper] Greenhouse: 143 jobs
[scraper] Lever: 89 jobs
[scraper] Total after dedup: 218 jobs

Top 5 (dry run):
9.5 Senior SWE @ Anthropic [greenhouse]
9.0 Staff Engineer @ Linear [greenhouse]
8.5 Backend SWE @ Vercel [greenhouse]
7.5 SWE II @ Cloudflare [lever]
7.0 Platform Eng @ Discord [lever]

Built on tools you already know.

No proprietary runtimes, no vendor lock-in. Every component is replaceable.

React + TypeScript Dashboard UI
Node.js / Express API server
Python 3.11 Job scraper
Ollama + gemma3:12b Local LLM inference
tectonic LaTeX → PDF compiler
SQLite / PostgreSQL / MongoDB DB adapter layer
Cloudflare Pages + D1 Optional hosting
Docker / OpenShift Self-hosted deploy

No frontend to run.
Just paste your backend URL.

Sign up at application.atriveo.com, start your backend locally, and connect it in seconds. Your data never leaves your machine.

1

Start your backend

Clone the repo and start the server. SQLite works out of the box — no database setup needed.

# Clone and start git clone https://github.com/atishay-kasliwal/Atriveo-JD-Extractor cd Atriveo-JD-Extractor cp .env.example .env # set API_KEY=your_secret cd server && npm install && npm start # → running on http://localhost:3001
2

Expose it to the internet

Use cloudflared to get a public URL so the hosted UI can reach your local backend. Free, no account needed.

# macOS brew install cloudflared cloudflared tunnel --url http://localhost:3001 # → https://abc123.trycloudflare.com # Or deploy to Docker / VPS / OpenShift # and use that URL directly ↓
3

Sign up and connect

Create an account at application.atriveo.com — Google or email, your choice. Then paste your URL and API key on the onboarding screen.

# On the onboarding screen: Endpoint URL: https://abc123.trycloudflare.com API Key: (value of API_KEY from your .env) # Hit "Test connection" → connected ✓ # Your dashboard loads with your data
4

Start the hourly scraper

Install the LaunchAgent (macOS) or systemd unit (Linux) to scrape jobs automatically every hour.

# macOS — installs hourly LaunchAgent npm run pipeline:install # Linux — installs systemd timer bash scripts/install-systemd.sh # Check everything is running npm run pipeline:status
Create your free account →

Takes 5 minutes. No credit card. Your data stays on your machine.


Three ways to run Atriveo.

Pick the path that fits your setup. You can migrate between them at any time.

Easiest

Cloudflare Pages

Dashboard hosted on Cloudflare's global CDN. D1 SQLite for storage. API runs as Pages Functions. Scraper and sidecar run locally on your Mac or Linux machine.

Setup guide →
Self-hosted

Docker Compose

Full local stack in one command: docker compose up. App, Postgres, Ollama, scraper, and sidecar all containerized. Works on any machine with Docker.

View compose →
Enterprise

OpenShift / Kubernetes

Full K8s manifests included. App Deployment, hourly scraper CronJob, PostgreSQL StatefulSet, Ollama pod with PVC. One script deploys everything.

Setup guide →

Your job search.
Your machine. Your data.

Clone the repo, run setup, and have a fully automated job search pipeline in under an hour.

Get started on GitHub How it works