Courses to student portal
Courses, subjects, fee structures, admissions, batches, automatic sessions, attendance and the student portal.
How we designed and built the end-to-end operating system for Rhythm Soul Institute of Music (RSIM): admissions, class scheduling, payments, franchise payouts, rentals, events, hiring and WhatsApp automation.
A single custom platform, built and evolved by JMDA Analytic, now runs RSIM's academy, network, commerce and communication.
RSIM teaches instruments like keyboard, drums and guitar through its own centres and a growing network of partner schools. Every student generates a long chain of work: an enquiry, a demo class, an admission, a weekly timetable, attendance, fee instalments, reminders, renewals and often an instrument purchase or rental. Doing that by hand across several branches does not scale.
JMDA built RSIM a single web platform that runs the whole institute. The public website sells courses, events and instruments and takes payment online. Behind it, a staff dashboard covers the full student lifecycle. A rules-driven scheduling engine places every student in a real classroom slot without overbooking. Payments are reconciled with the gateway automatically. Partner branches see their revenue share month by month. And more than fifty WhatsApp messages go out automatically at the right moment.
Website, online demo booking, course and event checkout, instrument shop and rentals, lead capture from forms, JustDial and WhatsApp, structured follow-ups.
Admissions, fee structures, batch and slot planning, automatic session generation, attendance, rescheduling, leave, holidays, teacher workloads.
Online and offline payments, receipts, dues and reminders, franchise revenue share and monthly payouts, role-based access, branch-level reporting.
Every rule the institute runs on, from “a drum room holds one student” to “remind the student ten days before the course ends”, should live in software, not in someone's head.
RSIM is a music institute that combines its own centres, partner schools and online classes. It earns through several connected business lines, and each one needed its own workflow.
Instrument courses (keyboard, drums, guitar, vocals and more) sold as 1, 3 and 6-month packages at a chosen number of sessions per week, in one-to-one or group format. A pay-as-you-go option sells single sessions; integrated multi-course packages are also offered.
Paid and free workshops, recitals and recurring programmes, each with a capacity, age limit, language, venue and gallery. Tickets are booked and paid online.
New and pre-owned instruments for sale, and rentals billed monthly with a security deposit, a delivery charge by pincode, dispatch photos, extensions and a damage-checked return.
Schools join as partner branches through an online KYC form and earn a share of fees. RSIM also places students and freelance musicians into paid gigs, and runs a stock-music library.
| Audience | What they need from the system |
|---|---|
| Students and parents | Book a demo, enrol and pay online, see their timetable, rearrange a missed class, apply for leave, view homework and topic videos, pay dues, buy or rent an instrument, book events. |
| Teachers | See today's classes, mark attendance, rate progress, assign homework and lesson videos, answer student questions, apply for leave, use a shared teaching library. |
| Branch heads | Work their own branch's leads, demos, admissions, batches and dues, without seeing other branches' data. |
| Admin and management | Approve admissions, set fees and holidays, control templates and users, track collections, pay partner branches and see the whole network. |
| Partner schools | Register, submit KYC and bank details, and track enrolments, revenue share and payouts. |
| Freelance musicians | Create a public profile with portfolio and gallery, and receive gig opportunities through RSIM. |
As RSIM added branches, instruments and revenue lines, the operational load grew faster than the team. The core problems were coordination, capacity and money.
Enquiries arrived from the website, JustDial, WhatsApp and walk-ins. Without one pipeline and reminders, follow-ups were missed and demo classes went unconverted.
Every admission meant working out dates for 4 to 24 weeks of classes, avoiding holidays and making sure the room and teacher were free. A drum room can take one student at a time; a keyboard room only a few.
Students miss classes, go on holiday or fall ill. Each case changes the schedule and the course end date, and every change had to be tracked and communicated.
Instalments, discounts, cash, bank transfers and online payments had to be matched to the right admission, with reminders before and after due dates.
A student can pay and close the browser before returning to the site. Without a check against the gateway, a paid admission could sit unconfirmed.
Each partner branch earns a percentage of fees, paid monthly. Calculating shares, tracking what has been paid and what is due had to be transparent for both sides.
Confirmations, reminders, absence notices, renewal alerts and internal approvals meant hundreds of WhatsApp messages a week, typed by staff.
The shop, rentals, events, hiring and HR each needed their own process, yet they all share the same customers and staff.
A single system that captures every lead, converts it into a scheduled, paid admission with minimal staff effort, keeps students and teachers informed automatically, and gives management and partners an accurate view of money and capacity, while also running the shop, rentals, events and people operations.
One platform organised into seven functional areas that share a common data core: people, branches, courses, admissions and payments.
Course catalogue with SEO pages, product pages with reviews, online demo booking, admission and pay-as-you-go checkout, events, shop and rentals, blogs, careers, policies and partner registration.
My courses, session calendar, attendance, homework, topic videos, questions to the teacher, rearrange requests, leave, payments and receipts, profile.
Leads, demos, admissions, batches, fees, branch payouts, shop, rentals, events, HR, templates and settings, with counts and alerts on the home screen.
JMDA chose Python and Django with PostgreSQL: a mature, secure framework with a strong data model and admin tooling, ideal for rules-heavy business software.
One deployment serves several websites. A routing middleware reads the incoming domain and loads that site's pages, so RSIM's portal and other client sites share infrastructure but stay separate.
Students, teachers and staff share one account type with role, branch, unique student code and country code, supporting password and WhatsApp-OTP login.
Fee status, dues, monthly payout dates and branch totals are calculated whenever a record is saved, so every screen shows the same numbers.
New capabilities (lead management, finance, permissions, communication, hiring, batches and more) were added as 30+ separate apps mounted ahead of the core, so new features ship without destabilising existing ones.
On the test server, outgoing WhatsApp messages are captured instead of sent and payments run through a test page, so releases can be rehearsed safely.
Branch heads automatically see only their own branch's leads, demos and admissions.
Every stage of the student lifecycle is a screen, a set of rules and a set of automatic messages. Nothing has to be re-entered between stages.
| Stage | What the platform does | Automatic communication |
|---|---|---|
| Enquiry | Captures leads from website forms, a JustDial API endpoint, WhatsApp and Excel import; assigns a branch; tracks status and follow-ups. | New-lead alert to admin and super admin; response to the enquirer. |
| Demo | Books a demo slot by branch, subject and time; records teacher and student feedback; tracks referrals. | New demo received, approved, done, missed and cancelled notices to student, teacher and admin. |
| Admission | Looks up the fee, captures slots and teachers, takes payment online or records it offline, creates the student account and code. | Form received, payment pending, admission approved, admission confirmed. |
| Schedule | Generates every session for the course, applying capacity, monthly and holiday rules; sets course end, grace and payment-due dates. | “Your admission is confirmed, log in to see your sessions.” |
| Learn | Teacher marks attendance, rates progress, sets topics, homework and video links; students upload homework and ask questions. | Absent, cancelled and backup-class messages; unmarked-attendance reminder to teachers. |
| Adjust | Student rearranges a missed class into a free slot; leave approvals push the end date; schedule edits regenerate only future sessions. | Session rearranged; leave approved with new end date. |
| Pay and renew | Records instalments and discounts; computes dues; flags unpaid students; supports re-enrolment. | Fee receipt, fee reminder, 10/7/3-day expiry alerts, subscription over. |
For a music institute the demo class is the moment of truth. The CRM is built around getting every enquiry to a demo, and every good demo to an admission.
Because the funnel, the follow-up dates and the WhatsApp nudges live in one place, a counsellor opens one screen in the morning and sees exactly who to call, who missed their demo and who is ready to enrol.
RSIM sells the same instrument in many shapes: different durations, frequencies, formats and branches. The admissions engine turns those choices into a correct price and a correct timetable.
The fee comes from a fee structure matrix: Course × Sessions per week × Branch. Each branch can price the same course differently. Fee status is computed, never typed: Unpaid · Partially Paid · Paid.
Total sessions = Weeks in course × Sessions per week 1-month course → 4 weeks 3-month course → 12 weeks 6-month course → 24 weeks # e.g. 3 months at 2/week = 24 sessions Due = (Total fee − Discount) − Paid # never below 0
For flexible learners, a price per session type (for example one-to-one or group) is set per branch. Each approval creates one session at a time, and the end date follows that session plus a configurable grace period.
Price = Pay-as-you-go rate (session type, branch) Sessions = 1 per approval End date = session date + grace days
| Route | How it works |
|---|---|
| Website self-enrolment | Student picks subject, course, branch, frequency, start date and slots; a provisional admission is held during online payment, then confirmed with an instant timetable. |
| Staff-assisted admission | A counsellor enrols a walk-in or phone enquiry, reusing or creating the student account (auto student code); sessions generate on approval. |
| Admission link | Staff send an admission or pay-as-you-go link on WhatsApp; the student completes and pays by phone. |
The heart of the platform is a scheduling engine that converts an admission into a dated list of classes, while respecting the physical limits of each classroom and instrument.
Read the student's chosen weekly slots: day, time and the teacher for each.
Walk week by week from the start date, placing at most the agreed number of sessions in each week.
For each candidate date, check the holiday calendar, the monthly limit, teacher assignment and room capacity.
Create the session if all checks pass; otherwise skip it and let the schedule run on to a later week.
Stop when the course's full session count is reached; set the course end date and grace period.
| Capacity rule per slot | Limit |
|---|---|
| Students in one branch slot (date + time) | 8 |
| Keyboard students in one slot | 4 |
| Drum students in one slot | 1 |
| Sessions per calendar month | 4 × sessions per week |
| Session without an assigned teacher | not created |
Rearranged classes are excluded from the count, so a moved class never blocks a regular one twice.
The session is still created and marked H. It counts towards the package, matching RSIM's policy that public holidays are part of the course calendar.
The date is skipped entirely and the session moves to the next available week, so the student keeps every class. Used for institute-wide breaks.
| Situation | What the engine does |
|---|---|
| No class attended yet, start date changed | Regenerates the full timetable from the new start date and recalculates the session count and end date. |
| No class attended, start date unchanged | Regenerates sessions from the “applicable from” date only, keeping rearranged and backup classes. |
| Classes already attended | Keeps every past record (present, absent, leave, holiday), deletes only future sessions, and generates just the remaining count, never past the original end date. |
Students miss classes, travel and fall ill. The platform turns each of these into a defined workflow with clear rules and automatic messages.
Teachers also record a progress rating, the topic covered, homework (with uploads and status) and lesson-video links for every session. A daily 09:00 job calculates each active student's absence rate and alerts them when it reaches 25%; an evening job lists unmarked sessions for each teacher.
At 10:00 daily, students whose course ends in 10, 7 or 3 days get a renewal reminder with sessions and end date, unless their payment is on hold.
A dedicated list of recently ended courses gives counsellors a ready-made renewal call list.
Re-enrolment reuses the student's account and history, so a renewal takes a minute.
Fees, event tickets, shop orders and rentals can all be paid online. Office staff record cash, bank and UPI payments in the same ledger, with receipts and automatic messages.
RSIM grows through partner schools that host RSIM classes. Each partner earns a percentage of the fees from its students, paid out monthly. The platform makes that arrangement visible to both sides.
Payout dates: start + 1 month + 1 day, then monthly. The final payout moves to the grace end date + 1 day, so the partner is paid once the course has fully run.
Share = Fee × Payout % Monthly = Share ÷ Months # illustrative: 3-month course starting 1 Jan Payout 1 → 2 Feb Payout 2 → 2 Mar Payout 3 → grace end (course end + 7 days) + 1 day
Each payment made to a partner is recorded as a branch transaction against a payout month, with mode and remark. The system prevents paying more than the month's amount due and keeps a running share, paid and due total for every branch. The fees record screen shows each student's monthly payout, payments made and balance, with leave periods visible.
Partners no longer wait for a monthly spreadsheet. Their enrolments, revenue share, payments received and amount due are calculated by the same system that runs their classes.
Students need instruments. The platform adds a full e-commerce and rental operation that shares customers, payments and messaging with the academy.
Rent total = Monthly rent × Months + Deposit
Refund = Deposit − Damage deduction − Late charge
# never below 0; damage ≤ deposit
Closing stock = Opening − Rented + ReturnedDispatch and return photos are stored against each rental, giving RSIM evidence for any damage discussion, and payment history covers rent, extensions and deposits separately. Returns record quantity, condition, damage description and photos, the person who received it, refund mode and whether the item goes back into stock.
Courses broken into lessons and topics with videos and links; topic access can be unlocked per admission.
A private shared library of teaching material; students see “My lessons” for their own course.
Recurring Zoom meetings created from the platform, with a meeting history and “My classes” for students.
A focused daily screen: today's classes, what needs attention (attendance to mark, questions to answer), lessons given this month and attendance rate, plus profile and leave.
The talent marketplace lets RSIM earn from its network of teachers, students and freelancers, using the same accounts, profiles and messaging as the academy.
In India, families live on WhatsApp. JMDA made it the platform's main channel: more than fifty message types are sent automatically, with admin-editable text and a full delivery log.
| Audience | Examples |
|---|---|
| Students | Form received, admission confirmed, absent, cancelled, rearranged, backup class, fee receipt, fee reminder, leave approved, 10/7/3-day expiry, subscription over, 25% absence warning |
| Teachers | Unmarked attendance, demo assigned or cancelled |
| Admins | New lead, new demo, demo done or cancelled, fee submitted, follow-ups due |
| Super admins | New demo received, admission approved |
| When | Job | Business purpose |
|---|---|---|
| Every minute | Online admission payment check | Confirms paid admissions even if the student never returned from the gateway. |
| Hourly | Shop and event payment checks | Confirms paid orders and event tickets. |
| 00:05 daily | Unpaid-fee control | Flags students past their payment due date with an outstanding amount. |
| 09:00 daily | Absence analysis | Warns students whose absence reaches 25% of sessions. |
| 10:00 daily | Course expiry reminders | Renewal nudges at 10, 7 and 3 days before the end date. |
| 10:00 daily | Rental expiry reminders | Prompts rental extension or return. |
| 10:00 daily | Follow-up reminders | Tells the sales team which leads to call today. |
| 20:00 daily | Unmarked attendance | Lists each teacher's sessions still waiting for attendance. |
A single login routes each person to an experience built for their job. Students land on their courses; staff land on a dashboard with today's counts and alerts.
| Role | Home and key screens | Data scope |
|---|---|---|
| Student | My courses, sessions calendar, homework and videos, questions, rearrange, leave, payments, receipts, profile, shop and events | Own admissions, sessions and payments only |
| Teacher | Teacher home, today's classes, attendance, progress, topics and homework, student questions, library, leave | Sessions assigned to them |
| Branch Head | Leads, follow-ups, demos, admissions, batches and fees for the branch | Own branch only |
| Admin / Admin Executive | Full operations: approvals, payments, templates, holidays, users, shop, rentals, events | All branches |
| Super Admin | Everything, plus partner payouts, roles and permissions, and approval notifications | Entire network |
| Partner / Freelancer | Registration and KYC; freelancer profile, gigs and updates | Own records |
Login by email or student code with password, or by WhatsApp one-time password; forgotten-password flow by OTP.
A roles-and-permissions module with middleware that controls which screens each role can open.
Sensitive deletions, such as sessions and message templates, require an OTP confirmation.
| Area | Module | Key capabilities |
|---|---|---|
| Grow | Public website | Courses, products with reviews, events, shop, rentals, blogs, careers, policies, contact |
| Grow | Lead management | Multi-source capture, stages, follow-ups, branch assignment, import/export, WhatsApp outreach |
| Grow | Demo bookings | Demo batches and slots, status tracking, feedback, referrals, conversion |
| Grow | Apply / booking pages | Mobile booking and payment pages for classes and integrated programmes |
| Academics | Course catalogue | Categories, subjects, courses, durations, minimum age, SEO |
| Academics | Course structure | Lessons, topics, videos, integrated packages |
| Academics | Admission management | Website, staff and link-based admissions; approval; cancellation archive; receipts |
| Academics | Batch management | Shifts, days, time slots, teachers, occupancy, copy slots between branches |
| Academics | Session management | Automatic generation, attendance, progress, homework, rearrangement |
| Academics | Academic calendar & holidays | Holiday types, extra-week breaks, event calendar |
| Academics | Expired subscriptions | Renewal call lists for recently ended courses |
| Money | Fee structures | Course × frequency × branch pricing; pay-as-you-go rates; grace period |
| Money | Payments | Worldline and CCAvenue checkout, verification, auto-reconciliation, status lookup |
| Money | Fees and dues | Offline payments, discounts, receipts, reminders, unpaid control |
| Money | Finance & partners | Branch share, monthly payout schedule, payout ledger, partner views |
| Commerce | Shop | Categories, conditions, colours, cart, checkout, invoices |
| Commerce | Rentals | Pincode delivery, deposits, dispatch/return photos, extension, refunds |
| Commerce | Inventory | Opening, rented, returned and closing stock |
| Engage | Events | One-off and recurring events, booking, payment, feedback |
| Engage | Marketing & media | Media gallery, consent flags, share-your-music submissions |
| Engage | Stock music | Genre, theme, mood, BPM, free and paid tracks, favourites |
| Engage | Meetings & library | Zoom classes, teacher library, my lessons |
| People | Users, roles & permissions | Role model, branch scoping, permission middleware |
| People | HR | Salary, increments, advances, documents, staff leave |
| People | Student & teacher portals | Student home and courses; teacher home and profile |
| People | Hiring & careers | Openings, applications, pipeline, onboarding |
| People | Talent marketplace | Freelancer profiles, gigs, student placement, booking enquiries |
| Communicate | WhatsApp communication | Templates, campaigns, delivery log, on/off control, test capture |
| Communicate | Chat & notifications | In-app chat, notification centre, web push |
| Communicate | Company branches | Partner KYC, status, online/offline, currency, branch transfers |
RSIM's platform was not delivered in a single drop. It grew with the business, release by release, from a core admissions system into a complete operating platform.
Courses, subjects, fee structures, admissions, batches, automatic sessions, attendance and the student portal.
Lead CRM, demo funnel, online payments with reconciliation, offline fees and WhatsApp automation.
Partner branches with revenue share, shop, rentals, events, blogs and stock music.
New dashboards, batch and session management, finance, permissions, communication, hiring, talent marketplace, media and more, released through a controlled go-live process.
Each rule (capacity, grace period, payout dates, refund formula) was agreed with RSIM and documented in the code next to its implementation.
260+ database migrations let the schema evolve without data loss as RSIM's offering changed.
A separate test server with WhatsApp capture and a payment test page lets RSIM's team try new features safely before go-live.
New modules are mounted alongside the core and switched on per environment, so existing workflows keep running during upgrades.
Message templates, holidays, fees, grace periods, roles and country codes are managed by RSIM's staff.
| Layer | Technologies |
|---|---|
| Application | Python, Django, Django admin (Jet), server-rendered pages with JSON endpoints for interactive screens |
| Data | PostgreSQL, Django ORM and migrations, pandas and openpyxl for imports and exports |
| Automation | django-crontab scheduled jobs; rule-based date logic with dateutil and recurrence rules |
| Documents | ReportLab PDF generation, printable receipts and invoices, amounts in words |
| Integrations | Worldline (Paynimo) and CCAvenue payments, WhatsApp Business messaging and OTP, Zoom API, SMTP email, Firebase and VAPID web push |
| Hosting | Linux cloud server with separate live and staging environments; one deployment serving multiple domains |
The platform replaced manual coordination with defined, automatic workflows across every part of the institute.
| Area | Before | With the RSIM platform |
|---|---|---|
| Lead follow-up | Enquiries spread across phones, sheets and portals | One pipeline, daily follow-up queues and automatic reminders |
| Timetabling | Dates worked out by hand for each admission | A full course timetable generated in seconds, with capacity and holidays applied |
| Room capacity | Overbooking caught only when students arrived | Slot, keyboard and drum limits enforced at booking and rearrangement |
| Missed classes | Make-up classes negotiated over calls | Self-service rearrangement into free slots, with confirmation |
| Online payments | Paid admissions sometimes left unconfirmed | Gateway-verified confirmation and background reconciliation |
| Fees and dues | Manual tracking of instalments | Live dues, receipts on WhatsApp and automatic reminders |
| Partner payouts | Monthly spreadsheets and queries | Calculated share, payout schedule and ledger per branch |
| Communication | Messages typed by staff | 50+ message types sent automatically and logged |
| Retention | Renewals noticed after courses ended | 10/7/3-day reminders and an expired-subscription call list |
| New revenue | Academy fees as the main income | Shop, rentals, events, stock music and talent gigs on the same platform |
Self-service enrolment and payment, a clear timetable, instant updates and an easy way to make up missed classes.
A focused daily view, fewer phone calls and messages, and rules that make decisions consistent across branches.
One source of truth for enrolments, capacity, collections and payouts across the whole network.
Consolidated revenue, collections and partner-payout analytics across admissions, shop, rentals and events, with branch-level dashboards for management.
Student and teacher apps on the same back end, with push notifications for classes, homework and payments.
Smarter slot suggestions, churn prediction from attendance patterns, and an assistant that answers student and parent questions from institute data.
GST-ready invoices and accounting exports for the shop, rentals and course fees.
Continued security review, consolidation of earlier code into the modular layer, and automated testing of the core scheduling and payment rules.
A dedicated partner portal for enrolments, payouts and statements, with downloadable monthly reports.
Talk to JMDA Analytic about a platform like RSIM's, built around your real business rules.
This case study describes the RSIM platform as built and maintained by JMDA Analytic Pvt Ltd. Platform figures are drawn from the codebase at the time of writing. Product and company names belong to their respective owners.