CH 13Basic

Admissions CRM & Enrollment

The end-to-end admissions engine of NexusOne — an 11-stage pipeline from first inquiry through enrollment, covering lead management, follow-ups, public application forms, document verification, admission tests, interviews, offer letters, waitlisting, scholarships, WhatsApp integration, and real-time admissions analytics. Every feature in this chapter is available on the Basic tier.

Admissions Pipeline

NewContactedQualifiedApplication SubmittedTest ScheduledTest CompletedInterview ScheduledInterview CompletedOffer MadeEnrolled

Leads can also branch to Rejected, Lost, or be placed on the Waitlist at any stage before enrollment.

Basic Tier Features

Basic

11-Stage Admissions Pipeline

Basic
  • Pipeline: new → contacted → qualified → application_submitted → test_scheduled → test_completed → interview_scheduled → interview_completed → offer_made → enrolled / rejected / lost
  • Drag-and-drop Kanban board to move leads across stages
  • GET /api/admission-leads/analytics/pipeline — funnel counts per stage
  • Admin UI: /dashboard/admin/admission-analytics (Kanban board)

Lead Management & CRM

Basic
  • AdmissionLead model: student, parent/guardian, contact, source, score, priority, status
  • Lead sources: website, phone_inquiry, walk_in, referral, social_media, advertisement, whatsapp
  • Auto lead scoring on creation; notes/activity timeline per lead
  • Full CRUD, search, filters (status/priority/source), CSV bulk-import of new leads
  • Admin UI: /dashboard/admin/admission-leads (list, filters, stats)

Follow-ups & Communication

Basic
  • Structured follow-up entries: call, whatsapp, email, visit, meeting — each with due date, status, outcome
  • POST/GET /api/admission-leads/:id/followups — create & list follow-up history
  • PUT /api/admission-leads/followups/:id/complete — mark complete with outcome notes
  • Automated email drip sequence (Day 1/3/7 nurture, application, test, and final-enrollment reminders) runs every 6 hours via cron — New
  • Legacy single next-follow-up date/notes retained alongside the new history list
  • Gmail-compose email action and click-to-call parent action

Public Application Forms

Basic
  • Token-based public application form — no login required
  • Multi-step form: student details, academic history, parent details, documents
  • Public inquiry form: /admission-inquiry/[schoolId]
  • Public application form: /application/[token]
  • POST /api/admission-leads/:id/send-application-link — emails a secure token link

Document Verification — New

Basic
  • Per-document verification status: pending, verified, rejected, needs_resubmission
  • Verification notes and verifier tracked on each document
  • PUT /api/admission-leads/:id/documents/:docId/verify
  • Admin UI: verification controls embedded in lead detail page's Documents card

Admission Tests — New

Basic
  • Track test scheduling, date, score, and status (not_scheduled/scheduled/completed/passed/failed)
  • PUT /api/admission-leads/:id/test
  • Admin UI: Admission Test card on lead detail page

Interviews — New

Basic
  • Track interview scheduling, date, and notes
  • PUT /api/admission-leads/:id/interview
  • Admin UI: Interview card on lead detail page

Offer Letters — New

Basic
  • Auto-generated offer letter PDF, emailed and sent via WhatsApp on generation
  • Acceptance deadline tracking with parent-facing countdown
  • Stale pending offers past their acceptance deadline are auto-expired every 6 hours via cron — New
  • POST /api/admission-leads/:id/offer — generate & send
  • PUT /api/admission-leads/:id/offer/respond — admin records phone/verbal response
  • PUT /api/applications/:token/offer/respond — parent accepts/rejects via public link
  • Public offer page: /application/[token]/offer — accept/reject + PDF download

Waitlist Management — New

Basic
  • AdmissionWaitlist model with queue position per grade/academic year
  • POST /api/admission-leads/:id/waitlist — add lead to waitlist with priority
  • GET /api/admission-leads/waitlist — list ordered by queue position, filterable by grade/year
  • PUT /api/admission-leads/waitlist/:id/promote — promote a waitlisted lead when a seat opens
  • A cron job auto-promotes top-of-queue leads every 6 hours whenever enrolled count drops below grade capacity — New
  • Admin UI: /dashboard/admin/admission-leads/waitlist

Scholarships — New

Basic
  • Scholarship types: merit, need_based, sibling, staff, other — amount or percentage based
  • POST /api/admission-leads/:id/scholarships
  • Admin UI: Scholarships card on lead detail page with add-form and status list

WhatsApp Integration

Basic
  • leadSource now supports "whatsapp" as a distinct inbound channel
  • Offer letters automatically sent via WhatsApp alongside email
  • Consistent with school-wide WhatsApp communication channel (Ch. 15)

Real Admissions Analytics — New

