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>
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>
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>
- 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
- 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
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
- Put match badges in their own flex-wrap row under the title (no run-on text)
- Toolbar: flex-wrap, min-w-0 label, shrink-0 count, middot separator on narrow layouts
Made-with: Cursor
- Always show Cover letter card with Generate when empty; Regenerate + Copy when present
- Shared useCoverLetterGeneration hook calling runJobAction(generate_cover_letter)
- Ready tab previously had no cover letter UI; add same block under Fit Assessment
- Floating bar Cover letter button tooltip points to Overview/Ready
- Job detail ⋯ menu: Generate / Regenerate cover letter
Made-with: Cursor
- Require workArrangementMatch in LLM schema; show badge in Fit Assessment
- Prompt: remote-only vs hybrid/N days in office is a hard cap (~35 score)
- Deterministic cap from JD keywords + isRemote/workFromHomeType when only Remote is selected
- hasNonEmptyProfile includes preferredWorkArrangement and preferredLocations so prefs reach the scorer
Made-with: Cursor
- Cap suitability score when roleTypeMatch is low and target roles are set
- Harden scoring prompt (role-type gating, examples, headline in resume payload)
- QA-oriented mock scoring when LLM is unavailable
- .env.example: optional Ollama MODEL/LLM_BASE_URL block for self-hosted LLM
Made-with: Cursor
- Add glassdoor to DEFAULT_CONFIG so POST /api/pipeline/run with {} runs JobSpy trio.
- jobber-pipeline-telegram.sh: optional JOBBER_PIPELINE_SOURCES for explicit source list.
- Deploy doc: WAL checkpoint + rsync jobs.db to VM for profiles/settings/jobs.
Made-with: Cursor
- Add search profiles (DB, API, settings UI) and wire into scorer/pipeline search terms.
- Add cover letter generation (service, job action, JobDetail UI).
- Align JobSpy Indeed country with country-level search geography when settings conflict; warn in logs.
- Infer country from search cities via inferCountryKeyFromSearchGeography (shared).
- Ignore extractor venv/storage and local data in Biome; ignore orchestrator/storage and JobSpy .venv in git.
- Vite: do not watch orchestrator/storage (prevents reloads during startup.jobs pipeline).
- JobSpy: document Python 3.10+ and venv setup in README/requirements.
- Onboarding and settings: local resume path handling, orchestrator .env.example for Vite.
Made-with: Cursor
- 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
Turn Ghostwriter's flat message list into a tree structure, enabling
Claude.ai/ChatGPT-style branching conversations.
**Data model**: Add `parentMessageId` and `activeChildId` to messages,
`activeRootMessageId` to threads. Migration backfills existing messages
into a linear chain and links regenerated messages as siblings.
**Backend**: Tree-walking queries (getActivePathFromRoot, getAncestorPath,
getSiblingsOf), rewritten history builder that follows the ancestor path,
new editMessage and switchBranch services, regenerate now works on any
assistant message (not just the latest).
**Frontend**: BranchNavigator component (← 2/3 → arrows), inline edit on
user messages, per-message regenerate on assistant messages, regenerate
button removed from composer (now per-message).
**Infra**: Pin Node 22 via Volta to prevent ABI mismatches with
better-sqlite3 across environments.
When switching between job tabs (e.g. Discovered → Applied), the detail
panel would briefly show the previously selected job with the new tab's
action buttons — confusing and error-prone.
Three coordinated fixes:
- setActiveTab now checks if the selected job's status fits the target
tab, keeping it when valid (e.g. Discovered → All Jobs) and clearing
it otherwise.
- New visibleSelectedJob useMemo guard synchronously nulls out the
selected job when it doesn't belong to the active tab, eliminating
the one-frame flash caused by the data hook's useEffect lag.
- Auto-select effect now handles the case where a job passes the status
check but gets filtered out by source/sponsor/salary filters.
* Add startup.jobs extractor support
* Harden startup.jobs extractor inputs
* Wire startupjobs into Docker and CI
* Tighten startupjobs review follow-ups
* fix: publish ghcr during release workflow
* feat: add startupjobs max jobs configuration and update related tests
* Add RxResume URL setting to dashboard
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Add language settings for AI-generated resume output
* Resolve merge conflicts for language settings PR
* Fix language settings review feedback and CI lint
* Tighten language setting precedence and onboarding validation
---------
Co-authored-by: saad <Saad>
* initial
* lint fix
* docs!
* fix CI
* ci and runner fix
* fix + docs!
* make CI pass
* country specific search
* remove country specific language
* fix UI
* address comments
* Address visa sponsor PR feedback
* Address remaining visa sponsor review feedback
* Harden visa sponsor provider validation
* feat(settings): add rxresume mode and v5 api key settings
* feat(server): add mode-aware rxresume adapter with auto v5-first selection
* refactor(server): route settings profile and pdf generation through rxresume adapter
* feat(api): support rxresume v4/v5 in onboarding and settings routes with ok/meta responses
* feat(client): add rxresume mode selector and v5 api key setup flow
* docs: document rxresume auto mode with v5-first self-hosted setup
* test: verify dual-mode rxresume support and ci parity checks
* comments
* services folder
* correct types for v5
* tests and docs fix
* Fix RxResume auto fallback and route API consistency
* warning for both being set
* simpler response
* onboarding component improvements, v5 check still not working
* fix list resume endpoint...
* fix api endpoints to latest v5 docs
* don't show the entire project field on v5
* remove auto entirely
* formatting
* ci green
* v5 has a different resume schema
* remove redundant check
* remove requirement that only one must be specified
* consolidate sections
* base resume can be v4 or v5
* saving now works
* status indicator
* actually render some pills
* reason for failure
* fix apikey verification
* dedupe isValidatingMode
* reefactoor
* simplification?
* refactor?
* ci passing
* remove auto from docs
* tailoring is schema dependent
* skills object tighter
* remove redundant text
* fix lint
* mode
* Deduplicate string cleanup helpers and not-found responses
* Enforce aliased imports for infra and shared modules
* Enforce @client/@server aliases for deep relative imports
* Deduplicate visa sponsor and location filter definitions
* Use shared city filter export in extractor location checks