Funkcjonalności
Zarządzanie powieściami i rozdziałami
Autorzy mogą tworzyć powieści wraz z metadanymi: tytułem, opisem, gatunkami, tagami i obrazami okładek. Powieści są zorganizowane w rozdziały ze śledzeniem odczytów i funkcjami analitycznymi. Autorzy zarządzają swoimi dziełami z poziomu panelu autora – mogą tworzyć, edytować i zmieniać kolejność rozdziałów. Platforma obsługuje sformatowany tekst (rich text) w treści rozdziałów oraz udostępnia dedykowany czytnik zapewniający komfortowe doświadczenie lektury.
Uwierzytelnianie użytkowników i profile
Aplikacja korzysta z uwierzytelniania opartego na tokenach JWT. Użytkownicy mogą się rejestrować, logować oraz odzyskiwać konta za pomocą funkcji przypomnienia i resetowania hasła. Strony profilowe umożliwiają przeglądanie danych konta i zarządzanie nimi. Kontrola dostępu oparta na rolach rozróżnia zwykłych użytkowników, autorów i administratorów.
Osobista biblioteka i postęp czytania
Zalogowani użytkownicy mogą zapisywać powieści w osobistej bibliotece i śledzić postęp czytania. Backend utrwala wpisy biblioteczne oraz postęp, dzięki czemu użytkownicy mogą wznawiać lekturę między sesjami. Subskrybenci biblioteki otrzymują powiadomienia o publikacji nowych rozdziałów obserwowanych powieści – dostarczane w czasie rzeczywistym przez WebSockety, jeśli są dostępne.
Wyszukiwanie i odkrywanie treści
Zaawansowane wyszukiwanie jest realizowane przez Elasticsearch. Powieści są indeksowane i synchronizowane z MongoDB za pomocą dedykowanej usługi synchronizacji oraz zaplanowanej weryfikacji. Użytkownicy mogą wyszukiwać i filtrować powieści według kryteriów takich jak gatunek czy popularność. Endpointy rekomendacji oferują sugestie w trzech kategoriach: „bo przeczytałeś” (podobne powieści), „popularne w gatunku” oraz „od obserwowanych autorów” – pomagając czytelnikom odkrywać nowe treści.
Komentarze i zaangażowanie
Czytelnicy mogą komentować zarówno powieści, jak i poszczególne rozdziały. API obsługuje tworzenie, wyświetlanie i zarządzanie komentarzami. Endpointy administracyjne umożliwiają moderatorom przeglądanie komentarzy i zarządzanie nimi w skali całej platformy.
Powiadomienia
System powiadomień obsługuje alerty w aplikacji, takie jak informacja o publikacji nowego rozdziału. Powiadomienia są przechowywane w MongoDB, a backend może przesyłać je do podłączonych klientów za pośrednictwem Socket.IO. Użytkownicy mogą oznaczać powiadomienia jako przeczytane i zarządzać listą powiadomień.
Administracja
Panel administracyjny udostępnia pulpity nawigacyjne oraz narzędzia do zarządzania użytkownikami, powieściami i komentarzami. Dostęp jest ograniczony do użytkowników z rolą administratora. Warstwa frontendowa korzysta z dedykowanego układu administracyjnego i osobnych stron do zarządzania użytkownikami, powieściami oraz moderacji komentarzy.
Import treści
Backend obsługuje import plików EPUB z wykorzystaniem dedykowanej walidacji, middleware do przesyłania plików i funkcji pomocniczych. Umożliwia to zarówno jednostkowy, jak i zbiorczy import istniejących dzieł w formacie EPUB.
API i dokumentacja
Backend udostępnia RESTful API ze spójną obsługą kodów statusu i błędów. Interaktywna dokumentacja API jest dostępna przez Swagger UI pod adresem /api/docs, a definicje tras są opisane w formacie YAML. Endpointy health check i testowe wspierają monitorowanie oraz kontrole integracyjne.
Strony prawne i pomocnicze
Aplikacja zawiera statyczne lub półstatyczne strony z najczęściej zadawanymi pytaniami (FAQ), regulaminem, polityką prywatności, wytycznymi i formularzem kontaktowym, zapewniając czytelnikom i autorom jasne informacje prawne oraz możliwość kontaktu.
Stos technologiczny
Frontend
Warstwa kliencka to aplikacja jednostronicowa (SPA) zbudowana w oparciu o React 19 i Vite. Routing zapewnia React Router, a stanem aplikacji zarządzają providery kontekstu odpowiedzialne za uwierzytelnianie i język. Interfejs jest stylizowany przy użyciu Tailwind CSS (v4) i korzysta z komponentów Lucide React oraz React Icons. Edycja i wyświetlanie sformatowanego tekstu są zrealizowane za pomocą Quill (przez react-quill-new i powiązane pakiety). Żądania HTTP do backendu obsługuje Axios. Frontend działa jako moduł ES i obsługuje tryby deweloperski, produkcyjny i podglądu.
Backend
Serwer działa na Node.js z frameworkiem Express. Konfiguracja aplikacji jest podzielona na wyspecjalizowane moduły: Express jest skonfigurowany z zabezpieczeniami Helmet, obsługą CORS, limitami parsowania treści, kompresją, ograniczaniem liczby żądań (rate limiting), timeoutami żądań i sanityzacją danych MongoDB. Zmienne środowiskowe są walidowane podczas uruchamiania. API jest zamontowane pod ścieżką /api i posiada globalną obsługę błędów oraz handler catch-all dla nieznalezionych zasobów. Swagger jest konfigurowany z centralnego modułu dokumentacji. Uwierzytelnianie opiera się na JWT (jsonwebtoken) z haszowaniem haseł (bcryptjs). Przesyłanie plików obsługuje Multer, a walidację danych – express-validator. Do logowania służy Winston. Funkcje czasu rzeczywistego korzystają z Socket.IO. Wysyłka wiadomości e-mail jest zrealizowana przez Nodemailer, a przetwarzanie plików EPUB – przez jszip i jsdom. Backend jest zorganizowany w warstwy: kontrolery API, serwisy, modele, middleware i współdzielone narzędzia pomocnicze.
Baza danych
Głównym magazynem danych jest MongoDB obsługiwany przez Mongoose. Konfiguracja połączenia obejmuje timeouty, pulę połączeń i mechanizm automatycznego ponownego łączenia z limitem prób. Zdefiniowane są modele dla użytkowników, powieści, rozdziałów, komentarzy, wpisów bibliotecznych i powiadomień. Indeksy oraz projekt schematów wspierają zapytania dotyczące powieści, rozdziałów, biblioteki i powiadomień.
Wyszukiwanie
Elasticsearch odpowiada za pełnotekstowe i filtrowane wyszukiwanie powieści. Backend korzysta z oficjalnego klienta Elasticsearch. Usługa synchronizacji utrzymuje spójność indeksu wyszukiwania z MongoDB; dostępny jest skrypt do ręcznej synchronizacji, a aplikacja cyklicznie przeprowadza weryfikację stanu indeksu. Gdy Elasticsearch jest wyłączony lub niedostępny, aplikacja kontynuuje działanie bez funkcji wyszukiwania.
Bezpieczeństwo i niezawodność
Backend stosuje Helmet do zarządzania nagłówkami HTTP, rate limiting na poziomie API, timeouty żądań oraz sanityzację danych wejściowych. Middleware walidacyjne jest stosowane na trasach uwierzytelniania, powieści, rozdziałów, biblioteki i komentarzy. Middleware weryfikacji własności zasobów zapewnia, że użytkownicy mogą modyfikować wyłącznie swoje zasoby. Stałe centralizują komunikaty błędów, kody statusów HTTP i parametry konfiguracyjne (takie jak rozmiary plików, timeouty czy limity żądań).