Rozwijaj techniczne umiejętności i stawaj się ekspertem kodu i biznesu
O Brainhubie
Tworzymy oprogramowanie oraz doradzamy w zakresie architektury i skalowalnych rozwiązań opartych o chmurę AWS. Produkujemy software dla różnych branż, głównie FinTech, MedTech, MarTech, czy branży gamingowej, w tym takich klientów jak National Geographic czy Paradox Interactive.
Nasze podejście do projektów
Wybrane obszary projektowe
MedTech
Web Based App for MedTech Machine
Branża: MedTech
Klient: Firma bioinżynieryjna
Stack technologiczny:
Frontend: NextJS, React (Vanilla JS), ChakraUI, zustand, Formik
Backend: NestJS, GraphQL
Testy: Jest (unit), React Testing Library (component), supertest (API), Cypress (component, e2e)
Inne: Turborepo, Github actions/workflows
Infra: Docker, AWS, Terraform, Terragrunt
DB: PostgreSQL, Prisma
Przykładowe rozwiązania w projekcie
- W projekcie wykorzystano technologie frontendowe, takie jak NextJS, React, ChakraUI, zustand oraz Formik. Część backendowa została zbudowana z użyciem NestJS i GraphQL.
- Aby zapewnić wysoką jakość aplikacji, przeprowadzamy testy na różnych poziomach, przy użyciu Jest, RTL, supertest i Cypress. Całość została zarządzana przy użyciu narzędzi Turborepo i Github actions/workflows. Infrastruktura oparta była o Docker, a wdrożenie o platformę AWS.
- Baza danych to PostgreSQL, a do zarządzania nią wykorzystano Prismę. Cały proces developmentu i wdrożenia jest realizowany w oparciu o podejście GitOps, tak, aby mieć zawsze pewność, że wszystkie elementy zostały przetestowane i nie doszło do regresji.
Świetnie jest uczestniczyć w tak dobrze zaprojektowanym procesie wytwarzania oprogramowania. Są tu prawidłowe procesy i odpowiedni ludzie na odpowiednim miejscu, zwłaszcza w kontekście współpracy pomiędzy developerami i specjalistami od Quality Assurance.
Maciej Wolak
Quality Assurance Engineer
Gaming
Game Launcher
Branża: Gaming
Klient: Wydawca gier komputerowych
Stack technologiczny:
Kod źródłowy: JavaScript
Frontend: Elektron, React
Testy: Puppeteer
Dystrybucja: AppStore, plik instalacyjny dla Windows i Linux
CI/CD: Jenkins
Przykładowe rozwiązania w projekcie
- Dostosowanie procesu budowania i dystrybucji aplikacji tak, aby działała natywnie na ARM-owych procesorach Apple’a.
- Synchronizacja danych użytkownika pomiędzy aplikacją desktopową a chmurą.
- Implementacja systemu rozwiązywania konfliktów w przypadku, gdy zmiany były dokonywane równocześnie na dwóch komputerach lub w aplikacji desktopowej i przez stronę internetową.
- Tworzenie customowego, zintegrowanego z CI narzędzia do testów e2e aplikacji desktopowej, co umożliwia automatyczne odpalanie testów na różnych systemach.
Z naszej aplikacji desktopowej korzysta wiele osób na całym świecie. Windows, Mac, Linux, wiele konfiguracji sprzętowych, systemowych i językowych (np. RTL). Każda funkcjonalność musi być przemyślana pod tym kątem, tak, aby działała poprawnie na niemal wszystkich komputerach. Świadomość, że kod, który się aktualnie pisze już za parę tygodni może być uruchomiony na komputerach milionów graczy - znajomych, rodziny i mnie samego - daje dodatkową motywację i satysfakcję.
Daniel Kawka
Senior Full Stack JavaScript Engineer
MarTech
Web App & Chrome Extension & SDK
Branża: MarTech
Klient: Twórca aplikacji do promocji usług sprzedażowych
Stack technologiczny:
Frontend: Preact, Emotion, React-Query, React Hook Form, AJV schema validator
Server Side Rendering: Next.js, Docker
Backend: NestJS, Prisma, Amazon RDS (PostgreSQL), Amazon Kinesis Data Stream, Amazon ElastiCache (Redis), Docker
Infrastruktura: Amazon Elastic Container Service, Amazon Elastic Container Registry, Amazon Simple Storage Service, Amazon CloudFront, Amazon VPC, Amazon Kinesis Data Stream, Amazon Kinesis Firehose, Amazon API Gateway, Amazon Cognito, GitLab Runners (docker executor) na EC2
Testing: Playwright, K6, Jest, Supertest
Przykładowe rozwiązania w projekcie
- Implementacja różnych funkcjonalności w aplikacji klienta, takich jak tagi Open Graph dodawane do stron renderowanych po stronie serwera z Next.js, wykorzystane, aby umożliwić wyświetlanie podglądów strony na portalach społecznościowych i komunikatorach.
- Stack z sekcji frontend, w połączeniu z Amazon CloudFront i S3 jako hostingiem, wykorzystany do tworzenia lekkiego, konfigurowalnego komponentu, który można umieścić w produktach SaaS. Potoki CI/CD wykorzystane do szybkiego dostarczania zmian dla użytkowników końcowych.
- Amazon ECS wykorzystany do zapewnienia skalowalności aplikacji.
- Redis jako message broker (Amazon ElastiCache) wykorzystany do skalowania horyzontalnego dla SSE (server-sent events).
To projekt pełen ciekawych zadań, a jednym z fajniejszych jest tworzenie i utrzymywanie cloudowej infrastruktury i praca w AWS oraz IaC. Można też naprawdę sporo nauczyć się pod kątem frontendu i webówki, bo mamy tu widget integrowany w różnych aplikacjach webowych z różnymi frameworkami. Wyzwaniem jest jego integracja, izolacja i performance. Na co dzień dowozimy nowe funkcjonalności. Ekscytującą częścią naszej pracy jest także ulepszanie skalowalności, monitoringu i observability całego systemu.
Karol Sowa
Senior Full Stack JavaScript Engineer
FinTech
Fintech Web Apps Ecosystem
Branża: FinTech
Klient: Firma zajmująca się doradztwem finansowym
Stack technologiczny:
Kod źródłowy: TypeScript
Backend: Express.js, NestJS, GraphQL,
Baza danych: MongoDB
Testy: Jest, Chai, Mocha, Supertest
Przykładowe rozwiązania w projekcie
- Praca nad architekturą mikroserwisową, w której współdzielone moduły łączą się z dwoma produktami firmy.
- Główne zadanie to dodawanie nowych funkcjonalności, które muszą być kompatybilne z obydwoma produktami, a także wydzielenie współdzielonych modułów do międzyproduktowej infrastruktury. W tym celu wdrażane są procesy zwiększające jakość produktu.
- Wykorzystywany jest Nest.js, który jest frameworkiem JavaScript, przeznaczonym do tworzenia aplikacji mikroserwisowych. Udostępnia on różne narzędzia i funkcje, które mogą być pomocne w refaktoryzacji rozwiązań współdzielonych pomiędzy produktami.
- Dzięki temu można zwiększyć jakość i elastyczność architektury mikroserwisowej. Dodatkowe zadania to doradzanie klientowi jak pracować z narzędziami do Quality Assurance.
Jesteśmy odpowiedzialni za około 15 z kilkudziesięciu serwisów działających w naszym systemie. Serwisy te udzielają odpowiedzi dla różnych produktów. Dla mnie największym wyzwaniem projektowym jest rozwój oprogramowania w taki sposób, żeby było ono maksymalnie proste i łatwe w rozbudowie, ale jednocześnie uwzględniało potrzeby wszystkich użytkowników końcowych naszego systemu - zmiana w serwisie wynikająca potrzeb jednego produktu nie może wpłynąć na pracę innego.
Adam Sarach
Full Stack JavaScript Engineer