NoteHeads: Your practice space
NoteHeads

MUSIC MADE SIMPLE

{{ modeDescription }}

Tuning up…

Checking your session

or

{{ authError }}

By continuing, you agree to the Terms and Privacy Policy.

NoteHeads NoteHeads
Notifications

{{ notif.text }}

{{ notif.time }}
{{ roleLabelWithDemo }}
{{ user.email }}
{{ mergeRequestInstitutionName }} wants to add you as {{ mergeRequestRoleLabel }} on NoteHeads.
Your practice space

{{ greeting }}
Let's make some music.

Four tools for composing, converting, and understanding music across Western and Hindustani traditions, plus a full library of theory lessons hosted on our editorial site.

Last 7 days
{{ day.label }}
{{ streakSavers }} streak savers
Auto-protects a missed day.
{{ points }} points
Earned 10 pts per hour of practice.

{{ streakSaverStatus }}

{{ stat.label }}
{{ stat.value }} {{ stat.trend }}
{{ continueEyebrow }}

{{ continueHeadline }}

Your toolkit

Tools

Open any tool below. It launches right here.

{{ tool.name }}

{{ tool.name }}

{{ tool.blurb }}

Under maintenance
Practice log

Recent activity

{{ item.text }}

{{ item.time }}

No activity yet — open a tool to get started.

© NoteHeads: Music made simple

Theory Hub

Lessons and articles live on our editorial site, side by side across Western and Hindustani theory. Each one opens in a new tab.

Full lesson library

Browse every lesson, track your progress

{{ lessonTracks.totalCount }}
Total
{{ lessonTracks.doneCount }}
Done
{{ lessonTracks.reviewCount }}
Review

Click a lesson to open it on noteheads.in. Click the mark on the left to flag it done or for later review.

No lessons match "{{ lessonSearchQuery }}".

{{ ltrack.eyebrow }}

{{ ltrack.name }}

{{ ltrack.count }} lessons
{{ lvl.name }}
{{ lesson.label }}

Billing

Payments aren't turned on yet. Every plan behaves like Free for now.

Free

₹0

  • All 4 tools
  • Learn: Beginner tracks
  • Community support
Current plan
Most popular

Plus

{{ plusPrice }}{{ proPriceUnit }}

  • Everything in Free
  • Extra streak savers & bonus points
  • Learn: Intermediate tracks
Available once payments are on

Pro

{{ proPrice }}{{ proPriceUnit }}

  • Everything in Free
  • Live collaboration rooms
  • Learn: Intermediate + Advanced
Available once payments are on

Institution

Custom/seat

  • Everything in Pro, per seat
  • Class & roster management
  • Per-class analytics & leaderboards
Contact your institution admin

Settings

Your account, at a glance.

{{ userInitial }}

{{ displayNameStatus }}

Signed in as{{ user.email }}
Role{{ roleLabelWithDemo }}
Plan{{ userPlanLabel }}

Notifications

Weekly practice digest
A recap of streaks and sessions, every Monday.
Product updates
New tools, raags, and feature announcements.

Appearance

Theme

Password

Only applies to email accounts, not Google sign-in.

Redeem an institution code

Got a one-time code from your school? Enter it here to move to their institutional plan.

{{ redeemMessage }}

Danger zone

Deleting your account removes your saved sessions and compositions. This cannot be undone.

Admin

Owner-only overview. Payment keys and OAuth secrets belong on the server, never in this browser.

Preview on mobile

Wraps the whole app in a phone-width frame so you can check the mobile layout without leaving your laptop.

Users
1
Active subscriptions
0
MRR
₹0
Tools live
4 / 4

Payments

Off. Billing shows plans, but checkout is disabled until Razorpay is connected.

Signed-up users

{{ adminUsersCount }} loaded

Every account that has signed in with Google (or email) at least once, newest first.

{{ adminUsersError }}

No users yet.

{{ u.email }}
{{ u.name }} · joined {{ u.createdLabel }}
{{ u.planLabel }} {{ u.roleLabel }}

Send a campaign

Sends one email per matching recipient through the configured email provider (Brevo/Resend).

