Commit Graph
100 Commits
Author SHA1 Message Date
Shaheer SarfarazandCopilot eed5c2adba Gemini api key issue (#204)
* uggo ternary fix

* fix ai studio url

* service returns a 403 if unauthed

* pass validation correctly

* fix response format

* Update orchestrator/src/client/pages/settings/utils.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix nested ternaries client

* server fix

* Address PR #204 review feedback and stabilize CI

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-20 00:01:34 +00:00
Shaheer SarfarazandCopilot 3640abef2d Migration to tanstack query (#199)
* commit at some point in the middle, WIP

* formatting

* ci passing

* comments

* handle no jobid case

* better error handling

* comments

* Update orchestrator/src/client/hooks/queries/useJobMutations.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update orchestrator/src/client/hooks/queries/useSettingsMutation.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* better types

* formatter

* tracking inbox page

* in progress page

* tracer links page

* invalidate harder

* ensure tracer links docs show

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-19 23:04:47 +00:00
Shaheer Sarfaraz 8b71bef5cf Feat/job page relevant actions (#197)
* initial commit

* ui better-ish

* ci fix
2026-02-19 18:59:47 +00:00
Shaheer Sarfaraz aefb6ca78b feat(orchestrator): parallelize scoring and bulk rescore with bounded concurrency (#194)
* feat(orchestrator): parallelize scoring and bulk rescore with bounded concurrency

* chore(docs): format versioned docs metadata for biome

* fix(orchestrator): address PR review feedback on async pool and bulk rescore

* ci(docs): run biome --write before docs version commit
2026-02-19 18:32: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 16dd17ebea Fix Tailor CV adding new skills and restore original skills on revert (#190)
* Initial commit

* refactor slightly

* refactor and fix bugs
2026-02-18 23:23:33 +00:00
Shaheer Sarfaraz a148030d46 Update demo section header in README 2026-02-18 22:55:47 +00:00
Shaheer Sarfaraz 90d6584a3c Update README formatting and section titles 2026-02-18 22:55:35 +00:00
Shaheer Sarfaraz b88d00b15d Make projects optional when moving jobs to Ready (#189)
* Make resume projects optional and reuse selection rules

* Apply Biome import/format fixes

* Handle explicit empty project selection in PDF generation

* Hide selected projects section when catalog is empty

* Avoid projects section flash while catalog is loading
2026-02-18 22:31:59 +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 4f8664cb9c feat(command-bar): hide low relevance matches by default (#186) 2026-02-18 13:55:44 +00:00
Shaheer Sarfaraz 625264c3a2 docs: clarify Gmail OAuth setup and required scopes (#185) 2026-02-18 13:44:25 +00:00
Shaheer Sarfaraz 63bf5bdc87 fix: move docs button to sidebar footer and open in new tab (#184)
* fix(ui): move docs to sidebar footer button with new-tab icon

* sidebar documentation
2026-02-18 13:36:16 +00:00
Shaheer Sarfaraz 16fdb425d8 Add demo banner star-repo CTA analytics and fix CI formatting (#183)
* add star cta

* feat: track demo banner star repo clicks

* chore: format docs-site json for biome ci
2026-02-18 13:21:32 +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
Shaheer Sarfaraz 4da264eb48 Add better account details for reactive resume section (#175) 2026-02-17 13:05:50 +00:00
Shaheer Sarfaraz 5ddd6d2c73 Images in documentation (#173)
* docs images

* images in documentation

* logos

* update colours to orange-related
2026-02-16 17:00:51 +00:00
Shaheer SarfarazandCopilot 390d03625e Add documentation for undocumented features (#172)
* documentation writing skill

* visa sponsors page

* overview

* in progress board

* settings

* reactive resume section

* database backups

* workflows

* post application tracking flow

* manual tracking caveats

* pricing section

* pipeline run detalis

* job search bar

* keyboard shortcuts

* bulk actions

* no informal phrasing

* formatting

* build fix?

* Update docs-site/docs/features/overview.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs-site/versioned_docs/version-0.1.20/features/orchestrator.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs-site/docs/features/visa-sponsors.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs-site/docs/features/in-progress-board.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* remove link to page that don't exist

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-16 00:33:35 +00:00
Shaheer Sarfaraz 1f929dfc7f Create the setup for the documentation page (#171)
* don't run for generated docusaurus

* format

* workflow to autoupdate docs version

* fix versioning

* add link back to app

* remove old docs

* html link???

* don't track .docusaurus

* documantation build
2026-02-15 22:50:52 +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 e6563e74c3 Add visual feedback for Move to Ready action (#165)
* feat(orchestrator): add visual feedback when moving jobs to Ready

- Added `toast.message("Moving job to Ready...")` in `OrchestratorPage.tsx` for single item keyboard shortcut action.
- Added `toast.message("Moving jobs to Ready...")` in `useBulkJobSelection.ts` for bulk `move_to_ready` action.
- Updated `OrchestratorPage.test.tsx` to verify the toast notification.

This addresses the issue where pressing 'R' provided no visual feedback until the action completed.

* fix(orchestrator): remove accidental db files

Removed `orchestrator/data/jobs.db`, `orchestrator/data/jobs.db-shm`, and `orchestrator/data/jobs.db-wal` which were accidentally created during testing.

* fix(orchestrator): remove accidental root sqlite.db

Removed `orchestrator/sqlite.db` which was also accidentally created.
2026-02-15 18:44:28 +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 f114fb6200 Update project title in README.md 2026-02-14 23:04:58 +00:00
Shaheer Sarfaraz 4cc91cf84a Update quick start instructions in README 2026-02-14 19:25:52 +00:00
Shaheer Sarfaraz a899d54349 Add contributors badge to README 2026-02-14 01:38:29 +00:00
Shaheer Sarfaraz c037dafbe2 Revise README for clarity and additional features
Updated README to enhance project description and features.
2026-02-14 01:19:43 +00:00
Shaheer Sarfaraz d4d2c0c26b initial commit (#158) 2026-02-12 19:59:25 +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 05f1c62de2 Auto save project selection bug (#134)
* fix(tailoring): remove auto-sync effect causing race conditions

Remove the problematic useEffect that was syncing incoming job data
automatically. The effect caused race conditions where user edits were
overwritten after auto-save completed. Now, state only resets when the
job ID changes (user switches to a different job). User edits persist
until explicitly saved.

Fixes #133

* fix(tailoring): remove auto-save from tailor mode

Remove the 1500ms auto-save timeout that was causing race conditions
with the state sync. Users must now explicitly save changes via the
Save Selection button or finalize to persist changes.

* refactor(tailoring): remove draft status state and UI

Remove the draftStatus state and related UI elements that showed
saving/saved/unsaved status. With auto-save removed, this status
indicator is no longer needed. Users now explicitly save via buttons.

* test(tailoring): remove auto-save test

Remove the test that verified auto-save behavior since auto-save
has been removed from the tailor mode. Users now explicitly save
via the Finalize button.

* refactor(tailoring): remove dead focus tracking code

Remove the activeField state and all related focus/blur tracking that
was orphaned after removing auto-sync. The focus tracking was only
used to prevent the auto-sync effect from running while editing.

Changes:
- Remove TailoringActiveField type export
- Remove activeField state and setActiveField from useTailoringDraft
- Remove handleFieldBlur callback from TailoringWorkspace
- Remove onFieldFocus/onFieldBlur props and handlers from TailoringSections

39 lines of dead code removed.

* docs(tailoring): clarify save behavior comment

Update comment to distinguish between editor mode (Save Selection
button) and tailor mode (only persists on finalize). Addresses
review feedback.

* docs(tailoring): clarify useEffect dependencies

Add note explaining why 'job' is included in dependencies despite
the effect being guarded by job.id check. Addresses review feedback
about dependency array clarity.

* fix(tailoring): sync server-normalized values after save

Update persistCurrent and saveChanges to use the returned job from
api.updateJob and call applyIncomingDraft. This ensures local state
stays in sync with server-normalized values (e.g., trimmed fields).

Also removes unused markCurrentAsSaved dependency.

* refactor(tailoring): simplify draft sync effect

Remove unused save snapshot helpers and stop exposing them from the
hook. Track the latest job in a ref and only sync drafts when the job
id changes to avoid unnecessary effect runs while keeping data
correctness.

Addresses review feedback on dependency churn and dead API surface.
2026-02-11 16:18:17 +00:00
Shaheer Sarfaraz e114c5d592 Keyboard shortcuts (#131)
* feat(shortcuts): add tinykeys + core infrastructure (useHotkeys, shortcut-map, KbdHint)

Install tinykeys (~400B) for declarative keyboard shortcut handling.
Add useHotkeys React hook with input-guarding logic, centralized
shortcut definitions, and a reusable KbdHint badge component.

Ref #113

* feat(shortcuts): wire j/k navigation and 1-4 tab switching

Add useHotkeys call to OrchestratorPage with:
- j/ArrowDown to navigate to next job in list
- k/ArrowUp to navigate to previous job
- 1/2/3/4 to switch between Ready/Discovered/Applied/All tabs
Auto-scrolls the list to keep the selected job visible.

Ref #113

* feat(shortcuts): add context action shortcuts (s/a/t/p/d/o/x/Esc)

Wire keyboard shortcuts for all primary actions:
- s: skip job (discovered/ready tabs)
- a: mark applied (ready tab)
- t: toggle tailor mode (discovered/ready tabs)
- p: view PDF in new tab (ready tab)
- d: download PDF (ready tab)
- o: open job listing (all tabs)
- x: toggle select current job
- /: open search (command bar)
- Escape: clear selection

Actions are tab-scoped and guard against in-flight state.
Thread tailorTrigger counter prop through JobDetailPanel to
DiscoveredPanel and ReadyPanel for keyboard-driven tailor toggle.

Ref #113

* feat(shortcuts): add bottom hint bar and help dialog (? key)

Add KeyboardShortcutBar -- a Superhuman-style bottom bar showing
available shortcuts for the current tab. Dismissible with X button,
preference stored in localStorage.

Add KeyboardShortcutDialog -- a grouped help overlay triggered by '?'
showing all shortcuts with their key bindings in a two-column layout.

Both components are context-aware, only displaying shortcuts valid
for the active tab.

Ref #113

* feat(shortcuts): add visual KbdHint badges on action buttons

Show keyboard shortcut key caps on primary action buttons:
- DecideMode: 's' on Skip, 't' on Start Tailoring
- ReadyPanel: 'p' on View PDF, 'd' on Download, 'o' on Open Listing,
  'a' on Mark Applied
- OrchestratorFilters: '1'-'4' on tab triggers

All hints are desktop-only (hidden below lg breakpoint).

Ref #113

* refactor(shortcuts): migrate Cmd+K to useHotkeys in JobCommandBar

Replace manual window.addEventListener keydown handler with the
shared useHotkeys hook for consistency across all keyboard shortcuts.

Ref #113

* fix(test): mock getProfile in OrchestratorPage tests

* style: move tab shortcut indicator before label

* feat: add ArrowLeft/Right shortcuts for tab navigation

* feat: show keyboard helpers only when Control is held down

* feat: expand shortcut bar with multiline layout

* feat: show keyboard shortcut help on first launch

* 1

* 2

* 3

* better modifier pattern

* 5

* tailoring is a toggle

* tests

* tests is passing

* r to move to ready

* tests
2026-02-10 22:13:05 +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 2962e0c2ae Fix password manager autofill for pipeline auth (#92) (#127)
* Fix basic auth flow to support password manager autofill

* fix orchestrator CI typecheck in api client

* clear basic auth fields when prompt closes

* update basic auth dialog description copy
2026-02-10 18:05:47 +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 2c8de6c92e pipeline completed successfully toast fires on every reload (#120) 2026-02-09 21:38:04 +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
Shaheer Sarfaraz 4cca521cd1 Cmdk based command bar (#110)
* initial commit

* use colours!

* match by scoring

* scroll job card into view

* introduce @ based 'locks' to restrict search to specific statuses

* clear lock states on close

* split up component

* inline pill

* resuse job row content

* fix intro anim

* larger size, instruction

* refactor existing search feature

* lock colour border

* if active, clear active on escape

* remove query param

* documenration update

* scoring logic

* check exists before scroll

* status dot and checkbox occupy the same space!
2026-02-09 16:38:36 +00:00
Shaheer Sarfaraz a24522437c manual import should move to ready directly (#109) 2026-02-08 15:12:54 +00:00
Shaheer Sarfaraz bd6834f99e Hotfix location in pipeline search (#108)
* feat(shared): centralize supported country list and source-country rules

* feat(orchestrator): add country selector and UK-only source gating in automatic run modal

* feat(orchestrator): persist country selection and run only compatible extractors

* fix(pipeline): enforce country-source compatibility during discovery

* test(orchestrator): cover country-based source gating and pipeline enforcement

* formatting

* test fix

* lint

* comments

* prevent auto focus grab

* verification

* command and popover

* make sure scroll is working
2026-02-08 13:02:52 +00:00
Shaheer Sarfaraz 9b80c2e05d Tailor all ai fields (#106)
* initial commit

* accordionising

* merge extra cards

* visual highlight

* everybody becomes an accordion

* bugbashing

* text area

* split up tailoring editor

* feat: enhance `parseTailoredSkills` to support legacy string arrays and add comprehensive tests for parsing logic.
2026-02-08 01:30:36 +00:00
Shaheer Sarfaraz cf7032ce5e Additional Filter support (#103)
* Initial commit

* drawer initial implementation

* fix resetting

* formattign

* sort by salary

* sentence reading

* salary bounds

* responsiveness

* fix copy

* floating bar on mobile

* allow selecting on mobile

* formatting

* refactor

* don't count test files

* validate url after parsing
2026-02-08 00:19:26 +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 60788b0f6a modal to configure pipeline settings on pipeline runs (#99)
* feat(orchestrator): add unified run modal shell with Automatic/Manual tabs

* feat(orchestrator): implement Automatic tab presets, estimate, and save+run flow

* refactor(manual-import): reuse manual import flow inside unified run modal

* refactor(settings): move pipeline tuning out of settings page into run modal

* stage 5

* jobs per term simplified

* copy improvement

* pill input

* better UI

* style(orchestrator): align run settings inputs on one row

* style(orchestrator): remove hover and pointer affordance from term pills

* style(orchestrator): restore hover and pointer affordance for term pills

* style(orchestrator): make search term pill hover more prominent

* better hover

* refactor(orchestrator): use react-hook-form in automatic run panel

* formatting

* fix(orchestrator): resolve biome issues in automatic run modal

* better copy

* feat(orchestrator): auto-select custom preset on manual config changes

* remove badge

* feat(orchestrator): redesign automatic run panel with collapsible advanced settings

* refactor(orchestrator): move estimate summary to footer and dedupe sources

* style(orchestrator): separate search term input from term pills

* style(orchestrator): remove save preset action from automatic footer

* ux(orchestrator): make entire search term pill tap-to-remove

* remove badge

* remove badge

* fix(orchestrator): return zero estimate when search terms are empty
2026-02-07 21:48:44 +00:00
Shaheer Sarfaraz a45cb0a724 change demo mode pdfs (#96) 2026-02-07 15:51:20 +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 0e6f0bcf88 Inputs getting unset fix (#91)
* codex 5.3 one shot

* prevent cursor changing position
2026-02-05 19:43:10 +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
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 82b261c7bc Refactor LLM service into modular adapters and policies (#83)
* llm migration

* orchestrator runer

* Decompose runPipeline steps

* dedupe

* refactor(settings): unify settings conversion metadata and round-trip tests

* refactor(llm): extract shared provider strategy factory

* refactor(settings-ui): add reusable numeric setting section

* test(orchestrator): stabilize usePipelineSources localStorage setup

* comments
2026-02-04 21:48:28 +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 179deffe13 Database backups (#75)
* initial commit

* test fix

* manual test

* copilot comments

* code quality skill

* comments

* fix types problem

* formatting

* tests now correct for new backup method

* UTC dates
2026-02-02 00:07:39 +00:00
Shaheer Sarfaraz 2841a7fe3a Add Star History section to README
Added a Star History section with responsive images.
2026-02-01 13:51:20 +00:00
Shaheer Sarfaraz b02dac5fe8 Fix for level 1 being added to skills (#73)
* single commit fix!

* fix tests!
2026-01-31 23:20:05 +00:00
Shaheer Sarfaraz 3be0d25c87 Starting work on Dashboard! (#65)
* initial commit

* fix build issues and configurable time duration

* show in nav

* Positive response rate by posting freshness

* load today's jobs for charts

* fix infinite refetching with onboarding gate

* application to response rate

* refactor charts to their own directory

* bar hover color

* Duration selector embedded in navbar

* always load env

* remove warning about low conversion rate

* trend graph for applications per day

* better copy

* remove freshness response chart

* bottom line chart color and tooltip improved

* introduce check all command

* fix lint

* tests added and CI passing
2026-01-30 11:40:17 +00:00
Shaheer Sarfaraz b4641ad9cb Customise llm base url (#68)
* backend initial commit

* frontend initial commit

* better copy

* make lmstudio work

* enum of providers

* better error messages

* llm model settings stay in one place

* llm settings should be under the model accordion

* skip llm key step in onboarding if provider is set to local

* onboarding now factors in new llm provider flow

* fix tests

* fix typecheck
2026-01-29 16:20:12 +00:00
Shaheer SarfarazandCopilot 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
Shaheer Sarfaraz ad6a79e74f Update issue templates 2026-01-27 17:55:44 +00:00
Shaheer Sarfaraz 33ab3595ae Merge pull request #62 from DaKheera47/app-crash-when-asking-for-base-id-in-onboarding
App crash when asking for base id in onboarding
2026-01-27 15:15:34 +00:00
Shaheer Sarfaraz f92cdbf0df Merge pull request #49 from DaKheera47/formatting-on-push
- don't run docker image build for every PR
- Automated Linting: Uses Biome to ensure code quality and consistency across the repository.
- Test Orchestration: Executes unit tests for the orchestrator service using Vitest.
- Parallel Build Verification: Implements a matrix build strategy to verify orchestrator and extractors simultaneously, reducing total CI runtime.
- Optimized Resource Usage:
    - Concurrency Control: Automatically cancels outdated runs when new commits are pushed.
    - Selective Script Execution: Skips heavy binary downloads (Camoufox) during extractor builds to speed up verification.
    - Granular Caching: Configures project-specific dependency caching for faster installation.
2026-01-26 11:12:04 +00:00
Shaheer Sarfaraz 3c710f28c2 Merge pull request #46 from DaKheera47/jobspy-valid-countries-dropdown
Valid countries for the JobSpy scraper is a list now
2026-01-25 12:25:38 +00:00
Shaheer Sarfaraz 63b67baacf Merge pull request #36 from DaKheera47/copilot/update-ukvisajobs-search-copy
Clarify UK Visa Jobs search limitation to job titles only
2026-01-25 12:07:31 +00:00
Shaheer Sarfaraz e3e70f5b60 Merge pull request #45 from DaKheera47/rerun-fit-assessment-and-scoring
Rerun fit assessment and scoring
2026-01-25 12:06:29 +00:00
Shaheer Sarfaraz 062f5cf070 Add GitHub Actions workflow for GHCR
This workflow builds and pushes Docker images to GitHub Container Registry (GHCR) for tagged releases and pull requests.
2026-01-25 10:59:43 +00:00
Shaheer Sarfaraz a2114cc454 Merge pull request #30 from anasyd/main
feat: add option to fetch from a link
2026-01-24 13:47:32 +00:00
Shaheer Sarfaraz f15ecd3f5f Merge pull request #29 from DaKheera47/show-enabled-extractors-in-the-ui
Show enabled extractors in the UI
2026-01-23 13:52:45 +00:00
Shaheer Sarfaraz 88db086d86 API implementation for Reactive Resume
Merge pull request #10 from DaKheera47/reactive-resume-v5
2026-01-23 12:42:32 +00:00
Shaheer SarfarazandCopilot 852e2ff6fc Update orchestrator/src/server/api/routes/profile.test.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-23 12:36:25 +00:00
Shaheer SarfarazandCopilot 442e600b58 Update orchestrator/src/client/pages/settings/components/ReactiveResumeSection.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-23 12:36:07 +00:00
Shaheer Sarfaraz b24b11b0d3 Add contact section for user support
Added a contact section for user assistance and included a link to open issues.
2026-01-23 00:10:13 +00:00
Shaheer Sarfaraz 54a3c8821d Update README to clarify dashboard access command 2026-01-22 23:36:30 +00:00
Shaheer Sarfaraz 34ef2f8902 Revise Quick Start instructions in README
Updated the Quick Start section for clarity and accuracy.
2026-01-22 23:35:45 +00:00
Shaheer Sarfaraz d58dcbb441 Merge pull request #20 from DaKheera47/user-onboarding
User onboarding UI
2026-01-22 22:05:31 +00:00
Shaheer SarfarazandCopilot 91ba0c9fbb Update orchestrator/src/client/components/OnboardingGate.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-22 21:46:01 +00:00
Shaheer SarfarazandCopilot a864fbba2e Update orchestrator/src/shared/rxresume-schema.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-22 21:45:49 +00:00
Shaheer Sarfaraz 03649f3d17 Merge pull request #19 from anasyd/fix-improve-LLM-API-validation
Fix PDF generation failures from malformed AI responses
2026-01-22 20:33:34 +00:00
Shaheer Sarfaraz 1ca459ec34 Merge pull request #18 from DaKheera47/env-to-ui
Env in UI
2026-01-22 16:57:04 +00:00
Shaheer SarfarazandCopilot 6913607eef typo fix
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-22 16:25:52 +00:00
Shaheer Sarfaraz 01c97ec59d add star history chart to readme 2026-01-22 10:02:45 +00:00
Shaheer Sarfaraz 8de55e5b10 Analytics note 2026-01-21 22:14:39 +00:00
Shaheer Sarfaraz b4d60549c5 Merge pull request #15 from DaKheera47/settings-page-refactor
Settings page refactor
2026-01-21 21:46:53 +00:00
Shaheer SarfarazandCopilot b4476d1334 Update orchestrator/src/client/pages/settings/components/ResumeProjectsSection.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-21 21:28:53 +00:00
Shaheer Sarfaraz a4ed912de1 Merge pull request #14 from DaKheera47/self-hosting-improvement
Self hosting improvement
2026-01-21 16:43:18 +00:00
Shaheer Sarfaraz 5ac6ca3b24 Merge pull request #12 from DaKheera47/show-sponsor-information-in-ui
Show sponsor information in UI
2026-01-20 23:38:27 +00:00
Shaheer SarfarazandCopilot 2d0d91cd2e Update orchestrator/src/client/pages/settings/components/DisplaySettingsSection.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-20 23:32:35 +00:00
Shaheer SarfarazandCopilot ba27eb07b1 remove redundant check
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-20 23:19:03 +00:00
Shaheer SarfarazandCopilot dd03eed0fb unused import
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-20 23:18:08 +00:00
Shaheer SarfarazandCopilot 0ec707143a unused import
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-20 23:18:00 +00:00
Shaheer SarfarazandCopilot af2ee1fa9c unused import
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-20 23:17:48 +00:00
Shaheer SarfarazandCopilot 53e16013a8 unused import
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-20 23:17:41 +00:00
Shaheer Sarfaraz 97984be84f Merge pull request #9 from DaKheera47/refactoring-large-files
Refactoring large files
2026-01-20 11:45:13 +00:00
Shaheer Sarfaraz 65551b147f [extractor] Manually import job description
Merge pull request #7 from DaKheera47/manually-import-job-description
2026-01-19 20:06:59 +00:00
Shaheer SarfarazandCopilot 1b927a13be safer runtime assertion
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-19 19:45:26 +00:00
Shaheer SarfarazandCopilot 5bd57c1b9f better runtime assertion
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-19 19:45:15 +00:00
Shaheer SarfarazandCopilot cdf395cc01 ensure links are urls
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-19 19:44:53 +00:00
Shaheer SarfarazandCopilot 544a5ca86f Catch possible errors in scoring
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-19 19:31:36 +00:00
Shaheer Sarfaraz ee74c7d2de Rename project from Job-Ops to JobOps 2026-01-19 13:01:47 +00:00
Shaheer Sarfaraz 3b2aa70e8c Merge pull request #5 from DaKheera47/navbar-and-ui-improvements
Navbar and UI improvements
2026-01-18 01:41:28 +00:00