Parents had no reliable way to find verified tutors for their children. Tutors had no direct channel to reach students without giving up 30–50% to coaching institutes. We built a full-stack tutoring marketplace — verified profiles, smart matching, end-to-end session booking, Razorpay payments, in-platform wallet, and study plans — connecting students and tutors directly for online and home tuition.
The K12 private tutoring market in India is enormous — and almost entirely unorganised. Parents discover tutors through school notice boards, neighbourhood recommendations, or coaching institute rosters. There is no transparency on credentials, pricing, or availability. Tutors, meanwhile, have no platform to build a reputation or a direct student pipeline. The existing coaching institute model extracts a large cut in exchange for very little — no scheduling tools, no payment infrastructure, no quality feedback loop. Both sides were underserved by the same broken system.
The platform didn't improve an existing process — it replaced a broken one entirely.
Review the 12 technical workflows designed to orchestrate tuition matches, scheduling, and billing:
"A student, tutor, or system administrator needs to register and securely log in to the marketplace."
Traditional password-based registration is prone to security issues, and first-time users need a frictionless onboarding flow that redirects them based on their platform role without exposing core APIs.
Authentication is managed via the endpoints in auth.py using phone numbers and OTP verification. Upon verification, the system issues a JWT access token and a refresh token, enforcing roles via require_role dependencies.
"A parent or student logs in for the first time and needs to set up learning preferences, targets, and contact details."
Generic user profiles do not capture crucial context like grade levels, subject domains, budget thresholds, or guardian information needed to deliver high-quality tutor matching.
Students submit onboarding data via POST /api/v1/students/profile (student.py). Profile fields are structured in student_profile.py (grade_level, location_preference, budget boundary, parent contact), which links back to the user model.
"A math specialist registers as a tutor and must upload verification credentials before they can interact with students."
Unverified tutors present a safety and quality risk. The platform must capture tutor parameters and hold accounts in a pending state until an admin audits their documents.
Tutors submit details via tutor.py. The profile in tutor_profile.py records subjects, hourly rates, location parameters, and credentials url with status initialized as PENDING. Admins approve/reject profiles via admin.py to activate them.
"A student requires immediate physics help and posts an enquiry to find matching tutors."
Manually emailing multiple tutors wastes time. The marketplace needs an automated lead distribution inbox where tutors can discover and bid on nearby student requirements.
Students post enquiries via POST /api/v1/students/enquiries (enquiry.py). Matching tutors browse leads in their inbox at /api/v1/tutors/leads/inbox. Tutors accept a lead via API, moving it to MATCHED and triggering client alerts.
"A tutor wants to accept high-quality student leads but must pay a platform commission to claim the contact."
Charging tutors flat listing fees can feel unfair. Instead, a pay-as-you-go credit system aligns platforms costs with successful student matches.
Managed in wallet.py and wallet_service.py. Lead claims deduct 1 credit from tutor wallet. Empty wallets trigger 402 exceptions. Tutors purchase packs using Razorpay via /api/v1/tutors/wallet/topup, rechargeable via webhooks.
"A tutor accepts an inquiry, and the student must pre-pay to lock in the class slot."
Tutors risk late cancellations, and students worry about paying in advance for classes that might not occur. An escrow model holds funds securely until session completion.
On matching, session_service.create_from_enquiry sets status to PENDING_PAYMENT. The payment_service.py initializes a Razorpay order. verified webhooks transition session status to SCHEDULED, releasing the escrow code flow.
"A student and tutor conduct a scheduled chemistry class, log performance details, and submit feedback."
Tracking progress across sessions is difficult. The marketplace needs automated hour-tracking, completion handshakes, and rating systems to establish public trust.
Tutors set slot state to IN_PROGRESS on class start and COMPLETE on class end via session_service.py. This increments total hours taught. Students submit 1-5 star ratings to recalculate tutor average ratings.
"A student wants a customized preparation outline for upcoming Board Exams tailored to their learning difficulties."
Creating individual study schedules manually is time-consuming for tutors. Students need automated, curriculum-aligned pacing boards.
Students call POST /api/v1/students/study-plan/generate (student.py). The generator in study_plan_service.py calls Claude 3.5 Sonnet to draft a structured 4-week JSON plan stored in study_plan.py, allowing checklist toggle triggers.
"A tutor wants to run a group class for 10 students simultaneously instead of single one-on-one sessions."
Coordinating group availability, handling capacity caps, and alerting multiple enrollees manually is a logistical headache.
Tutors create batches via batch.py. Students search and enroll, incrementing current_enrollment up to capacity. Tutors schedule sessions using batch_service.py, triggering background async tasks to broadcast WhatsApp updates.
"Educational companies and publishers sponsor banners and profiles to reach K-12 students."
Ad campaigns need to be targetable by city, subject, or grade, and their status must adapt automatically to budget limits or expiry.
Admins create campaigns via ad.py. A Celery task (reconcile-ad-campaigns-nightly) runs at 02:00 UTC inside tasks.py, scanning active ads, tracking spend metrics, and automatically completing campaigns exceeding budgets.
"Tutors want to sell pre-recorded video courses with chapters and notes for passive income."
Large video file uploads can stress backend servers and crash container deployments.
Courses are defined in course.py. Tutors generate S3 pre-signed upload credentials using storage_service.py to stream uploads directly. Student payments log to CourseEnrollmentPayment, crediting tutors net commissions.
"System managers need to audit platform metrics, evaluate user growth, examine payout logs, and flag fraudulent accounts."
Scattered logs and database values make it difficult to resolve billing issues or audit platform health in real-time.
The admin dashboard router (admin.py) aggregates financial metrics (GMV, payouts, ad spend). Web interfaces allow moderators to list cohorts, check payouts, suspend users, and check security logs (login_logs) for fraud.
Tangible outputs shipped across the phased engagement.
OTP login, JWT token flow, student and tutor profile setup. Grade, subject, mode, budget, and location preferences. Guardian contact linking.
Admin tutor approval workflow. Document review. Approved tutor visibility in student search filtered by subject, grade, mode, and budget.
Student enquiry posting. Tutor accept/decline. Session booking with full state machine. Razorpay payment integration and webhook handling.
Post-session rating and review submission. Tutor average score recalculation. Student wallet top-up. Tutor earnings and payout request flow.
Weekly study plan builder with topic progress tracking. Batch creation, student enrolment, and group session scheduling.
React Native mobile app for students and tutors. Online course marketplace with chapters and video content. Educational brand advertising module.
Tutors submit their qualifications, subject expertise, and verification documents during onboarding. An admin reviews each profile and approves or rejects with notes. Only APPROVED tutors appear in student search results. This ensures every tutor students can book has been verified for credentials and identity.
The platform integrates Razorpay for session payments, supporting UPI, cards, net banking, and wallets. Students can also top up an in-platform wallet and use it for session bookings. Tutors receive earnings after session completion and can request payouts managed by the admin.
Yes. Both students and tutors configure their mode preference during onboarding. Tutors offering home tuition set their city, radius, and home tuition rate separately. Students filter by Online or Home Tuition mode when posting an enquiry or searching for tutors.
The core platform — auth, onboarding, tutor verification, session booking, and Razorpay payments — can be delivered in 4–5 months. Extended features like wallet management, study plans, batch classes, and the mobile app add 3–4 additional sprints. Aavya LabTech uses phased delivery so the platform is usable and generating value from Sprint 2 onwards.
Whether you're launching an edtech platform, a services marketplace, or a booking-and-payment product — we've built the end-to-end system. Tell us what you're building and we'll map out the architecture and delivery phases.
Book a Free Consultation