Product: User Stories

Roles

  • Student — the job seeker, has their own portal
  • Verifier — reviews and approves student profile/resume content
  • Admin L2 — manages a placement cycle, posts jobs
  • Admin L1 — manages admins and verifiers, creates cycles
  • Super Admin — full control of the tenant

Student stories

Authentication

  • As a student, I can log in using my university Google account so I don't need a separate password
  • As a student, I can log in using an email OTP if I don't want to use Google
  • As a student, I am auto-registered when I first log in if my email matches the university domain rules
  • As a student, I am shown a clear error message if my email is not recognised by the system
  • As a student, I am automatically logged out after 30 days of inactivity
  • As a student, I can log out from my current session

Profile

  • As a student, I can fill in my personal details (name, roll number, batch, major, minor, category)
  • As a student, I can add multiple education entries (school, undergraduate, other)
  • As a student, I can add work experience with bullet point descriptions and upload proof documents for each entry
  • As a student, I can add projects with descriptions and links
  • As a student, I can add skills grouped by category
  • As a student, I can add achievements and extracurricular activities
  • As a student, I can add certifications and online courses
  • As a student, I can see a profile completeness percentage so I know what to fill in
  • As a student, I can see the verification status (unverified / pending / verified / rejected) for each section of my profile
  • As a student, I can request verification for my profile sections once I've added proof documents
  • As a student, I can see a verifier's comment if a section was rejected, so I know what to fix
  • As a student, I can re-upload a proof document and re-request verification after a rejection

Resumes

  • As a student, I can create a resume from my current profile (snapshot)
  • As a student, I can create multiple resume variants for different job types
  • As a student, I can toggle which sections appear on each resume
  • As a student, I can reorder bullet points within a section
  • As a student, I can edit individual bullet points on a resume (edited bullets are marked as needing re-verification)
  • As a student, I can request AI rewriting of my resume tailored to a specific job
  • As a student, I can see which bullet points have been modified by AI and are auto-verified
  • As a student, I can request AI improvement suggestions (accept/reject each suggestion individually)
  • As a student, I can name my resumes for easy identification
  • As a student, I can delete a resume (unless it has been used in a submitted application)

Job browsing and applying

  • As a student, I can browse all jobs posted in cycles I'm enrolled in
  • As a student, I can search jobs by company name or role title
  • As a student, I can filter jobs by sector, job type, CTC range, open/closed status, and whether I've applied
  • As a student, I can see my eligibility status for each job (eligible / ineligible with reasons)
  • As a student, I can see the deadline for each job clearly
  • As a student, I can view full job details including description, company info, and requirements
  • As a student, I can apply to a job by selecting one of my resumes
  • As a student, I can optionally attach a cover letter when applying
  • As a student, I can upload a video if the job requires it
  • As a student, I cannot apply to a job I'm not eligible for (blocked with reason shown)
  • As a student, I cannot apply to a job whose deadline has passed
  • As a student, I can withdraw an application before the deadline (if withdrawal is allowed by admin)
  • As a student, I can see the status of all my applications in one place
  • As a student, I can see the full status history of each application (submitted → shortlisted → offered etc.)
  • As a student, I can filter my applications by status, cycle, sector

Placement cycles

  • As a student, I can see which placement cycles I'm eligible for
  • As a student, I can self-enroll in a cycle when enrollment is open
  • As a student, I can see which cycles I'm enrolled in on my dashboard

Events

  • As a student, I can see upcoming PPTs, tests, and events
  • As a student, I can see which events I've attended
  • As a student, I can check in to an event by scanning the QR code shown at the event
  • As a student, I can submit an exception request if I missed a required PPT with a reason
  • As a student, I cannot apply to a job that requires PPT attendance if I haven't attended (and don't have an approved exception)

Dashboard

  • As a student, I can see a summary of my application activity (total applied, shortlisted, offered)
  • As a student, I can see upcoming deadlines in the next 7 days
  • As a student, I can see my recent notifications

