How Erudite works under the hood
A trust-first mentorship platform. Verified grad mentors, intelligent matching, and a payments-and-feedback loop that keeps quality high.
Core actors
Undergraduate Student
Discovers mentors, books sessions, builds a curated learning plan.
Verified Graduate Mentor
Offers domain expertise via 1:1 sessions, async messages, and resources.
Platform Operator
Verifies mentor credentials, moderates content, monitors quality signals.
End-to-end flow
Student onboards
Goals, field, year
Match engine
Ranks mentors
Booking
Picks slot & topic
Session
Async + live
Feedback loop
Rating, payout, learnings
Subsystems
Verification engine
Multi-step: student-ID + enrollment letter + advisor reference. Domain whitelist for institutional emails. Automated OCR with human-in-the-loop review.
Match engine
Hybrid: collaborative filtering on session ratings + content-based on field/expertise overlap + recency boost for active mentors.
Payments
Stripe Connect (Express). Funds held in escrow until 24h after session. Auto-payout weekly. Platform commission configurable per cohort.
Session infrastructure
WebRTC rooms (Daily.co). Recording opt-in. Auto-generated summary notes via post-call transcript pipeline.
Messaging
Threaded async chat. Read receipts, typing indicators. Auto-archive after 90 days of inactivity.
Notifications
Email (Sendgrid), push (FCM), and in-app fanout. User preference matrix per event class.
Trust & quality rules engine
Every event passes through a deterministic rule chain. Failures route to human review.
rule Mentor.Verify
REQUIRE applicant.email matches institutional_domain_whitelist
REQUIRE applicant.documents includes student_id, enrollment_letter
IF institution.tier == "T1" THEN fast_track = true
ELSE queue_for_manual_review()
rule Session.AutoConfirm
REQUIRE mentor.availability_match(slot) == true
REQUIRE student.outstanding_balance == 0
IF mentor.auto_accept AND mentor.rating >= 4.5
THEN status = "upcoming"
ELSE status = "pending"
rule Payout.Release
REQUIRE session.status == "completed"
REQUIRE hours_since(session.end) >= 24
REQUIRE NOT dispute.open
THEN transfer(mentor.payout_account, session.payout)
rule Account.RiskFlag
IF chargebacks_30d > 0 OR reports >= 2
THEN status = "review"
AND notify(team.trust_safety)Data model
- · id
- · role
- · verified
- · created_at
- · user_id
- · university
- · field
- · hourly_rate
- · bio
- · user_id
- · university
- · field
- · year
- · goals
- · id
- · mentor_id
- · student_id
- · topic
- · start_at
- · status
- · id
- · thread_id
- · from_id
- · body
- · sent_at
- · id
- · session_id
- · amount
- · status
- · platform_fee
- · user_id
- · docs[]
- · reviewer_id
- · decision
- · decided_at
- · session_id
- · rating
- · feedback
- · is_public
- · id
- · author_id
- · title
- · body
- · tags[]