32 Commits

Author SHA1 Message Date
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
6b26f70ef7 Make cover letter discoverable: Overview, Ready panel, ⋯ menu
- Always show Cover letter card with Generate when empty; Regenerate + Copy when present
- Shared useCoverLetterGeneration hook calling runJobAction(generate_cover_letter)
- Ready tab previously had no cover letter UI; add same block under Fit Assessment
- Floating bar Cover letter button tooltip points to Overview/Ready
- Job detail ⋯ menu: Generate / Regenerate cover letter

Made-with: Cursor
2026-04-05 21:53:27 -04:00
Shaheer Sarfaraz
a0220df17f
Add open job listing action to discovered jobs (#274)
* feat: add open job listing action to discovered jobs

* chore: add skills lockfile

* impeccable
2026-03-15 21:13:57 +00:00
Shaheer Sarfaraz
6a19fff436
google dork links (#239)
* Add ready tab Google dork links

* ui changes

* docs

* ci fix
2026-02-28 22:23:50 +00:00
DaKheera47
cbc52cbac0 more analytics 2026-02-25 21:25:33 +00:00
DaKheera47
5ed9069813 Use optimistic skip mutation across Jobs page actions 2026-02-20 21:58:42 +00:00
DaKheera47
096ac21b19 Use optimistic mark-as-applied mutation across client entry points 2026-02-20 21:15:22 +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
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
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
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
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
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
85976caf9c useRescoreJob to reduce duplication 2026-01-25 12:06:14 +00:00
DaKheera47
f491f4634e better copy 2026-01-25 11:56:25 +00:00
DaKheera47
35365b5fca initial commit 2026-01-25 11:50:04 +00:00
DaKheera47
9dfb862649 ready panel now works with external resume json instead of local 2026-01-23 11:40:34 +00:00
DaKheera47
4b65f39650 robustness 2026-01-21 16:31:25 +00:00
DaKheera47
6a3a25578a use person name from base.json for file downloads 2026-01-21 14:48:17 +00:00
DaKheera47
164256326f Ready panel can edit now 2026-01-21 13:17:09 +00:00
DaKheera47
158e4b108b reduce prop drilling 2026-01-20 22:46:50 +00:00
DaKheera47
29b259352f UI intagration into header top section 2026-01-20 22:40:43 +00:00
DaKheera47
1fd6a4b4c2 initial commit 2026-01-20 22:11:09 +00:00
DaKheera47
6de6d87263 TailoredSummary component 2026-01-20 11:13:05 +00:00
DaKheera47
fde32d2c51 combined JobHeader 2026-01-20 11:09:50 +00:00
DaKheera47
d506966d4c try and consolidate duplicate helpers 2026-01-20 07:58:49 +00:00
DaKheera47
072feaf373 responsiveness 2026-01-16 03:29:45 +00:00
DaKheera47
54729dbf9f ready panel UI changes to better use larger panel 2026-01-15 23:07:58 +00:00
DaKheera47
d9187acb37 fit assessment UI 2026-01-15 18:14:00 +00:00
DaKheera47
84043c6f57 ready panel 2026-01-15 17:17:07 +00:00