Basic
  • Pipeline funnel: lead counts per stage in pipeline order
  • Source attribution: leads, enrollments, and conversion rate per lead source
  • Stage-by-stage conversion rates
  • Counselor performance: lead count, enrolled count, conversion rate, avg response time
  • Seat capacity per grade/academic year: capacity, enrolled, waitlisted, seats remaining
  • Admin UI: /dashboard/admin/admission-leads/analytics — funnel bars, tables, no chart library (pure Tailwind)

API Reference — Chapter 13

Leads (Core)

POST/api/admission-leads

Create a new lead (authenticated)

POST/api/admission-leads/public

Create a new lead (public inquiry form)

GET/api/admission-leads

List leads with filters, search, pagination

GET/api/admission-leads/:id

Get single lead by ID

PUT/api/admission-leads/:id

Update lead

DELETE/api/admission-leads/:id

Delete lead

POST/api/admission-leads/:id/notes

Add a note/activity to a lead

PATCH/api/admission-leads/:id/status

Update lead status

PATCH/api/admission-leads/:id/assign

Assign lead to a counselor

PATCH/api/admission-leads/:id/schedule-followup

Schedule the legacy single next follow-up

POST/api/admission-leads/:id/send-followup

Send a one-off legacy follow-up email

GET/api/admission-leads/stats

Lead statistics overview

POST/api/admission-leads/:id/convert-to-student

Convert enrolled lead to a student account

GET/api/admission-leads/follow-ups

Get leads requiring follow-up

POST/api/admission-leads/bulk-send-application-links

Bulk send application form links via CSV

POST/api/admission-leads/bulk-import

Bulk create new leads via CSV (New)

POST/api/admission-leads/:id/send-application-link

Send a single application form link

Document Verification (New)

PUT/api/admission-leads/:id/documents/:docId/verify

Verify, reject, or request resubmission of a document

Tests & Interviews (New)

PUT/api/admission-leads/:id/test

Update admission test schedule, score, and status

PUT/api/admission-leads/:id/interview

Update interview schedule and notes

Offers (New)

POST/api/admission-leads/:id/offer

Generate offer letter PDF, email + WhatsApp it, set status to offer_made

PUT/api/admission-leads/:id/offer/respond

Admin records phone/verbal offer response

PUT/api/applications/:token/offer/respond

Parent accepts/rejects offer via public token link (no auth)

Follow-ups (New)

POST/api/admission-leads/:id/followups

Add a structured follow-up entry

GET/api/admission-leads/:id/followups

Get follow-up history for a lead, sorted by due date

PUT/api/admission-leads/followups/:id/complete

Mark a follow-up complete with an outcome

Scholarships (New)

POST/api/admission-leads/:id/scholarships

Add a scholarship to a lead

Waitlist (New)

POST/api/admission-leads/:id/waitlist

Add a lead to the waitlist with priority

GET/api/admission-leads/waitlist

List waitlist entries, filterable by grade/academic year

PUT/api/admission-leads/waitlist/:id/promote

Promote a waitlisted lead when a seat opens

Analytics (New)

GET/api/admission-leads/analytics/pipeline

Lead counts per pipeline stage

GET/api/admission-leads/analytics/sources

Leads, enrollments, and conversion rate per source

GET/api/admission-leads/analytics/conversion

Stage-by-stage conversion rates

GET/api/admission-leads/analytics/counselors

Counselor performance metrics

GET/api/admission-leads/analytics/capacity

Seat capacity per grade/academic year

Public Application (Token-based)

GET/api/applications/:token

Get application/lead data by token (no auth)

POST/api/applications/:token/upload-document

Upload a supporting document

DELETE/api/applications/:token/documents/:documentId

Delete an uploaded document

POST/api/applications/:token/submit

Submit the completed application form

Frontend Pages

PathRoleDescriptionTier
/dashboard/admin/admission-leadsAdminLead list — filters, search, stats, CSV bulk-send & bulk-importBasic
/dashboard/admin/admission-leads/[id]AdminLead detail — status, tests, interviews, documents, offer, scholarships, waitlist, follow-upsBasic
/dashboard/admin/admission-leads/createAdminCreate a new leadBasic
/dashboard/admin/admission-leads/applicationsAdminReview submitted applicationsBasic
/dashboard/admin/admission-leads/analyticsAdminReal admissions analytics — funnel, sources, conversion, counselors, capacityBasic
/dashboard/admin/admission-leads/waitlistAdminWaitlist management — queue order, promoteBasic
/dashboard/admin/admission-analyticsAdminDrag-and-drop Kanban lead boardBasic
/admission-inquiry/[schoolId]PublicPublic admission inquiry formBasic
/application/[token]PublicPublic token-based application formBasic
/application/[token]/offerPublicPublic offer letter view — accept/reject, PDF downloadBasic

Mobile Screens

admissions-leads
Admin lead list with filters and stats
Basic
admission-lead-detail
Full lead detail: status, tests, interviews, documents, offer
Basic
admission-followups
Follow-up history and completion actions
Basic
admission-application-progress
Application progress and document checklist
Basic
admission-offer-preview
Offer letter preview and accept/reject actions
Basic