Skip to content

Case study · Client project · 2026

Spanda

Your daily Riyaaz, measured. A Hindustani vocal practice app for Android and iOS, built for a client.

स्पन्द: the first, subtle vibration from which all sound arises.

Engagement
Built for a client
Role
Product design and engineering
Platforms
Android and iOS, from one React Native codebase
Status
v0.1 first draft built · Android release APK built · store launch pending
Spanda's Today screen in a dark theme: a greeting for a sample profile, a 15-minute Daily Starter plan at Sa D3 with a Start today's Riyaaz button, a week strip and the first two tasks.
Alankar 1 result, Well sung, 97: pitch accuracy 96, stability 100, note sequence 93, rhythm 93 and adherence 100, each with its weight and a one-line explanation, labelled as a demo singer not added to progress.
Spanda's Studio screen in a light theme: a tuner dial reading Pa, in tune, 16 cents sharp at 222.1 Hz, above a pitch trace stepping from Sa up to Pa across Devanagari swar lanes.

Real screens from the v0.1 build · demo singer · October 2026

The brief

Daily Riyaaz, with feedback a student can trust.

Riyaaz is daily, solitary work: a drone, a set of exercises and the singer's own ears. The client needed an app that plans each day's practice, keeps the tanpura on the singer's Sa and says honestly how the singing went, including when it could not hear enough to say.

How one exercise grade is built
  • Pitch accuracy40%
  • Stability20%
  • Note sequence15%
  • Rhythm15%
  • Adherence10%

Weights from the scoring specification (0.1.1). Metrics that do not apply are dropped and the rest renormalised. The weights are engineering choices still to be checked against teachers' ratings of real recordings.

Plan
A routine sized to the day, from 15 to 90 minutes, that the student can edit.
Listen
Pitch heard on the phone itself, over the tanpura, with nothing uploaded.
Judge
A grade only when there is enough clear singing, and a reason for every number.

What was built

Nine parts of one practice loop.

  • Built
  • Built · awaiting setup
  • Built · awaiting review

Built: working in the v0.1 build. Awaiting setup: code and tests done; it needs the store products, Razorpay plans or Supabase project before it can go live. Awaiting review: content written, waiting for a qualified teacher to review it. Status per the project README, October 2026.

  • Daily planner

    Today's plan as a timeline, a streak and a week strip; routines of 15, 60 or 90 minutes that students duplicate, edit and reorder.

    Built
  • Sa, range and ear

    Finds the singer's Sa from a few seconds of singing or a harmonium key; a vocal range finder and Sur pehchan ear training.

    Built
  • Live pitch studio

    Tuner dial and live pitch trace on swar lanes over a recorded acoustic tanpura, re-tuned to the singer's Sa.

    Built
  • Guided exercises

    Swar Sadhana, Alankars 1–6, Aakar, Taal and raag aaroh–avaroh, with count-in, metronome and notes lit in Devanagari.

    Built
  • Explained scoring

    Pitch, stability, note sequence, rhythm and adherence, each with its weight and a one-line reason, plus a session report.

    Built
  • Progress tracking

    Practice time, grade trend, a 12-week consistency heatmap, per-swar accuracy, personal bests and full history.

    Built
  • Learn and Gyaan

    A four-level curriculum, the Alankar library, raag introductions and 60 short theory topics in Hindi and English.

    Built · awaiting review
  • Subscriptions

    Google Play and App Store billing through RevenueCat; Razorpay on the web, verified server-side by a Supabase Edge Function.

    Built · awaiting setup
  • Optional account

    Google sign-in, manual cloud backup and restore under row-level security, and in-app deletion. Fully local without it.

    Built · awaiting setup

In the app

From finding Sa to the session report.

Real screens from the v0.1 build, October 2026, in the order a student meets them. Where a screen shows singing, it is the built-in demo singer: a synthetic voice streamed through the real pitch tracker and scorer, and never added to anyone's progress.

Onboarding step Find your Sa: a microphone circle with a Sing to find my Sa button, and a row of keys with harmonium names for picking Sa by hand, D3 Safed 2 selected.
Finding Sa by singing, or by key with harmonium names.
Spanda's Today screen in a dark theme: a greeting for a sample profile, a 15-minute Daily Starter plan at Sa D3 with a Start today's Riyaaz button, a week strip and the first two tasks.
Today: the day's plan, week strip and streak, shown for a sample profile.
Task introduction for Humming, with its Hindi name, in demo mode: a sustained, scored task with three numbered instructions and a safety note that humming should feel easy and never be pushed.
Each task opens with instructions and a safety note.
Guided Swar Sadhana round: the sargam written in Devanagari with the current note highlighted, above a live pitch trace climbing through the swar lanes, with sung time and a 40-cent tolerance.
Guided exercise: notes light up in Devanagari as the trace follows the voice.
Alankar 1 result, Well sung, 97: pitch accuracy 96, stability 100, note sequence 93, rhythm 93 and adherence 100, each with its weight and a one-line explanation, labelled as a demo singer not added to progress.
An explained score: every metric shows its weight and why. Demo singer, not added to progress.
Session report after a demo session marked not counted: musical grade 100, Excellent, five of five tasks done, practice and singing time, on-device coach notes and per-task scores, with marigold petals falling.
Session report with on-device coach notes, after a demo session that is not counted.
Spanda's Studio screen in a light theme: a tuner dial reading Pa, in tune, 16 cents sharp at 222.1 Hz, above a pitch trace stepping from Sa up to Pa across Devanagari swar lanes.
Studio: free tuner and live pitch trace, driven here by the built-in demo singer.
Learn screen in a light theme: Alankar library cards with Devanagari notation, a note that Alankars 7 to 30 will be added after review by a qualified teacher, and four curriculum levels.
Learn: the Alankar library and curriculum. Unreviewed patterns are not published.

