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

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ą.

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.
From challenge
Key Challenges
Przejęcie projektu od poprzedniego zespołu bez dokumentacji
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.
Wolne i niestabilne aplikacje mobilne
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ść.
Konwersja i globalna dystrybucja wideo
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.
Zbudowanie modułu finansowego od podstaw
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.
Through the solution
Through the solution
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.
To the success
Technological outcomes

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.
Project team







Robert
Backend developer
Tech stack

NestJS
Node.js

TypeScript
MariaDB
React

React Native

Redux
AWS Lambda
Amazon S3
Amazon RDS
Docker
Your success is our success
See how we can build a technological advantage for your company together.
We have a team that truly knows its stuff — we'll help you find a solution that works.
Conclusions & recommendations

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.