21Million Academy app

Android and iOS app for following the academy's courses, with protected videos and a community-style interface.

Stack
Flutter, Riverpod, Firebase, Codemagic
Area
Software
21Million Academy app: screen 121Million Academy app: screen 221Million Academy app: screen 3

Where we started

21Million Academy sold finance courses on a WordPress site with LearnDash and BuddyBoss. Members asked to follow lessons from their phones, with videos protected as on the website and the same account.

The problem was technical: the official LearnDash APIs show the catalogue, but do not return a user’s courses with their progress, do not let you mark a lesson as complete and have no login designed for an app. The VdoCipher plugin also generates the code for watching a video only inside the site’s pages, without checking whether the viewer is enrolled on the course.

What we did

We wrote the app in Flutter, which produces both the Android and the iOS app from a single codebase. To make it talk to the site we first wrote a bridge plugin for WordPress, with the missing APIs: token login, the user’s courses, progress, lesson completion, video code.

When the site moved to a custom backend, the new server took over the same APIs one by one. The app only needed to change the server address, with no code rewritten.

Video protection works like this: the app asks to watch a lesson, the server checks that the user is enrolled, works out which video matches on its own and asks VdoCipher for a code valid for 5 minutes, with a watermark showing the student’s email. The VdoCipher secret key stays on the server.

Publishing is partly automatic. The iOS build runs on Codemagic and goes to TestFlight, while a script uploads the Android package to Google Play. On Android the app is published without in-app purchases, as Google’s rules require. On iOS Apple asked for courses to be purchasable inside the app, and that part is still in progress.

How it’s built

  • Flutter, with Riverpod for state and go_router for navigation
  • Token login with automatic renewal, stored securely on the device
  • Catalogue, course detail, syllabus and lessons with forward and back navigation
  • Native VdoCipher player, resuming from where you stopped
  • Comments under lessons, certificates and management of linked devices
  • Community: feed, member list, private messages, blocking and reporting
  • Push notifications with Firebase
  • Account deletion from the app

Outcome

Members follow courses from their phones with the same account as on the website, and progress stays in step between app and site. Videos are protected to the same level as on the site, because the server always does the check. Moving from WordPress to the new backend did not require rewriting the app.

Want something similar? Let’s talkAll work