Engineering

Measured, tested and plain about its limits.

Every figure here comes from the project's own test, benchmark and load-test records, with the conditions it was measured under.

Illustration: a voice waveform becomes a pitch curve, then notes placed on the swar lanes Sa, Re, Ga, Ma and Pa.सारेगमप
  1. 01 · Voice: Microphone audio, analysed on the phone and never uploaded.
  2. 02 · Pitch: A YIN pitch estimate every 20 ms, with about 84 ms of analysis latency.
  3. 03 · Swar: Each note placed against the singer's own Sa and judged within a tolerance.
How Spanda listens, drawn from its audio-engine and scoring documents. An illustration, not recorded data; the dots along the bottom stand for 20 ms analysis frames.
automated tests passing
257automated tests passingVitest suite as recorded in the project README, October 2026: pitch accuracy on sines and synthetic voices, the scoring rules, the payment gateway against a fake Razorpay, theme contrast, load budgets and the orb shader rendered with real Skia.
to the home screen on throttled 4G
~1.7 sto the home screen on throttled 4GProduction web build in headless Chrome at 390×844, 4G at 12 Mbps and 70 ms, CPU slowed 2×, cache off: home screen rendered with fonts loaded in 1,679 ms, median of 3 runs, under a 2 s budget (20 Oct 2026). A slow-4G budget-phone profile took 6.3 s. Native builds bundle their assets.
pitch tracking; audio is never uploaded
On-devicepitch tracking; audio is never uploadedPitch detection runs in TypeScript on the device (YIN at 16 kHz, 20 ms hop, about 84 ms analysis latency before device input and output). Only scores, durations and small pitch summaries are stored, locally.
WCAG contrast for body text, every theme
AAAWCAG contrast for body text, every themeAutomated theme tests: each of the five prahar themes passes WCAG AAA for body text and AA for secondary text and button labels.

Scoring that explains itself

  1. 01Silence and breaths are never graded. They are not wrong notes.
  2. 02Too little clear singing gives “insufficient evidence”, not a made-up number: two perfect seconds in a 20-minute task do not score 100.
  3. 03Metrics that do not apply are dropped and the remaining weights renormalised; none is defaulted to zero.
  4. 04Every result records its tolerance, tuning and engine version, so scores are only compared like for like.

An audio engine on the phone

  • A room check before each exercise sets the noise gate above the tanpura and the room, so the drone is not graded as singing.
  • The tanpura follows the exercise: Pa- and Ma-tuned loops recorded from an acoustic tanpura (CC BY 4.0), cut on whole pluck cycles and re-tuned to the singer's Sa.
  • Benchmarked on synthetic singers: median pitch error 0.6 cents for a steady voice and 4.1 for a shaky one, with no octave errors.
  • Payments tested against a fake Razorpay: forged signatures, replayed payments, duplicate and out-of-order webhooks.

Benchmark: synthetic voices only, fixed seeds, 19 Oct 2026. Real singers and harmonium accompaniment have not been tested yet.

Stack

One codebase, phone and web.

  1. AppReact Native and Expo SDK 58, Expo Router, TypeScript, Reanimated
  2. GraphicsSkia shaders on phones, plain WebGL on the web
  3. AudioYIN pitch tracker in plain TypeScript; expo-audio on phones, Web Audio on the web
  4. AccountsSupabase Auth with Google sign-in, row-level security, Edge Functions
  5. PaymentsRevenueCat for the stores, Razorpay subscriptions for the web
  6. QualityVitest, ESLint, a headless-Chrome load test and a synthetic benchmark

Where it stands

Built and tested. Phones next.

  1. Built

    Done

  2. 257 tests passing

    Done

  3. Android APK built

    Done

  4. Testing on phones

    Next

  5. Real-voice benchmark

    Ahead

  6. Store launch

    Ahead

Not yet, and not claimed

  • Native microphone capture and playback have not yet been run on a physical Android or iOS phone.
  • The pitch tracker's CPU cost on a phone is unmeasured; the benchmark ran on a desktop.
  • Scoring is benchmarked on synthetic voices only; real singers and harmonium come next.
  • Store billing has not been tested end to end; store products are not yet set up.

Status: v0.1 first draft built · Android release APK built · store launch pending. The 40 MB arm64 release build has its permissions audited but has not yet been launched on a physical phone. No downloads, users or revenue are claimed.

Taking on new projects

Need an app built this carefully?

Mobile, web or both: tell us what it must do and for whom. You will get a considered reply from the founder, usually within two working days, with next steps and an honest view of fit.

Or book a free 30-minute call (opens in a new tab) with the founder.

Prefer email? hello@ameyor.in