Shaheer Sarfaraz
19266fe5eb
City search ( #217 )
...
* wave 1, jobspy only
* combine usa/ca to united states
* strict city location filter
* hide and show based on focus
* UI changes
* allow clicking cross!
* pill animate in
* animate out, uggo fix
* animate out
* framer motion
* animate component height
* adzuna
* hiring cafe implementation
* refactor: centralize shared search-city parsing and matching
* feat: migrate city setting to searchCities with legacy fallback
* docs: update pipeline and extractor city-search wording
* fix(orchestrator): normalize tokenized paste behavior
* fix(shared): tighten city matching semantics
* docs(extractors): document city-location knobs and geocoding note
2026-02-21 00:42:09 +00: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
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
032626bd7d
Fix #162 : real-time bulk action streaming progress ( #187 )
...
* initial
* refactor: centralize SSE plumbing for client and server
* docs: add centralized SSE usage standards to agents guide
* use sse to stream actions to the client
* ui: align bulk progress toast with default sonner style
* ui: remove hide action from bulk progress toast
* full width progress bar
* fix(stream): track client disconnect and writability
* fix(stream): stop bulk loop when SSE client disconnects
* fix(stream): avoid writing error/end to closed SSE response
* fix(stream): gate started/progress frames on writable SSE socket
* types(api): narrow SSE stream payload input contract
* refactor(ui): share clamp helper for bulk progress
* fix(stream): add heartbeat to bulk action SSE route
* feat(stream): include completed count in bulk completion event
* fix(client-sse): separate parse vs handler errors and cancel reader
2026-02-18 15:54:39 +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
672eb3d2b9
Ghostwriter always enabled
2026-02-15 22:16:50 +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
d82c69b4b0
Edit job details in UI ( #119 )
...
* api(jobs): normalize PATCH /jobs/:id response contract and error mapping
* api(jobs): support core job detail edits in update schema
* feat(client): add JobDetailsEditDrawer with core metadata form
* feat(orchestrator): open edit drawer from JobDetailPanel more actions
* feat(orchestrator): add edit drawer trigger to ready and discovered more actions
2026-02-09 21:25:00 +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
Copilot
3d7a014891
Remove /ukvisajobs page and related API surface ( #115 )
...
* Initial plan
* Remove ukvisajobs page and API
Co-authored-by: DaKheera47 <53654735+DaKheera47@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: DaKheera47 <53654735+DaKheera47@users.noreply.github.com>
2026-02-09 18:39:33 +00:00
Shaheer Sarfaraz
2fe0dc2c2f
Recalculate match in batch actions ( #102 )
...
* rescore in batch
* more tests!
* formatting!
2026-02-07 22:51:42 +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
cfabee5f45
Select multiple jobs for bulk actions ( #94 )
...
* Initial implementation
* UI
* UI
* floating bar animations
* UI and split up orchestrator page
* remove bulk action hint
* UI
* UI
* formatting
* fix lint
* enforce max actions
2026-02-07 14:39:49 +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
c4749b4211
feat: opinionated public DEMO_MODE with simulated/blocked actions, resets, and demo toasts ( #87 )
...
* feat(demo): add DEMO_MODE runtime helpers and /api/demo/info endpoint
* feat(demo): enforce simulated and blocked API actions under DEMO_MODE
* feat(demo): add deterministic seed dataset and 6-hour auto-reset
* feat(demo-ui): add demo banner and custom sonner toasts for simulated/blocked actions
* test+docs(demo): add demo mode coverage, behavior matrix, and operator docs
* formatting
* tests
* feat(demo): seed resets from typed baseline defaults
* formatting
* feat(demo): enrich baseline seed data and demo project catalog
* feat(demo): expand seeded applications and chart time ranges
* refactor(demo): split demo seed data from generation logic
* feat(demo): cap generated application history to 30 days
* feat(demo): rebalance generated job status distribution
* feat(demo-ui): make demo banner fixed and topmost
* minor fixes
* formatting
* duration revert
* durations
* feat(demo): share demo info hook, brighten demo toasts, and enforce webhook auth
* comment explaning
* formatting
* comments
* deadline builder comment
2026-02-05 16:04:04 +00:00
Devin Collins
d18464548e
feat: add salary display and missing salary penalty scoring ( #86 )
2026-02-05 07:35:17 +00:00
Shaheer Sarfaraz
16a8f1d15a
Use logger! add shim to convert backend responses to same format ( #84 )
...
* chore(orchestrator): add @infra import alias
* feat(server): add error/http/context/logger/sanitize infrastructure
* refactor(core): propagate request context, structured logs, and sanitization
* test/docs: update API contract assertions and contributor standards
* all pages working
* normalizing
2026-02-04 23:07:24 +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