Funkcje
Lista serwerów i ich przeglądanie
Serwery są wyświetlane wraz z adresem, portem, opisem i kategoriami. Strona główna i strona indeksu serwerów pokazują serwery z aktualnym statusem — aplikacja pinguje serwery Minecraft z użyciem protokołu gry i wyświetla informacje o tym, czy serwer jest online lub offline, liczbę graczy oraz wersję. Dostępne jest filtrowanie według kategorii, kraju, wersji Minecrafta i statusu. Generator banerów pozwala właścicielom serwerów tworzyć banery promocyjne. Strony szczegółów serwera zawierają pełne informacje, komentarze i formularz głosowania. Właściciele serwerów mogą dodawać, edytować i zarządzać swoimi serwerami; edycja jest dostępna wyłącznie dla właściciela lub administratora.
Konta użytkowników i bezpieczeństwo
Rejestracja odbywa się za pomocą adresu e-mail i hasła. Konto jest aktywowane przez link wysłany e-mailem. Logowanie i rejestracja są chronione przez ograniczanie liczby żądań (rate limiting) oraz śledzenie prób logowania. Sesje są przechowywane w bazie danych za pośrednictwem własnego handlera sesji; przechwytywanie sesji jest utrudnione przez powiązanie sesji z adresem IP klienta. Resetowanie hasła jest dostępne przez e-mail. Użytkownicy mają profile dostępne pod adresem z nazwą użytkownika i mogą edytować swoje dane oraz zmieniać hasło. Żądania modyfikujące stan wymagają tokenu CSRF. Aplikacja korzysta z konfigurowalnego ogranicznika liczby żądań (Stiphle), dzięki czemu trasy uwierzytelniania, głosowania, kontaktu i inne mogą mieć odrębne limity na adres IP lub użytkownika.
Głosowanie i Votifier
Użytkownicy mogą głosować na serwery. Głosowanie jest ograniczone czasowo (np. raz dziennie na użytkownika na serwer). Aplikacja integruje się z protokołem Votifier — gdy użytkownik zagłosuje na stronie, odpowiedni serwer Minecraft może otrzymać powiadomienie. Dane głosowań są zapisywane i można je resetować z poziomu panelu administracyjnego.
Komentarze i zgłoszenia
Strony serwerów obsługują komentarze. Użytkownicy mogą dodawać komentarze i usuwać własne; komentarze mogą być ładowane stopniowo przyciskiem „załaduj więcej”. System zgłoszeń pozwala użytkownikom zgłaszać serwery lub treści; zgłoszenia są obsługiwane w panelu administracyjnym, gdzie można je przeglądać, podejmować działania i usuwać.
Premium i płatności
Funkcje premium obejmują wyróżnianie serwerów oraz umieszczanie ich w sekcji promowanych. Zakupy są obsługiwane przez PayPal z użyciem PayPal PHP SDK. Proces obejmuje tworzenie zamówień, przechwytywanie płatności i obsługę anulowania. PayPal można skonfigurować w trybie sandbox lub produkcyjnym. Historia płatności jest widoczna w panelu administracyjnym.
Przejmowanie serwera
Procedura przejęcia serwera pozwala użytkownikom udowodnić własność serwera — np. przez umieszczenie odpowiedniego kodu w MOTD serwera lub w podobnym miejscu. Użytkownicy mogą rozpocząć przejęcie, zweryfikować je lub anulować. Jest to mechanizm odrębny od zwykłego dodawania i edytowania serwera.
Blog
Aplikacja zawiera prosty blog: właściciele serwerów lub uprawnieni użytkownicy mogą dodawać, edytować i usuwać wpisy blogowe powiązane z serwerem. Wpisy są wyświetlane na stronie serwera z paginacją „załaduj więcej”. Wpisami blogowymi można zarządzać z poziomu panelu administracyjnego.
Panel administracyjny
Administratorzy mają dostęp do dedykowanego panelu. Obejmuje on zarządzanie użytkownikami (lista, edycja, usuwanie, akcje), zarządzanie serwerami (lista, edycja, zatwierdzanie/odrzucanie, usuwanie), zarządzanie kategoriami (tworzenie, edycja, usuwanie), obsługę zgłoszeń (lista, podgląd, akcje, usuwanie), historię płatności i ich usuwanie oraz usuwanie wpisów blogowych. Ogólnosystemowe ustawienia aplikacji są konfigurowalne (m.in. nazwa strony, strefa czasowa, PayPal, przełączniki funkcji). Dziennik audytu rejestruje działania administratorów. Interfejs migracji umożliwia uruchamianie migracji bazy danych — wszystkich lub wybranych — bezpośrednio z przeglądarki.
Strony statyczne i SEO
Dostępne są strony statyczne z regulaminem, polityką prywatności i formularzem kontaktowym. Formularz kontaktowy wysyła wiadomość e-mail i może podlegać ograniczeniu liczby żądań. Aplikacja generuje mapę strony (sitemap.xml) i udostępnia plik robots.txt dla wyszukiwarek. Metatagi i tytuły stron są obsługiwane przez pomocniczy moduł SEO, co ułatwia indeksowanie.
Internacjonalizacja
Interfejs obsługuje wiele języków za pomocą wbudowanego systemu tłumaczeń. Pliki językowe (m.in. angielski i polski) znajdują się w katalogu resources/languages i są używane w widokach, dzięki czemu etykiety i komunikaty mogą być lokalizowane.
Instalacja
Instalator webowy (install.php) zbiera dane dostępowe do bazy danych i podstawową konfigurację aplikacji, zapisuje plik config/app.php i tworzy plik blokady — po zakończeniu instalacji aplikacja nie przekierowuje już do instalatora. Instalator można po konfiguracji usunąć lub zmienić jego nazwę. Domyślne dane logowania administratora są ustawiane podczas instalacji i należy je niezwłocznie zmienić.
Stos technologiczny
Backend
Aplikacja jest napisana w PHP 8.2 lub nowszym i nie korzysta z żadnego pełnego frameworka — zamiast tego opiera się na minimalnym, własnym stosie. Punktem wejścia jest index.php w katalogu głównym projektu: sprawdza on konfigurację i plik blokady instalacji, ładuje bootstrap.php, a następnie Router wraz z definicjami tras z routes/web.php. Router dopasowuje metodę HTTP i URI (z opcjonalnymi parametrami ścieżki), wywołuje akcje kontrolerów w formacie Controller@method i wymusza weryfikację CSRF przy żądaniach innych niż GET. Kontrolery znajdują się w app/Controllers (a akcje administracyjne w app/Controllers/Admin). Logika biznesowa jest pogrupowana w app/Core/Features (m.in. Servers, Users, Votes, Comments, Payments, Blog, Reports, Categories, ServerClaim). Modele w app/Models reprezentują encje bazodanowe (User, Server, Category, Vote, Comment, Payment, Report, BlogPost i inne). Warstwa bazy danych to prosta klasa Database w app/Core/System; migracje to pliki SQL w database/migrations, uruchamiane przez MigrationRunner wywoływany z interfejsu migracji w panelu administracyjnym lub z wiersza poleceń.
Baza danych i sesje
Jako baza danych używany jest MySQL 8.0 lub kompatybilny odpowiednik. Połączenia i zapytania obsługiwane są przez PDO z natywnym sterownikiem. Sesje są przechowywane w bazie danych za pośrednictwem własnego SessionHandlera (app/Core/System/SessionHandler), implementującego interfejs PHP do obsługi zapisu sesji — dane sesji trafiają do MySQL zamiast do domyślnego magazynu plikowego.
Bezpieczeństwo i zależności
Kod związany z bezpieczeństwem obejmuje: Auth (logowanie, wylogowanie, haszowanie haseł), Csrf (generowanie i walidacja tokenów), RateLimit (konfigurowalne reguły w config/ratelimit.php, oparte na bibliotece Stiphle) oraz LoginSecurity do śledzenia prób logowania. Zależności Composera to PHP 8.2+, davedevelopment/stiphle (ograniczanie liczby żądań), paypal/paypal-server-sdk (integracja z PayPal) oraz rozszerzenia PHP: gd (do obsługi obrazów i banerów), sockets (do pingowania serwerów Minecraft), pdo i openssl. Narzędzia deweloperskie obejmują PHP-CS-Fixer i PHPUnit.
Integracja z Minecraftem
Status serwera jest pobierany z użyciem protokołu Minecraft server list ping. app/Core/Integrations/MinecraftPing implementuje handshake i żądanie statusu przez TCP, zwracając dane serwera w formacie JSON (wersja, gracze, opis). app/Core/Integrations/AsyncBatchPinger używa nieblokujących gniazd i stream_select do równoległego pingowania wielu serwerów, co pozwala efektywnie aktualizować listę. Integracja Votifier (app/Core/Integrations/Votifier) wysyła powiadomienia o głosach do serwerów Minecraft z zainstalowaną wtyczką Votifier.
Frontend
Frontend korzysta z Bootstrap 5.3.2 (CSS i JS) ładowanego z CDN, Bootstrap Icons oraz jQuery. Własne style CSS znajdują się w public/assets/css (base, server, filter modal, navbar mobile). Pliki JavaScript w public/assets obejmują app.js oraz narzędzia pomocnicze takie jak searchable-select i category-cloud. Widoki to zwykłe szablony PHP w resources/views: układy stron (np. app.php), widoki częściowe (navbar, stopka, karty serwerów, alerty itp.) oraz widoki poszczególnych stron — uwierzytelniania, serwerów, użytkowników, panelu administracyjnego, stron statycznych i błędów. Frontend nie wymaga żadnego kroku budowania; zasoby są serwowane bezpośrednio z katalogu public. Pomocnicza funkcja view() dołącza plik widoku z wyodrębnionymi zmiennymi; layout otrzymuje zmienną $content i renderuje metatagi (w tym token CSRF) oraz komunikaty flash.
Konfiguracja
Główna konfiguracja znajduje się w config/app.php (nazwa strony, URL, strefa czasowa, dane dostępowe do bazy danych, ustawienia PayPal). Plik ten jest generowany lub edytowany podczas instalacji. Reguły ograniczania liczby żądań znajdują się w config/ratelimit.php. Aplikacja wymaga, aby serwer WWW wskazywał na katalog główny projektu (lub na public, jeśli zasoby są rozdzielone); plik .htaccess obsługuje przepisywanie adresów URL tak, by wszystkie żądania były kierowane do index.php. Logi (np. naruszenia limitów żądań) są zapisywane w katalogu storage/logs.