Case study
JoinBeUs.
An audio-first language-learning platform, built across a Flutter mobile app, a Next.js admin system and a FastAPI backend — across two contracts and five months, both closed at 5.0.
- Engagement
- Two fixed-price contracts, Jan – Jun 2026
- Role
- Sole engineer — architecture through release
- Platforms
- iOS, Android, web admin
- Outcome
- 5.0 on both contracts, relationship extended
The problem
The client had a language-learning product that needed to work as an audio-first experience on mobile, and an operations team that needed to run it without a developer in the loop. That second half is where this kind of project usually stalls: the app ships, and then every content change, every role change and every subscription question comes back to engineering.
What I built
A Flutter application for iOS and Android on Clean Architecture with Bloc, backed by a FastAPI service. Then the part that made it operable: a Next.js admin spanning 70+ role-based pages with an 11-role access-control model, two-factor authentication, and Stripe subscription billing wired end to end.
The AI work was speech scoring — evaluating a learner’s spoken response and returning a usable score rather than a raw model output. That meant setting a confidence threshold, deciding what happens below it, and making the failure mode quiet rather than wrong.
The result
The first contract delivered the platform. The client came back for a second to build out the admin area, which is the honest measure of how the first went. Both closed at 5.0, and the client endorsed the work for solution orientation, clear communication and accountability for outcomes.
“As we come to the end of this contract, I want to take a moment to thank you for the work you’ve done on JBU…”
Stack
Flutter · Dart · Bloc · Clean Architecture · FastAPI · Python · PostgreSQL · Next.js · Stripe · 2FA · AI speech scoring
Building something with a similar shape?
Start a conversation