ilia
dcacc78fee
Humanize README and docs for clearer, professional tone
...
CI / skip-ci-check (pull_request) Successful in 31s
CI / docker-ci (pull_request) Successful in 34s
CI / secret-scan (pull_request) Successful in 38s
CI / unit-tests (pull_request) Successful in 4m58s
Align with project-template docs/writing-docs.md.
2026-08-05 14:57:43 -04:00
ilia
02c28149e1
Merge pull request 'ci: align Gitea CI with GitHub CI + repo hygiene' ( #5 ) from chore/ci-align-and-repo-hygiene into main
CI / skip-ci-check (push) Successful in 22s
CI / docker-ci (push) Successful in 33s
CI / secret-scan (push) Successful in 31s
CI / unit-tests (push) Successful in 8m19s
2026-07-26 15:01:49 -05:00
ilia
a16fa88a2d
fix: repair tests and formatting that Gitea CI never checked
...
CI / skip-ci-check (pull_request) Successful in 24s
CI / docker-ci (pull_request) Successful in 30s
CI / secret-scan (pull_request) Successful in 37s
CI / unit-tests (pull_request) Successful in 5m24s
- mock the job-listing probe in discover-jobs tests (they hit the
real network via example.com fixtures)
- update JobDetailPanel skip test to the runJobAction API introduced
by the undo feature
- fix jobActionUndo test action type and apply Biome formatting that
drifted while Gitea CI had no lint lane
2026-07-26 15:54:12 -04:00
ilia
285b094bce
chore: replace personal seed data with generic demo profiles
...
Seeds now insert generic Demo User personas (INSERT OR IGNORE, so
existing databases keep their current profile data). Drops the
every-boot UPDATE backfills that re-asserted personal values, and
removes the personal cron env example templates in favor of the
generic scripts/jobber-cron.env.example.
2026-07-26 15:54:12 -04:00
ilia
af3d1c56b0
chore: remove agent tool dumps from git tracking
2026-07-26 15:53:58 -04:00
ilia
e0b84a24f8
chore: untrack local AI agent tool directories
2026-07-26 15:53:04 -04:00
ilia
9ef8490e6e
ci: add lint/typecheck/unit-test lane to Gitea CI
2026-07-26 15:53:04 -04:00
ilia
6c68155c9d
Merge pull request 'feat: undo job actions + AI Engineer search profile' ( #4 ) from feat/undo-and-ai-search-profile into main
CI / skip-ci-check (push) Successful in 29s
CI / secret-scan (push) Successful in 14s
CI / docker-ci (push) Successful in 17s
2026-07-19 09:21:32 -05:00
ilia
667bc70b7d
feat: seed Ilia Dobkin AI search profile and keyword set
...
CI / skip-ci-check (pull_request) Successful in 5s
CI / docker-ci (pull_request) Successful in 7s
CI / secret-scan (pull_request) Successful in 7s
Adds an AI Engineer profile/resume path and keyword terms for LLM/MCP/RAG role discovery alongside the existing SDET sets.
2026-07-15 12:55:54 -04:00
ilia
d3d9130bbf
feat: add undo toast for skip, apply, and status moves
...
Accidental skips and status changes can be reversed within a few seconds via toast Undo, including bulk actions and keyboard shortcuts.
2026-07-15 12:55:47 -04:00
ilia
6a5c9e8cc4
fix: stop silent Jobs filters from emptying Discovered
...
Hide-prior-skips is off by default and counts in the badge when on; Settings searchCities no longer hard-filters the Jobs list.
2026-07-13 21:36:37 -04:00
ilia
abfc5d8d0a
ci: add local pre-commit gitleaks hook
CI / skip-ci-check (push) Successful in 11s
CI / docker-ci (push) Successful in 13s
CI / secret-scan (push) Successful in 15s
2026-07-13 15:00:18 -05:00
ilia
2c930ba40f
Slim product to Jobs+Settings and drop expired/rediscovered noise.
...
CI / skip-ci-check (push) Successful in 8s
CI / docker-ci (push) Successful in 11s
CI / secret-scan (push) Successful in 9s
Hide unused nav surfaces, probe listing URLs before import, add Danger Zone cleanup for archive matches and dead links, and stop rebuilding jobs on every migrate boot.
2026-07-11 16:20:31 -04:00
ilia
529f0a7b02
Merge pull request 'feat: Google Jobs extractor and scraper reliability fixes' ( #2 ) from feat/google-jobs-and-scraper-reliability into main
CI / skip-ci-check (push) Successful in 6s
CI / docker-ci (push) Successful in 7s
CI / secret-scan (push) Successful in 8s
2026-07-09 14:17:08 -05:00
ilia
40c7cdece3
feat: add Google Jobs extractor and fix scraper reliability gaps
...
CI / skip-ci-check (pull_request) Successful in 8s
CI / docker-ci (pull_request) Successful in 10s
CI / secret-scan (pull_request) Successful in 7s
Ship a Camoufox-backed Google Jobs source, restore Glassdoor results discarded by a python-jobspy GraphQL quirk, and fix Himalayas/Gradcracker zero-job failures. Also harden prior-skip dismiss matching and multi-profile basic-auth switching for CA/US runs.
2026-07-09 15:11:53 -04:00
ilia
84e6835b11
feat: keyword sets, sponsorship signals, and extractor/profile fixes
...
CI / skip-ci-check (push) Successful in 10s
CI / secret-scan (push) Successful in 14s
CI / docker-ci (push) Successful in 17s
Add per-profile keyword sets, job source settings, sponsorship signal pills,
and several ATS extractors. Fix Hiring Cafe discovery via Next.js SSR search,
profile activate for comma-separated basicAuthUser aliases, and resume path
backfill migrations. Update settings and hiring-cafe docs; localhost compose
overlay for loopback-only deploys.
2026-06-11 10:23:39 -04:00
ilia
ecf1829ed8
Merge pull request 'Add homelab Gitea Actions CI (generic)' ( #1 ) from ci/bootstrap-gitea-actions-docker into main
CI / skip-ci-check (push) Successful in 11s
CI / docker-ci (push) Successful in 14s
CI / secret-scan (push) Successful in 12s
2026-05-29 21:46:10 -05:00
ilia
e1bf495afa
ci: sync gitleaks allowlist
CI / skip-ci-check (pull_request) Successful in 10s
CI / docker-ci (pull_request) Successful in 14s
CI / secret-scan (pull_request) Successful in 12s
2026-05-29 21:31:12 -05:00
ilia
fd8eec3c70
ci: refresh workflow (re-run pipelines)
2026-05-29 21:31:12 -05:00
ilia
e5f383786f
ci: sync gitleaks allowlist
CI / skip-ci-check (pull_request) Successful in 12s
CI / docker-ci (pull_request) Successful in 13s
CI / secret-scan (pull_request) Successful in 13s
2026-05-29 21:27:41 -05:00
ilia
9e97261ef6
ci: refresh workflow (re-run pipelines)
2026-05-29 21:27:41 -05:00
ilia
529971dcf4
ci: sync gitleaks allowlist
CI / skip-ci-check (pull_request) Successful in 13s
CI / docker-ci (pull_request) Successful in 12s
CI / secret-scan (pull_request) Successful in 14s
2026-05-29 21:23:15 -05:00
ilia
db36aa2a41
ci: refresh workflow (re-run pipelines)
2026-05-29 21:23:14 -05:00
ilia
75bde7ea38
ci: add homelab gitleaks allowlist
CI / skip-ci-check (pull_request) Successful in 13s
CI / docker-ci (pull_request) Successful in 13s
CI / secret-scan (pull_request) Successful in 14s
2026-05-29 21:18:48 -05:00
ilia
9604812daa
ci: refresh workflow (re-run pipelines)
2026-05-29 21:18:46 -05:00
ilia
584eff4c2a
ci: refresh workflow (re-run pipelines)
CI / skip-ci-check (pull_request) Successful in 11s
CI / docker-ci (pull_request) Failing after 9s
CI / secret-scan (pull_request) Failing after 14s
2026-05-29 20:29:42 -05:00
ilia
c57f3012e9
ci: refresh workflow (re-run pipelines)
CI / skip-ci-check (pull_request) Successful in 11s
CI / docker-ci (pull_request) Failing after 9s
CI / secret-scan (pull_request) Failing after 14s
2026-05-29 20:27:17 -05:00
ilia
20c1f03dff
ci: sync workflow template
CI / skip-ci-check (pull_request) Successful in 11s
CI / docker-ci (pull_request) Failing after 11s
CI / secret-scan (pull_request) Failing after 16s
2026-05-29 20:25:05 -05:00
ilia
3ab85da567
ci: refresh workflow (re-run pipelines)
CI / skip-ci-check (pull_request) Successful in 11s
CI / docker-ci (pull_request) Failing after 11s
CI / secret-scan (pull_request) Failing after 15s
2026-05-29 20:19:46 -05:00
ilia
07e6e3c5ae
ci: sync workflow template (node container + host fixes)
CI / skip-ci-check (pull_request) Successful in 11s
CI / docker-ci (pull_request) Failing after 11s
CI / secret-scan (pull_request) Failing after 15s
2026-05-29 20:14:04 -05:00
ilia
a8cf867fe0
ci: add homelab Gitea Actions workflow (ci-docker.yml)
CI / skip-ci-check (pull_request) Failing after 10s
CI / docker-ci (pull_request) Has been skipped
CI / secret-scan (pull_request) Has been skipped
2026-05-29 16:14:54 -05:00
ilia and Cursor
57b054caa0
fix(docs): use /docs/next paths for duplicate-jobs links
...
CI / Linting (Biome) (push) Failing after 40s
CI / Tests (push) Successful in 5m15s
CI / Type Check (adzuna-extractor) (push) Successful in 1m9s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m13s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m9s
CI / Type Check (orchestrator) (push) Successful in 1m27s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m10s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m10s
CI / Documentation (push) Successful in 1m59s
Fix Docusaurus broken-link errors in intro and orchestrator pages.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 18:51:41 -04:00
ilia and Cursor
17c4d4490a
feat(jobs): suppress duplicate postings after skip or apply
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m25s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m12s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m9s
CI / Type Check (orchestrator) (push) Successful in 1m25s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m9s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m9s
CI / Documentation (push) Failing after 1m56s
Dedup by employer+title and description at import; cascade skip on dismiss; hide repeats in the job list. Document product scope and duplicate detection in docs.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 18:50:11 -04:00
ilia and Cursor
5401f384c1
fix(discovery): enforce search-country allow-list when Canada (etc.) is selected
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m19s
CI / Type Check (adzuna-extractor) (push) Successful in 1m10s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m13s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m10s
CI / Type Check (orchestrator) (push) Successful in 1m27s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m10s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m10s
CI / Documentation (push) Successful in 1m59s
Reject vague Remote/Worldwide and any non-selected country at ingest; hide mismatched jobs in the UI and stop bypassing country filters for remote listings.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 18:34:35 -04:00
ilia and Cursor
71f34853fd
fix(discovery): use textMatchesKeyword for single deal-breaker tokens
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m23s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m14s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m11s
CI / Type Check (orchestrator) (push) Successful in 1m26s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m9s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m11s
CI / Documentation (push) Successful in 1m59s
Passing a string into textMatchesAnyKeyword caused keywords.some is not a function when search profile deal-breakers were applied after extract.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 17:57:20 -04:00
ilia and Cursor
d28a6221e4
fix(qajobsboard): drop expired LinkedIn reposts and resolve hiring location
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 6m10s
CI / Type Check (adzuna-extractor) (push) Successful in 1m9s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m13s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m9s
CI / Type Check (orchestrator) (push) Failing after 1m16s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m9s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m10s
CI / Documentation (push) Successful in 1m56s
Probe application links for closed listings and feed expires_at; enrich vague Remote/Worldwide rows with real country before blocked-countries filtering.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 17:42:19 -04:00
ilia and Cursor
0de7f90278
fix(filters): match co-op/intern skip tokens in titles with hyphen normalization
...
CI / Linting (Biome) (push) Failing after 40s
CI / Tests (push) Successful in 5m12s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m13s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m9s
CI / Type Check (orchestrator) (push) Failing after 1m17s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m10s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m12s
CI / Documentation (push) Successful in 2m0s
Company skip list and profile deal-breakers now ignore hyphens when matching,
apply skip keywords to job titles as well as employers, and short-circuit
scoring when a deal-breaker hits so co-op posts cannot score 80 via the LLM.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 17:31:59 -04:00
ilia and Cursor
03d293699a
feat(qajobsboard): fetch job detail pages for concrete location text
...
CI / Linting (Biome) (push) Failing after 40s
CI / Tests (push) Successful in 5m13s
CI / Type Check (adzuna-extractor) (push) Successful in 1m10s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m14s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m11s
CI / Type Check (orchestrator) (push) Successful in 1m30s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m12s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m13s
CI / Documentation (push) Successful in 1m57s
The jobs.json feed often labels roles Remote/Worldwide while the public
job page JSON-LD and description include the real city (e.g. Mumbai/Nagpur).
Enrich vague rows by reading each QAJobsBoard detail URL before import.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 17:20:53 -04:00
ilia and Cursor
0a63316100
fix(discovery): block countries in vague locations via job description
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m22s
CI / Type Check (adzuna-extractor) (push) Successful in 1m9s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m14s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m11s
CI / Type Check (orchestrator) (push) Successful in 1m28s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m13s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m12s
CI / Documentation (push) Successful in 2m0s
QAJobsBoard and similar feeds often store Worldwide/Remote while the real
country is only in the description. Scan title and description when location
is vague, and prefer concrete locations from QAJobsBoard postings.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 17:15:18 -04:00
ilia and Cursor
f0261711c6
chore(cron): expand QA automation search terms for scheduled runs
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m22s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m14s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m10s
CI / Type Check (orchestrator) (push) Successful in 1m26s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m10s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m11s
CI / Documentation (push) Successful in 1m59s
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 16:54:38 -04:00
ilia and Cursor
2e44a131e1
fix(jobs): treat isRemote as 100% remote only; tighten cron for Canada QA
...
Reject hybrid or partial-office postings at ingest so the Remote badge and
filters match fully remote roles. Cron can PATCH search geography, remote-only
workplace types, and QA search terms before each scheduled pipeline run.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 15:53:55 -04:00
ilia and Cursor
f5179304c1
feat(discovery): blocked countries filter and smoke subprocess fixes
...
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m27s
CI / Type Check (adzuna-extractor) (push) Successful in 1m9s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m13s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m9s
CI / Type Check (orchestrator) (push) Successful in 1m24s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m8s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m9s
CI / Documentation (push) Successful in 1m59s
Add blockedCountries in Settings so pipeline discovery drops jobs whose
location mentions listed countries (existing discovered rows are kept).
Document the feature, fix smoke tsconfig inheritance for nested extractors,
and run smoke via an absolute-tsconfig wrapper.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 11:41:29 -04:00
ilia and Cursor
c840f289e1
feat(extractors): expand catalog, smoke coverage, and sourcing docs
...
CI / Linting (Biome) (push) Failing after 40s
CI / Tests (push) Successful in 5m54s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m11s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m8s
CI / Type Check (orchestrator) (push) Successful in 1m23s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m6s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m7s
CI / Documentation (push) Successful in 1m54s
Adds Arc.dev, BC T-Net, Eluta, iCIMS tenants, QAJobsBoard, and SmartRecruiters
manifests with registry/settings/UI wiring; registers full extractor list in
smoke-extractors and documents supplementary board access paths. Aligns Careerjet
v4 with the url query parameter and fixes strict typing in QAJobsBoard.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-15 22:36:23 -04:00
ilia and Cursor
67508d56ea
fix(docker): copy full extractors tree into image for runtime manifests
...
CI / Linting (Biome) (push) Failing after 35s
CI / Tests (push) Successful in 5m28s
CI / Type Check (adzuna-extractor) (push) Successful in 1m5s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m9s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m4s
CI / Type Check (orchestrator) (push) Successful in 1m21s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m4s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m5s
CI / Documentation (push) Successful in 1m55s
The Dockerfile only copied a fixed list of extractor dirs; new sources
were listed in shared but their manifest.ts files were absent from the
container, so discovery logged missingManifest in production.
Copy extractors/ once before npm install in builder and production, and
skip redundant per-extractor COPY lines. Add extractors/*/storage/ to
.dockerignore to avoid baking local cache into the build context.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-12 20:36:27 -04:00
ilia and Cursor
7b3dfb002a
feat(extractors): add 17 job source extractors and cross-source dedup
...
CI / Linting (Biome) (push) Failing after 36s
CI / Tests (push) Successful in 5m54s
CI / Type Check (adzuna-extractor) (push) Successful in 1m6s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m9s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m5s
CI / Type Check (orchestrator) (push) Successful in 1m21s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m4s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m4s
CI / Documentation (push) Successful in 1m52s
Adds extractor packages: arbeitnow, ashby, careerjet, fourdayweek,
greenhouse, himalayas, jobicy, jooble, lever, reed, remoteok, remotive,
themuse, usajobs, weworkremotely, workday — each with manifest, package
metadata and README.
Pipeline / shared:
- shared/job-fingerprint: stable hash for cross-source dedup, with tests
- discover-jobs: dedup via fingerprint and richer per-source merging
- jobs repository: fingerprint-aware upsert / lookup
- settings-registry, settings types/routes, demo-defaults: knobs for the
new sources
- shared extractors index: register the new manifests
- location-support, profiles route: small fixes for the new sources
Tooling:
- scripts/smoke-extractors.ts to sanity-check each source locally
- scripts/jobber-cron-{cherepaha,dobkin}.env.example: per-host cron
templates (CHANGEME placeholders only)
- .env.example: documented env vars for the new extractors
- .gitignore: ignore extractors/*/storage/ runtime caches (was ukvisajobs only)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-12 20:17:52 -04:00
ilia
b72612fd06
Add Basic Auth gate, job owner context, and multi-tenant job isolation.
...
- Server: auth routes, owner profile on requests/jobs/pipeline, migrations
- Client: BasicAuthAppGate, SSE/API session handling, profile quick switch
- Tests: tracer-links, ghostwriter request-context mock, pipeline coverage
- Env examples for cron and optional basic auth credentials
Made-with: Cursor
2026-04-20 21:34:42 -04:00
ilia
e39341258a
feat(orchestrator): blocked company filters and keyword parsing
...
- Add shared helper to parse blocked company keywords from JSON or legacy text
- Wire discover-jobs to resolved keywords for employer blocking; extend filters UI
- Include vite/client in TS types for import.meta.env; fix JobListItem test fixture
Made-with: Cursor
2026-04-11 12:04:38 -04:00
ilia
60b61ffe03
feat: job notes, deal-breaker score cap, richer cover letters, bulk action limit bump
...
- Add per-listing notes (JobNotes component, notes column, auto-save)
- Enforce hard score cap (≤15) when deal-breaker hits are present;
add clearance/citizenship deal-breaker rules to scoring prompt
- Cover letter prompt now uses full search profile (experience level,
skills, work arrangement, location, salary, industries, deal-breakers)
and produces longer, name-signed output
- Include candidate name + location in sanitized scorer profile
- Raise MAX_JOB_ACTION_BATCH_SIZE from 100 → 2500 (shared constant)
- Update README with new features
Made-with: Cursor
2026-04-06 15:55:26 -04:00
ilia
4d7c8ac0bc
feat(orchestrator): job list filters — multi source/country, URL sync, exclude
...
- Parse location strings into country keys (shared search-cities helper).
- URL params: source, sourceExclude, countries, countriesExclude.
- Chip cycle: off → include → exclude (destructive); remote bypasses country rules.
- README: document filter behaviour and query keys.
Unrelated local changes (scorer, notes, schema, etc.) remain unstaged.
Made-with: Cursor
2026-04-06 15:50:47 -04:00
ilia
77179b2b94
feat(orchestrator): local JSON base resume for PDF generation
...
Use JOBOPS_LOCAL_RESUME_PATH or Settings local path as the tailored PDF
source when Reactive Resume template is not selected. Align GET
/api/profile/status with local resume configuration. Update route test
mocks for resolveLocalResumeFilePath.
Includes discovered-panel UI tweaks in DecideMode and DiscoveredPanel.
Made-with: Cursor
2026-04-05 23:47:25 -04:00