- 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
- 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
the beginning of work
first results delivered for client’s review
iterations on advanced stage of the project
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.
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.
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.
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.
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.
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.
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.
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.