Shaheer Sarfaraz
d34a9f041b
Hiring cafe extractor ( #192 )
...
* feat(hiringcafe): register new source across shared/server/client enums
* feat(hiringcafe-extractor): add browser-backed Hiring Cafe dataset extractor
* feat(orchestrator): integrate Hiring Cafe discovery service into pipeline
* feat(orchestrator-ui): add Hiring Cafe to source availability and run estimates
* chore(hiringcafe): wire CI/docker and add extractor documentation
* chore(format): apply biome formatting for Hiring Cafe integration
* add original websites
* coomints
* number or null
2026-02-19 12:51:55 +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
c5c6675f04
feat: add Adzuna extractor with orchestrator integration ( #177 )
...
* feat(settings): add adzuna source fields and country compatibility
* feat(discovery): integrate adzuna extractor into pipeline
* feat(client): wire adzuna in source selection and run budgeting
* docs(extractors): add adzuna guide and configuration notes
* chore(workspaces): register adzuna extractor in lockfile
* fix(adzuna): run extractor via npm script instead of npx
* fix(adzuna): execute extractor via node+tsx without shell
* fix(adzuna): prefer npm run start without shell, fallback to tsx
* fix(docker): include adzuna extractor workspace in image
* chore(adzuna): reuse shared type-conversion utilities
* type-check adzuna
* formatting
* deeedooop
* better instructions
2026-02-17 16:49:42 +00:00
DaKheera47
2fc692557f
race condition
2026-02-15 22:20:56 +00:00
DaKheera47
00531c83c4
initlal commit
2026-02-15 22:16:50 +00:00
Shaheer Sarfaraz
d0b4091a60
Ghostwriter Introduced ( #166 )
...
* initlal commit
* Ghostwriter always enabled
* rename code
* ghostwriter panel
* separate component
* ui improvements
* single thread
* copy improvement
* dont pop up keyboard shortcuts
* markdown renderer
* ghostwriter button placement
* better UX
* ghostwriter copy
* meta shortcut
* better settings menu
* formatting
* doocumentation
* add tests
* race condition
* race condition 2
* pass title
* more comments
* comments
* formtting
2026-02-15 22:03:37 +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
4e1ea28301
Enable Glassdoor as a JobSpy source ( #126 )
...
* feat(shared): add glassdoor to job source model
* feat(jobspy): support glassdoor site in scraper and discovery
* feat(pipeline): include glassdoor in source selection and API schema
* feat(ui): add glassdoor toggle to jobspy settings and run estimates
* test/docs: cover glassdoor jobspy integration end-to-end
* fix(jobspy): make glassdoor always-on without settings toggle
* fix(jobspy): fallback glassdoor when location is country-level
* refactor(jobspy): drop direct pandas usage in wrapper
* feat(pipeline): gate glassdoor by supported countries
* fix(jobspy): restore pandas output and keep glassdoor disable copy
* fix(jobspy): map country-level glassdoor searches to city fallbacks
* feat(ui): require glassdoor city for country-level runs
2026-02-10 17:57:49 +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
a409aa5ee0
Live scraping updates in pipeline UI ( #100 )
...
* initial commit
* fix clear script
* cancelling pipelines
* formatting
2026-02-07 22:44:00 +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
37708662d3
Merge branch 'main' into manually-import-job-description
2026-01-19 18:44:17 +00:00
DaKheera47
8108688609
load data from data directory correctly, honour env first
2026-01-19 18:43:40 +00:00
DaKheera47
4f4f00e42c
manual import initial comit
2026-01-19 18:39:14 +00:00
DaKheera47
717987c5cc
"rejected" isn't a thing. it's "skipped"
2026-01-15 14:06:14 +00:00
DaKheera47
e954cba4b1
ai can update more fields
2026-01-11 00:42:49 +00:00
DaKheera47
cd5ec25c3b
allowing tailoring of resume before being manually built
2026-01-06 23:06:19 +00:00
DaKheera47
0f36d9b8a6
initial implementation
2025-12-26 20:17:05 +00:00
DaKheera47
368fe60935
rename pipeline webhook to what it is
2025-12-15 17:23:11 +00:00
DaKheera47
04f771f289
can change openrouter model in UI
2025-12-15 16:12:15 +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
051c09d943
Dockerization :)
2025-12-11 23:56:07 +00:00
DaKheera47
a6a4cb9f89
clear db button
2025-12-11 22:47:45 +00:00
DaKheera47
1b082a3eb6
orchestrator initial commit...
2025-12-11 22:31:59 +00:00