Spaces:
Running
Running
Commit History
-
Replace multi-provider job discovery with Hirebase as the single search API.
Collapses Serper, ATS direct fetch, and Google dorking into lib/hirebase.ts while keeping scoring, agent pivots, batch jobs, digest, and seen-URL dedupe intact. Co-authored-by: Cursor <cursoragent@cursor.com>d6c1beb
-
Refactor email to Agent Inbox: Resend-only reports with unified agent voice.
Co-authored-by: Cursor <cursoragent@cursor.com>66b5e08
-
Implement Upstash vector integration for semantic job matching and remove Clerk resume vector dependencies.
- Added Upstash vector configuration to `env.pipeline.example`. - Integrated Upstash vector functionality in the profile extraction and job scoring processes. - Removed references to Clerk resume vector, streamlining the scoring logic. - Updated relevant API routes to utilize the new vector embedding methods. Made-with: Cursor2ca8643
-
chore(ui): remove legacy classic launcher paths
Strip classic launcher UI down to a minimal admin-only debug handoff, drop legacy rolling query packers, and archive the daily pipeline script. Made-with: Cursor166e2d4 -
chore(ats-direct): enhance discovery + add greenhouse entries
Extend verifier discovery to try common slug variants and support --discover --fix upserts into the ATS registry. Add verified Greenhouse entries for Descript and Remote. Made-with: Cursorce1c3ab -
chore(ats-direct): add --fix to registry verifier
Support a --fix mode that previews a patch and can mark verified=true for 200 responses and remove 404 entries from the ATS company registry. Made-with: Cursorb3a9a4c -
chore(ats-direct): add registry verification script
Add scripts/verify-ats-registry.ts to validate ATS slugs and report HTTP status + job counts in a table for quick manual verification. Made-with: Cursor8bec05b -
feat(positioning): enforce global-remote guarantee across agent and pipelines
Make global_remote >= 5 a hard gate across batch, digest, pipeline, and agent results, and update system prompt + onboarding/landing copy to reflect the work-from-anywhere promise. Made-with: Cursor6100c16
-
Strengthen global remote intent in prompts and daily pipeline
- Add candidate-level location requirement to anonymized JOB SEARCH GOALS - Extend SYSTEM_PROMPT global_remote rubric with platform intent - Load MY_CLERK_ID profile in daily-pipeline for personalized scorer (single Clerk fetch) Made-with: Cursor2c7bbaf -
fix: Groq 429 recovery and 2500ms default score delays
Made-with: Cursor1c43fcf
-
Persist taught job board domains in Redis and merge into digest and pipeline search
Made-with: Cursorbcfce25 -
Make Groq the default inference provider
Flip server scoring/extraction and all runners to try Groq first, fall back to OpenRouter only on recoverable errors or missing keys, then degrade gracefully to heuristic scoring. Remove OpenRouter-driven Groq preemption and fix shortlist page to avoid Clerk hook prerender failures. Made-with: Cursor437742a -
Remove Claude/Gemini references
Update README/docs/env templates for OpenRouter + local ONNX inference. Rename batch job flag to disableAiForRun. Made-with: Cursora311036
-
Harden pipeline and email placeholders against undefined access
Made-with: Cursor26a88cc -
Add inference failure tracking, billing grace, credits UX, and safer errors
- Redis hourly failure counts per provider; preempt Groq when OpenRouter fails often - Stripe invoice.payment_failed sets subscriptionBillingGraceUntil; invoice.paid and active sub clear it - canUseSubscriberInference replaces strict active-only check for subscriber APIs and digest - Credit deductions log last 20 entries; balance API returns low-balance warning and usage - Job launcher shows credit balance, warning, and recent usage; sanitize inference API errors - ProfileSetup defaults subscribers to subscriber extraction; clarify feature-flag comments - Document daily-pipeline CLI as non-production vs in-app digest Made-with: Cursor46d3c1e
-
Pipeline: optional MY_CLERK_ID + Clerk resumeVector for hybrid fallback scoring.
- Add getResumeVectorForClerkUserId (same unsafeMetadata path as in-app flows). - daily-pipeline loads embedding once when MY_CLERK_ID and CLERK_SECRET_KEY are set; passes vector into scoreByFallbackHeuristics for all fallback paths. - Document MY_CLERK_ID in env.pipeline.example. Made-with: Cursorc32a632 -
Add hybrid MiniLM semantic layer to fallback job scoring.
- Add vector-utils singleton (Xenova/all-MiniLM-L6-v2) with getEmbedding and cosineSimilarity. - Store optional resumeVector on job preferences; derive async from headline + skills on save and onboarding. - Extend fallback heuristics with semantic_score 0-10; Strong Match requires keyword gates, global remote, and semantic > 7 when a resume vector exists. - Thread resume vectors through headless search, batch jobs (Clerk profile), and search-lab heuristic API; show semantic in launcher, batch status, and search lab. Made-with: Cursor9c8acc7 -
feat: Search Lab admin experiment, Serper pipeline, heuristic search lab
- Gate Search Lab behind lab admin and EXPERIMENTS_SEARCH_LAB; add layout and API access checks. - Use Serper (SERPER_API_KEY) for headless digest, batch, launcher, and daily pipeline; keep SerpAPI optional in Search Lab. - Search Lab: multi-provider search and extract, query-relevance badges, heuristic scoring API; remove OpenRouter objective flow. - Update launcher/UI copy and env.pipeline.example; LabAccessDenied optional title. Made-with: Cursor0eda89a
-
Remove Gemini/Anthropic; gate WebLLM and server extraction; use OpenRouter for server AI
Made-with: Cursor317f49d -
feat: rolling multi-angle job queries per site (buckets, remote A/B, contract/async)
- Eight complementary plans: Senior/Lead/Staff × explicit/cultural remote × contract/async passes - 1800-char budget; trim least-specific role operands only (never site/remote/negatives) - Digest and daily pipeline use shared rolling packer; pipeline config aligns with lib phrases - Launcher uses same strategy; shuffle randomizes operand order within each OR group Made-with: Cursor24665df -
feat: consolidate Google job queries into OR-groups with URL length packing
- Add shared packing for launcher (role/remote/async/negatives) and digest splits - Extend pipeline with PIPELINE_REMOTE + PIPELINE_ASYNC_CONTRACT; deprecate PIPELINE_LOCATIONS alias - Digest and daily-pipeline use multi-chunk buildSiteQuery; digest runs extra Serp calls when role split Made-with: Cursor2707d33
-
Add daily digest fan-out and harden pipeline numeric env parsing.
- Digest: Redis config, QStash cron/process routes, per-user runDigestForUserId, UI card, billing helpers. - GitHub Actions: POST digest cron to deployed app with CRON_SECRET. - daily-pipeline: finite env numbers and delay (avoid NaN threshold/sleep); safer score logs; digest-run null-safe customQuery.ea15a19
-
feat(pipeline): email top 5 close matches when thresholds exclude everything
Made-with: Cursore285c4f -
feat: background batch jobs with Redis, QStash, and launcher precision mode
Made-with: Cursor2a6192b
-
feat: add Search Lab recency controls and resilient Gemini fallback
Add provider-level recency filtering with a default 24h window in Search Lab, and switch the pipeline to run-level heuristic fallback when Gemini reports billing or quota exhaustion. Made-with: Cursor7f14aaf -
feat: migrate pipeline search to SerpAPI with default fallback scoring
Replace deprecated Google CSE usage with SerpAPI across the daily pipeline and CI/env docs, and add an auto fallback heuristic scorer so matching still works when Gemini is unavailable. Made-with: Cursor758abfd
-
fix: avoid OOM by using q4 weights for local model
Use quantized dtype for Transformers.js pipeline during build pre-cache and runtime inference. Made-with: Cursor0cbbf43 -
feat: add local Transformers.js provider + HF Spaces Docker
Add a server-side local scoring provider using Transformers.js (Qwen2.5 ONNX) with worker-based inference and streamed loading progress. Embed the job search launcher in-app and add a Dockerfile + model pre-cache script for Hugging Face Spaces. Made-with: Cursor769f62d
-
feat: Open in Job Scorer links in digest + ?url= prefill
- Default public app URL https://job-scorer.vercel.app (override PIPELINE_PUBLIC_APP_URL) - Email text/html includes Open in Job Scorer per match - JobApp reads ?url= and clears query after prefill - Workflow/README/env.example document optional PIPELINE_PUBLIC_APP_URL Made-with: Cursor39a7c52 -
fix(ci): use GitHub Environment for pipeline secrets
Jobs with secrets only on an environment (e.g. Production) must set environment: Production or GEMINI_API_KEY is empty. Support PIPELINE_MIN_GLOBAL_REMOTE_SCORE as alias for min global remote gate. Made-with: Cursora4de5f4
-
Add daily job pipeline: CSE discovery, Gemini scoring, email digest
- Hand-curated ATS queries in config/pipeline.ts (mirrors console workflow) - Shared fetch logic in lib/fetch-job-core.ts; API route delegates to it - Google CSE + Gemini server scoring + Resend/SMTP email helpers - scripts/daily-pipeline.ts with dry-run; GitHub Actions daily workflow - env.pipeline.example and README setup docs - Add tsx, nodemailer; engines.node >= 20 Made-with: Cursor8dbf17e