Inspiration
I find learning an instrument the traditional way a bit boring: classical pieces that slowly climb in difficulty, with little reward along the way. Duolingo showed that short daily lessons, streaks and instant feedback can make people stick with a hard skill, and I saw no equivalent for real instruments. Most music apps also feel disconnected from the instrument because of audio latency and sluggish feedback. Coming from a mechanical engineering background in physical systems and robotics, I wanted Soloist to feel as immediate as a physical tool, with the precision of hardware engineering behind a gamified experience.
What it does
Soloist is a gamified guitar trainer that listens to your real instrument through your phone's mic. It teaches through 8 skills and 24 structured lessons with a scrolling tab highway, and it grades pitch and timing live, including strummed chords. Streaks and hearts build daily momentum, and a built-in chromatic tuner and slow-down practice loops let you drill hard sections at 50–90% speed.
How we built it
I built Soloist with heavy help from Claude (Anthropic's AI). Claude wrote much of the code, including the C++ audio engine and the grading logic, and helped me debug my toolchain, builds and dependency errors along the way. I was new to low-level audio and native mobile development, so I used the project to learn: I read through what Claude produced, asked it to explain concepts like lock-free real-time audio threads, hardware timestamps and YIN pitch detection, and tested the result on my own phone and guitar. My role was the product vision and design decisions, running and testing it on real hardware, finding what was broken, and directing the fixes.
Challenges we ran into
Beyond the latency architecture, the build itself fought back: toolchain mismatches, Metro and Babel dependency conflicts, and a timebase bug between the native audio clock and the UI-thread frame clock that made the note highway jitter. Debugging it meant logging values across the C++, JS and UI threads and comparing their clocks. (Only include this if the highway is actually fixed.) Additionally, I initially tried to publish the app on Google Play, but found that the process would take too long to complete.
Accomplishments that we're proud of
Achieving sub-millisecond grading accuracy regardless of visual feedback delay is a massive structural win for the app. I am also extremely proud of successfully integrating a complex C++ digital signal processing layer seamlessly into a React Native frontend. Pivoting from my previous work in 3D WebGL game development and mechanical design into low-level audio programming and mobile app architecture within a tight hackathon timeframe was an incredibly rewarding push.
What we learned
I learned how to manage real-time audio threads without allocating memory or using system locks, which is critical for preventing audio dropouts. I also gained deep hands-on experience with cross-platform native modules, React Native Skia's UI-thread rendering capabilities, and utilizing RevenueCat to cleanly abstract away the massive headache of managing cross-platform subscription states.
What's next for Soloist - Your favorite songs, missing only you.
Pitch-change onsets for legato, and echo suppression so the backing track doesn't leak into the mic without headphones. Real-recording slow-down needs time-stretching, which is why custom user-uploaded tracks come after that.
Built With
- c++
- expo.io
- node.js
- oboe
- react-native
- reanimated
- revenuecat
- skia
- typescript
Log in or sign up for Devpost to join the conversation.