Funkcjonalności
Profile i nawigacja
Aplikacja składa się z czterech głównych widoków dostępnych przez panel boczny: Wybór profilu, Artykuły, Fiszki i Postępy. Profile użytkowników pełnią rolę warstwy uwierzytelniania — bez aktywnego profilu dostęp do głównych funkcji jest zablokowany, a stan zalogowania jest zachowywany między sesjami.
Czytnik artykułów
Sekcja czytania udostępnia chińskie opowiadania posegregowane według poziomów HSK i kategorii tematycznych, takich jak życie codzienne, rodzina, zakupy czy jedzenie. Czytnik segmentuje tekst chiński za pomocą biblioteki Jieba i wyświetla go jako interaktywne, klikalne słowa. Kliknięcie słowa pobiera jego tłumaczenie przez Google Translate i prezentuje pinyin, część mowy oraz wiele wariantów tłumaczenia. Użytkownik może zapisywać słowa do własnego słownika wraz z kontekstem, tłumaczyć całe akapity oraz przełączać widoczność pinyinu dla poszczególnych akapitów. Synteza mowy przez Google TTS jest dostępna zarówno dla pojedynczych słów, jak i całych akapitów. Czytnik zapamiętuje pozycję przewijania, dzięki czemu można wznowić lekturę dokładnie w miejscu, w którym została przerwana.
Fiszki i powtórki rozłożone w czasie
Zapisane słowa trafiają do systemu fiszek opartego na algorytmie powtórek rozłożonych w czasie SM-2. Sesje powtórek można zawęzić wyłącznie do słów zaplanowanych do przeglądu lub rozszerzyć na całe słownictwo. Dostępne są trzy tryby: rozpoznawanie (wyświetlany jest znak, a zadaniem jest przypomnienie sobie znaczenia), produkcja (wyświetlane jest tłumaczenie, a zadaniem jest przypomnienie sobie znaku) oraz audio (słowo jest odtwarzane, a zadaniem jest przypomnienie sobie jego znaczenia lub znaku). Dla każdej fiszki śledzone są: współczynnik łatwości, interwał, liczba powtórzeń oraz data następnej powtórki, co umożliwia precyzyjne planowanie przeglądów zgodnie z algorytmem.
Postępy i progresja umiejętności
Postępy są śledzone na podstawie kilku wskaźników: wielkości słownika, liczby dobrze opanowanych słów, liczby przeczytanych artykułów, średniej liczby powtórzeń na słowo oraz serii (streaks). System progresji umiejętności definiuje pięć poziomów — od Początkującego do Zaawansowanego — a kwalifikacja do awansu uwzględnia liczbę słów w słowniku, liczbę dobrze znanych słów, przeczytane artykuły, jakość powtórek oraz długość serii. Po spełnieniu kryteriów awansu wyświetlane jest okno modalne świętujące przejście na wyższy poziom.
Osiągnięcia i lokalizacja
Dodatkową motywację zapewniają osiągnięcia, takie jak „pierwsze 10 słów”, „budowniczy słownictwa”, „szybki uczeń” czy „tygodniowy wojownik”. Interfejs jest zlokalizowany i obsługuje wiele języków, a docelowy język tłumaczeń można konfigurować osobno dla każdego profilu. Aplikacja monitoruje dostępność połączenia internetowego i wyświetla stosowne ostrzeżenie w trybie offline, ponieważ tłumaczenie i synteza mowy wymagają dostępu do sieci.
Stos technologiczny
Architektura aplikacji
Aplikacja Electron ma wyraźnie wydzielony proces główny i renderer. Proces główny działa w środowisku Node.js i odpowiada za dostęp do systemu plików, komunikację IPC oraz operacje wymagające dużej mocy obliczeniowej lub dostępu do API systemowych. Renderer to jednostronicowa aplikacja React budowana przy użyciu Webpacka, z Babelem do transpilacji JSX oraz PostCSS z Tailwind CSS do stylowania.
Frontend
Warstwa UI opiera się na React 19, z Lucide React jako biblioteką ikon. Stan aplikacji jest zarządzany przez React Context dla danych współdzielonych w całej aplikacji, takich jak zapisane słowa, profile i ustawienia językowe. Dedykowane hooki — useStorage i useLevelUpManager — hermetyzują logikę odpowiedzialną za persystencję danych i awanse poziomów.
Usługi procesu głównego
Proces główny korzysta z kilku wyspecjalizowanych usług. ChineseProcessor opiera się na @node-rs/jieba do segmentacji tekstu chińskiego i pakiecie pinyin do romanizacji. TranslationService odpytuje publiczne API Google Translate przez HTTP za pomocą Axiosa, z warstwą cache’owania ograniczającą liczbę powtarzających się zapytań. StoryService udostępnia chińskie opowiadania pogrupowane według poziomów HSK z dołączonej kolekcji plików JSON. DataService zapisuje i odczytuje pliki JSON z katalogu danych użytkownika Electrona, przechowując profile, zapisane słowa i stan aplikacji. CacheService dostarcza konfigurowalne pamięci podręczne w pamięci operacyjnej z czasem wygasania (TTL) dla tłumaczeń, artykułów i danych RSS. StatsService i SkillProgressionService obliczają metryki słownictwa, serie, osiągnięcia oraz spełnienie kryteriów awansu na podstawie zapisanych słów i przeczytanych artykułów.
IPC i bezpieczeństwo
Komunikacja między rendererem a procesem głównym odbywa się przez IPC za pośrednictwem skryptu preload, który eksponuje API przez contextBridge. Skrypt preload definiuje jawne sygnatury metod, a proces główny rejestruje odpowiadające im handlery obsługujące dane, opowiadania, tłumaczenia, przetwarzanie tekstu chińskiego, statystyki i progresję umiejętności. Izolacja kontekstu oraz wyłączona opcja nodeIntegration gwarantują, że renderer nie ma bezpośredniego dostępu do Node.js ani procesu głównego.