feat: workplace filter, job dedup, company skip docs, deploy notes

- Add remote/orchestrator filter by workplace (remote, not remote, unknown) with URL param
- Expose isRemote on job list API; canonicalize URLs and source_job_id dedup on import
- Onboarding: optional VITE_SKIP_RXRESUME_ONBOARDING for RxResume-free onboarding
- Scoring UI + docs for company skip list; pipeline-run dedup note
- Vitest: TZ=UTC for stable time-based tests
- DEPLOY_GITEA_VM_CRON_TELEGRAM.md for VM/cron/Telegram ops

Made-with: Cursor
This commit is contained in:
ilia
2026-04-04 14:44:52 -04:00
parent 0c31377ac6
commit 9576c3d7a1
20 changed files with 705 additions and 61 deletions
@@ -0,0 +1,53 @@
---
id: company-skip-list
title: Company skip list
description: Block unwanted employers during discovery using blocked company keywords in Settings.
sidebar_position: 6
---
## What it is
The **company skip list** is the **Blocked company keywords** field in **Settings → Scoring Settings**. Any job whose **employer / company name** contains one of your tokens (case-insensitive substring match) is **dropped during discovery** and is never imported.
## Why it exists
You may want to avoid certain agencies, staffing brands, or employers without having to filter them out of every search manually.
## How to use it
1. Open **Settings** and expand **Scoring Settings**.
2. Find **Company skip list (blocked keywords)**.
3. Add tokens one at a time, or paste a comma- or newline-separated list.
4. Click **Save Changes**.
5. Run the pipeline again — blocked companies apply to **new discovery only**; they do not remove jobs already in the database.
### Tips
- Use substrings that reliably identify the employer on listings, for example `recruit`, `staffing`, or a distinctive part of a brand name.
- Avoid overly short tokens that could match unrelated companies (for example a three-letter acronym shared by many firms).
- The list is capped in Settings validation (max 200 entries, each up to 200 characters).
- To block more precisely, prefer the exact spelling that appears on job posts you see in JobOps.
### Maintenance
- **Add** entries when you notice employers you never want to see again.
- **Remove** entries if you blocked too much — save, then run discovery again.
- **Review periodically** — staffing brand names change, and your targets may shift.
- **Existing jobs** are unchanged; use the Jobs UI or **Danger Zone** in Settings if you need to clear old rows.
## Common problems
### Blocked companies still appear
- Confirm you clicked **Save Changes** after editing the list.
- Remember: only **new** runs apply the filter. Old jobs stay until you delete or clear them.
### Too many jobs disappeared
- A token may be too broad. Remove or narrow it in Settings.
## Related pages
- [Settings](/docs/features/settings)
- [Pipeline Run](/docs/features/pipeline-run)
- [Orchestrator](/docs/features/orchestrator)
+12
View File
@@ -96,6 +96,17 @@ Use it when you already have a specific job description or link and do not want
For accepted input formats, inference behavior, and limits, see [Manual Import Extractor](/docs/next/extractors/manual).
## Discovery deduplication
When new listings are imported, JobOps does not create a second database row if the job is already in your workspace (any status). Matching uses:
- a **canonical job URL** (normalizes `http`/`https`, `www`, trailing slashes, common tracking query params, and sorts remaining query keys)
- the pair **`source` + `source_job_id`** when the extractor provides an external id
Existing jobs keep their stored URL; new imports use the canonical form so the same role is not added again under a slightly different link.
To drop companies before import, configure a **company skip list** (blocked company keywords) in **Settings → Scoring Settings**. See [Company skip list](/docs/features/company-skip-list).
## Common problems
### Start button stays disabled
@@ -128,6 +139,7 @@ For accepted input formats, inference behavior, and limits, see [Manual Import E
## Related pages
- [Company skip list](/docs/features/company-skip-list)
- [Find Jobs and Apply Workflow](/docs/next/workflows/find-jobs-and-apply-workflow)
- [Manual Import Extractor](/docs/next/extractors/manual)
- [Orchestrator](/docs/next/features/orchestrator)
+2 -1
View File
@@ -169,7 +169,7 @@ Readiness requires:
- Penalize missing salary data
- Set penalty amount
- Optional auto-skip threshold for low-score jobs
- Block jobs from companies that match configured keyword tokens
- **Company skip list** (blocked company keywords): drop listings during discovery when the employer name contains a token — see [Company skip list](/docs/features/company-skip-list)
- Add custom scoring instructions to tell the AI what to weigh more or less
### Danger Zone
@@ -261,6 +261,7 @@ curl -X POST "http://localhost:3001/api/backups"
## Related pages
- [Company skip list](/docs/features/company-skip-list)
- [Reactive Resume](/docs/next/features/reactive-resume)
- [Database Backups](/docs/next/getting-started/database-backups)
- [Overview](/docs/next/features/overview)