Skip to content

Repository files navigation

PolPoll 🇵🇱

A trainer for the Karta Polaka and permanent-residence interviewsTrener do rozmowy na Kartę Polaka i kartę stałego pobytu

392 questions · 100+ dates on a timeline · spaced repetition · works offline

▶ Open the app / Otwórz aplikację

License: MITNo dependenciesPWA

English · Polski

PolPoll start screen

English

What it is

A study app for the interview that decides a Karta Polaka application, and for the zezwolenie na pobyt stały (permanent residence) procedure. It covers Polish history, geography, culture, holidays and the structure of the state — plus a section on family and Polish descent, which is the first thing you get asked when you apply through your roots.

Open the link, add it to your phone's home screen, use it without a connection. Nothing to install, no account, no payment.

The app's interface is in Polish on purpose. You will have to speak Polish at the interview, so it is better to get used to the language from day one.

Study modes

ModeWhat it is for
🗣️ Fiszki (flashcards)Answer out loud, then grade yourself. Closest to the real interview
🎯 QuizFour options. Wrong ones are drawn from questions of the same type, never at random
👆 SwipeOne-handed: tap to flip the card, swipe sideways to grade it
⏱️ SprintA modifier: 60 seconds, every mistake costs 2
📅 Test datThe timeline dates on their own, block by block, in both directions
🕰️ Oś czasu (study)The dates on seven anchors, meanings masked until you ask. Nothing is graded
📖 Czytelnia (reader)Every question in one searchable, filterable list

How it teaches

Dates get their own drill. The seven anchors are selectable as blocks, and questions run in both directions: name the year for an event, or name the event for a year. The first is what the interview asks; the second is what stops a year from being a meaningless number.

The timeline with a revealed anchor

Every date carries its spoken form — "w tysiąc siedemset dziewięćdziesiątym piątym roku". Knowing the digits is a different skill from producing them aloud, and only the second one counts at the interview. Generated from Polish grammar at build time, so it stays correct for dates added later.

Spaced repetition (SM-2). Every question carries its own interval: what you know moves weeks away, what you keep missing comes back tomorrow. It runs invisibly — a training set is always ordered from most overdue to best known. Progress lives in the browser and is keyed to a stable question id, so it survives updates to the question base.

Personal questions are never auto-graded. In the "Pochodzenie i Rodzina" category the answers are templates you adapt to yourself ("My great-grandmother [name] was born in [year] in [place]"). There is no right answer to score them against, so they always route to say-it-then-rate-yourself and never appear as a wrong option in the quiz.

Accuracy

The interview decides an application, so facts get treated accordingly:

  • questions whose answers change over time (president, prime minister, marshal of the Sejm, population) carry a "sprawdź aktualność" note — verify them before you apply;
  • corrections are made against sources, not from memory. Already fixed: the Błędów Desert is anthropogenic rather than natural; the president may serve two terms in total (not "two in a row"); the Karta Polaka loses validity once its holder is granted permanent residence.

Found a mistake? Open an issue — that is the single most valuable contribution to this project.

Install on a phone

iPhone: open the link in Safari → Share → Add to Home Screen. Android: open in Chrome → menu → Install app.

It works offline afterwards.

If questions are not read aloud on iPhone

Check the side ring/silent switch — it mutes speech synthesis. If that is not it, install a Polish voice: Settings → Accessibility → Spoken Content → Voices → Polish.

Running it locally

Vanilla HTML/CSS/JS, no build step and no dependencies. Any static server will do — a file:// URL will not register the service worker.

git clone https://github.com/OldValencia/PolPoll.git
cd PolPoll
python -m http.server 8000
# open http://localhost:8000

Adding or fixing questions

questions.js is generated — editing it directly is pointless, your changes will be overwritten. The source of truth is the plain-text files in sources/:

1. Kiedy i kto przyjął chrzest Polski?
Odpowiedź: W 966 r. książę Mieszko I.
2. Jakie miasto było pierwszą stolicą Polski?
Odpowiedź: Gniezno.

Once edited, rebuild the base:

python sources/build_db.py

The script pulls out the numbers, assigns each question a stable id (a hash of the question text, so nobody loses their progress), classifies the answer type and collapses duplicates.

Categories are declared in the CATEGORIES dictionary inside build_db.py. Categories holding personal questions go into PERSONAL_CATEGORIES — they are never auto-graded and never offered as a quiz option.

The timeline has its own source, sources/os_czasu.txt, compiled to timeline.js by the same script. ## opens an era, - marks an event the consul actually asks about, ~ one kept for completeness, ! a memory hook. Offsets between dates and the spoken form of each year are generated, not written by hand.

After changing the base, bump CACHE_VERSION in sw.js, or users will keep the old version from the offline cache.

Layout

index.html markup for every screen
app.js all the logic: SM-2, drill modes, timeline, reader
style.css styling, dark theme, glassmorphism
questions.js generated question base (do not edit)
timeline.js generated date timeline (do not edit)
sw.js service worker, offline cache
manifest.webmanifest
assets/ icons and a self-hosted Outfit font
sources/ source texts and the generator that builds both bases

There are no external dependencies at all: the font is local (47 KB), the confetti is hand-written, and nothing is loaded from a CDN — otherwise offline mode would be incomplete.


Polski

Co to jest

Aplikacja do nauki przed rozmową decydującą o przyznaniu Karty Polaka oraz przed procedurą zezwolenia na pobyt stały. Obejmuje historię, geografię, kulturę, święta i ustrój Polski, a także dział o rodzinie i polskim pochodzeniu — czyli o tym, o co pytają najpierw, gdy wniosek składa się po korzeniach.

Otwierasz link, dodajesz do ekranu głównego telefonu i korzystasz bez internetu. Nic nie trzeba instalować, nie ma kont ani opłat.

Interfejs jest po polsku celowo. Na rozmowie i tak trzeba mówić po polsku, więc lepiej przyzwyczajać się do języka od pierwszego dnia.

Tryby nauki

TrybDo czego służy
🗣️ FiszkiOdpowiadasz na głos, potem sam się oceniasz. Najbliżej prawdziwej rozmowy
🎯 QuizCztery warianty. Błędne losowane z pytań tego samego typu, nigdy przypadkowo
👆 SwipeJedną ręką: dotknij, aby odwrócić kartę, przeciągnij w bok, aby ocenić
⏱️ SprintModyfikator: 60 sekund, każdy błąd kosztuje 2
📅 Test datSame daty z osi czasu, blok po bloku, w obie strony
🕰️ Oś czasu (nauka)Daty na siedmiu kotwicach, znaczenia zakryte do kliknięcia. Nic nie jest oceniane
📖 CzytelniaWszystkie pytania na jednej liście z wyszukiwarką i filtrami

Jak uczy

Daty mają własny test. Siedem kotwic wybiera się jako bloki, a pytania idą w obie strony: podaj rok do wydarzenia albo wydarzenie do roku. Pierwsze pada na rozmowie, drugie sprawia, że rok przestaje być pustą liczbą.

Każda data ma zapis wymowy — „w tysiąc siedemset dziewięćdziesiątym piątym roku". Znajomość cyfr to inna umiejętność niż wypowiedzenie ich na głos, a liczy się tylko ta druga. Generowane z reguł polskiej gramatyki przy budowaniu bazy.

Powtórki rozłożone w czasie (SM-2). Każde pytanie ma własny interwał: to, co umiesz, wraca za tygodnie, a to, co ciągle mylisz — jutro. Działa niewidocznie: zestaw do treningu zawsze układa się od najbardziej zaległych po najlepiej opanowane. Postęp zapisuje się w przeglądarce i jest powiązany ze stabilnym id pytania, więc przetrwa aktualizację bazy.

Pytania osobiste nigdy nie są oceniane automatycznie. W kategorii „Pochodzenie i Rodzina" odpowiedzi to wzory do dopasowania do siebie („Moja prababcia [imię] urodziła się w [rok] w [miejscowość]"). Nie ma tam poprawnej odpowiedzi do sprawdzenia, więc zawsze idą przez samoocenę i nigdy nie trafiają do wariantów w quizie.

Rzetelność

Od rozmowy zależy los wniosku, więc fakty traktowane są odpowiednio:

  • pytania, których odpowiedzi zmieniają się w czasie (prezydent, premier, marszałek Sejmu, liczba ludności), mają dopisek „sprawdź aktualność" — zweryfikuj je przed złożeniem wniosku;
  • poprawki wprowadzane są na podstawie źródeł, a nie z pamięci. Już poprawione: Pustynia Błędowska jest pochodzenia antropogenicznego, a nie naturalnego; prezydent może sprawować urząd łącznie przez dwie kadencje (a nie „dwie pod rząd"); Karta Polaka traci ważność z chwilą uzyskania pobytu stałego.

Znalazłeś błąd? Załóż issue — to najcenniejszy wkład w ten projekt.

Instalacja na telefonie

iPhone: otwórz link w Safari → Udostępnij → Do ekranu początkowego. Android: otwórz w Chrome → menu → Zainstaluj aplikację.

Potem działa offline.

Jeśli iPhone nie czyta pytań na głos

Sprawdź boczny przełącznik dzwonek/cisza — wycisza syntezę mowy. Jeśli to nie to, zainstaluj polski głos: Ustawienia → Dostępność → Treść mówiona → Głosy → Polski.

Uruchomienie lokalnie

Czysty HTML/CSS/JS, bez budowania i bez zależności. Wystarczy dowolny serwer statyczny — przy adresie file:// service worker się nie zarejestruje.

git clone https://github.com/OldValencia/PolPoll.git
cd PolPoll
python -m http.server 8000
# otwórz http://localhost:8000

Dodawanie i poprawianie pytań

Plik questions.js jest generowany — edytowanie go wprost nie ma sensu, zmiany zostaną nadpisane. Źródłem prawdy są pliki tekstowe w sources/:

1. Kiedy i kto przyjął chrzest Polski?
Odpowiedź: W 966 r. książę Mieszko I.
2. Jakie miasto było pierwszą stolicą Polski?
Odpowiedź: Gniezno.

Po edycji przebuduj bazę:

python sources/build_db.py

Skrypt sam wyciąga liczby, nadaje każdemu pytaniu stabilne id (hash treści pytania, żeby nikt nie stracił postępu), rozpoznaje typ odpowiedzi i scala duplikaty.

Kategorie deklaruje się w słowniku CATEGORIES w pliku build_db.py. Kategorie z pytaniami osobistymi trafiają do PERSONAL_CATEGORIES — nigdy nie są oceniane automatycznie ani pokazywane jako wariant w quizie.

Oś czasu ma własne źródło, sources/os_czasu.txt, kompilowane do timeline.js tym samym skryptem. ## otwiera epokę, - oznacza wydarzenie, o które realnie pytają, ~ dodatkowe dla pełności, ! podpowiedź do zapamiętania. Odstępy między datami i zapis wymowy są generowane, nie wpisywane ręcznie.

Po zmianie bazy podnieś CACHE_VERSION w sw.js, inaczej użytkownikom zostanie stara wersja z pamięci offline.

Struktura

index.html znaczniki wszystkich ekranów
app.js cała logika: SM-2, tryby, oś czasu, czytelnia
style.css style, ciemny motyw, glassmorphism
questions.js wygenerowana baza pytań (nie edytować)
timeline.js wygenerowana oś czasu (nie edytować)
sw.js service worker, pamięć offline
manifest.webmanifest
assets/ ikony i lokalna kopia fontu Outfit
sources/ teksty źródłowe i generator obu baz

Nie ma żadnych zewnętrznych zależności: font leży lokalnie (47 KB), konfetti napisane ręcznie, nic nie ładuje się z CDN — inaczej tryb offline byłby niepełny.


License / Licencja

MIT — use it, copy it, change it, including commercially. Korzystaj, kopiuj i zmieniaj, również komercyjnie.

If you are preparing for the same interview, just take it and use it. Good luck 🤞 Jeśli przygotowujesz się do tej samej rozmowy — bierz i korzystaj. Powodzenia 🤞


Free, no ads, no accounts. If it helped, you can buy me a coffee — Ko-fi · Buy Me a Coffee · GitHub Sponsors
Bezpłatnie, bez reklam i bez kont. Jeśli się przydało, możesz postawić kawę.

Educational material only, not legal advice. Verify current requirements with the consulate or the voivodeship office.
Materiał ma charakter wyłącznie edukacyjny i nie stanowi porady prawnej. Aktualne wymogi sprawdzaj w konsulacie lub urzędzie wojewódzkim.

About

A trainer for the Karta Polaka and permanent-residence interviews Trener do rozmowy na Kartę Polaka i kartę stałego pobytu

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Sponsor this project

Contributors

Languages