Commit Graph

366 Commits (b33aa0c3222d316fc0e751b65969864b8150dd63)

Author SHA1 Message Date
ahmed.mujtaba b33aa0c322 Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into SQS_BROKER 2026-09-04 17:59:48 +05:00
ahmed.mujtaba c5d603c621 approved permission 2026-09-04 17:58:19 +05:00
ahmed.mujtaba 0365ee3a8f Merge pull request 'permission module base applied' (#69) from SQS_BROKER into main
Deploy to S3 / deploy (push) Successful in 37s Details
Reviewed-on: #69
2026-09-04 11:49:42 +00:00
ahmed.mujtaba 3cdfdd4c4c Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into SQS_BROKER 2026-09-04 16:49:14 +05:00
ahmed.mujtaba 4086bbdeb4 permission module base applied 2026-09-04 16:48:30 +05:00
ahmed.mujtaba 6a1f5ba9fa Merge pull request 'SQS_BROKER' (#68) from SQS_BROKER into main
Deploy to S3 / deploy (push) Successful in 33s Details
Reviewed-on: #68
2026-09-04 11:12:47 +00:00
ahmed.mujtaba c353f41b20 Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into SQS_BROKER 2026-09-04 16:11:53 +05:00
ahmed.mujtaba 0558af52c4 . 2026-09-04 16:10:56 +05:00
ahmed.mujtaba d541b82067 Merge pull request 'deparmetn req1 maanged' (#67) from SQS_BROKER into main
Deploy to S3 / deploy (push) Successful in 35s Details
Reviewed-on: #67
2026-09-04 08:08:28 +00:00
ahmed.mujtaba 6ebdd7c5ba deparmetn req1 maanged 2026-09-04 13:07:18 +05:00
Talha Ahmed 0d209315ab Candidates: show ATS score, stage and recruiter instead of just an email column
Deploy to S3 / deploy (push) Successful in 34s Details
The recruiter table was user-centric (GET /candidate/fetch/users), so it could
only ever render account fields - name, email, created date. Everything a
recruiter actually triages on lives on the application, not the user.

Point the table at GET /candidate/fetch and map application rows through a new
toApplicationListView, adding Job, ATS (score + band chip), Stage and Recruiter
columns. Stage and band become real filters; the dead Department facet is gone.

Manual uploads came back unscored because the list path never joined the ATS
results, so attach scores there and expose ai_score/recommendation from the
manager serializer, deriving the band from the score when the model omitted it.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 20:59:04 +05:00
Talha Ahmed 8540577531 Fix inbox loading stall
Deploy to S3 / deploy (push) Successful in 34s Details
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 19:59:26 +05:00
ahmed.mujtaba 2101fbac74 Merge pull request 'remove the ui bnutton' (#66) from Implement_Changes into main
Deploy to S3 / deploy (push) Successful in 39s Details
Reviewed-on: #66
2026-09-03 14:01:41 +00:00
ahmed.mujtaba 3ca8e2d287 Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Implement_Changes 2026-09-03 19:00:44 +05:00
ahmed.mujtaba cb94d8bc51 remove the ui bnutton 2026-09-03 18:59:47 +05:00
ahmed.mujtaba d1455ed117 Merge pull request 'Implement_Changes' (#65) from Implement_Changes into main
Deploy to S3 / deploy (push) Successful in 36s Details
Reviewed-on: #65
2026-09-03 13:18:40 +00:00
ahmed.mujtaba a6d12be5fb Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Implement_Changes 2026-09-03 18:17:51 +05:00
ahmed.mujtaba 6c1d4c848e dater format done 2026-09-03 18:16:30 +05:00
ahmed.mujtaba 3f142570f6 Merge pull request 'Implement_Changes' (#64) from Implement_Changes into main
Deploy to S3 / deploy (push) Successful in 37s Details
Reviewed-on: #64
2026-09-03 11:27:42 +00:00
ahmed.mujtaba fb94db5f41 Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Implement_Changes 2026-09-03 16:25:22 +05:00
ahmed.mujtaba e22da6ed0b . 2026-09-03 16:13:09 +05:00
ahmed.mujtaba 1133517117 . 2026-09-03 16:03:42 +05:00
ahmed.mujtaba 1399cf3fec Cv_extractor of g_sheet 2026-09-03 15:15:16 +05:00
talha.ahmed 2400f0fef8 Merge pull request 'Roles: consolidate the hand-made Manager role; Title Case role names' (#63) from Talha into main
Deploy to S3 / deploy (push) Successful in 31s Details
2026-09-02 17:11:11 +00:00
Talha Ahmed e7752b94e6 Roles: consolidate the hand-made Manager role; Title Case role names
Migration 027 moves live members of the UI-created Manager role onto
the seeded hiring_manager (which has carried the same
manager_candidates bundle since 024) and soft-deletes it - guarded and
idempotent, the seeded role is never matched.

Access Control no longer lists candidate: it is the applicant account
type every candidate user sits on, managed nowhere near a permission
matrix. The row stays in the DB.

New lib/format.js formatRole renders snake_case role names and
ALL-CAPS status enums as Title Case everywhere users see them -
Access Control, Settings user badges and role picker, the topbar
profile, Candidates role column and export, and the inbox
application-status badges (INTERVIEW -> Interview).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 22:10:17 +05:00
talha.ahmed e292714b88 Merge pull request 'Roles: prune unused seeded staff roles down to the org�s four' (#62) from Talha into main
Deploy to S3 / deploy (push) Successful in 35s Details
2026-09-02 17:01:10 +00:00
Talha Ahmed b7700b766a Roles: prune unused seeded staff roles down to the org's four
The organisation runs four staff roles - system_administrator,
recruiter, hiring_manager, department_head. Migration 026 soft-deletes
hr_administrator, interviewer and ceo (listings filter on is_deleted,
so they vanish from Access Control and every role picker). candidate
stays: it is the applicant account type every candidate user sits on,
not a staff role. Guarded: a role that still has live members is left
untouched until they are reassigned, and the idempotent migration picks
it up on a later boot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 21:59:08 +05:00
Talha Ahmed cc9d7c08d1 Brand-styled XLSX exports across Inbox, Candidates and Talent Pool
New shared lib/exportXlsx.js: every Export button now downloads a
dashboard-flavoured .xlsx - deep-green title band with lime text, mint
meta row (view, row count, date), ink-teal header row, zebra data rows,
frozen header and autofilter. exceljs is imported dynamically so its
~1MB chunk only downloads when an export is clicked.

- Inbox: exports the loaded view (DB-filtered; no extra request)
- Candidates: the Export button was a stub that only fired a toast -
  it now really exports the filtered account list
- Talent Pool: upgraded from plain CSV to the same styled workbook

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 20:40:43 +05:00
talha.ahmed 30123563e9 Merge pull request 'Brand-styled XLSX exports (Inbox, Candidates, Talent Pool)' (#61) from Talha into main
Deploy to S3 / deploy (push) Successful in 32s Details
2026-09-02 15:40:26 +00:00
talha.ahmed 15bdd5c08a Merge pull request 'Inbox: Export CSV button; graceful partial failure on the All channel' (#60) from Talha into main
Deploy to S3 / deploy (push) Successful in 37s Details
2026-09-02 15:25:01 +00:00
Talha Ahmed 56a05f840f Inbox: Export CSV button; graceful partial failure on the All channel
Export downloads the current view - channel, tab and search respected,
fetched unpaged - as UTF-8 CSV (BOM for Excel) with both sources'
columns: name, contact, position, channel, source, received, status,
city, notice period, ATS score, assigned job.

All channel resilience: when exactly one source fails, the healthy
list stays with a one-line notice naming the gap; the full error state
now renders only when there are no rows at all (cached rows beat a
scary banner over a working list).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 20:20:36 +05:00
talha.ahmed 0be2ba035a Merge pull request 'Inbox: single page scroll on phones, detail takes over from the list' (#59) from Talha into main
Deploy to S3 / deploy (push) Successful in 41s Details
2026-09-02 15:12:48 +00:00
Talha Ahmed 2abc28fc14 Inbox: single page scroll on phones, detail takes over from the list
The stacked split nested two scroll wells (list and detail each carried
max-height + overflow-y auto) inside the page scroll - scrollbars within
scrollbars on small screens. At <=900px both panes now flow naturally in
the one page scroll, and selecting an application swaps the list out for
the detail pane with a Back to list button (standard master-detail
collapse); selection also scrolls to the top so the detail header is in
view. Desktop keeps the two-pane split unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 20:12:18 +05:00
Talha Ahmed fbfcbb4eb8 Inbox: redesign the form applicant detail pane
Standard card language instead of the email-head strips: Contact &
application, Profile and Matching roles are now proper cards with
card-heads. The roles panel collapses three overlapping controls into
one flow - a single Browse roles action, with Assign appearing only
once a selection exists (a permanently disabled primary button read as
broken UI). Sheet provenance moves off the floating header corner into
the Imported from ... row N caption, and the action bar gains a
divider (email pane too, for consistency).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 19:40:03 +05:00
talha.ahmed 0e3c5d5551 Merge pull request 'Inbox: redesign the form applicant detail pane' (#58) from Talha into main
Deploy to S3 / deploy (push) Successful in 39s Details
2026-09-02 14:39:44 +00:00
Talha Ahmed ef8d77ccfe Inbox: tidy the queue pagination
The stacked pager read as three loose rows with 'of N' printed twice.
Queue-scoped: drop the duplicate page-size total (the Showing line
already carries it), wrap page-controls with even gaps, and slim the
page buttons so all nine nav controls (4 chevrons + up to 5 numbers)
fit the ~350px split column on one row.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 19:20:49 +05:00
talha.ahmed 25382cdce7 Merge pull request 'Inbox: tidy the queue pagination' (#57) from Talha into main
Deploy to S3 / deploy (push) Successful in 34s Details
2026-09-02 14:20:31 +00:00
Talha Ahmed 2e66c91d63 Inbox: drop the Google Sheets status chip too
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 19:13:42 +05:00
talha.ahmed c08e28a18c Merge pull request 'Inbox: drop the Google Sheets status chip too' (#56) from Talha into main
Deploy to S3 / deploy (push) Successful in 32s Details
2026-09-02 14:13:23 +00:00
talha.ahmed 12dc77542d Merge pull request 'Inbox: drop the Microsoft Graph API status chip' (#55) from Talha into main
Deploy to S3 / deploy (push) Successful in 34s Details
2026-09-02 12:59:06 +00:00
Talha Ahmed 59afcadec9 Inbox: drop the Microsoft Graph API status chip from the header
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 17:57:27 +05:00
talha.ahmed 08db8dda15 Merge pull request 'Inbox: All channel first and default' (#54) from Talha into main
Deploy to S3 / deploy (push) Successful in 33s Details
2026-09-02 12:52:15 +00:00
Talha Ahmed 2bfdbdee93 Inbox: All channel first and default
The combined stream leads the channel pills (All / Email / Sheet Forms)
and is the channel the inbox opens on.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 17:52:03 +05:00
Talha Ahmed ec8a4af52d Inbox: All channel - Email and Sheet Forms merged in one queue
Third channel pill beside Email / Sheet Forms. Both sources are fetched
unpaged (their endpoints read a missing top/limit as no LIMIT), merged
newest-first, and paged client-side - per-source skip/top cannot compose
into a correct global page. Rows carry kind (email/form) so the detail
pane, mark-read (email rows only get checkboxes; sheet rows have no
mailbox read state) and the kind-aware state/duplicate mutations all
pick the right endpoint per row. Tabs collapse to the shared set (no
Unread), counts and totals sum both sources, and the sheet filter spans
every sheet tab on this channel.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 17:36:52 +05:00
talha.ahmed 5f77ba9f8e Merge pull request 'Inbox: All channel � Email and Sheet Forms merged in one queue' (#53) from Talha into main
Deploy to S3 / deploy (push) Successful in 33s Details
2026-09-02 12:36:29 +00:00
talha.ahmed ff718bccd2 Merge pull request 'Inbox: surface the All toggle at the top of the queue' (#52) from Talha into main
Deploy to S3 / deploy (push) Successful in 33s Details
2026-09-02 12:28:19 +00:00
Talha Ahmed d1fa58ecc3 Inbox: surface the All toggle at the top of the queue
The unpaged switch lived only in the bottom Per-page dropdown and went
unnoticed. The bulk bar now carries a Show all (N) / Show paged button
(hidden while rows are ticked, since the bar swaps to selection
actions); it drives the same pageSize state, so the dropdown stays in
sync. The bar wraps now - four controls no longer fit one line in the
34%-wide split column at laptop widths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 17:24:23 +05:00
ahmed.mujtaba 638c5b11ac Merge pull request 'add pagination inhistory' (#51) from add_range into main
Deploy to S3 / deploy (push) Successful in 35s Details
Reviewed-on: #51
2026-09-02 12:13:58 +00:00
ahmed.mujtaba 75943cf03f Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into add_range 2026-09-02 17:01:48 +05:00
ahmed.mujtaba a33f4e18fc add pagination inhistory 2026-09-02 17:00:44 +05:00