How achille010/scrutiq works
Scrutiq is a recruiter-facing AI resume-screening and applicant-ranking platform. Recruiters define job criteria, upload candidate documents, review extracted profiles, run screening, and use scored shortlists to guide hiring decisions. The map also includes account access, analytics, chat, and outreach as documented product capabilities. README architecture and sampled controllers/services support the main API and ingestion links; screening, chat, and some frontend wiring are represented only where the tree or README identifies them, so uncertain internal calls are omitted.
Main entry points: app Recruiter dashboard · app.ts Express API · stats.controller.ts Recruiting analytics · applicants.service.ts Profile ingestion
Components 28
Recruiter workspace
- Recruiter dashboard
client/src/app - Client state
client/src/store - API client
client/src/lib/api.ts - Recruiting analytics
server/src/controllers/stats.controller.ts - Recruiter chat
server/src/services/chat.service.ts
API and access
- Express API
server/src/app.ts - Auth routes
server/src/routes/auth.routes.ts - Auth controller
server/src/controllers/auth.controller.ts - Auth service
server/src/services/auth.service.ts - Job routes
server/src/routes/jobs.routes.ts - Job controller
server/src/controllers/jobs.controller.ts
Candidate intake
- Applicant routes
server/src/routes/applicants.routes.ts - Applicant controller
server/src/controllers/applicants.controller.ts - Profile ingestion
server/src/services/applicants.service.ts - Document parsing
server/src/utils/parser.ts
Screening and ranking
- Job service
server/src/services/jobs.service.ts - Screening routes
server/src/routes/screening.routes.ts - Screening controller
server/src/controllers/screening.controller.ts - Candidate scoring
server/src/services/screening.service.ts - Ranked shortlist
client/src/app/dashboard/jobs/[id]/shortlist/page.tsx
Records and integrations
- Gemini AI
server/src/services/gemini.service.ts - Email delivery
server/src/services/email.service.ts - Applicant records
server/src/models/Applicant.model.ts - Job records
server/src/models/Job.model.ts - Screening records
server/src/models/Screening.model.ts - Recruiter accounts
server/src/models/User.model.ts
Other components
- Recruiter
- MongoDB
Connections 36
- Recruiter → Recruiter dashboard: uses
- Recruiter dashboard → Client state: updates
- Client state → API client: requests
- API client → Express API: calls
- Express API → Auth routes: dispatches
- Auth routes → Auth controller: routes to
- Auth controller → Auth service: authenticates
- Auth service → Recruiter accounts: reads/writes
- Express API → Job routes: dispatches
- Job routes → Job controller: routes to
- Job controller → Job service: manages criteria
- Job service → Job records: reads/writes
- Express API → Applicant routes: dispatches
- Applicant routes → Applicant controller: routes to
- Applicant controller → Profile ingestion: ingests profiles
- Profile ingestion → Document parsing: extracts text
- Profile ingestion → Gemini AI: extracts profiles
- Profile ingestion → Applicant records: reads/writes
- Express API → Screening routes: dispatches
- Screening routes → Screening controller: routes to
- Screening controller → Candidate scoring: screens candidates
- Candidate scoring → Gemini AI: scores matches
- Candidate scoring → Screening records: reads/writes
- Candidate scoring → Ranked shortlist: provides rankings
- Recruiter dashboard → Ranked shortlist: reviews
- Recruiter dashboard → Recruiting analytics: views metrics
- Recruiting analytics → Job records: aggregates jobs
- Recruiting analytics → Applicant records: counts candidates
- Recruiting analytics → Screening records: aggregates screenings
- Recruiter dashboard → Recruiter chat: uses chat
- Applicant controller → Email delivery: sends outreach
- Auth controller → Email delivery: sends account mail
- MongoDB → Recruiter accounts: persists
- MongoDB → Job records: persists
- MongoDB → Applicant records: persists
- MongoDB → Screening records: persists