All documentation

How to create an online course

End-to-end walkthrough for tutors and institutions: from course setup to payments, recordings, and refunds.

Tutors & Institutions15 min read
Who this is for
Both individual tutors (TUTOR role) and coaching centers / schools / colleges (INSTITUTION role). Where the flows differ, we'll call it out.

Before you start

Make sure you have:

  • A registered Tuition.in account with the right role. If you signed up as a student, you can't create courses — write to [email protected] to upgrade to a tutor or institution account.
  • A completed profile. Tutors visit /dashboard/tutor/edit; institutions visit /dashboard/institution/edit. A complete profile gets you discovered and earns trust with students.
  • A working webcam and microphone. Most laptops are fine. For best audio, use a headset — built-in laptop mics pick up keyboard clatter.
  • A reasonably stable internet connection. We recommend 1.5 Mbps upstream. The platform automatically drops to audio-only on weaker connections — see Working on slow networks below.

Step 1 — Create your course

A course is the top-level container for your subject matter — for example, "JEE Physics — Class 11" or "Beginner Spoken English". A single course can run multiple batches (cohorts) over time.

  1. Go to /dashboard/tutor/courses (or /dashboard/institution/courses for institutions).
  2. Click New course.
  3. Fill in the form:
    • Title — descriptive, what students will see in search results. Aim for 50-70 characters.
    • Slug — optional. Auto-generated from your title if you leave it blank (e.g. "JEE Physics — Class 11" → jee-physics-class-11). The slug appears in the public URL. Lowercase + hyphens only.
    • Description — what students will learn, prerequisites, what makes your course different. Markdown isn't supported in v1 — plain text and line breaks only.
    • Subject / Grade / Language — used for search and recommendations. Be specific: "Physics" + "Class 11" beats leaving these empty.
  4. Click Create course. You'll land on the course management page.
Public URL
Your course will be reachable at /courses/{your-slug}/{course-slug}. Your creator slug is auto-generated from your name on first course creation (e.g. "Koundinya Kypa" → koundinya-kypa). Share this URL with prospective students.
Drafts are private
New courses start as Draft. They're not visible to students until you toggle Published on the edit page. This lets you set up batches and classes before opening enrollment.

Step 2 — Add a batch

A batch is a specific cohort of students taking the course together — for example, "JEE 2027 Morning Batch" or "Spring Evening Batch". Each batch has its own schedule, price, and capacity.

On the course management page, click New batch and fill in:

  • Batch name — visible to students. Helps them distinguish between cohorts.
  • Start date — required. When the batch begins.
  • End date — optional. Leave blank for open-ended courses.
  • Price (₹) — set 0 for free batches. Free batches skip Razorpay entirely; students enroll instantly.
  • Capacity — optional cap on student count. Leave blank for unlimited.
  • Status — leave as Draft while setting up. Switch to Published when you're ready to open enrollment. Only published batches accept enrollments.
Price changes are remembered correctly
If a student pays ₹2,000 today and you raise the price to ₹3,000 tomorrow, our records still show they paid ₹2,000. The amount is locked in at order creation, not at verification time.

Step 3 — Schedule live classes

Once a batch exists, expand it (Manage button) and click Schedule class for each session you plan to teach.

  • Class title — e.g., "Kinematics — Part 1".
  • Start / End — date-time pickers. Times are interpreted in your browser's timezone, so a tutor in Kolkata picking 10:00 AM means 10:00 AM IST regardless of where students are.
  • Free demo class — when checked, any logged-in student can join, even without enrolling. A great way to let prospective students sample your teaching.

When you schedule a class, our backend automatically provisions a 100ms video room for it. You don't need to share a separate Zoom or Meet link — students click Join on their dashboard and land in your room.

Step 4 — Add teachers (institutions)

Coaching centers, schools, and colleges often run a single batch with multiple subject teachers. The course owner is the institution account, but individual teachers can host classes and grade homework.

Each teacher needs their own Tuition.in account first. Have them register at /register. Then in the batch's Teachers section (within the management view), add them by email.

  • Teachers can host live classes in this batch.
  • Teachers can create and grade assignments.
  • Teachers cannot change batch metadata (price, capacity, schedule) or issue refunds — those stay with the course owner.
