diff --git a/README.md b/README.md
index 3981c67d0b48caca8c133684132088848575444b..56470855e3c8a944179dbadae0b2aa4cb1f829ea 100644
--- a/README.md
+++ b/README.md
@@ -54,3 +54,94 @@ User documentation
 ==================
 
 See `i3-woman -H`, `i3-woman -h` `i3-woman-daemon -h` and help in GUI.
+
+
+Developer documentation
+=======================
+
+**Czech language only, sorry.**
+
+Rozdělení na klienta a daemonka
+-------------------------------
+
+Hlavní částí projektu je program `daemon.py`. Je možné ho ovládat pomocí
+programu `client`.
+
+Klient je psaný v C a kompilovaný pomocí make. Pyton má moc pomalý startup a
+tedy není vhodné ho spouštět pro každé přepnutí workspacu. Daemon se oproti
+tomu pouští jen jednou za celou životnost window manageru, takže startup je
+zanedbatelný a je možné využívat výhody vyššího programovacího jazyka v
+převážné většině kódu.
+
+Klient předává zprávy (příkazy) daemonkovi pomocí X11 protokolu (skrz X server).
+Tento způsob je zvolený zejména proto, aby se nemuselo řešit žádné další sdílení
+prostředků jako například socketu/potrubí tak, aby různé X sessions měli vlastní
+ovládání a přitom se vždy našlo, jak se připojit. Nyní tedy stačí, aby měl klient
+správně nastavenou systémovou proměnnou `DISPLAY`.
+Vedlejším efektem této konstrukce je, že je možné ovládání skrz ssh X tunel
+(po připojení vedené z ovládaného počítače někam pryč). Nejsem si jistý, jestli
+je to bug nebo featurka.
+Nevýhodou dané konstrukce je absence zpětné vazby. Tedy po odeslání příkazu
+není uživatel skrz klienta informován o výsledku.
+
+Zprávy se posílají přidáním textu do attributu root okna (jméno atributu viz
+`woman/constants.py`). Protokol každý argument posílaného příkazu začne `>` a
+ukončí `\n`. Příkazy se oddělují prázdným řádkem.
+
+Klient umí ověřovat syntaxi posílaných příkazů a stěžovat si, když něco nesedí.
+Aby nebyl popis příkazů a jejich argumentů na více místech, tak se část kódu
+klienta generuje pomocí Pythonu ze sdílených dat. O celé generování se stará
+make, který volá `gen_c.py`. Tímto způsobem se do klienta dostane i
+uživatelská dokumentace a jméno attributu X11 protokolu.
+
+**V další části textu se budeme věnovat již pouze daemonkovi**
+
+Vlákna
+------
+
+Daemonek se skládá z 2 hlavních vláken.
+
+Vlákno X serveru čeká na příkazy od klienta a stará se o jejich vyhodnocení.
+
+Vlákno `i3_watch` se stará o zpracovávání událostí generovaných i3wm jako
+například focus na workspace, vytvoření a zaniknutí atd. Zejména se stará o
+správu sdílených datových struktur popisující aktivní mastery a jejich hlavní
+slavy. Tyto data bydlí v modulu `woman/shared` a jsou chráněné jedním zámkem
+(zámek obsahuje hack pro zabránění daedlocku při komunikaci s vláknem
+obsluhující Qt).
+
+V případě, že je aplikace spuštěna s GUI, tak vznikne ještě jedno vlákno, ve
+kterém běží hlavní smyčka Qt. Z technických omezení pyqt se toto vlákno v tomto
+případě spouští jako hlavní. Qt vlákno jednak využívá sdílené datové struktury
+a také od ostatních vláken dostává příkazy. Ty jsou doručované pomocí pyqt
+signálu/slotu obaleného do třídy Tasker. Tímto způsobem se doručují požadavky
+na překreslení částí GUI (tedy informace o tom, že nastala nějaká událost).
+Když nějaké vlákno (zejména vlákno X serveru) chce změnit workspace, tak tímto
+protokolem požádá Qt vlákno a to nejprve vyrobí screenshot aktuálního workspacu
+a pak teprve pošle i3wm požadavek na změnu. Když Qt vlákno neexistuje, tak se
+požadavek přímo pošle i3wm.
+
+Každé vlákno má vlastní spojení s i3wm (implementace pomocí `threading.local`).
+Komunikace probíhá pomocí socketu a protokolu i3ipc, o jehož zpracovávání se
+stará knihovna `i3ipc`. Modul `woman.lib` obsahuje části kódu, které mohou být
+použity v libovolném vlákně.
+
+GUI
+---
+
+Grafické rozhraní je navrhováno na vysokou efektivitu při ovládání z klávesnice
+i pouze pomocí myši. Proto většina funkcí má zdvojené ovládání pouze za pomocí
+klávesnice nebo pouze za pomocí myši. Je spíše optimalizováno na pokročilé
+uživatele využívající rozhraní každý den než na začátečníky držící ho poprvé v
+ruce.
+
+Grafické rozhraní je postavené na knihovně pyqt5. Ta byla zvolena zejména
+proto, že je možné ji alespoň částečně ohýbat (i když za cenu zhoršení
+objektového návrhu) k lepšímu chování pro pokročilé uživatele (například
+jednoklávesové klávesové zkratky a vlastní layout), umí vyrábět screenshoty a
+je rozumně rychlá.
+
+Aplikace se skládá z hlavního okna, které obsahuje widget pro každý workspace.
+Hlavní okno se zejména stará o ošetření většiny klávesových zkratek. Workspacy
+také obsahují widgety reprezentují stromovou strukturu otevřených oken. Tato
+struktura se při každém reloadu smaže a vytvoří úplně znovu.