MINDOE

Aplikacja internetowa i mobilna podobna do Spotify z łatwym dostępem do szkoleń programistycznych online.
image

Szczegóły

  • Zakres Backend, frontend i rozwój mobilny
  • Innowacja Nest.js, GraphQL, TypeORM, chmura AWS
  • Technologie Backend: Nest.js w/TypeScript, GraphQL, TypeORM w/Postgres, monorepozytorium NRWL, modularny monolit

    Frontend: Next.js, Apollo Client

    Mobile: Flutter
  • Sektor biznesowy Rozwój osobisty
  • Model współpracy Czas i materiały
  • Zespół iteo 3 x programiści backendu
    3 x programiści frontendu
    2 x programiści Flutter
    3 x inżynierowie ds. zapewnienia jakości

Oryginalna, niestandardowa, intuicyjna aplikacja podobna do Spotify, obsługująca wszystkie nagrania kursów online i dostarczane treści z łatwością.

Oś czasu

  • 2020
    Lipiec

    początek pracy

  • 2020
    Wrzesień

    Pierwsze wyniki dostarczone do wglądu klienta

  • 2020
    Październik

    integracje w chmurze

  • 2020
    Listopad

    iteracje na zaawansowanym etapie projektu

  • 2020
    Grudzień

    Testy

  • Najważniejsze informacje o projekcie

    Funkcjonalna, skalowalna aplikacja webowa i mobilna obsługuje ogromną liczbę języków publikowanych treści. Będąc świeżym rozwiązaniem, zyskała już rzeszę wiernych użytkowników.

    image
    image

    Potrzeby i cele biznesowe!

    Nasz klient potrzebował rozwiązania umożliwiającego łatwy dostęp do szkoleń rozwoju osobistego online. Miało się ono opierać na modelu subskrypcji i kodach partnerskich, zapewniających ograniczony czasowo dostęp do udostępnianych treści.

    Funkcjonalność

    Platforma oferuje kursy audio, które obejmują rozwój kariery, motywację, retorykę i nie tylko.

    • Użytkownik może odsłuchać pierwszy rozdział dowolnego dostępnego kursu za darmo. Płatna subskrypcja zapewnia nieograniczony dostęp do pozostałych sesji szkoleniowych.
    • Uczestnicy mogą otrzymać motywacyjne odznaki, na przykład po ukończeniu pierwszej lekcji lub wzięciu udziału w szkoleniu przez kilka dni z rzędu.
    • Twórcy mogą promować własne kursy na platformie, oferując kody promocyjne wybranym użytkownikom.
    image

    Technologie

    Backend został opracowany w Nest.js i TypeScript. Oba okazały się dość przyjazne dla programistów przyzwyczajonych do ściśle obiektowego .NET. Architektura aplikacji to modułowy monolit podzielony na konteksty korzystające ze wspólnej relacyjnej bazy danych.

    API wykorzystuje głównie GraphQL, a jako zewnętrzna warstwa backendowa
    komunikuje się z poszczególnymi kontekstami za pomocą komunikatów
    i szyny danych w pamięci.

    Frontend został opracowany w Next.js z wykorzystaniem renderowania po stronie serwera. Do komunikacji z GraphQL API wykorzystaliśmy świetną bibliotekę Apollo Client.

    Aplikacja mobilna została opracowana we Flutter i jest używana do treści audio. Opierała się na pobieraniu streamingu z backendu
    – co nie jest typowym podejściem. Dodatkowo umożliwia pobieranie treści w trybie offline, aby korzystać z nich bez dostępu do Internetu. Odtwarzanie

    Streams zostało oparte na bibliotekach obsługujących HLS i pamięci podręcznej danych w bazie danych i plikach.

    Innowacja

    Dostęp do bazy danych jest zapewniany przez TypeORM

    Ze względu na dość złożone zapytania SQL, wykorzystaliśmy jego zaawansowane możliwości budowania dowolnych zapytań.

    Monorepozytorium z narzędziami Nx

    Tworząc architekturę aplikacji zdecydowaliśmy się na wykorzystanie tzw. monorepozytorium z narzędziami Nx. Umożliwiło to logiczny podział aplikacji na biblioteki reprezentujące konteksty oraz współdzielenie części kodu pomiędzy backendem i frontendem. Wszystko to zaowocowało większą kontrolą nad spójnością struktury zapytań i odpowiedzi wymienianych pomiędzy API a aplikacją frontendową.

    Backend i frontend zostały zaimplementowane w chmurze AWS

    Infrastruktura została zaprojektowana przez zewnętrznych specjalistów zgodnie z najwyższymi standardami bezpieczeństwa. Wybrano podejście „infrastruktura jako kod” z wykorzystaniem narzędzia Terraform firmy HashiCorp. Pierwotny projekt infrastruktury i jego implementacja w postaci
    skryptów Terraform umożliwiły bardzo sprawne zarządzanie środowiskami wdrożeniowymi. Są one zbudowane z ponad 150 komponentów chmurowych, w tym klastrów ECS z usługą Fargate używaną
    do wdrożenia skonteneryzowanej aplikacji backendowej i frontendowej, ale
    także serwera bazy danych, S3, bucketów, domen, sieci wirtualnych,
    potoku CI/CD itp.

    image

    Wyzwania i rozwiązania

    Aplikacja obsługuje strumieniowanie HLS

    Podczas publikacji, pliki kursów są konwertowane za pomocą biblioteki ffmpg do formatu obsługującego streaming z możliwością dostosowania jakości treści do przepustowości łącza użytkownika. Ta funkcja była jednym z początkowych wyzwań projektu.

    Aplikacja jest wielojęzyczna

    Została ona zaprojektowana do obsługi dowolnej liczby języków publikowanych treści. Wymaganiem klienta było, aby aplikacja oferowała kursy w domyślnym języku (angielskim) w sytuacji, gdy nie są one dostępne w języku użytkownika. Było to dodatkowe wyzwanie implementacyjne, zwłaszcza że duża ilość zapytań do API związana jest z pobieraniem i filtrowaniem kursów w wybranym języku. Wymagało to przygotowania złożonego, uniwersalnego mechanizmu.

    Zapewnienie jakości

    Przeprowadziliśmy testy manualne aplikacji webowej, CMS oraz aplikacji mobilnej na urządzenia z systemami iOS i Android, weryfikując zarówno UI, jak i backend. Testy funkcjonalne opierały się na wytycznych z historyjek użytkownika i kryteriów akceptacji. Zastosowaliśmy również testy eksploracyjne, retesty i testy regresji na różnych przeglądarkach internetowych i systemach operacyjnych urządzeń mobilnych.

    Wynik

    Efektem naszej pracy jest wysoce funkcjonalna aplikacja webowa i mobilna, która pozwoliła naszemu klientowi stworzyć skalowalny proces sprzedaży szkoleń online. Została ona wydana na przełomie 2020/2021 roku, zdobywając 10 tys. pobrań i 4,7 oceny w Google Play w ciągu 6 miesięcy.

    Sprawdź aplikację