{{ campaignSendError }}

{{ campaignSendResultLabel }}

Past campaigns

{{ campaignsError }}

No campaigns sent yet.

{{ c.subject }}
{{ c.audienceLabel }} · {{ c.createdLabel }}
{{ c.resultLabel }}

Add a tool

{{ tool.name }}
{{ tool.uptime }} uptime · {{ tool.sessions }} sessions this week
{{ tool.statusLabel }}
Environment variables

Stored server-side only. A variable already set shows its last 4 characters as a hint — leave the value blank to keep it unchanged.

{{ tool.deployStatus }}

Add an institution admin account

{{ inst.name }}
{{ inst.studentCount }} students · Admin: {{ inst.adminEmail }}
/ seat / mo
Active
NameEmailRoleClassJoined
{{ student.name }} {{ student.email }} {{ student.role }} {{ student.joined }}

No students match "{{ inst.searchQuery }}".

Classes
{{ cls.name }} · {{ cls.studentCount }} students

Code requests from institutions

{{ req.instName }} · {{ req.qty }} codes
{{ req.note }}
{{ req.statusLabel }}

No requests yet — institutions can ask for codes from their portal.

Bulk enrollment codes

Generate single-use codes a school can hand out to students, each redeemable once for a free seat.

{{ generatedCodesLabel }}
{{ code }}

Payments

Kill switch for all checkout flows (Razorpay + Dodo). Turning this off blocks new orders and webhooks immediately, even if a provider is configured.

{{ integ.name }} {{ integ.statusLabel }}

{{ integ.desc }}

{{ integ.status }}

{{ integrationsError }}

Values are saved server-side only (never rendered back into the browser). A field that's already set shows a masked hint via its placeholder — leave it blank to keep the current value.

Google Analytics · Last 7 days

Property: {{ gaMeasurementIdLabel }}

{{ gaOverviewError }}

Users
{{ gaOverview.users }}
Sessions
{{ gaOverview.sessions }}
Avg. engagement
{{ gaOverview.avgEngagementLabel }}
Bounce rate
{{ gaOverview.bounceRateLabel }}
Sessions by surface (by tool_id event)
{{ s.name }}
{{ s.value }}

No tool_id events reported yet for this range.

Bulk import from XML

Upload an XML file with one <lesson> element per lesson, each carrying track (hindustani-music / western-music), level (beginner / intermediate), label, and url attributes. Matches the noteheads.in site export format.

{{ lessonXmlStatus }}

Add a lesson manually

Manually-added lessons ({{ customLessons.length }})

These merge into the Theory Hub library alongside the built-in catalogue.

{{ cl.label }} {{ cl.track }} · {{ cl.level }}

{{ myInstitutionPortal.name }}

Manage your roster and classes, and request one-time upgrade codes from NoteHeads.

View-only access to your school's roster, classes, and activity. Ask your institution admin to add or remove users.

Roster ({{ myInstitutionPortal.studentCount }})

NameEmailRoleClassJoined
{{ student.name }} {{ student.email }} {{ student.role }} {{ student.className }} {{ student.joined }}

No students match "{{ myInstitutionPortal.searchQuery }}".

Classes

{{ cls.name }} · {{ cls.studentCount }} students

Class performance

Average sessions per student, by class.

{{ cp.name }}{{ cp.avg }} sessions avg

Top practicers

{{ lb.rank }} {{ lb.name }} {{ lb.sessions }} sessions

Student & class activity

Visible to teachers and admins alike.

{{ student.name }} {{ student.className }}
{{ student.lastActivity }}

Request upgrade codes

Ask NoteHeads for single-use codes to move your students onto the institutional plan, or pay directly at your school's rate of ₹{{ myInstitutionPortal.pricePerSeat }}/seat/mo.

{{ myInstitutionPortal.payMessage }}

{{ req.qty }} codes requested: {{ req.note }} {{ req.statusLabel }}
Guide
Step {{ tutorialStepNumber }} of {{ tutorialStepCount }}

{{ tutorialTitle }}

{{ tutorialBody }}