For solo tutors
You can skip this step entirely. As the course owner, you're already authorized to do everything.

Going live: hosting a class

At class time, open the course management page. Each scheduled class shows a Start class button starting 15 minutes before its scheduled time. Click it to enter the live room as host.

When you join as host:

  • The class status flips from SCHEDULED to LIVE.
  • Recording starts automatically. You don't need a separate "record" button.
  • Students who have joined will see and hear you. Students joining later are admitted automatically.

Host controls (bottom bar):

  • Mic — mute/unmute your audio.
  • Camera — toggle your video on/off.
  • Audio-only mode — sticky toggle. Useful when your network is shaky. Disables your camera and remembers the choice for next class.
  • End class — ends the room for everyone, finalizes the recording. Use this when class is genuinely over — leaving individually keeps the room open.
Recording appears later
After you end class, the recording typically appears on each student's dashboard within ~5 minutes. Larger classes can take up to 30 minutes during peak hours. Students get a notification when it's ready.

Working on slow networks

Most Tuition.in students are in tier-2 and tier-3 cities, and bandwidth varies widely. The platform handles this automatically:

  • The header shows a connection-quality indicator: Good / OK / Weak / Poor.
  • If your connection stays weak (quality < 3) for 10 seconds, the system disables your video automatically and shows a "Bandwidth saver" badge. Audio + whiteboard + chat continue uninterrupted.
  • When your connection recovers (quality ≥ 4 for 15 seconds), video is re-enabled. If you manually turned off your camera, the system leaves it off — your choice wins.
  • Use the Audio-only mode button to lock the bandwidth-saving behavior in. The setting persists across classes until you turn it off.
Recordings are bandwidth-aware too
We record at three resolutions (240p, 480p, 720p). Students on slow connections automatically get the lower-resolution version when watching back.

Using the whiteboard

Below the video grid, you'll see a collaborative whiteboard powered by tldraw. As host, you can draw, type, paste images, and use any tool from the toolbar. Students see everything you draw in near-real-time.

  • Students see the whiteboard as view-only — they can't draw on it.
  • Updates broadcast every ~600ms. On a fast connection it feels instant; on slow connections, students might see drawings appear in 1-2 second batches.
  • The whiteboard auto-saves to our servers every 30 seconds. Students who join late see the most recent saved state when they enter the room.
  • The final whiteboard at end-of-class is preserved — you can refer back to it later if needed (admin support can pull it).
Don't paste massive images
The whiteboard works well for sketches, diagrams, and equations. For large reference images (photos, scanned documents), upload them as assignment attachments instead — they're better quality there and don't slow down the live broadcast.

In-class chat

The chat panel on the right of the live room is for student questions during class. Messages persist to our servers, so:

  • A student joining late sees the most recent 200 messages on entry.
  • Chat history is preserved after class ends — visible to anyone rewatching the recording (this feature is being added).
  • Students are rate-limited to 10 messages per 10 seconds to prevent spam.

Recordings

