Let's talk!

MINDOE

Spotify-like web and mobile app with easy access to online development trainings.
image

Details

  • Scope Backend, frontend and mobile development
  • Innovation Nest.js, GraphQL, TypeORM, AWS cloud
  • Technologies Backend: Nest.js w/TypeScript, GraphQL, TypeORM w/Postgres, NRWL monorepository, modular monolith
    Frontend: Next.js, Apollo Client
    Mobile: Flutter
  • Business sector Personal development
  • Model of collaboration Time & Material
  • iteo Team 3 x Backend developers
    3 x Frontend developers
    2 x Flutter developers
    3 x QA experts

An original, custom-made, intuitive Spotify-like app handling all online courses recordings and provided content with ease.

Timeline

  • 2020
    July

    the beginning of work

  • 2020
    September

    first results delivered for client’s review

  • 2020
    October

    cloud integrations

  • 2020
    November

    iterations on advanced stage of the project

  • 2020
    December

    Tests

  • Project’s highlights

    A functional, scalable web and mobile application supports a vast number of published content languages. Being a fresh solution, it has already gained a number of faithful users.

    image
    image

    Business needs & goals!

    Our client needed a solution for easy access to online personal development trainings. It was supposed to be based on a subscription model and affiliate codes, providing time-limited access to shared content.

    Functionality

    The platform provides audio courses that cover career development, motivation, rhetoric, and more.

    • A user can listen to the first chapter of any available course for free. The paid subscription grants unlimited access to the rest of training sessions.
    • Participants can get motivational badges, for instance when they finish the first lesson or take part in a training for a couple of days in a row.
    • Creators can market their own courses within the platform by offering promotion codes to selected users.
    image

    Technologies

    Backend was developed in Nest.js and TypeScript. They both turned out to be quite friendly for developers accustomed to a strictly object-oriented .NET. The app’s architecture is a modular monolith divided into contexts that use a common relational database.

    API uses mainly GraphQL and, as an external backend layer,
    it communicates with individual contexts with messages
    and data bus in memory.

    Frontend was developed in Next.js with the use of a server-side rendering. We used a great Apollo Client library to communicate with GraphQL API.

    The mobile app was developed in Flutter and it’s used for audio content. It was based on downloading streaming from the
    backend – which is not a usual approach. Additionally, it allows downloading content offline to use it without internet access.

    Streams playback was based on HLS supporting libraries and data cache on database and files storage.

    Innovation

    Access to the database is provided by TypeORM

    Due to quite complex SQL queries, we used its advanced possibilities of building arbitrary queries.

    Monorepository with Nx tools

    Creating the app’s architecture, we decided to use a so-called monorepository with Nx tools. It enabled a logical division of the app into libraries representing contexts and sharing a part of the code between backend and frontend. It all resulted in a steadier control over the queries structure coherence and answers exchanged between API and the frontend app.

    Backend and frontend were implemented in AWS cloud

    The infrastructure was designed by external specialists according to the highest safety standards. We chose an infrastructure as code approach using the Terraform tool by HashiCorp. Primary infrastructure design effort and its implementation in the form
    of Terraform scripts enabled very efficient management of implementation environments. They’re built of over 150 cloud components including ECS clusters with the Fargate service used
    to implement the containerized backend and frontend app, but
    also a database server, S3, buckets, domains, virtual networks,
    a CI/CD pipeline, etc.

    image

    Challenges & solutions

    The app supports HLS streaming

    During publication, courses’ files are converted with the ffmpg library to a format that supports streaming with possibility to adjust content quality to user’s link bandwidth. This feature was one of the initial challenges of the project.

    The application is multilanguage

    It was designed to support any number of published content’s languages. Client’s requirement was for the app to offer courses in the default language (English) in a situation where they aren’t provided in a user’s language. It was an additional implementation challenge, especially due to the fact that the large amount of queries to API is connected with downloading and filtering courses in a desired language. It required preparing a complex, universal mechanism.

    Quality assurance

    We performed manual tests of the web application, CMS and the mobile app on iOS and Android devices, verifying both UI and backend. Functional tests were based on guidelines from user stories and the acceptance criteria. We also applied exploration tests, retests and regression testing on various web browsers and mobile devices operating systems.

    Outcome

    The result of our work is a highly functional web and mobile application that allowed our client to create a scalable process of online training sale. It was released at the turn of 2020/2021 gaining 10k downloads and 4,7 rating on Google Play in 6 months.

    Check the app