Verifier stories

  • As a verifier, I can see only the students assigned to me (not all students)
  • As a verifier, I can see a queue of pending verification requests from my assigned students
  • As a verifier, I can view a student's profile section and proof documents side by side
  • As a verifier, I can approve a verification request
  • As a verifier, I can reject a verification request with a written comment to the student
  • As a verifier, I can see my verification history (what I've approved/rejected and when)
  • As a verifier, I can see a resume diff view when a student has edited an AI variant (showing exactly which bullets changed)

Admin L2 stories

  • As an Admin L2, I can see all students in the system (not filtered to verifier scope)
  • As an Admin L2, I can view a student's full profile, resumes, and applications
  • As an Admin L2, I can create a student account manually
  • As an Admin L2, I can edit a student's profile (including CGPA, education, major/minor)
  • As an Admin L2, I can see all placement cycles I'm assigned to
  • As an Admin L2, I can post jobs within my assigned cycles
  • As an Admin L2, I can edit or delete jobs I've posted
  • As an Admin L2, I can open/close applications for a job manually
  • As an Admin L2, I can view all applications for jobs in my cycles
  • As an Admin L2, I can update an application's status (shortlist / reject / offer)
  • As an Admin L2, I can bulk download all applications for a job as a ZIP
  • As an Admin L2, I can send a specific application to a recruiter's email
  • As an Admin L2, I can create verifier accounts
  • As an Admin L2, I can assign verifiers to students
  • As an Admin L2, I can create events (PPTs, tests, workshops)
  • As an Admin L2, I can mark student attendance manually for an event
  • As an Admin L2, I can generate a QR code for an event to allow student self check-in
  • As an Admin L2, I can bulk export the student list as CSV or Excel with configurable columns
  • As an Admin L2, I can use the segmentation builder to query the student table with complex conditions
  • As an Admin L2, I can save a segmentation query for reuse as a named filter

Admin L1 stories

All Admin L2 capabilities, plus:

  • As an Admin L1, I can create placement cycles
  • As an Admin L1, I can configure a cycle's eligibility (using segmentation)
  • As an Admin L1, I can toggle enrollment open/close on a cycle
  • As an Admin L1, I can bulk enroll students into a cycle via segmentation or CSV upload
  • As an Admin L1, I can assign Admin L2 users to cycles
  • As an Admin L1, I can create Admin L2 accounts
  • As an Admin L1, I can approve or reject student PPT exception requests
  • As an Admin L1, I can see analytics: applications by company/sector/CTC, placement funnel, year-over-year trends
  • As an Admin L1, I can use the Student Intel view to run ad-hoc data queries on the student table
  • As an Admin L1, I can post announcements visible to all students

Super Admin stories

All Admin L1 capabilities, plus:

  • As a Super Admin, I can configure the tenant settings (domain rules, custom column labels, feature flags)
  • As a Super Admin, I can upload or manage the email allowlist (CSV)
  • As a Super Admin, I can create Admin L1 accounts
  • As a Super Admin, I can assign and change any user's role
  • As a Super Admin, I can create and revoke API keys for external integrations
  • As a Super Admin, I can configure the external dossier API URL for fetching additional student data
  • As a Super Admin, I can view the full activity log for any student
  • As a Super Admin, I can deactivate any user account
  • As a Super Admin, I can manually override a student's debarment status (clear or extend debarment)
  • As a Super Admin, I can delete a student record permanently (with confirmation)
  • As a Super Admin, I can see the AI-generated summary for any student
  • As a Super Admin, I can trigger re-generation of a student's AI summary

Acceptance criteria checklist for critical flows

Apply to job

  • Student must be enrolled in the job's cycle
  • Student must match job's eligibility segmentation
  • Job must be accepting applications
  • Job deadline must not have passed
  • If cycle has noPptNoApply = true, student must have attended the linked PPT (or have an approved exception)
  • If student is debarred, show debarment reason and end date
  • On submit: application record created, confirmation shown, email enqueued
  • Student cannot apply to the same job twice (duplicate blocked at DB level)

OTP login

  • OTP sent only to emails matching tenant domain rules
  • OTP expires after 10 minutes
  • Max 5 attempts before OTP is invalidated
  • OTP is single-use (deleted from Redis on first successful verify)
  • Correct OTP → tokens issued, user created if new

Resume verification flow

  • Student edits a bullet on an AI variant → that bullet marked unverified
  • Student requests verification → VerificationRequest created with the specific change keys
  • Verifier sees only the changed bullets (not the whole resume)
  • Verifier approves → those change keys removed from unverifiedChangeKeys
  • Verifier rejects → student notified with comment, bullet stays unverified
  • Student can still submit applications with an unverified bullet (soft warning, not hard block — configurable per tenant)

Segmentation evaluate

  • Returns correct student count matching the definition
  • Works with nested AND/OR groups
  • Include/exclude individuals override group results
  • Always scoped to tenant_id (never returns cross-tenant data)
  • Returns summary stats (count, avg cgpa, breakdown by major)