Every live class is recorded automatically. Students access recordings from /dashboard/student/classes → the Recording button next to a past class.

  • Recordings are HLS-encoded so they play smoothly on any connection. Browser auto-selects the best resolution.
  • Resume position is saved per student — they pick up where they left off.
  • Watch time is tracked accurately (scrubs and pauses don't inflate it). Visible on the student's progress dashboard.

Assignments and grading

Within a batch, expand the Assignments section to create homework.

Creating an assignment:

  • Title, instructions, due date, and max score (typically 100).
  • Optional attachments — PDFs, Word docs, spreadsheets, images. Up to 10 files, 10 MB each.
  • All active enrollees get a notification when the assignment is posted.

Grading submissions:

  • Click Submissions on an assignment to see who's submitted.
  • Each submission shows the student's files, optional text answer, and submission timestamp. Late submissions are flagged.
  • Enter a score (0 to max) and optional feedback, then click Grade. The student gets a notification with their score.
  • Once graded, the student can't resubmit. Update the grade if you want to revise it.
Students can resubmit before grading
Until you grade a submission, students can re-upload files or edit their text answer. Useful for "fix these issues and resubmit" workflows.

Payments and student enrollment

When a student visits your public course page, they see all published batches with prices and an Enroll button per batch.

For free batches: students click Enroll and are immediately added — no payment screen.

For paid batches: Razorpay Checkout opens. Students can pay with cards, UPI, net banking, or wallets. After payment, they're enrolled within seconds.

Tuition.in handles:

  • The Razorpay order creation, signature verification, and webhook reconciliation.
  • Sending the student a welcome notification when their enrollment is confirmed.
  • Capacity enforcement — full batches reject new enrollments.
Testing payments
In dev mode (Razorpay test keys), use card 4111 1111 1111 1111 with any future expiry and any CVV to simulate a successful payment. The full flow exercises the webhook idempotency too.

Handling refunds

Students can request refunds from their dashboard at any time while enrolled. They write a reason; the request shows up at the top of your course management page.

For each request, you can:

  • Approve — calls Razorpay's refund API with the paid amount. Razorpay processes the refund asynchronously (typically 5-7 business days). When complete, the student's enrollment is marked REFUNDED.
  • Deny — accepts an optional reason that's shown to the student. The enrollment reverts to ACTIVE.
Refunds only the course owner
Even if you've added BatchTeachers, only the course owner can approve refunds. This is a financial action, scoped tightly on purpose.

What students get notified about

Tuition.in sends in-app notifications (and emails when configured) for these events. Students see them in the bell icon in the dashboard header.

  • Enrollment confirmed — after a successful Razorpay payment.
  • Assignment posted — fired to all active enrollees when you create homework.
  • Assignment graded — fired to the student with their score and feedback summary.
  • Recording ready — fired to all active enrollees when a class recording finalizes.
  • Refund processed / declined — confirmation of your decision.

Tips for a successful course

  • Offer a free demo class. Mark your first class "Free demo" so prospects can try before they buy. This is the single biggest enrollment driver.
  • Start small. A 10-student batch with active engagement beats a 100-student batch you can't manage.
  • Schedule weekly cadence. Two classes per week is the sweet spot for engagement without burnout.
  • Use the whiteboard. Classes where the host only talks at the camera have ~30% lower watch-through rates than classes with active whiteboard work. Students engage more when they're following along.
  • Grade homework within 48 hours. Students lose motivation if feedback takes longer than that. The grading notification is a re-engagement hit.
  • Promote your public course URL. Share it on WhatsApp, Instagram, and your existing student channels. The page is SEO-optimized — Google will index it.

Troubleshooting

My camera or mic isn't working
  1. Check browser permissions — Chrome/Safari need explicit camera + mic access for tuition.in. Click the lock icon next to the URL.
  2. Close other apps using the camera (Zoom, Meet) — only one app can own the device at a time on most operating systems.
  3. Reload the page. Permissions sometimes get into a weird state.
The "Start class" button isn't appearing

It only shows from 15 minutes before the scheduled start time through the scheduled end time. Earlier than that, refresh the page closer to the start time.

Students say they can't see my recording
  1. Recordings finalize asynchronously — typically within 5 minutes, sometimes up to 30 during peak load. Tell students to check back in a bit.
  2. Make sure you ended the class with the End class button — just leaving the tab keeps the room open and recording won't finalize.
  3. If 30+ minutes have passed and there's still no recording, write to [email protected]. We can pull the raw recording from our video provider.
A payment showed up but no enrollment

Rare, but possible during transient network issues between Razorpay and our servers. The payment webhook usually catches it within a minute. If a student says they paid but isn't enrolled after 5 minutes, write to [email protected] with the Razorpay payment ID — we can manually reconcile.

I need to cancel a class

In the course management page, you can delete unstarted classes (status SCHEDULED) directly. For classes that have already started, write to support — we'll mark them cancelled and notify enrolled students.

Still stuck?
Email [email protected] with: your account email, the course/batch/class name, and a screenshot or screen recording of the issue. Most tickets are resolved within a business day.

Header Logo