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
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
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
fea00ae656
feat: search profiles, cover letters, discovery fixes
...
- 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
2026-04-05 19:35:14 -04:00
ilia
9576c3d7a1
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
2026-04-04 14:44:52 -04:00
Shaheer Sarfaraz
f3c164d252
feat(pipeline): parallelize discovery/process via evolved asyncPool ( #211 )
...
* feat(pipeline): centralize concurrency hooks and parallelize discovery/process steps
* feat(orchestrator): unify single and bulk job actions API
* job actions de-bulk-ified
* application inbox section debulk
* chore(orchestrator): remove remaining bulk wording from job action flow
* select multiple to skip with shortcut
* comments
* coomeents
* fix progress ordinal and add jobs actions payload examples
2026-02-20 16:49:13 +00:00
Shaheer Sarfaraz
5ed74bb59c
Tracer links ( #174 )
...
* initial commit
* format links right
jobops.dakheera47.com/cv/shaheer-google-de
* don't support legacy
* remove phishing look
* smaller links
* readiness check in settings
* rework UX
* right col
* pop a modal
* modal improvements
* show links
* documentation disclaimer
* fix(tracer-links): preserve descriptive resume link labels
* fix(tracer-links): classify bot user agents before browser families
* fix(tracer-links): reject non-http redirect destinations
* fix(tracer-redirect): disable caching for tracked redirects
* fix(origin): prefer canonical public base url over forwarded headers
* fix(auth): protect tracer analytics routes behind basic auth
* fix(ui): rename misleading tracer drilldown human metric
* style(tests): format tracer-links invalid-destination assertion
* fix(tests): prevent mocked fs from breaking sqlite data-dir resolution
* style(docs): format versioned docs json for biome
* fix(tests): mock tracer-links in pdf skills validation suite
2026-02-18 22:05:15 +00:00
Shaheer Sarfaraz
f8b5dc2f42
In progress flow ( #163 )
...
* initial commit
* move from applied to in-progress
* KANBAN BOARD!
* backfill jobs
* backfill rejected jobs
* drag events 😋
* fix backfill bug
* UI improvements
* remove applied
* gold near offer
* team match meeting swim lane
* formatting
* Add tests for InProgressBoardPage and enhance job stage handling
2026-02-15 00:45:45 +00:00
Shaheer Sarfaraz
687fd5e91f
feat(post-application): automatically pull from email ( #145 )
...
* feat(post-application): add schema and shared types for provider ingestion (#136 )
* test(orchestrator): ensure full localStorage shape in vitest setup
* feat(post-application): add provider registry and dispatcher framework (#137 ) (#146 )
* Implement Gmail provider credential persistence (#147 )
* Add unified post-application provider action API (#148 )
* Implement Gmail ingestion sync with 95/60 relevance policy
* Implement Gmail ingestion sync with 95/60 relevance policy (#149 )
* feat(post-application): add job mapping engine with llm rerank fallback
* feat(post-application): add inbox review APIs with transactional approve/deny (#151 )
* feat(post-application): add tracking inbox UI with provider controls (#152 )
* oauth implementation
* UI changes
* see past runs in more detail
* occurred at comes from email
* state mismatch
* better UI representation
* comments
* comments
* comments
* comments
* documentation
* explainer
* set things manually
* scrolling
* any found email can be pending
* searchable download
* Email-to-Job Matching Decision Tree
* email viewer list improvement
* simplification initial commit
* exclude discovered jobs
* show only resady
* dropdown
* mermaid
* syntax
* targets is the same as logging that is done manually
* event label
* duplicate avoidance
* clean up html
* token saving
* print
* send idx not uuid
* remove logging
* formatting
* better documentation
* documentation
* comments
* process all
* comments
2026-02-12 19:48:25 +00:00
Shaheer Sarfaraz
fe0aebe01a
Small bits and bobs, codebase quality ( #129 )
...
* initial change
* nav highlighting
* icon change
* deeeedoooop
* text
* show version number on all pages
* icon
* remove unused code
* add knip
* formatting
* remove unused code
* types fix
* remove notion completely from the codebase.
* update test for new url structure
* clean up the fucking shop boys
* make a "create job" factory and use that
* moar factories
* formatting
2026-02-10 20:01:58 +00:00
Shaheer Sarfaraz
b456ab1951
Job api performance ( #117 )
...
* feat(api): add lightweight jobs list view without pagination
* refactor(client): use lightweight jobs list and on-demand job detail
* refactor(ui): separate job list rows from full job detail
* perf(home): reduce jobs payload to applied lightweight rows
* perf(db): add safe composite index for jobs list queries
* feat(api): default jobs endpoint to lightweight list view
* style: apply biome formatting for jobs list-view changes
* feat(api): add jobs revision endpoint for lightweight change detection
* refactor(client): switch jobs auto-refresh to revision checks
* perf(client): drive pipeline freshness via sse with polling fallback
* refactor(orchestrator): remove pipeline status polling loop from page
* chore(client): add periodic safety refresh and refresh lifecycle hardening
* refactor(types): define JobListItem via Pick<Job> to prevent drift
2026-02-09 20:49:54 +00:00
Shaheer Sarfaraz
6353a23f6f
Small wins style tickets ( #88 )
...
* wrap text
* version check!
* initial commit for "remove below score" in pipeline, or manually
* comments
2026-02-05 19:17:14 +00:00
Shaheer Sarfaraz
b94f85b149
Reduce low risk duplication ( #79 )
...
* clean up helpers
* shared in it's own top level folder
* workspaces setup
* build fix
* disable workspaces?
* run ci
* rename job-flow to gradcracker
* optional dependencies
* formatting?
* more optional modules
* allow post install runs
* node bump
* remove post install
* add optionals
* add more
* formatting
* comments, but im unsure
* run typescript DIRECTLY
* better build
* camoufox simplification
* lint
* build process doesn't exist
* build fix
* lockfile
* type check everything, build only for client
* rename steps correctly
* import from package!
* fix formatting
* don't fetch twice
* fix concern
2026-02-02 21:30:14 +00:00
Shaheer Sarfaraz
6e771ce728
Timeline introduced ( #38 )
...
* initial implementation
* onboarding doesn't pop until invalid values are present
* link to job page
* proactive inputs working slightly
* onboarding gate reinstated
* better proactive buttons
* fully manual tracking for now.
* edit and delete timeline events
* status showing correctly
* tests update
* tests
* Update orchestrator/src/server/services/applicationTracking.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update orchestrator/src/server/services/applicationTracking.test.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update orchestrator/src/server/services/applicationTracking.test.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update orchestrator/src/client/pages/job/Timeline.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update orchestrator/src/client/pages/JobPage.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* add tests for application tracking routes and remove unused actionId from client API
* remove unnecessary await from synchronous transitionStage calls and improve test isolation
* relax externalUrl validation to allow non-URL metadata
* add toast notifications for data loading and event logging in JobPage
* comments
* fix: resolve type error in sponsor-matching.test.ts
* fix ci
* tests fix for github
* lint
* github comments
* build fix
* dedupe
* format
* types fix
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* formatting
* title and group id are discrete fields
* backfill
* hide view button on page
* show relevant dropdown options
* confetti!
* remove redundant
* confirm delete is a custom element now
* formatting
* fix styling
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-27 23:49:11 +00:00
DaKheera47
d4e83c0674
gem3 flash lint fix
2026-01-25 13:14:59 +00:00
DaKheera47
5c2eef2fc8
ran check:fix in orchestrator
2026-01-25 12:41:44 +00:00
DaKheera47
1fd6a4b4c2
initial commit
2026-01-20 22:11:09 +00:00
DaKheera47
717987c5cc
"rejected" isn't a thing. it's "skipped"
2026-01-15 14:06:14 +00:00
DaKheera47
5d7c394650
diff models for diff work
2026-01-11 15:30:23 +00:00
DaKheera47
cd5ec25c3b
allowing tailoring of resume before being manually built
2026-01-06 23:06:19 +00:00
DaKheera47
d6336d1bec
clearing db actions in settings
2026-01-02 17:21:05 +00:00
DaKheera47
4244c908e5
ensure that a "discovered" job must have a score
2025-12-15 01:19:01 +00:00
DaKheera47
cefb75a9ec
job_spy implementation
2025-12-14 22:24:34 +00:00
DaKheera47
4a00b3b900
source being extracted
2025-12-14 19:12:58 +00:00
DaKheera47
59c943b4b6
don't recrawl jobs if already seen
2025-12-14 15:35:29 +00:00
DaKheera47
1b082a3eb6
orchestrator initial commit...
2025-12-11 22:31:59 +00:00