Skip to content

feat: expert status update with skill-based job matching#89

Merged
johnshift merged 12 commits intodevfrom
feat/expert-status-update
Feb 7, 2026
Merged

feat: expert status update with skill-based job matching#89
johnshift merged 12 commits intodevfrom
feat/expert-status-update

Conversation

@johnshift
Copy link
Collaborator

Summary

  • Add isExpert field to iron-session and expose it via useSession hook
  • Add /api/jobs/match/[uuid] API route with skill-based scoring to show job match badges
  • Add eligibility badge component showing match/expert/eligible status on job listings
  • Session-aware header CTA with onboarding guard for unauthenticated users
  • Fix profile page to show session data instead of Privy user data
  • Add Zod validation and typed response to useProfileSkills hook

Test plan

  • Verify expert users see Expert badge on eligible job listings
  • Verify skill-based match badges appear with correct match count (e.g., 3/5 skills)
  • Verify unauthenticated users see Eligible badge and are redirected to onboarding on click
  • Verify header CTA adapts based on session state (logged in vs anonymous)
  • Verify profile page displays correct session data
  • Verify job match API returns proper skill scoring response
  • Verify eligibility badges are lazy-loaded and do not impact initial page load

Store cryptoNative from check-wallet response as isExpert in the
iron-session cookie and return it in GET/POST session responses.
Add isExpert to SessionResponse interface and return it from the hook
so client components can access the expert status.
Replace usePrivy().user (which rendered null before Privy initialized)
with useSession() data. Merge the separate API Token section into
Session Details showing apiToken, isExpert, and isSessionReady.
- Header CTA shows "Get Hired Now" → /onboarding when logged out,
  "My Profile" with pulsing indicator → /profile when logged in
- Add ZapIcon to Urgently Hiring badge for visual emphasis
- EligibilityCta badges link to /onboarding (anonymous) or /profile
  (non-expert) with distinct color progression: teal → amber → violet
- Protect /onboarding route with SessionRedirect (redirects
  authenticated users to /profile)
- Move useEligibility hook to shared src/hooks for reuse
- Lazy-load session-dependent components (header button, eligibility CTA)
The xreview incorrectly removed isExpert from the query key since it is
not passed to fetchJobMatch. However, the API route reads isExpert from
the server session -- the backend response varies by expert status, so
the cache must invalidate when it changes.
@github-actions github-actions bot added the feat New feature label Feb 7, 2026
@johnshift johnshift merged commit 02e1146 into dev Feb 7, 2026
7 checks passed
@johnshift johnshift deleted the feat/expert-status-update branch February 7, 2026 01:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant