Portfolio

Poniżej znajdziesz moje kluczowe projekty techniczne – każdy dokumentuje konkretne umiejętności backendowe, od architektury systemów rozproszonych po semantyczne wyszukiwanie z vector DB.

Aplikacja Klient-Serwer z Pełną Refaktoryzacją Architektury

Opis projektu

Kompleksowa aplikacja Klient-Serwer rozwijana przez 13 etapów – od prostego skryptu do rozproszonej architektury z semantycznym wyszukiwaniem i szyfrowaniem komunikacji. Projekt realizowany w ramach programu mentoringowego, dokumentujący drogę od fundamentów programowania po zaawansowane techniki backendowe.

Kluczowe etapy i zrealizowane cele:

  • Implementacja od podstaw bez zewnętrznych frameworków, komunikacja JSON przez sockety.
  • Refaktoryzacja do OOP, integracja z bazami danych (JSON -> SQL -> SQLite -> PostgreSQL).
  • Pełna refaktoryzacja architektury (Etap 9): dedykowane moduły, warstwa abstrakcji bazy danych (SQLite/PostgreSQL), globalny system logowania, testy jednostkowe z mockami.
  • Elasticsearch (Etap 11): integracja silnika wyszukiwania pełnotekstowego, automatyczne indeksowanie wiadomości.
  • Qdrant – semantyczne wyszukiwanie (Etap 12): wyszukiwanie po znaczeniu zamiast słów kluczowych, lokalne embeddingi z Sentence Transformers (all-MiniLM-L6-v2).
  • TLS i hardening bezpieczeństwa (Etap 13): szyfrowanie komunikacji SSL/TLS, server-side session verification, limity rozmiaru wiadomości (ochrona przed DoS), timeouty połączeń.
  • Konteneryzacja Docker Compose, REST API + RPC API.

Użyte technologie:

  • Język: Python
  • Bazy danych: PostgreSQL, SQLite
  • Wyszukiwanie: Elasticsearch, Qdrant (vector DB)
  • Bezpieczeństwo: TLS/SSL, session verification
  • Testowanie: unittest, Mocking
  • Narzędzia: Docker, Docker Compose, asyncio, GitLab

Linki


Django MessageApp

Opis projektu

Migracja własnej aplikacji Klient-Serwer do frameworka Django – ten sam system wiadomości, zbudowany od nowa jako aplikacja webowa. Projekt realizowany w ramach programu mentoringowego jako kolejny kamień milowy: przeniesienie logiki backendowej ze świata socketów do pełnoprawnego frameworka webowego.

Kluczowe funkcjonalności:

  • Autentykacja i autoryzacja z użyciem Django built-in auth (@login_required, system ról).
  • Role użytkowników: admin (dostęp do wszystkich wiadomości) vs użytkownik (własne wiadomości).
  • Inbox, Sent, Compose – pełny system wiadomości między użytkownikami.
  • Wyszukiwanie wiadomości (case-insensitive).
  • Django ORM zamiast raw SQL, template inheritance (DRY, base.html).
  • Testy jednostkowe z Django TestCase.
  • Konteneryzacja Docker.

Użyte technologie:

  • Język: Python
  • Framework: Django
  • Baza danych: SQLite
  • Testowanie: Django TestCase
  • Narzędzia: Docker, GitLab

Linki:

Zobacz kod na GitLab – Pełny opis projektu w README.md


Airport – Automatyczny System Lądowania ✈️

Opis Projektu

Zaawansowany system symulujący centrum automatycznej koordynacji lądowań dla lotniska. Aplikacja została zrealizowana jako kamień milowy w ramach programu mentoringowego Python, w którym biorę udział. W systemie samoloty (klienci) łączą się z centralnym serwerem (wieżą kontroli lotów), który bezpiecznie sprowadza je na ziemię, zarządzając ograniczoną przestrzenią powietrzną i dostępnością pasów startowych. Całość została zrefaktoryzowana z architektury opartej na sockets i threading do w pełni asynchronicznego rozwiązania z użyciem modułu asyncio, co znacząco uprościło zarządzanie współbieżnością.

Kluczowe Funkcjonalności i Cele

  • Implementacja logiki serwera (wieża kontroli) i klienta (samolot) z wykorzystaniem niskopoziomowych gniazd (sockets) i asyncio.
  • Stworzenie wizualizacji ruchu lotniczego w czasie rzeczywistym przy użyciu biblioteki Pygame.
  • Zapisywanie wszystkich kluczowych zdarzeń (lądowania, kolizje) w bazie danych SQLite przy użyciu puli połączeń z mojego poprzedniego projektu.
  • Obsługa komunikacji za pomocą protokołu opartego na formacie JSON.
  • Zaimplementowanie zewnętrznego API (REST oraz RPC) do monitorowania i sterowania symulacją w czasie rzeczywistym (np. pauzowanie, wznawianie, zamykanie systemu).

Użyte technologie

  • Język: Python 3.12+
  • Współbieżność: Asyncio
  • Wizualizacja: Pygame
  • Baza Danych: SQLite
  • API: REST, RPC
  • Inne: Sockets, JSON, GitLab

Linki:


Aplikacja Desktopowa do Scrapingu Danych z GUI (Tkinter)

Opis Projektu

Gotowa do użytku aplikacja desktopowa z graficznym interfejsem użytkownika (GUI), która pozwala na proste i szybkie pobieranie danych ze strony (prawie 5 milionów recordów wraz z dodatkowymi podstronami danych dla każdego z nich). Celem projektu było stworzenie narzędzia, które będzie w pełni użyteczne dla osób nietechnicznych. Aplikacja została napisana w Pythonie, a jej interfejs zbudowany przy użyciu biblioteki Tkinter. Całość została spakowana do jednego pliku wykonywalnego .exe za pomocą PyInstaller, dzięki czemu do jej uruchomienia nie jest wymagana instalacja Pythona ani żadnych dodatkowych bibliotek.

Kluczowe Funkcjonalności:

  • Zbudowanie intuicyjnego interfejsu graficznego (GUI) w bibliotece Tkinter, z rozwijanymi listami do wyboru kategorii i regionu.
  • Implementacja logiki scrapującej stronę internetową przy użyciu bibliotek requests oraz BeautifulSoup4.
  • Dodanie funkcjonalności eksportu zebranych danych do popularnych formatów: Excel (.xlsx) oraz CSV (.csv).
  • Przygotowanie aplikacji jako samodzielnego programu (.exe), gotowego do dystrybucji i uruchomienia na komputerach bez środowiska programistycznego.

Użyte technologie:

  • Język: Python
  • GUI: Tkinter
  • Kluczowe Koncepcje: Wielowątkowość (Multithreading)
  • Web Scraping: requests, BeautifulSoup4
  • Packaging: PyInstaller

Ze względu na komercyjny charakter projektu nie udostępniam kodu.


Własna Biblioteka Puli Połączeń (Connection Pool) w Celu Nauki Wielowątkowości

Opis projektu:

Projekt zrealizowany w ramach programu mentoringowego, którego celem było stworzenie od podstaw własnej biblioteki do zarządzania pulą połączeń (Connection Pool). Głównym założeniem nie było napisanie konkurencyjnego narzędzia, ale dogłębne zrozumienie i przećwiczenie zaawansowanych zagadnień związanych z wielowątkowością (multithreading), takich jak bezpieczeństwo wątków (thread safety) i zarządzanie współdzielonymi zasobami.

Kluczowe zrealizowane cele:

  • Zdobycie praktycznego zrozumienia wyzwań związanych z programowaniem wielowątkowym.
  • Zaimplementowanie mechanizmu bezpiecznego dla wątków, który zarządza cyklem życia połączeń.
  • Stworzenie działającej biblioteki od zera, opierając się wyłącznie na własnej logice i zrozumieniu problemu.

Użyte technologie:

  • Język: Python
  • Kluczowe Koncepcje: Wielowątkowość (Multithreading), Bezpieczeństwo Wątków (Thread Safety), Zarządzanie zasobami
  • Narzędzia: GitLab

Linki:


Desktopowa Aplikacja do Notatek w Tauri, Rust i TypeScript

Opis projektu:

Minimalistyczna i szybka aplikacja desktopowa do tworzenia i zarządzania notatkami w formacie Markdown. Głównym założeniem tego projektu było podjęcie unikalnego wyzwania: zbudowanie aplikacji od zera w zupełnie nowym dla mnie stosie technologicznym głównie za pomocą AI. Cały proces – od konfiguracji środowiska, przez implementację logiki, aż po integrację bibliotek – został zrealizowany przy użyciu Tauri, Rust i TypeScript, symulując proces wdrożenia się w nową technologię w warunkach zawodowych.

Kluczowe Funkcjonalności:

  • System przechowywania oparty na plikach: Notatki są automatycznie zapisywane jako osobne pliki .md w dedykowanym folderze w dokumentach użytkownika.
  • Edytor Markdown WYSIWYG: Zastosowanie biblioteki EasyMDE zapewnia wygodną edycję tekstu z paskiem narzędzi do formatowania.
  • Automatyczny zapis: Zmiany w notatkach są zapisywane na dysku chwilę po zakończeniu pisania przez użytkownika.
  • Dynamiczne zarządzanie notatkami: Możliwość tworzenia nowych notatek jednym kliknięciem oraz zmiany ich nazw (i nazw plików) poprzez podwójne kliknięcie.
  • Interaktywny interfejs: Czysty, dwupanelowy interfejs ułatwiający wybór i pracę z notatkami.
  • Spójny ciemny motyw: Cała aplikacja, włącznie z edytorem, posiada nowoczesny, ciemny motyw graficzny.

Użyte technologie:

  • Framework: Tauri (do budowy lekkich aplikacji desktopowych).
  • Backend: Rust (odpowiedzialny za całą logikę po stronie systemu plików: odczyt, zapis, zmiana nazwy).
  • Frontend: TypeScript (odpowiedzialny za całą logikę i interaktywność interfejsu).
  • Edytor: EasyMDE.
  • Narzędzia: Vite, HTML, CSS.

Linki:


Spotify Console Player 🎵

Opis Projektu

Konsolowa aplikacja w Pythonie, która pozwala na wyszukiwanie i odtwarzanie albumów z serwisu Spotify bezpośrednio z poziomu terminala. Projekt powstał jako ćwiczenie edukacyjne w ramach programu mentoringowego, a jego głównym celem była nauka komunikacji z zewnętrznym REST API od podstaw. Największy nacisk został położony na samodzielne zaimplementowanie pełnego i zaawansowanego procesu autoryzacji OAuth 2.0 (Authorization Code Flow), co jest kluczową umiejętnością w pracy z nowoczesnymi usługami sieciowymi.

Kluczowe Funkcjonalności:

  • Pełna obsługa procesu autoryzacji użytkownika za pomocą protokołu OAuth 2.0, włącznie z obsługą Redirect URI.
  • Wyszukiwanie albumów w bazie Spotify na podstawie nazwy podanej przez użytkownika.
  • Pobieranie listy aktywnych urządzeń użytkownika (np. komputer, telefon, głośnik) i umożliwienie wyboru jednego z nich.
  • Wysyłanie poleceń do API w celu rozpoczęcia odtwarzania wybranego albumu na wskazanym urządzeniu.

Użyte technologie:

  • Język: Python
  • API: Spotify Web API, REST API
  • Biblioteki: Requests
  • Inne: OAuth 2.0, JSON, GitLab

Linki:


Mój aktualny “stack” technologiczny

Python · Qdrant (vector DB) · PostgreSQL · Elasticsearch · Docker · asyncio · Django · TLS/Security · REST API · unittest · GitLab