diff --git a/web/TODO.md b/web/TODO.md
new file mode 100644
index 0000000..a390eb1
--- /dev/null
+++ b/web/TODO.md
@@ -0,0 +1,262 @@
+# TODO Seznam pro NewLukasBlog
+
+> **Poslední aktualizace:** 2026-08-09
+> **Stav:** Aktivní
+> **Cíl:** Konsolidace, optimalizace a zlepšení udržitelnosti webu
+
+---
+
+## 📌 Legenda
+- ✅ **Hotovo**
+- 🟡 **V průběhu**
+- ❌ **Čeká na implementaci**
+- 🔹 **Nízká priorita**
+
+| Priorita | Popis | Stav |
+|----------|-------|------|
+| 🔴 **Vysoká** | Kritické chyby (bezpečnost, funkčnost) | ❌ |
+| 🟠 **Střední** | Zlepšení struktury, výkonu, SEO | ❌ |
+| 🟢 **Nízká** | Kosmetické úpravy, vylepšení | ❌ |
+
+---
+
+## 🔴 Vysoká priorita (Kritické)
+
+### 1. Bezpečnost
+- [ ] **Opravit externí skripty**
+ - [ ] Přidat `crossorigin="anonymous"` a `integrity` hash pro `analytics.lukan.cz/script.js` v `index.html` (řádek 18).
+ - [ ] Zajistit, aby všechny externí skripty (CDN) používaly HTTPS.
+ - **Soubory:** `index.html`, `index/about/index.html`, `index/apollo-nvim/*.html`
+ - **Důvod:** Zranitelnost vůči útokům typu MITM (Man-in-the-Middle).
+
+- [ ] **Přidat `rel="noopener noreferrer"`** ke všem odkazům s `target="_blank"`
+ - **Soubory:** Všechny HTML soubory (např. `index.html` řádek 45, `index/apollo-nvim/index.html` řádek 149).
+ - **Důvod:** Ochrana proti [tabnabbingu](https://owasp.org/www-community/attacks/Reverse_Tabnabbing).
+
+- [ ] **Odstranit `node_modules` z repozitáře**
+ - [ ] Přidat `node_modules/` do `.gitignore`.
+ - [ ] Smazat `node_modules` z repozitáře (pokud není potřeba).
+ - **Důvod:** Zbytečné zvětšování velikosti repozitáře.
+
+---
+
+### 2. Funkčnost
+- [ ] **Opravit chyby v HTML**
+ - [ ] `index/about/index.html` řádek 96: Opravit `< class="dot">` → `
`.
+ - [ ] `cv/lukaskanka.html` řádek 38: Opravit `href="Tel: +420 725 303 747"` → `href="tel:+420725303747"`.
+ - [ ] `cv/lukaskanka.html` řádek 41: Opravit `href="Mailto:kankys.cz@gmail.com"` → `href="mailto:kankys.cz@gmail.com"`.
+ - [ ] `index/apollo-nvim/index.html` řádek 1: Odstranit úvodní apostrof (`'`).
+ - [ ] `index/apollo-nvim/index.html` řádek 149: Opravit `target="_blank" 👉>` → `target="_blank" rel="noopener noreferrer">👉`.
+
+- [ ] **Opravit chybějící `alt` atributy**
+ - Projít všechny `
` tagy a doplnit `alt` texty tam, kde chybí.
+ - **Soubory:** `index.html`, `index/project/index.html`, `index/apollo-nvim/*.html`
+
+- [ ] **Opravit `viewport` meta tag**
+ - [ ] `cv/lukaskanka.html` řádek 7: Odstranit `user-scalable=no, maximum-scale=1.0, minimum-scale=1.0`.
+ - **Nahradit:** ``
+
+---
+
+## 🟠 Střední priorita (Struktura a výkon)
+
+### 1. Konsolidace kódu
+- [ ] **Vytvořit sdílený JavaScript (`shared.js`)**
+ - [ ] Vytvořit `/web/js/shared.js` s následujícími funkcemi:
+ - `scrollToTop()`
+ - `setupMobileMenu()` (pro hamburger menu)
+ - `setupThemeToggle()` (pro přepínání témat)
+ - [ ] Nahrazení duplikovaného kódu v:
+ - `index/apollo-nvim/script.js`
+ - `index/kakoune/script.js`
+ - `index/terminal-space/script.js`
+ - `index/terminal-space/kakoune/script.js`
+ - **Důvod:** Snížení duplikace kódu a snadnější údržba.
+
+- [ ] **Vytvořit sdílený CSS (`shared.css`)**
+ - [ ] Vytvořit `/web/css/shared.css` s základními styly:
+ - Reset/Normalize
+ - Tlačítka (`.btn`)
+ - Header a navigace
+ - Footer
+ - Scroll-to-top tlačítko
+ - Responsive design (media queries)
+ - [ ] Nahrazení duplikovaných stylů v:
+ - `style/style.css`
+ - `style/alt.style.css`
+ - `index/apollo-nvim/style.css`
+ - `index/kakoune/style.css`
+ - **Důvod:** Snížení velikosti souborů a konzistence vzhledu.
+
+- [ ] **Vytvořit soubor s CSS proměnnými (`variables.css`)**
+ - [ ] Vytvořit `/web/css/variables.css` s proměnnými pro:
+ - Barvy (dark/light theme)
+ - Fonty
+ - Velikosti
+ - [ ] Importovat `variables.css` do všech CSS souborů.
+ - **Důvod:** Snadnější úprava témat a konzistence.
+
+---
+
+### 2. Optimalizace HTML
+- [ ] **Sjednotit strukturu HTML**
+ - [ ] Vytvořit šablonu `base.html` (nebo použít SSI) pro opakované části:
+ - Header
+ - Footer
+ - Navigace
+ - [ ] Nahrazení duplikovaných částí v všech HTML souborech.
+ - **Důvod:** Snadnější údržba a konzistence.
+
+- [ ] **Opravit meta tagy**
+ - [ ] Přidat `meta name="description"` a `meta name="keywords"` na všechny stránky.
+ - [ ] Odstranit nestandardní meta tagy (např. ``).
+ - **Soubory:** Všechny HTML soubory.
+
+- [ ] **Sjednotit cesty k zdrojům**
+ - [ ] Používat absolutní cesty od kořene (např. `/web/style/style.css` místo `../../style/style.css`).
+ - **Důvod:** Zamezení problémů s relativními cestami.
+
+- [ ] **Přidat `lang="cs"`** na všechny stránky.
+ - **Soubory:** Zkontrolovat všechny HTML soubory.
+
+---
+
+### 3. Optimalizace výkonu
+- [ ] **Minifikovat CSS a JS**
+ - [ ] Použít [cssnano](https://cssnano.co/) pro minifikaci CSS.
+ - [ ] Použít [Terser](https://terser.org/) pro minifikaci JS.
+ - **Důvod:** Zrychlení načítání stránek.
+
+- [ ] **Přidat `loading="lazy"`** pro obrázky pod foldem.
+ - **Soubory:** Všechny `
` tagy, které nejsou viditelné ihned po načtení stránky.
+
+- [ ] **Použít moderní formáty obrázků**
+ - [ ] Konvertovat obrázky na WebP (menší velikost, stejná kvalita).
+ - **Důvod:** Zrychlení načítání stránek.
+
+- [ ] **Přidat `preload` pro kritické zdroje**
+ - [ ] Přidat `` do ``.
+ - **Důvod:** Zrychlení načítání kritických zdrojů.
+
+---
+
+### 4. SEO a přístupnost
+- [ ] **Přidat `alt` texty** ke všem obrázkům.
+ - **Soubory:** Všechny HTML soubory.
+
+- [ ] **Přidat `aria-label`** pro ikony bez textu.
+ - **Příklad:** ``
+ - **Soubory:** Všechny HTML soubory s ikonami.
+
+- [ ] **Zajistit semantičku HTML**
+ - [ ] Používat správné HTML5 tagy (``, ``, ``, `