Product Architecture

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

users
  • · id
  • · email
  • · role
  • · verified
  • · created_at
mentor_profiles
  • · user_id
  • · university
  • · field
  • · hourly_rate
  • · bio
student_profiles
  • · user_id
  • · university
  • · field
  • · year
  • · goals
sessions
  • · id
  • · mentor_id
  • · student_id
  • · topic
  • · start_at
  • · status
messages
  • · id
  • · thread_id
  • · from_id
  • · body
  • · sent_at
transactions
  • · id
  • · session_id
  • · amount
  • · status
  • · platform_fee
verifications
  • · user_id
  • · docs[]
  • · reviewer_id
  • · decision
  • · decided_at
reviews
  • · session_id
  • · rating
  • · feedback
  • · is_public
resources
  • · id
  • · author_id
  • · title
  • · body
  • · tags[]