Pipeline
Paste a job URL
Drop any job posting — Greenhouse, Lever, Ashby, LinkedIn, Indeed, a company careers page — and we'll add it to your Pipeline instantly. No details to fill in.
No URL?
Setup
You're connected. Job discovery and your other devices are the last two steps — pick up where you left off.
Google sign-in
Loading daily brief…
Drop any job posting — Greenhouse, Lever, Ashby, LinkedIn, Indeed, a company careers page — and we'll add it to your Pipeline instantly. No details to fill in.
No URL?
Try broadening your search or check back later.
The data source may be temporarily unavailable. Check the sheet link, permissions, or try again shortly.
Profile set!
Your resume and preferences are in. One big step to go.
Every discovery run your workers complete — manual, scheduled, or
CLI — logged to the
DiscoveryRuns
tab of your sheet. Newest first. Auto-refreshes while this panel is
open.
| Run at | Status | New roles | Why |
|---|
Pipeline review
Active New and Researching roles that may need an availability check.
Saved in this browser only. Fill in what you use — everything else can stay blank.
Add your Google OAuth Web Client ID and save. After you sign in with Google, the rest of the settings (sheet, discovery, AI) load here.
Your board lives in a Google Sheet. Setup connected it — this is what it holds.
Not connected
Lets JobBored sign in to Google and open your Sheet. You can leave this alone if sign-in already works.
Sheet & dashboard
Paste the open-in-browser link or the raw ID.
Onboarding
Run the welcome flow again. Your saved resume and profile stay until you finish.
Reopen the first-run setup (Sheet, sign-in, AI provider). Your connected Sheet, keys, and provider choice stay saved.
Discovery
Connect the helper that finds new roles for you. Skip it if you add roles yourself.
Discovery connection lives in the drawer → Connection. The webhook URL and secret are edited there, not here.
v2 redesign (preview)
Switches Daily Brief, Pipeline, Scorecard, and Onboarding to the new visual language. On by default; toggle anytime.
Reset
Removes all localStorage overrides. You can re-enter them anytime.
Remove saved settings from this browser? You can enter them again anytime.
Loading your Fit Profile…
Job posting scraper for reading full descriptions.
Reads job postings when you paste a link. Leave it blank if
you run JobBored on your own computer.
Details
On localhost, blank uses
http://127.0.0.1:3847 with
npm start. A hosted copy
(for example GitHub Pages) needs a deployed HTTPS URL. No
trailing slash.
Scorecard endpoint for resume-to-posting match scoring.
Server mode defaults to
http://127.0.0.1:3847/api/ats-scorecard
on localhost. Webhook mode posts the same ATS payload shape to
your endpoint.
OpenRouter-first generic AI for drafts and suggestions. API keys stay in this browser.
Not connected
Free models need no paid plan. Get a free key.
OpenAI-compatible local server (e.g. Ollama). Runs offline, no key required.
Pulls the selected model into your local Ollama. Requires Ollama running on the base URL above.
Optional. Drafts and suggestions already work with OpenRouter / Local / OpenAI / Anthropic / webhook — pick Gemini here only if you want it as your generic AI provider, or to unlock the optional Google Search grounding and URL Context fallback in discovery.
Direct browser calls may be blocked by CORS; if so, switch to OpenRouter, Local (Ollama), or a webhook — all CORS-free generic-AI paths. (Gemini also works, but it isn't required.)
Direct browser calls may be blocked by CORS; if so, switch to OpenRouter, Local (Ollama), or a webhook — all CORS-free generic-AI paths. (Gemini also works, but it isn't required.)
Optional extras. None are required, and onboarding never asks for them — turn any on whenever you want.
🎯 ATS scoring
Scores your resume against each posting the way applicant-tracking systems do, so you know what to fix before applying.
🏷️ Company logos
Real brand logos across your pipeline and drafted materials — a Logo.dev token makes everything look the part.
Needs a one-line file edit: add logoDevToken
to config.js (see SETUP.md).
☁️ Browser Use Cloud
A hosted fallback that keeps discovery running even when your laptop is off or asleep.
Needs a one-line file edit: add
BROWSER_USE_API_KEY to the discovery helper's
.env (see SETUP.md).
🔗 URL import
Paste any job link and JobBored reads the posting into your pipeline instead of you retyping it. A Gemini key from onboarding already unlocked this.
🌐 Grounded web search
Lets discovery search the open web with Google's grounding, on top of the boards it already reads.
💻 Other devices
Keeps discovery reachable from your phone or a second computer, not just the machine you set it up on.
Turn on: “Use JobBored on other devices” on your dashboard banner.
Web application OAuth Client ID from Google Cloud Console → Credentials (same project as the Sheets API).
Cheerio runs on your machine (Node.js) so this page can read job descriptions that aren’t available from the browser alone. From the repo root, one command starts both the dashboard and the scraper.
package.json lives), run
npm install once, then
npm start every time. That installs
server dependencies automatically and starts the UI on
http://localhost:8080 plus the scraper
on 127.0.0.1:3847.
http://127.0.0.1 on your laptop (mixed
content). For Fetch posting from Pages, deploy the
server/ app to Render, Fly, Railway,
etc., paste the HTTPS base URL in Settings, or run
the UI locally with npm start on
http://localhost. See
DEPLOY-SCRAPER.md.
Download the LTS build from nodejs.org. Then confirm in a terminal:
node -v
Terminal / PowerShell in the project folder — first time installs
everything (including the server
package):
npm install npm start
Leave this running. Logs should show the web server on port
8080 and
[job-scraper] http://127.0.0.1:3847.
cd server && npm install && npm start
— same API on port 3847.
You can leave the scraper URL blank on
localhost — the app uses
http://127.0.0.1:3847 automatically. Otherwise
paste your URL below, then click
Save & reload
in Settings.
http://127.0.0.1:3847
Open a role with a Link, expand the card, and click Fetch posting. With a configured AI provider, you also get fit angle and talking points from the scraped text. Gemini is only needed for the optional URL Context page-reading fallback.
Connection refused / Failed to fetch? The scraper
isn’t running. In a terminal:
cd server then
npm start and leave that window open.
HTTPS dashboard? Browsers may block
http://127.0.0.1 from a secure site —
use plain HTTP locally or deploy the scraper with HTTPS.
Blocked job page? Some sites block bots; try an
employer career page. See SETUP.md.
Resume, samples, AI context, and writing preferences — all saved in this browser.
Your base document for every draft
Drop your resume here
PDF, Word, or plain text
Drop a new file or Browse to replace
Paste your LinkedIn highlights so drafts stay current even if your uploaded resume is out of date.
Teach the AI your voice and style
Drop samples or cover letters
PDF, Word, or text — add several at once
Let your chatbot fill in the gaps your resume misses
Your favorite chatbot (ChatGPT, Gemini, Claude) already knows a lot about your career from past conversations. Ask it to summarize everything relevant and paste the result here.
One click copies a ready-made prompt to your clipboard.
Open ChatGPT, Gemini, or Claude and send the prompt. It will generate a career summary based on everything it knows about you.
Paste the chatbot's response below, or save it as a
.md / .txt file and upload it.
Tone, templates, and how drafts should sound
We do not auto-scrape LinkedIn. Use this guided capture to copy your latest sections and save them in your local profile.
Copy each section from LinkedIn, then paste it below. Use “Paste from clipboard” to speed up.
Draft
ATS match
Version history
Optional context for this specific application. These notes take priority over general preferences for the next draft only.
What this search will do
Fill in what you know. JobBored will add the role to your Pipeline.