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



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.
- 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.
- Built
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 · awaiting review
Learn and Gyaan
A four-level curriculum, the Alankar library, raag introductions and 60 short theory topics in Hindi and English.
- Built · awaiting setup
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.
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.
















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.
- 01 · Voice: Microphone audio, analysed on the phone and never uploaded.
- 02 · Pitch: A YIN pitch estimate every 20 ms, with about 84 ms of analysis latency.
- 03 · Swar: Each note placed against the singer's own Sa and judged within a tolerance.
- 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
- 01Silence and breaths are never graded. They are not wrong notes.
- 02Too little clear singing gives “insufficient evidence”, not a made-up number: two perfect seconds in a 20-minute task do not score 100.
- 03Metrics that do not apply are dropped and the remaining weights renormalised; none is defaulted to zero.
- 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.
- AppReact Native and Expo SDK 58, Expo Router, TypeScript, Reanimated
- GraphicsSkia shaders on phones, plain WebGL on the web
- AudioYIN pitch tracker in plain TypeScript; expo-audio on phones, Web Audio on the web
- AccountsSupabase Auth with Google sign-in, row-level security, Edge Functions
- PaymentsRevenueCat for the stores, Razorpay subscriptions for the web
- QualityVitest, ESLint, a headless-Chrome load test and a synthetic benchmark
Where it stands
Built and tested. Phones next.
Built
Done
257 tests passing
Done
Android APK built
Done
Testing on phones
Next
Real-voice benchmark
Ahead
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.
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


