LiteRPG to platforma do tworzenia, publikowania i czytania interaktywnych historii z rozgałęzioną fabułą. Zbudowana w Ionic + Angular, umożliwia każdemu użytkownikowi pisanie własnych opowieści oraz publikowanie ich społeczności. Czytelnicy mogą odkrywać historie, podejmować decyzje i wpływać na przebieg akcji, a ich wybory są zapisywane i synchronizowane z API.

Autoryzacja i system kont


W pełni autorski system autoryzacji oparty na NestJS + MongoDB. Implementuje rejestrację, logowanie, reset hasła oraz ochronę endpointów przez AuthGuard. Hasła są haszowane bcryptem, cała komunikacja szyfrowana SSL. Dodatkowy nagłówek X-handshake zabezpiecza przed atakami CSRF, a brak JWT na rzecz sesji w bazie daje pełną kontrolę nad aktywnymi sesjami.

Warstwa czytelnika


Interfejs czytelnika obejmuje: listę dostępnych historii, osobistą półkę z aktualnie czytanymi tytułami, widok okładki z ocenami i statystykami oraz czytnik z opcjami personalizacji (rozmiar czcionki, motyw kolorystyczny, tryb nocny). Czytnik obsługuje interaktywne wybory – każda decyzja użytkownika przekierowuje do odpowiedniej sceny, a postęp jest automatycznie synchronizowany z API.

Kreator dla pisarzy


Intuicyjny kreator oparty na scenach – każda scena zawiera treść oraz interakcje (przyciski wyboru) prowadzące do kolejnych scen. Autorzy mogą edytować dane książki: tytuł, opis, gatunek oraz okładkę. Kreator nie wymaga znajomości kodu – cała logika rozgałęzień jest generowana automatycznie na podstawie powiązań między scenami.

Backend – architektura i migracja


Autorski serwer w Node.js z frameworkiem NestJS i bazą MongoDB. Pierwotnie pisany w Express, ale jego surowy styl prowadził do chaosu przy rozbudowie. Przeprowadziłem refaktoryzację do NestJS, co wymusiło modułową strukturę (kontrolery, serwisy, DTO, guardy). Efekt: przejrzysty, skalowalny kod z wbudowanym Dependency Injection i łatwy w dalszej modyfikacji.

Bezpieczeństwo API


API jest niepubliczne – dostęp wyłącznie za pośrednictwem aplikacji LiteRPG. Zabezpieczenia obejmują: bcrypt do hashowania haseł, szyfrowanie SSL, AuthGuard na każdym chronionym endpointcie, rate limiting (5 prób logowania/minutę) oraz automatyczne czyszczenie wygasłych sesji. Brak JWT to świadoma decyzja – sesje w bazie umożliwiają natychmiastowe unieważnienie tokena i pełną kontrolę nad aktywnymi logowaniami.

Podsumowanie projektu

Warstwa / Obszar Technologie / Rozwiązania Kluczowe cechy
📱 Frontend (mobilny) Angular Ionic TypeScript RxJS Cross-platform (iOS/Android), reactive UI, przejrzysta architektura oparta na modułach
⚙️ Backend (API) Node.js NestJS MongoDB Mongoose ODM Modułowa struktura, Dependency Injection, łatwy w skalowaniu i utrzymaniu
🔐 Autoryzacja bcrypt SSL/TLS HandshakeGuard X-handshake Sesje w bazie (bez JWT), ochrona przed CSRF, możliwość natychmiastowego unieważnienia tokena
🛡️ Bezpieczeństwo Rate limiting AuthGuard Blokada konta (10 prób) Ważność handshake (7 dni) Odporność na brute‑force, ochrona endpointów, automatyczne czyszczenie sesji
👥 Warstwa czytelnika Lista książek Półka osobista Czytnik (czcionka, motywy) Synchronizacja postępów Personalizacja wyglądu, interaktywne wybory, automatyczny zapis postępów
✍️ Kreator dla pisarzy Kreator oparty na scenach Edytor okładki / tytułu / opisu Interakcje (przekierowania) Brak wymaganej znajomości kodu – intuicyjne tworzenie rozgałęzionej fabuły
📡 API REST Niepubliczne Dostęp tylko przez aplikację Kontrola dostępu, autoryzacja każdym endpointem, dokumentacja w kodzie (DTO)