City search (#217)

* wave 1, jobspy only

* combine usa/ca to united states

* strict city location filter

* hide and show based on focus

* UI changes

* allow clicking cross!

* pill animate in

* animate out, uggo fix

* animate out

* framer motion

* animate component height

* adzuna

* hiring cafe implementation

* refactor: centralize shared search-city parsing and matching

* feat: migrate city setting to searchCities with legacy fallback

* docs: update pipeline and extractor city-search wording

* fix(orchestrator): normalize tokenized paste behavior

* fix(shared): tighten city matching semantics

* docs(extractors): document city-location knobs and geocoding note
This commit is contained in:
Shaheer Sarfaraz
2026-02-21 00:42:09 +00:00
committed by GitHub
parent 5ed9069813
commit 19266fe5eb
38 changed files with 1756 additions and 439 deletions
+6
View File
@@ -29,11 +29,17 @@ Adzuna provides stable API discovery for countries that are not covered by UK-on
5. In **Pipeline Run** (Automatic tab), select a compatible country and enable **Adzuna** in Sources.
6. Start the run; Adzuna progress appears in the existing crawl progress stream.
City behavior:
- If **Search cities** are set in Automatic advanced settings, Adzuna runs once per city.
- City runs use strict post-filtering (`job.location` contains requested city) to avoid broad country-level spillover.
Default controls:
- `ADZUNA_APP_ID`
- `ADZUNA_APP_KEY`
- `ADZUNA_MAX_JOBS_PER_TERM` (default `50`)
- `ADZUNA_LOCATION_QUERY` (optional city/location text)
Supported countries in this integration:
+3
View File
@@ -32,6 +32,7 @@ It also supports term-by-term search and country-aware search state using the sa
- `searchTerms` drive per-term Hiring Cafe `searchQuery`.
- selected country maps into Hiring Cafe location search state.
- run budget path (`jobspyResultsWanted`) is reused as the max jobs-per-term cap.
- optional **Search cities** narrow results by city.
4. Start the run and watch progress in the pipeline progress card.
Defaults and constraints:
@@ -40,6 +41,8 @@ Defaults and constraints:
- `worldwide` and `usa/ca` run in broad mode without a strict country location filter.
- Hiring Cafe is enabled by default in source selection.
- `HIRING_CAFE_DATE_FETCHED_PAST_N_DAYS` controls recency window when running extractor directly (default `7`).
- When a city is provided via `searchCities`, Hiring Cafe uses city radius search (default `1` mile) and strict city post-filtering.
- City geocoding is resolved through Nominatim (OpenStreetMap data); if you scale extractor traffic, add attribution and cache repeated city lookups.
Local run example:
+3 -3
View File
@@ -50,7 +50,7 @@ If values are edited manually, the UI shows **Custom**.
- Adzuna is available only for its supported countries and when App ID/App Key are configured in Settings.
- Glassdoor can be enabled only when:
- selected country supports Glassdoor
- a **Glassdoor city** is set in Advanced settings
- at least one **Search city** is set in Advanced settings
Incompatible sources are disabled with explanatory tooltips.
@@ -59,7 +59,7 @@ Incompatible sources are disabled with explanatory tooltips.
- **Resumes tailored** (`topN`)
- **Min suitability score**
- **Max jobs discovered** (run budget cap)
- **Glassdoor city** (required only for Glassdoor)
- **Search cities** (optional multi-city input; required for Glassdoor)
#### Search terms
@@ -97,7 +97,7 @@ For accepted input formats, inference behavior, and limits, see [Manual Import E
### Glassdoor cannot be enabled
- Verify selected country supports Glassdoor.
- Set a Glassdoor city in Advanced settings.
- Set at least one Search city in Advanced settings.
### Adzuna is not selectable