Wszystkie projekty
Kompletna lista moich prac. Kliknij w projekt, aby zobaczyć szczegóły.
-
Portfolio
2026Astro Tailwind TypeScript JavaScript GitO projekcie
Strona, którą aktualnie przeglądasz, jest wynikiem dążenia do stworzenia idealnego balansu między estetyką a technologią. Głównym wyzwaniem było zapewnienie płynnego działania interaktywnych elementów, takich jak modale projektów i galerie, na wymagających przeglądarkach mobilnych (szczególnie Safari na iOS).
Kluczowe cechy:
- Astro Framework: Wykorzystanie architektury wyspowej (Islands Architecture) dla błyskawicznego ładowania strony.
- Mobile First: Specjalne poprawki dla urządzeń mobilnych, w tym obsługa Dynamic Viewport Height (dvh) i Safe Areas.
- Custom UI: Autorski system filtrowania umiejętności oraz interaktywny modal projektów zintegrowany z centralną mapą technologii.
- Dark Mode: Pełna obsługa motywów z płynnymi przejściami kolorystycznymi.
Wykorzystane technologie:
Projekt opiera się na Astro, co pozwala na serwowanie zerowej ilości JavaScriptu do klienta tam, gdzie nie jest on potrzebny. Stylizacja została wykonana w Tailwind CSS, a logika filtrowania i interakcji w czystym TypeScript.
Galeria
-
IoT Activity Tracker
2025C++ ESP32 React Native PlatformIO TypeScriptO projekcie
Projekt polegał na stworzeniu autorskiego rejestratora aktywności fizycznej (typu Holter), który nie tylko zbiera surowe dane z akcelerometru, ale przetwarza je w czasie rzeczywistym na urządzeniu i klasyfikuje rodzaj aktywności (Spoczynek, Chód, Bieg). System składa się z urządzenia ubieralnego oraz aplikacji sterującej.
Warstwa Hardware & Firmware (C++)
Sercem urządzenia jest mikrokontroler ESP32 oprogramowany w C++ (PlatformIO/Arduino).
- Sensoryka: Integracja akcelerometru/żyroskopu MPU-9250 (komunikacja I2C) oraz precyzyjnego zegara czasu rzeczywistego RTC DS3231.
- Algorytmika: Zaimplementowałem autorski algorytm obliczający wektor SVM (Signal Vector Magnitude) z filtracją dolnoprzepustową (
alpha = 0.05). Urządzenie analizuje dynamikę ruchu i liczbę pików (kroków) w oknach czasowych, aby klasyfikować stan użytkownika. - Pamięć: Obsługa karty SD przez magistralę SPI do logowania danych w formacie CSV (Data, SVM, Stan) w celu późniejszej analizy.
- Komunikacja BLE: Urządzenie działa jako serwer GATT, wystawiając charakterystyki do:
- Streamingu danych na żywo (Notify).
- Synchronizacji historii (autorski protokół przesyłania plików z SD).
- Przyjmowania komend sterujących.
Aplikacja Mobilna (React Native)
Dedykowana aplikacja na Androida służąca do wizualizacji pracy urządzenia.
- Bluetooth Low Energy: Wykorzystanie biblioteki
react-native-ble-plxdo skanowania, łączenia i obsługi strumieni danych. - Dashboard Live: Prezentacja aktualnego przeciążenia (g) oraz wykrytego stanu (Spoczynek/Chód/Bieg) w czasie rzeczywistym.
- Analiza Historii: Funkcja pobierania logów z karty SD urządzenia przez BLE. Aplikacja rysuje interaktywne wykresy (
react-native-chart-kit) i pozwala na eksport raportów (zrzuty ekranu).
Wyzwania
Największym wyzwaniem była optymalizacja transferu dużej ilości danych historycznych przez interfejs BLE (Low Energy) oraz synchronizacja wątków pomiarowych (50ms) z zapisem na kartę SD, aby nie utracić próbek danych.
Galeria
-
MMM-LiveCamera
2025Node.js JavaScript Raspberry Pi HTML5 CSS3O projekcie
Kompleksowy moduł zamieniający lustro w interaktywną fotobudkę. Obsługuje pełny cykl: od podglądu, przez odliczanie, wykonanie zdjęcia, aż po upload i wydruk.
Kluczowe funkcje
- Google Drive Upload: Autoryzacja OAuth2 i automatyczne wysyłanie zdjęć do chmury.
- Przetwarzanie Obrazu: Wykorzystanie
ImageMagickdo dynamicznego nakładania ramek, logotypów i efektów na surowe zdjęcia z kamery RPi. - Obsługa Hardware: Sterowanie kamerą przez
rpicam-stilloraz integracja z systemem druku CUPS (komendalp).
Galeria
-
B2B Lead Generator
2025Python Pandas Google API NumPyO projekcie
Aplikacja desktopowa zaprojektowana w celu automatyzacji żmudnego procesu wyszukiwania potencjalnych klientów biznesowych. Narzędzie łączy oficjalne API Google z technikami web scrapingu, aby dostarczać gotowe listy kontaktowe w formacie Excel.
Główne funkcjonalności
- Integracja z Google API: Wykorzystanie Custom Search JSON API do precyzyjnego wyszukiwania firm w określonych lokalizacjach (obsługa wielu krajów).
- Inteligentny Scraping: Autorski algorytm ekstrahujący adresy e-mail i numery telefonów ze stron docelowych, z wbudowanym filtrowaniem błędnych danych (np. kodów pocztowych mylonych z telefonami).
- Wielowątkowość: Zastosowanie modułu
threadingdo równoległego przetwarzania zapytań bez blokowania interfejsu użytkownika (GUI). - Zarządzanie Limitami: System monitorowania dziennego limitu zapytań API z automatycznym resetem.
Wyzwania techniczne
Kluczowym wyzwaniem było ominięcie blokad anty-botowych oraz obsługa różnorodnych struktur HTML na stronach firmowych. Zastosowałem losowe opóźnienia (
random.uniform) oraz zaawansowane wyrażenia regularne (Regex) do precyzyjnej ekstrakcji danych kontaktowych.Galeria
-
MMM-WeightTrigger
2025Node.js JavaScript Raspberry Pi HTML5 CSS3O projekcie
Moduł przekształcający zwykłą półkę pod lustrem w inteligentny sensor. Wykorzystuje tensometry i sterownik HX711 do wykrywania obecności przedmiotów (np. kluczy, telefonu).
Technologia
- Low-Level Backend (C++): Napisałem dedykowany program w C++ wykorzystujący bibliotekę
wiringPi, aby uzyskać stabilne i szybkie odczyty z pinów GPIO, co było niemożliwe do osiągnięcia w czystym JavaScript. - Integracja: Node.js (
node_helper) komunikuje się z procesem C++ poprzez standardowe wyjście (stdout), przekazując zdarzeniaWEIGHT_LOW/WEIGHT_HIGHdo frontendu lustra.
Galeria
- Low-Level Backend (C++): Napisałem dedykowany program w C++ wykorzystujący bibliotekę
-
MMM-ButtonListener
2025Node.js JavaScript Raspberry Pi HTML5 CSS3O projekcie
Moduł służący do fizycznej interakcji z lustrem. Pozwala na wyzwalanie cyfrowych zdarzeń (np. zrobienie zdjęcia) za pomocą hardware’owego przycisku arcade.
Architektura
Wykorzystałem bibliotekę
PythonShelldo uruchomienia skryptu Pythona w tle. Skrypt używa bibliotekigpiozerodo nasłuchiwania przerwań na pinach GPIO, co jest znacznie wydajniejsze niż ciągłe odpytywanie (polling). Po wykryciu wciśnięcia, sygnał jest wysyłany do głównego procesu MagicMirror.Galeria
-
GUS REGON Integrator
2025Python FastAPI Docker GitO projekcie
Narzędzie służące do szybkiej weryfikacji danych podmiotów gospodarczych w Polsce. Aplikacja łączy się bezpośrednio z usługą sieciową GUS (BIR), pobiera pełne dane o firmie na podstawie NIP i pozwala na generowanie oficjalnych raportów.
Kluczowe funkcjonalności
- Komunikacja z BIR: Obsługa logowania i sesji w systemie REGON przy użyciu klucza API użytkownika.
- Dynamiczny Raport PDF: Generowanie czytelnych dokumentów PDF z wykorzystaniem biblioteki
FPDFi własnych czcionek (obsługa polskich znaków). - Interfejs “Drag & Drop”: Implementacja mechanizmu przeciągnij-i-upuść w
Tkinter, pozwalająca użytkownikowi na budowanie niestandardowych raportów z wybranych pól danych. - Historia Wyszukiwania: Lokalny system cache’owania ostatnich zapytań w plikach tekstowych.
Stack Technologiczny
Projekt wykorzystuje bibliotekę
litex.regondo komunikacji z API orazlxmldo parsowania złożonych odpowiedzi XML zwracanych przez serwery rządowe. Całość zamknięta w intuicyjnym interfejsie graficznym.Galeria
-
MMM-HomeAssistant
2025Node.js JavaScript Raspberry Pi HTML5 CSS3O projekcie
Lekki wrapper umożliwiający osadzenie panelu sterowania Home Assistant wewnątrz interfejsu MagicMirror.
Rozwiązanie
Zamiast budować interfejs od zera, moduł tworzy responsywną ramkę (
iframe), która bezpiecznie renderuje panel HA. Pozwala to na zachowanie pełnej funkcjonalności Home Assistanta (przełączniki, wykresy, kamery) przy minimalnym narzucie kodu po stronie lustra.Galeria
-
MMM-CpuFanControl
2025Node.js JavaScript Raspberry Pi HTML5 CSS3O projekcie
Rozwiązanie hardware’owe dbające o kulturę pracy urządzenia. Moduł monitoruje temperaturę procesora i dynamicznie steruje tranzystorem załączającym wentylator.
Jak to działa
- Monitoring: Node.js cyklicznie wykonuje komendę systemową
vcgencmd measure_temp. - Logika: Histereza temperatury (włącz przy 65°C, wyłącz przy 55°C) zapobiega ciągłemu włączaniu i wyłączaniu wiatraka.
- Sterowanie: Bezpośrednie zarządzanie pinami GPIO poprzez narzędzie
pinctrl.
Galeria
- Monitoring: Node.js cyklicznie wykonuje komendę systemową