Przepisanie i rozbudowa Kipinä: kompleksowa platforma zarządzania przedszkolem

O projekcie

Klient:

Kipinä to międzynarodowa platforma do zarządzania przedszkolami z własnym programem nauczania dla dzieci w wieku wczesnoszkolnym. Ekosystem składa się z trzech elementów: webowego panelu administracyjnego oraz dwóch aplikacji mobilnych – dla nauczycieli i rodziców. System obsługuje zarządzanie szkołą, komunikację między personelem a rodzicami, śledzenie postępów dzieci, rejestrację frekwencji i finanse.

Po kilku latach działania aplikacje mobilne działały coraz wolniej, liczba błędów rosła, a stary backend w PHP uniemożliwiał dalszy rozwój. Klient potrzebował nie tyle kolejnej iteracji, co gruntownego przepisania systemu – przy zachowaniu ciągłości działania i integralności istniejącej bazy danych. fireup.pro przejęło projekt od poprzedniego zespołu i dostarczyło nowy stack od frontendu przez backend aż po infrastrukturę chmurową.

Cel projektu:
Biznesowe
  • Wyeliminowanie problemów wydajnościowych i błędów w aplikacjach mobilnych (nauczyciel i rodzic), które frustrują codziennych użytkowników systemu.
  • Odświeżenie interfejsu webowego – panel administracyjny nie pasował do aktualnych standardów UX i wymagał przeprojektowania.
  • Wdrożenie modułu finansowego umożliwiającego zarządzanie opłatami w przedszkolach – funkcja wcześniej nieobecna w systemie.
  • Usprawnienie rejestracji frekwencji przez dedykowaną aplikację Barcode Scanner dla nauczycieli i rodziców.
    Technologiczne
    • Migracja backendu z PHP na NestJS (TypeScript) z zachowaniem istniejącej struktury bazy danych.
    • Przepisanie aplikacji mobilnych (React Native) i panelu webowego (React) od podstaw – nowy kod, nowy interfejs.
    • Migracja infrastruktury do AWS: konsolidacja wszystkich komponentów (baza danych, przechowywanie plików, konwersja wideo) w jednym środowisku chmurowym.
    • Wdrożenie usługi VOD dla globalnej bazy użytkowników z redukcją czasu ładowania wideo.
      Od wyzwania

      Kluczowe wyzwania

      1

      Przejęcie projektu od poprzedniego zespołu bez dokumentacji

      Backend w PHP działał od lat, a poprzedni zespół nie zostawił dokumentacji. Zadanie polegało na zrozumieniu istniejącej logiki biznesowej, przepisaniu backendu do NestJS i jednoczesnym utrzymaniu integralności bazy danych – bez utraty danych i bez przerwy w działaniu systemu. Każda decyzja migracyjna musiała uwzględniać to, co już istnieje i co działa, nawet jeśli nie było to udokumentowane.

      2

      Wolne i niestabilne aplikacje mobilne

      Nauczyciele i rodzice codziennie korzystali z aplikacji, które działały zbyt wolno i generowały błędy. Użytkownicy byli sfrustrowani. Rozwiązaniem nie była optymalizacja – był nim kompletny rewrite frontendu i backendu z nowym stosem technologicznym zaprojektowanym pod wydajność i skalowalność.

      3

      Konwersja i globalna dystrybucja wideo

      Kipinä to platforma o zasięgu międzynarodowym. Nauczyciele wysyłają rodzicom nagrania wideo z aktywności dzieci. Wideo musiało być szybko dostępne niezależnie od lokalizacji użytkownika, a cały pipeline przetwarzania – zbudowany od zera w oparciu o usługi AWS.

      4

      Zbudowanie modułu finansowego od podstaw

      Zarządzanie opłatami w przedszkolach to złożona domena: różne kategorie płatności, raporty dla administracji, integracja z profilem dziecka. Moduł finansowy musiał zostać zaprojektowany i zaimplementowany zarówno po stronie backendu (Nest.JS), jak i frontendu (React), spójnie z resztą systemu.

      Kluczowe wymagania funkcjonalne

      Panel webowy (admin): dodawanie i zarządzanie szkołami, nauczycielami, rodzicami i dziećmi; przypisywanie dzieci do grup; wybór programu nauczania dla grupy; zarządzanie danymi i logo szkoły.

      Aplikacja nauczyciela: wysyłanie zdjęć i filmów z aktywności, udostępnianie aktualności z danego dnia, śledzenie ścieżki nauki klasy, dodawanie odznaki i raportów do profilu dziecka.

      Aplikacja rodzica: feed z aktualnościami (analogicznie do feedu), podgląd postępów nauki dziecka, przypisane umiejętności, dziennik online, galeria zdjęć i filmów przesłanych przez nauczyciela.

      Kipinä Barcode Scanner: dedykowana aplikacja mobilna do rejestracji obecności dzieci i nauczycieli przy wejściu do szkoły.

      Moduł finansowy: zarządzanie opłatami przedszkolnymi, generowanie raportów z postępów dzieci przez AWS Lambda, śledzenie i rozliczanie transakcji finansowych w ramach aplikacji.

      Przez rozwiązanie

      Pełne przepisanie zamiast łatania

      Decyzja była jednoznaczna: cały kod aplikacji zostaje przepisany, jedynym elementem przeniesionym z oryginalnego systemu jest baza danych. Takie podejście eliminowało dług techniczny narosły przez lata i dawało swobodę w projektowaniu architektury pod wymagania nowego stacku.

        Backend: NestJS zamiast PHP

        Przepisanie backendu z PHP na Nest.JS (TypeScript) to kluczowa zmiana tej migracji. Nest.JS zapewnia lepszą organizację kodu, natywne wsparcie dla TypeScript, modularność ułatwiającą testowanie i skalowalność systemu. TypeORM jako warstwa dostępu do bazy danych zapewnił spójność operacji na istniejącej strukturze MariaDB. Nowy backend umożliwił też czytelną integrację z usługami AWS przez SDK i bezpośrednie wywołania funkcji Lambda.

          Infrastruktura: wszystko na AWS

          Przeniesienie infrastruktury do AWS pozwoliło skonsolidować wszystkie zależności systemu w jednym środowisku: baza danych na RDS, pliki statyczne i wideo na S3, przetwarzanie wideo przez AWS Elemental MediaConvert i dystrybucja przez CloudFront, orkiestracja pipeline'u wideo przez AWS Step Functions, backend uruchamiany na ECS z Fargate (bez zarządzania serwerami, płatność za faktyczne zużycie), funkcje raportowe i analityczne jako AWS Lambda.

            Frontend i mobile: nowy interfejs od zera

            Panel webowy przepisano w React z TypeScript i Ant Design, co dało nowoczesny, spójny interfejs odpowiadający aktualnym standardom UX. Aplikacje mobilne (nauczyciel i rodzic) przepisano w React Native z Redux, zapewniając płynne działanie na iOS i Android. Barcode Scanner powstał jako osobna aplikacja mobilna w React Native.

              Przejęcie i utrzymanie

              Jeden z programistów fireup.pro formalnie przejął odpowiedzialność za projekt od poprzedniego zespołu - zarządzając stabilnością i ciągłością działania systemu równolegle z rozwojem nowych funkcjonalności. Nie było okresu bez właściciela; tranzycja była płynna.

                Po sukces

                Efekty technologiczne

                Czas ładowania wideo dla użytkowników globalnych skrócił się z ~30 sekund do ~5 sekund po wdrożeniu pipeline'u opartego na MediaConvert i CloudFront.

                Backend w Nest.JS zastąpił stary kod PHP, zapewniając lepszą skalowalność, czytelność kodu i łatwiejsze onboardowanie nowych developerów.

                Aplikacje mobilne przepisane od zera działają stabilnie, bez błędów blokujących codzienne użytkowanie przez nauczycieli i rodziców.

                Moduł finansowy wdrożony end-to-end: od logiki backendu przez Lambda po interfejs w panelu webowym.

                Korzyści biznesowe

                Sfrustrowani użytkownicy – główny sygnał od klienta na starcie projektu – przestali zgłaszać problemy z wydajnością po wdrożeniu nowego stacku.

                Kipinä zyskała funkcjonalność finansową wcześniej niedostępną w systemie, otwierając nową ścieżkę wartości dla zarządzających przedszkolami.

                Aplikacja Barcode Scanner usprawniła codzienną rejestrację frekwencji, eliminując ręczne procesy.

                Jeden wspólny kod w React Native dla iOS i Android oznacza jeden zespół zamiast dwóch, niższe koszty development i utrzymania, szybsze wdrażanie nowych funkcji oraz mniejsze ryzyko rozbieżności między wersją dla nauczyciela a wersją dla rodzica.

                System jest architektonicznie gotowy na dalszy rozwój – nowe funkcje można dodawać w ramach modularnej struktury Nest.JS bez ryzyka destabilizacji działającego systemu.


                Zespół projektowy
                Abstract background
                Robert
                Damian
                Patryk
                Mateusz
                Małgorzata
                Maks

                Robert

                Backend developer

                Przejął projekt od poprzedniego zespołu, zapewniając płynną tranzycję i ciągłość działania aplikacji. Zaprojektował i wdrożył moduł finansowy oraz funkcję generowania raportów z postępów dzieci przez AWS Lambda.

                Tech stack

                NestJS

                Node.js

                TypeScript

                MariaDB

                React

                React Native

                Redux

                AWS Lambda

                Amazon S3

                Amazon RDS

                Docker

                Twoja sukces to nasz sukces!

                Zobacz, jak możemy wspólnie zbudować technologiczną przewagę dla Twojej firmy

                Umów się na konsultację!

                Mamy zespół, który naprawdę zna się na rzeczy — pomożemy Ci znaleźć rozwiązanie, które działa.

                Wnioski i rekomendacje

                Pełny rewrite opłaca się, gdy dług techniczny blokuje biznes.

                Optymalizacja starego kodu PHP przy narosłym długu technicznym i braku dokumentacji dałaby tymczasowe rezultaty. Decyzja o przepisaniu wszystkiego – przy zachowaniu bazy danych – była odważna, ale uzasadniona: nowy system działa stabilnie i jest gotowy na kolejne lata rozwoju.

                Migracja do AWS to nie tylko infrastruktura – to architektura.

                Przeniesienie na AWS nie było wymianą serwerów. To konsolidacja bazy danych, przechowywania plików, przetwarzania wideo i funkcji serverless w jeden spójny ekosystem. Przy globalnym zasięgu produktu ta decyzja miała bezpośredni wpływ na doświadczenie użytkownika.

                Node.js/Nest.JS jako następca PHP w istniejących systemach.

                NestJS oferuje modularność i TypeScript, które radykalnie ułatwiają utrzymanie kodu. Dla systemów z historią w PHP, gdzie skalowalność i onboarding nowych deweloperów stają się problemem, ta migracja jest wartym rozważenia krokiem.

                Przejęcie projektu wymaga dedykowanego właściciela, nie tylko zespołu.

                Tranzycja od poprzedniego zespołu to nie zadanie projektowe, lecz odpowiedzialność. Wyznaczenie konkretnej osoby do przejęcia projektu (a nie tylko kodu) decyduje o tym, czy zmiana przejdzie płynnie, czy wygeneruje miesiące niestabilności.

                Background

                Czas na Twój projekt!

                Przekształć idee w rzeczywiste rozwiązanie i skontaktuj się z nami.

                Twoja wizja, nasza realizacja
                Napisz, omówimy szczegóły.

                Wyrażam zgodę na przetwarzanie moich danych osobowych przez Fire ...


                Kipinä platforma do zarządzania przedszkolem | fireup.pro | fireup.pro