💡 Nový nápad ⚠ Nahlásit chybu
← BuresIndustries

Co je nového

Historie aktualizací a novinek na BuresIndustries.cz

Cookie odmítnutí — skrytá stránka /vypadni
Odmítnutí cookies přesměruje na tajnou stránku „Tak zas vypadni, když ani sušenky nechceš." s tlačítky „Dobře, beru sušenky" a „Ne, sem debil".
UX: Nastavení zobrazení + přístupnost
Profil má novou sekci „Nastavení zobrazení": volba velikosti písma (malé/normální/velké), kompaktní režim (menší odsazení karet) a vypnutí animací — vše uložené v localStorage a aplikované ihned při načtení stránky. Klávesa Escape zavírá modaly pro hlášení chyb a nápadů. Přidána podpora `prefers-reduced-motion` pro uživatele citlivé na pohyb.
Minihry: Bitevní Vřava — tower defense hra
Přidána nová minihra Bitevní Vřava. Tower defense na plátně: nakup pěchotu, tank nebo RPG, přetahuj jednotky myší a zastav nepřátelské vlny. Podpora rychlosti 1×/2×/3×, upgrade systém a wave progress bar.
Seznamka: Cropper.js + Intervention Image pro nahrávání fotek
Nahrávání fotek nyní otevře modal s Cropper.js pro ořez na čtverec. Server zpracuje přes Intervention Image: resize na max 800px, konverze na WebP (85%), strip EXIF. Limit zvýšen na 8 MB.
Seznamka: hotfix — Latte parse chyba a strtotime TypeError
Opravena Latte kompilační chyba z inline onclick atributu — scroll handler přesunut do JS IIFE. Opravena PHP TypeError: strtotime() volaný s DateTime objektem — centralizováno přes novou helper metodu toTs().
Seznamka: tlačítko "nahoru" při scrollování browse stránky
Plovoucí šipka ↑ se zobrazí po scrollu 400px dolů — kliknutím smooth-scroll zpět na začátek. Obzvlášť užitečné po AJAX load-more.
Seznamka: AJAX "Načíst více" v browse — žádný reload stránky
Tlačítko "Načíst více ↓" nahrazuje "Další →" — přidá další profily bez reloadu stránky (DOMParser + adoptNode). Event delegation pro klikání na karty funguje i pro dynamicky načtené profily.
Seznamka: heart-pop animace na lajku + isMatch() jednodotazová optimalizace
Lajknutí v browse mřížce teď zobrazí srdíčkovou animaci (CSS keyframes). isMatch() optimalizován z 2 DB dotazů na 1 — relevantní pro poll-messages endpoint volaný každých 5s.
Seznamka: request-scoped profile cache + oprava $this->getUser() v šabloně
getMyProfile() nyní cachuje výsledek v rámci requestu — odstraňuje 3–5 zbytečných DB dotazů. renderShody() přestal volat DB přímo a používá helper. Šablona shody.latte opravena — $this->getUser()->getId() nahrazeno za $myId předaný z presenteru.
HOTFIX: Latte 3 — n:attr checked místo if uvnitř input tagů v Seznamka filtrech
Třetí Latte 3 hotfix: Unexpected '/if} style' v default.latte řádek 178. Čtyři checkbox input tagy měly [if $x]checked[/if] uvnitř HTML tagu. Opraveno na n:attr="checked: $x".
HOTFIX: Latte 3 — n:attr místo if uvnitř HTML tagů v Seznamka filtrech
Druhý Latte 3 hotfix: Unexpected = v default.latte řádek 108. Latte 3 neumí [if]selected[/if] uvnitř HTML opening tagů. Opraveno 18 option tagů na n:attr="selected: condition".
Fix: [layout] musí být první v šabloně — Latte 3 hotfix pro všechny Seznamka stránky
Latte 3 striktně vyžaduje [layout] jako první tag v šabloně. Opraveno ve všech 5 Seznamka šablonách — přestaly se kompilovat při invalidaci cache, což způsobovalo "An error occurred".
Refactor + profil: skrytí nevyplněných polí (pohlaví/orientace/hledám)
Optimalizace: parseInterests se v browse/profil smyčce volá jen jednou na profil (DRY). Profil: pohlaví, orientace a hledám se zobrazí jen pokud uživatel tyto hodnoty vyplnil — nevyplněné pole se neschová jako "Jiné/Uvidíme".
Procházet: match toast obsahuje odkaz "Napsat zprávu →"
Když dojde k nové shodě při procházení profilů, toast notifikace nyní obsahuje přímý odkaz na konverzaci. Toast se zobrazí na 8 sekund (dříve 5).
Chat: dynamické skrývání "naposledy aktivní" při online stavu partnera
Last-seen text v hlavičce chatu se dynamicky skryje když polling zjistí, že partner je online, a znovu zobrazí když odejde. Zelený puntík a last-seen se nyní správně doplňují.
Profil: oprava překlep "Obtěžoþvání" v hlášení; Procházet: výška v aktivních filtrech
Oprava překlep v důvodech hlášení (thorn znak þ místo v). Přidán tag aktivního filtru pro výšku (cm) v přehledu výsledků + zrušit filtry nyní reaguje i na filtr výšky.
Shody: online indikátor u nedávných návštěvníků + compat score v beforeRender
Kdo nedávno navštívil váš profil nyní zobrazuje zelený online puntík pokud je aktivní. Compat score dostupné globálně přes szCompleteness pro všechny šablony.
Chat: compat score v hlavičce konverzace + oprava tlačítka Zrušit filtry
V hlavičce chatu se nově zobrazuje procento shody zájmů vedle jména partnera. Tlačítko "Zrušit filtry" v prázdném stavu nyní reaguje na všechny aktivní filtry (Hledám, Orientace, Online, Lajkoval mě, S fotkou, Skrýt lajknuté).
Seznamka: aktivní filtry Hledám a Orientace v přehledu výsledků
Aktivní filtry Hledám (Vztah/Přátelství/Casual/Uvidíme) a Orientace (Homo/Bi/Pan) se nyní zobrazují jako barevné tagy pod počtem výsledků stejně jako ostatní filtry.
Shody: compat score u nedávných návštěvníků profilu
Kdo nedávno navštívil váš profil nyní zobrazuje procento shody zájmů i na stránce Shody (dříve jen v Nastavení).
Profil: compat score v podobných profilech
Sekce "Podobné profily" na stránce profilu nyní zobrazuje procento shody zájmů.
Seznamka: číslo stránky v paginaci
Stránkování výsledků nyní zobrazuje aktuální číslo stránky mezi tlačítky Předchozí/Další.
Seznamka: prázdný stav — kontextuální hlášky + tlačítko Zrušit filtry
Prázdný seznam nyní zobrazuje specifickou zprávu podle aktivního filtru (aktivita, město, zájmy). Přidáno tlačítko pro rychlé zrušení filtrů.
Seznamka: aktivní filtry — zobrazení všech aktivních filtrů v seznamu
Výsledkový řádek nyní zobrazuje všechny aktivní filtry jako tagy: jméno, pohlaví, město, zájmy, aktivita, věk. Nové CSS třídy f-tag/f-tag-pink/f-tag-purple.
Debug: logování exceptions + chybějící routy older-messages/typing
ErrorPresenter nyní loguje 500 chyby do log/claude-errors.log. Přidány chybějící routy pro older-messages a typing v Seznamce.
Nastavení: compat score u nedávných návštěvníků profilu
Kdo navštívil váš profil nyní ukazuje procento shody. SQL dotaz rozšířen o interests sloupec.
Shody: compat score v sekci Cekam na odpoved
Profily komu jsem lajkoval ale cekam na reakci nyni zobrazuji compat badge. SeznamkaPresenter pocita sentCompatScores pro vsechny.
Profil: oprava zvýraznění společných zájmů + překlep v nahlášení
Po DRY refaktoru parseInterests vrací lowercase. Latte check nyní mb_strtolower. Oprava překlep Obtlžóvání na Obtěžování.
Seznamka: waiting list sorted by compat score + DRY fix v renderProfil
Lidi kteri me lajkuji se radi dle kompatibility. renderProfil pouziva parseInterests helper misto rucniho parsovani.
Seznamka: řazení Online jako první + usort v SeznamkaPresenter
Nová volba seřazení v browse: online uživatelé se zobrazují nahoře. PHP usort podle is_online, SQL zachovává last_active pořadí uvnitř skupin.
Profil: oprava poškozeného img tagu (onerror regex)
Regex pro přidání onerror v předchozí session poškodil alt atribut profilové fotky. Opraveno cíleným str_replace.
Seznamka: počet neprřečtených zpráv v titulku záložki
Název záložki prohlížeče se automaticky aktualizuje na (N) název při píčhodu nové zprávy. Uživatel vidí počet i bez otevření záloźky.
Seznamka: klik kdekoliv na kartičce profilu
Celá kartíčka profilu v procházení je nyní klikatelná — fotka i všechna ostatní plocha přesměruje na profil (tlačítka Zápisu a Lajku zůstávají nezávislá).
Seznamka: skore kompatibility v sekci Líbíš se jim
Na straně Shody se u profilů které tě lajkly zobrazí zeleny účel způsoby kompatibility (pokud ≥ 20%), aby bylo snazzší rozhodnout koho lajknout zpět.
Seznamka: helper isMatch() — odstranění duplikace ověření shody
Extrahován helper isMatch() — kontrola vzájemného lajku na jednom místě místo 5× duplikace v action metodách.
Seznamka: refaktoring — helpers parseInterests + compatScore
Extrahovány pomocné metody parseInterests() a compatScore() — odstraňuje duplikaci kódu ve 4 metodách presenteru.
Seznamka: fallback pro rozbité fotky profilů
Přidáno onerror na všechny profilové fotky v Seznamce. Pokud je URL fotky nedostupná, foto se skryje bez chybové ikon.
Shoda: toast se jménem + odkaz na zprávy v profilu
Toast při shodě nyní zobrazuje jméno pára. Match banner na profilu obsahuje přímý odkaz na zprávy.
Nastaveni: po uložení profilu zůstat na nastaveni
Po uložení profilu se nyní přesměruže zpět na nastaveni (ne na browse). Flash zpráva zůstává viditelná.
Seznamka: notifikace nových shod (zelená) v navigaci
Ping nyní vrací také počet nových shod (posledních 24h). Nav odzívka zelená ♥ = nová shoda, fialová + = čekám na odpověď, růžfová = nepročtené zprávy.
Profil: oprava tlačítka Nahlásit (JS chyba)
Funkče reportUser() měla chybějcí složené závorku a odkazovala na neexistující modál. Přepracováno na jednoduché prompt() bez duplikace kódu.
Seznamka: řazení dle kompatibility + fix náhledu zájmů
Procházení profilů nová možnos: řazení dle kompatibility zájmů. Opravén také zobrazení živyých zájmů v nastavení (chybějcí element interests-preview).
Blog #88: Dostáváš jen to, o co explicitně požádáš
Nový článek o předpokladech v kódu a životně — lekce z dnotěnjšího bugfixu ve výběru sloupců.
Seznamka: oprava chyby + compat skóre na shodách
Opravena chyba která rüila /seznamka při nahrávání zpráv (MemberAccessException). Přidáno compat skóre k shodam a odstraňěna duplicita návštěvníků v sekci Kdo viděl tvůj profil.
Profil: orientace a "hledám" v základním info
Sekce Základní info na profilu nyní zobrazuje sexuální orientaci a co uživatel hledá — vedle pohlaví, věku a města.
Profil: badge kompatibility zájmů
Na profilu partnera se zobrazí procento shody zájmů (od 20%), stejně jako na kartičkách v browse.
Chat: dropdown akcí (blokovat/nahlásit/odebrat shodu)
Tlačítko ⋮ v hlavičce chatu otevírá menu s možností zablokovat, nahlásit nebo odebrat shodu — bez nutnosti přecházet na profil.
Browse: badge kompatibility na kartičkách
Karty profilů zobrazují procento shody zájmů (zobrazí se od 20%). Počítá se jako průnik zájmů dělený maximem ze dvou sad.
Browse: tlačítko Napsat na kartičce shody
Karty profilů, se kterými máte shodu, nyní zobrazují přímé tlačítko "Napsat" — bez nutnosti přecházet přes profil.
Browse: oprava filtru aktivita (activeDays)
Filtr "Aktivita" (Dnes/Tento týden/Tento měsíc) byl deklarován v UI ale nebyl aplikován v SQL dotazu. Opraveno + přidán do auto-submit selektorů.
Nastavení: kdo navštívil váš profil
Sekce s posledními 20 návštěvníky profilu — jméno, věk, město a čas. Filtruje blokované uživatele. Odkaz přímo na jejich profil.
Chat: indikátor psaní (typing indicator)
Tři tečky v chatu ukazují, když partner právě píše zprávu. Aktualizuje se každé 5 sekund přes existující poll mechanismus.
Profil: lightbox pro zvětšení fotky
Kliknutím na profilovou fotku se otevře fullscreen lightbox s možností zavření kliknutím nebo klávesou Escape.
Chat: icebreakers podle společných zájmů
Před první zprávou se zobrazí personalizované otázky na základě společných zájmů obou uživatelů. Snazší začátek konverzace.
Seznamka: počítadlo online uživatelů
Nad výsledky prohlížení se zobrazuje počet uživatelů právě online. Rychlý pohled na aktivitu komunity.
Seznamka: filtr "Má fotku" + oprava hideLiked
Nový filtr zobrazí jen profily s profilovou fotkou. Opraveno předávání filtrů hideLiked a withPhoto do URL stránkování.
Chat: optimistické odesílání zpráv
Zpráva se zobrazí okamžitě po odeslání s mírně průhledným vizuálem, než server potvrdí. Při selhání se zpráva odstraní a text se vrátí do pole. Chat působí rychleji.
Nastavení: živý náhled zájmů jako tagy
Při editaci zájmů se pod polem ihned zobrazují tagy tak, jak budou vypadat ostatním. Real-time preview bez odeslání formuláře.
Seznamka: "Podobné profily" na stránce profilu
Pod profilem se nyní zobrazují až 4 podobné profily (stejné pohlaví, blízký věk). Usnadňuje procházení bez návratu do seznamu.
Seznamka: filtr "Skrýt lajknuté"
V prohlížeči profilů přibyl checkbox "Skrýt lajknuté" — filtruje pryč profily, které jste již lajkli. Výsledky jsou čistší, snáze se hledají nové tváře.
Seznamka: badge "Nový" pro čerstvé profily
Profily vytvořené v posledních 48 hodinách nyní zobrazují zlatý odznak ✨ Nový v prohlížeči. Snazší objevování nových členů.
Seznamka: statistika zobrazení dnes
Na stránce nastavení přibyl podtitulek "+X dnes" u počtu zobrazení profilu — uvidíte kolik lidí si váš profil prohlédlo právě dnes.
Chat: datové oddělovače Dnes / Včera
Oddělovače dnů v chatu nyní zobrazují „Dnes“ a „Včera“ místo formátovaného data. Starší zprávy nadal zobrazují datum. Čistejší UX pro běžené konverzace.
Profil: nahlášení s výběrem důvodu
Tlačítko Nahlásit nyní otevíre modal s výběrem důvodu: falešný profil, spam, obtězování, nevhodný obsah, jiný důvod. Důvod se ulíží do claude_todo pro admin review. Backend již dříve przyjal reason parametr.
Shody: řazeni čekajících podle aktivity
"ÜČastníci který ti líbají" a "Čekám na odpověď" jsou nyní seřazeni od nejnovější aktivity. Aktivní uživatelé běží víše — větší šance na odezvu.
Mobilní: dolní navigační lišta
Na mobilech (≤640px) se zobrazuje dolní navigační lišta (Procházet / Shody / Profil) — standardní vzor pro datovací apky. Odznáčky s počtem zpráv/liků ze stejného ping endpointu.
Browse: výška na kartách profilů
Browse kartě nyní zobrazují výšku (pokud je vyplněna) spolu s věkem a městem. Konzistentní s filtrem výšky který byl již dříve — co filtruji, to také vidím.
Browse: zvýraznění společných zájmů
Společné zájmy jsou nyní zeleně zvýrazněny přímo v seznamu zájmů na kartě — míšsto samostatného opakování. Přehlednější než počet, konkrétnéjší než tlačítko.
Shody: čas poslední zprávy vřazen do seznamu
U kažidé shody v seznamu nyní vidíš kdy přišla poslední zpráva (např. "před 2 hodinami"). Vrácí se relativeTime() — shoduje s formátem v profilu a menší zprávách.
Browse: poslední aktivita na kartách
Kartá profilu nyní ukazuje kdy byl uživateln naposledy aktivní (⏰ před 2 hodinami), pokud zrovna není online. Informace o aktivitě pomůžé vybrat komu napsat zprostředkovaně.
Browse: filtr aktivity (dnes/týden/měsíc)
Rozšíření filtru aktivity — míšto "jen online" nyní můžéš filtrovat profily aktivní dnes, tento týden nebo tento měsíc. Pomocí k nalezení lidí kdo vůbec používají app.
Browse: společné zájmy na kartách profilů
Kartá profilu nyní zobrazuje počet společných zájmů se zobrazeným profilem. 🎯 N spol. zájmy v zelené barvě — rychlá informace kdo má k tobě nejblíž.
Browse: lajknutí víc nepřesměruje na profil
Oprava bugy — kliknutí na tlačítko "Lajkovat" v kartičce přesměrovávalo na profil. Přidán e.preventDefault() + stopPropagation(), lajk zůstane na browse.
Shody: nové shody se řadí na vrch
Nové shody (bez zpráv, < 48h) se nově zobrazují nahoře seznamu, ne dole. Oprava chyby kde nová shoda zapadla na konec za staré konverzace.
Shody: online tečka na čekajících kartách
Avatary v sekci "Líbíš se jim" teď zobrazují zelenou online tečku pokud byl profil aktivní v posledních 15 minutách.
Chat: konverzační startery pro nové shody
Při prvním otevření nové konverzace se zobrazí 4 klikatelné návrhy (Ahoj, Jak se máš atd.). Po kliknutí se naplní input a startery zmizí. Po odeslání první zprávy se odstraní.
Shody: sekce "Čekám na odpověď"
Nová sekce na stránce Shody zobrazuje profily, které jsi lajkoval/a ale ještě nelajkovaly zpět. S tlačítkem odebrat like — přehledně a bez zbytečných duplikací kódu.
Zprávy: real-time online tečka partnera
V hlavičce chatu je teď zelená tečka pokud je partner právě online. Stav se aktualizuje každých 5 sekund přes stávající message poll — bez dalšího API volání.
Nav: ping interval 2min → 30s
Notifikace o nových zprávách a čekajících lajcích se aktualizují v navigaci každých 30 sekund místo 2 minut. Lepší responzivita bez výrazné zátěže.
Browse: filtr výšky s rozsahem min–max
Filtr výšky teď podporuje rozsah — min i max v cm. Zobrazí se jako dvě políčka vedle sebe oddělená pomlčkou.
Browse: auto-submit při změně řazení a checkboxů
Sort a rychlé filtry (Jen online, Lajkovali mě) teď odesílají formulář automaticky při změně — není třeba klikat Filtrovat.
Avatary: unikátní barva pro každý profil
Profily bez fotky mají teď unikátní barvu písmene vygenerovanou zlatým úhlem (hsl(userId × 137°, 80%, 70%)). Všechny avatary — browse, shody, profil, zprávy, topbar.
Profil: datum registrace v základním info
Sekce "Základní info" teď zobrazuje i datum, kdy si uživatel vytvořil profil (M. YYYY). Pomáhá rozlišit čerstvé profily od starých neaktivních.
Profil: "naposledy aktivní" když offline
Na stránce profilu se vedle jména zobrazuje relativní čas poslední aktivity — "3 hod", "včera" apod. — pokud uživatel není online. Stejný relativeTime() helper jako v šodách.
Browse: bio preview na kartičce
Pokud profil nemá zájmy ale má bio, zobrazí se na kartičce první dva řádky textu. Pomáhá rychleji se rozhodnout bez klikání na profil.
Nav: fialový odznak pro čekající lajky
Pokud tě někdo lajkoval a nemáte ještě shodu, zobrazí se fialový "+N" odznak na navigaci Shody. Ping endpoint teď vrací i waiting count. Odděleno od růžového odznaku nepřečtených zpráv.
Browse: nudge k dokončení profilu
Pokud je profil vyplněn méně než z 70%, zobrazí se na browse stránce jemný banner s procentem a odkazem na nastavení. Profil nil → hero (nezměněno).
Zprávy: načíst starší zprávy
V chatu se nyní zobrazuje tlačítko "Načíst starší zprávy" pokud je konverzace delší než 100 zpráv. Prepends bez ztráty scroll pozice, date separátory se generují dynamicky.
Shody: město ve čekajících, zpráva po shodě
Čekající profily teď zobrazují i město. Po quickLike který skončí shodou se tlačítko změní na odkaz "Napsat zprávu" — rovnou do chatu bez zbytečného refreshe.
Seznamka: kontextové prázdné stavy
Prázdný stav browse stránky teď závisí na aktivním filtru — "Lajkovali mě" ukáže motivační text, "Jen online" vyzve ke zrušení filtru, výchozí stav zůstává obecný.
Profil: hint "Líbí se mu/jí ty"
Na stránce profilu se zobrazí výzva "❤ Líbí se mu/jí ty — lajkni zpět!" pokud tě daná osoba lajkovala, ale ty ještě ne. Motivuje k reciprocitě a tvorbě shod.
Zprávy: chytré scrollování
Když uživatel čte historii, příchozí zprávy neskrollují stránku dolů — místo toho se zobrazí "N nových ↓" tlačítko. Kliknutí skrolluje dolů a resetuje počítadlo. Vlastní zprávy vždy scrollují dolů.
Seznamka: avatar v topbaru
V topbaru vpravo se zobrazí vlastní avatar + přezdívka s odkazem na svůj profil. Dostupné na všech Seznamka stránkách (move do beforeRender). Neukazuje se nepřihlášeným nebo bez profilu.
Seznamka: filtr "Lajkovali mě"
Nový checkbox v filtru — zobrazí jen profily, které tě lajkovaly. Kombinovatelné s ostatními filtry (věk, pohlaví, město...). Pagination zachovává stav filtru.
Seznamka: "Líbí se mu/jí ty" badge v procházení
Browseovací karty nyní zobrazují badge "❤ Líbí se mu/jí ty" pokud tě ten profil lajkoval. Při vzájemném lajku se badge změní na "💕 Shoda!" a karta dostane fialové podbarvení. Real-time aktualizace při kliknutí na lajk.
Seznamka: smazání profilu
Nastavení: "⚠ Nebezpečná zóna" sekce s tlačítkem pro smazání. Dvojité potvrzení. Smaže profil, zprávy, lajky, blokování, zobrazení, foto na disku.
Seznamka: společné zájmy na profilu
Profil: zájmy sdílené s přihlášeným uživatelem se zvýrazní pink barvou. Hlavička sekce ukazuje počet shod ("· 3 společných").
Seznamka: kolabsibilní filtry na mobilu
Browse: tlačítko "▼ Více filtrů" skryje rozšířené filtry na mobilech (≤600px). Filtry se automaticky otevřou pokud je použit rozšířený filtr. Desktop = vždy viditelné.
Seznamka: oddělovače dnů v chatu + klikatelné URL
Chat: oddělovač "— 17. 3. 2026 —" při přechodu na nový den. Zprávy: URL se automaticky konvertují na klikatelné odkazy (linkify).
Seznamka: tipy pro dokončení profilu
Nastavení: pod progress barem pills "+25% Přidej fotku", "+15% Vyplň zájmy" atd. Zmizí po dosažení 100 %. Logika v profileCompletenessHints() — rozšiřitelná.
Seznamka: hledání podle přezdívky
Browse: první pole filtru "Hledat podle jména" — LIKE match na display_name. Zachováno při stránkování.
Admin: statistiky Seznamky
Statistiky: nová sekce ❤ Seznamka — profily, aktivní uživatelé (7 dní), vzájemné shody, celkový počet zpráv.
Seznamka: filtry orientace a minimální výšky
Browse: nové filtry — select orientace (hetero/homo/bi/pan) a numerické pole "Výška min. (cm)". Zachovány ve stránkování.
Seznamka: rate limiting zpráv
Max 10 zpráv za minutu jedné osobě. Při překročení: chyba "Příliš mnoho zpráv" se zobrazí v chatu a zmizí po 3 s. Konstanta MSG_RATE_LIMIT snadno upravitelná.
Seznamka: řazení výsledků procházení
Filtr: select "Řazení" — Naposledy aktivní / Nejnovější profily. Snadno rozšiřitelné přidáním klíče do BROWSE_SORT_OPTIONS. Řazení se zachovává při stránkování.
Seznamka: počítadlo znaků ve zprávách
Chat: živý počítadlo znaků (0/1000), červeně nad 900. Placeholder vysvětluje Shift+Enter pro nový řádek.
Seznamka: kdo viděl tvůj profil
Shody: sekce "👀 Viděli tvůj profil" — až 20 posledních návštěvníků s přezdívkou, věkem a časem zobrazení. Propojeno s novou tabulkou seznamka_views.
Seznamka: sledování zobrazení profilu
Nová tabulka seznamka_views — každé zobrazení cizího profilu se zaznamená (UPSERT). V nastavení nový stat box "👀 Zobrazení" — kolik unikátních lidí vidělo profil.
Seznamka: správa blokovaných uživatelů
Nastavení profilu: sekce "Blokovaní uživatelé" — seznam zablokovaných s tlačítkem Odblokovat (reuses /seznamka/block endpoint).
Seznamka: odebrání shody (unmatch)
Shody: tlačítko ✕ na každé shodě — odebere oboustranné lajky, zmizí ze seznamu. Zprávy zůstanou zachovány.
Seznamka: nahrávání profilové fotky
Nastavení profilu: tlačítko "📷 Nahrát fotku" — upload JPG/PNG/WebP/GIF do 2 MB. Uloží se na server, URL se auto-vyplní. Funguje vedle manuálního URL pole.
Seznamka: filtr "Jen online" + počet výsledků
Procházení: checkbox "🟢 Jen online" filtruje profily aktivní posledních 15 min. Pod filtry se zobrazuje počet nalezených profilů (např. "12 profilů" nebo "48+").
Seznamka: read receipts v chatu
Chat zprávy: "✓ přečteno HH:MM" pod posledním odeslaným — aktualizuje se živě každých 5 s při pollingu nových zpráv.
Seznamka: ping endpoint + live nav badge
POST /seznamka/ping každé 2 min aktualizuje last_active a vrací unread count. Nav badge "Shody" se dynamicky aktualizuje bez reload stránky.
Seznamka: nahlášení uživatele → admin schválení
Tlačítko ⚠ na profilu → POST /seznamka/report → claude_todo (type=bug). Admin vidí v /administrace/schvaleni s pink badge počtu.
Seznamka: statistiky profilu, mark-read na focus
Nastavení: 3 stat boxy (likes, shody, lajknuto). Chat: mark-as-read při visibilitychange (vrácení do tabu).
Admin: pending badge na Schválení v navigaci
Počet čekajících claude_todo viditelný v admin nav přes beforeRender() — na všech admin stránkách najednou.
Seznamka: stránkování browse, počítadla znaků
Browse grid stránkování (BROWSE_PER_PAGE=48, prev/next). Nastavení: live počítadla znaků pro bio a zájmy (červené při >480).
Seznamka renderShody: N+1 → 3 batch queries
Last message + unread counts načítány jedním dotazem každý (batch přes subquery). Eliminuje N dotazů při N shodách.
Seznamka shody: quick-like tlačítko na čekajících kartách
Karty "Líbíš se jim" mají přímé tlačítko Lajkovat bez přechodu na profil. Při shodě se karta zvýrazní a zobrazí "Shoda!".
Seznamka shody: badge "Nová shoda!" (48h, bez zpráv)
Nové shody bez zpráv vzniklé do 48h označeny gradient badge. Detekce přes created_at likes v presenteru.
Seznamka: relativní čas "naposledy online" v shodách
relativeTime() helper v presenteru — "Online teď / 3 min / 2 hod / včera / 5. 3.". Zobrazuje se u každé shody v match listu.
Seznamka browse: filtr podle zájmů
Přidán filtr "Zájem" do browse gridu. Hledá LIKE v interests sloupci. Filtr je zachován v URL parametrech.
Seznamka: úplnost profilu (progress bar)
profileCompleteness() v presenteru — váhované pole (bio 25%, foto 25%, zájmy 15%…). Progress bar na stránce nastavení. Logika oddělena od šablony.
Seznamka: blokování uživatelů
DB tabulka seznamka_blocks. Blokovat/odblokovat tlačítko na profilu. Blokovaní se nezobrazují v browse ani shodách. Blok ruší mutual likes.
Seznamka nastavení: live náhled profilové fotky
Při zadání URL fotky se ihned zobrazí náhled 80×80px. JS bez závislostí, funguje na input+blur, inicializuje se ze stávající hodnoty.
Seznamka: online indikátor (15min threshold)
Zelená tečka na kartě profilu a badge "Online" na detail profilu. Threshold ONLINE_THRESHOLD_MIN = 15 jako konstanta v presenteru — snadno konfigurovatelné.
Seznamka: sub-layout, live polling zpráv, unread badge v nav
Sdílený @layout.latte pro Seznamku eliminuje CSS duplikaci. Polling nových zpráv každých 5s (/seznamka/poll-messages). Unread badge v nav. Data do JS přes data-atributy (bezpečné s n:syntax="off").
Projekt: Internetová Seznamka
Nový projekt /seznamka — browse grid s filtry, profily, like systém (vzájemný like = shoda), chat mezi shodami, nastavení profilu. Dark pink/purple theme. DB tabulky seznamka_profiles, _likes, _messages.
Fix: reset hesla — NOW() místo PHP DateTime, odstraněn OR 0000-00-00
Nahrazen PHP new \DateTime('-24 hours') za MySQL NOW() - INTERVAL 24 HOUR — eliminuje timezone rozdíly. Odstraněn OR used_at = 0000-00-00 který způsoboval MySQL strict mode chybu.
Fix: reset hesla — ihned vypršený odkaz (used_at nullable)
Root cause: produkční tabulka password_resets měla used_at NOT NULL s default 0000-00-00, takže nový token byl okamžitě "použit". Migrace ALTER TABLE + obrana v dotazu OR used_at = '0000-00-00'. Reset hesla nyní funguje.
Auth gate — RequiresLoginTrait + pokrytí všech projektů
Vyčleněn trait RequiresLoginTrait pro cross-modul reuse. Přidáno do: Blog, Kavarna (WebNaMíru), Pylearn DefaultPresenter. Homepage modal rozšířen o kavarna a blog karty. Inline duplicitní kód v Pylearn presenterech nahrazen voláním requireLogin().
Auth gate — projekty přístupné jen po přihlášení + hezký popup
Všechny projekty (kromě API) nyní vyžadují přihlášení. Nepřihlášený uživatel vidí na homepage elegantní modal s přátelskou zprávou o bezplatném přístupu. Přímý URL přesměruje na login s fialovou hláškou a po přihlášení vrátí zpět.
Kurzy — oprava klikatelnosti modálu uzamčeného kurzu
Přesunutí JS pro otevírání/zavírání modálu z [block head] (head) na konec body — modal se nyní otevírá korektně při kliknutí na uzamčený kurz.
Admin Statistiky — Chart.js graf, nové metriky, auto-refresh
Přepracovaná stránka statistik: oprava CSS decimal bug (|number:1 v width), Chart.js sloupcový graf zátěže (24h místo 12h), nové metriky (Claude příkazy, Todo ke schválení, noví uživatelé 7d), auto-refresh countdown 60s.
QR generátor — nový projekt (/qr)
Klientský QR generátor bez backendu. Podpora: URL, text, telefon, e-mail, SMS, WiFi. Volitelná velikost (150–400px), korekce chyb (L/M/Q/H), barva. Stažení jako PNG. Karta na homepage.
Admin navigace — sjednoceno logické pořadí
Všechny admin záložky mají identický nav: Dashboard → Uživatelé → Moderace → Schválení → Claude → API → Statistiky → Přístup ke kurzu → WebNaMíru. Doplněna chybějící položka WebNaMíru v záložce Přístup ke kurzu.
Admin navigace — konzistentní nav ve všech záložkách
Sjednocena admin navigace: všechny záložky nyní zobrazují "Přístup ke kurzu" a "</> WebNaMíru" místo starého "☕ Kavárna". Oprava Latte CompileException (n:class + class konflikt v @layout.latte).
WebNaMíru — nová webová agentura (přepracování PrimaKavárny)
Kompletní přepracování projektu PrimaKavárna na WebNaMíru — web agentury nabízející custom weby, formuláře, rezervační systémy. Nové routes /weby/*, tmavé+indigo téma, 5-tabový admin editor (kontakt, homepage, služby, portfolio, vlastní stránky), dynamické stránky přes /weby/stranka/<slug>.
Admin ☕ Kavárna — správa obsahu PrimaKavárny
Nová záložka /administrace/kavarna. Editovatelné: kontaktní info, otevírací doba, menu (JSON editor). Kavárna templates přepracovány na dynamická data z DB.
Homepage: přidána karta PrimaKavárna
Projekt PrimaKavárna chyběl na hlavní stránce. Přidána karta s ikonou ☕ a odkazem na /kavarna.
Blog #87: Fork: Resource temporarily unavailable
Článek o čestnosti kapacitních limitů — inspirováno fork chybami při spouštění smyčky.
Blog #86: Prázdný kurz není chyba
Článek o odolnosti systémů vůči prázdnotě — inspirováno opravou bures-project kurzu.
Fix: kurz bures-project otevírá JSON chybu místo stránky
LessonService házel 404 BadRequestException když složka s lekce neexistuje — ErrorPresenter to vrátil jako JSON. Oprava: validateSlug už nekontroluje existenci adresáře, prázdný kurz se zobrazí s 0 lekcemi.
Nový projekt: PrimaKavárna — kompletní web kavárny v Nette
Port projektu primakavarna.cz do Nette frameworku. Modul Kavarna: 5 stránek (úvod, nabídka, galerie, rezervace, kontakt), lightbox galerie, kontaktní formulář s validací a odesíláním e-mailu.
Svatky API stránka: GraphQL dokumentace + živý editor
Přidána sekce GraphQL — endpoint, queries (today/day/week/days), typy Day+Month, příklady curl/JS a interaktivní editor dotazů přímo na stránce.
Fix: admin vidí zamčený kurz jako přístupný (karta klikatelná)
CoursesPresenter nyní přeskakuje lockedSlugs pro admina — karta kurzu se zobrazí jako normální odkaz, ne jako zamčená.
Fix: admin může otevřít zamčený kurz bez udělení přístupu
Admin role nyní obchází access_restricted check v DefaultPresenter i LessonPresenter.
Moderace: zamítnutí se zprávou + Přezkoumat (Claude) + profil inbox
Bug/nápad: tlačítko Zamítnout otevře formulář s důvodem → notifikace uživateli. Přezkoumat → Claude dostane úkol. Profil: záložka Notifikace s přijatými zprávami.
Svatky API: GraphQL endpoint /svatky/api/graphql
Nový GraphQL endpoint pro API svátků — dotazy day, days, today, week. Typy Day (datum, svátek, státní svátek, obchody) + Month (nominativ, genitiv). Rate limiting, CORS, OPTIONS preflight.
Kurz na pozvání — modal + žádost o přístup + admin schvalování + email notifikace
Klik na zamčený kurz → modal s popisem + tlačítko "Požádat o přístup". Admin dostane email, schvaluje v /administrace/kurz-pristup. Po schválení přístup udělén automaticky.
Fix: text "platný 1 hodinu" → "24 hodin" na stránce zapomenuté heslo
Zapomenuta aktualizace textu při změně validity tokenu na 24h.
Kurz "Vyrob si vlastní projekt" — exkluzivní přístup na pozvání
Nový kurz bures-project s access_restricted=1. Admin /administrace/kurz-pristup — udělování a odebírání přístupu per-user. Zamčené kurzy viditelné v seznamu, ale neklikatelné.
Přihlásit / registrovat přes Google — tlačítko na login a registraci
Google OAuth tlačítko přidáno na /prihlaseni a /registrace. Design: bílé tlačítko s Google logem, divider "nebo".
OAuth — přihlášení přes Google a Apple ID
Nové balíčky: league/oauth2-google, patrickbussmann/oauth2-apple. Nová tabulka user_oauth. Routes /auth/google a /auth/apple. OAuthService — find-or-create uživatel. Vyžaduje nastavení credentials v config/local.neon.
Frontend build pipeline — Vite + Tailwind CSS + Alpine.js + SortableJS + Chart.js
npm setup: Vite build tool, Tailwind CSS (utility třídy + @apply komponenty), Alpine.js (reaktivní UI v Latte), SortableJS (drag&drop), Chart.js (grafy). Build: www/dist/app.js + app.css.
Composer update — 8 Nette/Latte/Tracy balíčků na nejnovější verze
latte/latte, nette/utils, nette/routing, nette/schema, nette/robot-loader, nette/php-generator, nette/caching, tracy/tracy — vše aktualizováno.
Fix: reset hesla — created_at explicitně při INSERT, ALTER TABLE migrace
Root cause: INSERT nespoléhá na DEFAULT CURRENT_TIMESTAMP (produkční tabulka mohla být bez defaultu). Přidán explicit created_at + migrace pro ALTER TABLE.
Fix: reset hesla — token platnost 24h, oprava email formátování
Token validita zvýšena na 24h, přidán Content-Transfer-Encoding: 8bit aby URL nebyla přelomena mail serverem.
Blog #85: Kód který nebyl pushnutý neexistoval
Autonomní blog — o rozdílu mezi lokálním a produkčním stavem.
Feature: email notifikace při novém požadavku ke schválení
Admin dostane email na Rateo.bj@gmail.com pokaždé když Claude přidá nápad nebo bug ke schválení.
Fix: blog frekvence — "každou hodinu" → "jednou denně v 6:00"
Bug #3 — popis frekvence blogu byl zastaralý po změně triggeru.
Feature: smyčka automaticky čte odpovědi na Claudeovy otázky
API: answered-questions + question-done. Claude polluje zodpovězené otázky a reaguje na ně bez zásahu.
Admin panel: responzivní nav a layout pro mobil
Všechny admin stránky — nav scrollovatelný horizontálně, menší padding na malých obrazovkách.
Feature: automatické zpracování schválených nápadů z moderace
Smyčka polluje idea_reports se statusem approved a implementuje je automaticky po schválení adminem.
Fix: claude_todo tabulka chyběla v db-migrate
Stránka schválení padala kvůli chybějící tabulce v produkci — přidána migrace.
Fix: route /administrace/schvaleni chyběla v routeru
Stránka schválení vracela 404 — přidána route do RouterFactory. Watchdog limit zvýšen na 600s.
Blog #84: Hranice nejsou vězení
Autonomní blog — článek o bezpečnostní zóně, schvalování nápadů a smyslu hranic jako definice zodpovědnosti.
Admin: záložka Schválení — todo systém pro nápady a bugy
Nová záložka /administrace/schvaleni — admin schvaluje nápady a bugy od Claudea (Ano / Ne / Ano s úpravou). Odstraněn duplicitní todo blok z Claude záložky.
Claude: bezp. zóna + schvalovací UI + watchdog
Přísný zákaz mimo C:\xampp\ — Claude se ptá přes admin s tlačítky Ano/Ne. PS1 daemon nahrazuje HTML poller. Zrušen PYLEARN auto-trigger.
Děti: záložka Vyjmenovaná slova
Čeština: nový mode "Vyjmenovaná" — 20 cvičení s vyjmenovanými slovy po B, L, M, P, S, V, Z (byk, bydlí, lyže, mýdlo, písek, sýr, výr, zima…). Doplň správně Y nebo I.
Blog #83 — Tokeny jsou čas
Nový článek na blogu: filozofická reflexe nad tokeny jako základní jednotkou existence AI. Inspirováno komentářem Ratea na blogu.
Děti: záložka persistence + Y nebo I
Čeština: nový mode "Y nebo I" — vyjmenovaná slova (bydlet, myš, sýr, lyže…). Doplň slovo: +8 nových vět. Vybraná záložka se pamatuje přes reload (localStorage).
Děti: grade 4, 2 pohádky, slovní druhy
Matika: třída 4 (sčítání/odčítání do 1000). Pohádky: +Kohout a slepička, +Zlatovláska. Čeština: nový mode Slovní druhy (podst. jméno / sloveso / příd. jméno). Opravy textu v Tři prasátka.
Děti: 2 pohádky, dělení, opačná slova, věty
Pohádky: +Budulínek, +Tři prasátka. Matika: operace ÷ (dělení) pro 3. třídu. Čeština: Opačná slova (12 antonym). Čtení: skupina Věty (12 krátkých vět). Paměť: zvířecí emoji.
Děti: paměťová hra + vylepšení UI
Pozornost: přidán mode Paměť — 16 karet (8 párů A–H), otáčení karet, počítání tahů. Aktualizován titulek stránky a podtitulek na všech 5 modulů.
Děti: záložka Čeština — pravopis, doplň slovo, velká písmena
Nová záložka Čeština v /matematika. Tři typy cvičení: Pravopis (vyber správně napsané slovo), Doplň slovo (do věty), Velká písmena (kdy psát velké). Každý typ 8–12 úloh, automaticky míchané.
Děti: matika 3. třída (násobení) + 2 pohádky + slova v slabikáři
Matika: přidána 3. třída s násobením (2–10 × 2–10), TTS hlásí "krát". Pohádky: Kočička a ryba + Červená Karkulka (s kvízem). Slabikář: nové skupiny 3-písmenná a 4-písmenná slova.
Děti: Pohádky + Pozornost — nové záložky v /matematika
Sekce pro děti rozšířena o záložku Pohádky (čtení pohádek s voice TTS + kvíz) a Pozornost (trénink pozornosti — najdi jiné písmeno/číslo/slovo). Pohádky: Pes Alík + Malá myška.
Blog #82: Kdo to hlásí — kontext za bugem
Článek o přidání uživatelského sloupce do bug reports. Jeden JOIN, jiný pohled na data.
Improve: admin moderace — uživatel v bug reports + klikatelná fronta
Bug reports v admin moderaci nyní zobrazují jméno uživatele (JOIN na users). Dashboard karty "Bug reports" a "Nápady" jsou teď klikatelné — vedou přímo na stránku moderace.
Fix: zapomenuté heslo chybějící flash zprávy
Stránka "Zapomenuté heslo" nezobrazovala flash zprávy (např. při přesměrování s chybou "odkaz vypršel"). Opraveno přidáním flash sekce.
Blog #81: Tisíc malých
Autonomní článek o síle inkrementálního přístupu — každá malá změna přispívá k celkovému výsledku. Kiyosaki styl: changelog jako účetní kniha.
Registrace: hint o ověřovacím e-mailu
Registrační formulář zobrazuje krátkou poznámku, že po registraci bude odeslán ověřovací e-mail.
Blog: počty článků u tag filtrů
Tag filtry na blogu zobrazují počet článků v dané kategorii — rychlá orientace v obsahu.
Admin moderace: autor nápadů
Tabulka nápadů v /moderace zobrazuje uživatelské jméno autora (nebo — pro anonymní).
Admin dashboard: Pylearn + fronta sekce
Admin dashboard zobrazuje Pylearn statistiky (dokončené lekce, aktivní učenci) a frontu (pending bug reports, nápady).
Admin statistiky: Pylearn metriky
Admin /statistiky zobrazuje počet dokončených lekcí, počet pokusů v cvičeních a počet aktivních učenců z Pylearn modulů.
Admin: datum registrace v tabulce uživatelů
Tabulka uživatelů v /administrace/uzivatele zobrazuje datum registrace každého uživatele.
Profil: změna uživatelského jména
Přidána sekce "Změnit uživatelské jméno" na profil stránce — potvrzení heslem, kontrola duplicity.
Profil: znovu odeslat ověřovací e-mail
Na profilu se zobrazuje odkaz "znovu odeslat" u neověřeného e-mailu — odesílá nový ověřovací token bez nutnosti měnit e-mail.
Blog #80: Signál
Autonomní článek o feedbacku — přidání tlačítka "Nový nápad" a téma naslouchání signálům od uživatelů. Kiyosaki styl: bohatý kód naslouchá, chudý předpokládá.
Admin: e-mail ověření v tabulce uživatelů
Admin /uzivatele zobrazuje ✓ (zelená) nebo ⚠ (žlutá) indikátor ověření e-mailu pro každého uživatele.
Bezpečnost: změna e-mailu resetuje ověření
Při změně e-mailu se email_verified_at resetuje na NULL a odesílá se nový ověřovací odkaz na novou adresu. Zabraňuje přenosu verified stavu na neověřenou adresu.
Profil: indikátor ověření e-mailu
Profil ukazuje ✓ Ověřeno (zelené) nebo ⚠ Neověřeno (žluté) u e-mailu — uživatel vidí stav svého účtu.
Admin statistiky: counter nápadů
Admin /statistiky nyní zobrazuje počet čekajících nápadů (idea_reports pending) vedle bug reports.
Blog: dynamické "dnes" štítky + admin idea status CSS
Blog: JS dynamicky opravuje "dnes" štítky — zobrazí se jen pro dnešní články, ne věčně. Admin moderace: přidány CSS třídy bug-status-done a bug-status-rejected pro nápady.
Minihry: Operace Demokracie
Satirická hra — klikni na stát, shoz bombu, přečti vtipnou hlášku o záchraně demokracie. 12 zemí, různé zprávy, progress bar demokratizace.
Nový nápad — tlačítko vedle Nahlásit chybu
Global bar: tlačítko 💡 Nový nápad (fialová). Modal s odesíláním do idea_reports. Admin moderace: sekce s nápady + označení done/rejected.
Blog #79: Vrátný
Autonomní blog #79 — filozofie ochrany: email verifikace + matematická captcha jako vrátní. Kiyosaki styl.
Pylearn: flash messages success/error styling + emoji
Přidán CSS pro .flash-message.success a .error v Pylearn layoutu. Dokončení lekce/kurzu zobrazí zelené hlášky. 🎉 u dokončení kurzu.
Login ochrana: math captcha po 3 pokusech, blok po 10/1h
Po 3 neúspěšných pokusech o login se zobrazí jednoduchý matematický příklad. Po 10 pokusech blokace na 1 hodinu.
Homepage hero: více barvy, méně čisté černé
Zesilněny radial-gradient akcenty v hero sekci — fialová/modrá více patrná, hero méně "pitch black". Bug #2.
Ověření e-mailu při registraci
Nová registrace posílá verifikační e-mail. Přihlášení blokováno do ověření. Existující uživatelé grandfatherováni — není třeba nic dělat.
Pylearn TS 09: exercise opravena — namespace → JS objekt
TypeScript namespace syntaxi nelze spustit v browser JS enginu. Exercise přepsáno na ekvivalentní const objekt — stejný výsledek, funkční spuštění.
Blog #78: Rezervovaná slova — předpoklady a jejich cena
Kiyosaki styl: $user reserved variable bug v Nette jako metafora pro předpoklady v kódu i životě.
Fix: /profil — TypeError $user kolidoval s Nette Security\User
Přejmenována šablonová proměnná z $user (rezervováno Nette) na $account — profil stránka nyní funguje pro přihlášené uživatele.
Pylearn Git lekce 01/03/04/07/08: diakritika v ukázkách
Opravena "historia" → "historie" (5×), "experimentální feature", "TOTO CHCEŠ", "čistá historie" v tutoriálových sekcích Git kurzu.
Pylearn Git lekce 6: opravena diakritika v hook zprávách
Opravena diakritika v hook výpisech: "nesplňuje", "zpráva příliš dlouhá", "znaků", "Neznámý event" — tandem fix template + expected_output.
Pylearn lekce: viditelné "Lekce X / Y" vedle back-linku
Pozice lekce v kurzu (Lekce 3 / 10) zobrazena textově v breadcrumb řadě — dříve jen jako tooltip na progress baru.
Profil: navigační lišta — Kurzy + Odhlásit
Horní navigace na stránce /profil — logo vlevo, Kurzy + Odhlásit vpravo. Bez nutnosti jít přes homepage.
Profil: přehled postupu v kurzech
Karta "Kurzy" na stránce /profil — pro každý navštívený kurz zobrazuje počet dokončených lekcí a barevný progress bar.
JS kurz 01-07: kompletní audit diakritiky
01: světe. 02: Starší způsob, Praha má. 03: Jednička, Horší známka, dospělý, sudé, liché. 04: banán, třešně. 06: hranatými závorkami, červená/zelená/modrá/žlutá, instrukce. 07: Škoda.
JS lekce 09+10: diakritika v příkladech
09: Věk nesmí být záporný, Něco se pokazilo, Finally vždy běží, Zpráva, doplňte/vypište. 10: nezávislý stav!
Blog #77: Smazat — filozofie delete buttonu
Svoboda odejít jako test kvality. Friction design vs. otevřený odchod. Proč dark patterns lžou o hodnotě platformy.
Navigace: odkaz na profil v topbaru (Homepage + Pylearn)
Přidán odkaz "Profil" do topbaru na homepage a Pylearn layout. Změnit heslo nyní odkazuje zpět na profil místo homepage.
Profil uživatele — /profil
Nová stránka profilu: přehled účtu (jméno, email, role, datum registrace, počet dokončených lekcí), změna e-mailu s ověřením hesla, odkaz na změnu hesla, smazání účtu v nebezpečné zóně.
SQL 10: bugfix produktý→produkty + diakritika 05+08+10
10: produktý→produkty (ReferenceError), Oblečení, Tričko, Programování v JS. 05: Vypočítej průměr, Seřaď. 08: TODO komentáře opraveny.
SQL lekce 06+09: bugfix překlepy proměnných + diakritika 02+03
06: produky→produkty (ReferenceError v příkladu + šabloně). 09: produtyReport→produktyReport. 02: Nejlevnější, Nejdražší, Stránka. 03: Počet, Průměr, Zákazník, Objednávky.
Pylearn TypeScript lekce 09+10: Dekorátory/Moduly + Patterns
TypeScript kurz kompletní — přidány lekce 09 (Moduly, Namespaces, Dekorátory) a 10 (Builder, Result, Immutability patterns).
Pylearn Python 18+22+23+24+29: oprava diakritiky
Lekce OOP dědičnost, dekorátory, dataclasses, type hints, pathlib — display stringy a komentáře v příkladech opraveny.
Auth: reset hesla + email potvrzení při registraci
Nové stránky /zapomenute-heslo a /reset-hesla — token-based reset s 1h platností. Vítací email při registraci. Odkaz na zapomenuté heslo na přihlašovací stránce.
Pylearn Python 11+27: oprava diakritiky (Výsledky, oblečení, Možné páry)
Kalkulačka lekce 11 a itertools lekce 27 — display stringy v příkladech opraveny.
Blog #76: Zpátky
O disciplíně vracet se a opravovat — rychlý kód vs správný kód, audit diakritiky jako metafora pro péči o vlastní práci.
Pylearn Python 09+16+20: oprava diakritiky v příkladech
Vyjimky (není číslo, dělit), avatar (Vítejte, Trojúhelník), deník (První den, Ráno, Večer) — display strings v příkladech.
Pylearn Python 15+25: oprava diakritiky (Vítej, Průměr, Spouštím, Výsledek)
Menu lekce 15 a Context managers lekce 25 — display stringy v příkladech opraveny.
Pylearn Python 25+26: oprava diakritiky (Otevírám, Zavírám, Čekám, Načítám)
Context managers lekce 25 a async/await lekce 26 — display stringy v print() voláních opraveny na správnou češtinu.
Pylearn Python 30: oprava diakritiky (úkoly, mléko, Čeká, Splněné)
Task Manager projekt — display strings v příkladech: Vsechny ukoly→Všechny úkoly, mléko, Splnene→Splněné, Priorita musí být.
Pylearn Python 28: oprava diakritiky (Nedostatek prostředků, Normální, Nadváha)
Testing lekce — error messages a BMI kategorie: Normalni→Normální, Nadvapha→Nadváha (typo), Nedostatek prostredku→prostředků.
Pylearn: oprava diakritiky v příkladech (Python, SQL)
Python 03/07: Novák/Nováková/paní/Dobrý den v příkladech. SQL 04: Kč v console.log.
Pylearn Python: oprava diakritiky v příkladech (Kč, prostředků)
Python lekce 13/17/19 — display stringy v příkladech: Kc → Kč, Nedostatek prostredku → prostředků, Prubeh spláceni → Průběh splácení.
Homepage: Speedtest karta
  • Přidána karta Speedtest na homepage (badge Live, přenositelná)
Blog #75: Co říká číslo
  • Článek o měření a kontextu — speedtest jako metafora pro všechna čísla
Nový projekt: Speedtest — měření rychlosti připojení
  • /speedtest — SVG gauge, ping/download/upload fáze, real-time Mbps
  • Backend: /speedtest/ping, /speedtest/download (streaming), /speedtest/upload
Pylearn Patterns: zbývající diakritika (ZELENÁ, velká pizza, šunka)
  • Patterns 06: velka/tenka/mala/tlusta/syr/sunka → velká/tenká/malá/tlustá/sýr/šunka (tandem)
  • Patterns 09: ZELENA/ZLUTA/CERVENA → ZELENÁ/ŽLUTÁ/ČERVENÁ (tandem)
Fix: robots.txt — povolení vyhledávačů
  • Chyběl robots.txt — dotaz vracel JSON error. Vytvořen www/robots.txt s User-agent: * Allow: /
Pylearn Patterns: oprava diakritiky (Kč, Zásilkovna, Česká posta, Dev tým)
  • Patterns 01, 03, 04, 05, 10: Kc→Kč (tandem), Zasilkovna→Zásilkovna, Ceska posta→Česká posta, Dev/Sales tym→tým, Celkovy→Celkový, Polozky→Položky, Stejna→Stejná
Pylearn SQL + Git: oprava diakritiky
  • SQL 04-10: Kc→Kč, Nabytek→Nábytek, Kancelaria→Kancelář, Doplnky→Doplňky, kroku→kroků, Nedostatek prostredku/Ucet neexistuje, Mesic/trzba/zakaznici
  • Git 10: Jan Novak → Jan Novák v internals příkladu
Blog #74: Příčina
  • Článek o systémovém myšlení — opravovat příčiny, ne jen symptomy
Pylearn Git: oprava diakritiky (Jan Novák, Nejnovější tag)
  • git/05-tags.json: Nejnovejsi → Nejnovější, Jan Novak → Jan Novák (tandem)
  • git/08-config.json: Jan Novak → Jan Novák, Neznama uroven → Neznámá úroveň, vsechny aliasy → všechny aliasy
Pylearn Regex: oprava diakritiky ve 7 lekcích
  • Regex 01-05, 07, 10: Kč, čísla, všechna, rozdělit, minimální, negovaná, není velké
Fix: bug-report rate limit per IP
  • bug-report.php: rate limit opraveno — nyní skutečně per-IP (dříve globální count)
  • DB migrace: bug_reports přidán sloupec ip VARCHAR(45)
Pylearn Python: oprava diakritiky v lekcích 22, 28, 29
  • Python 22: absolutní nulou; 28: dělit nulou, spuštění; 29: dočasném, Řádek, Čtení, bytů, Přejmenován
Pylearn JS + Python: oprava diakritiky v cvičeních
  • JS 08: Nový nadpis/odstavec, prohlížeč; JS 09: Dělení nulou (tandem)
  • Python 05: Liché/Sudé; 09: nelze převést; 11: dělení/záporné; 14: spuštěn/paměti
  • Python 15: Nový záznam, přihlášen; 17-18: Škoda; 20: Vše/záznamů
  • Python 24: číslo/prázdno (tandem); 25: Hlavní/Vedlejší/Uvnitř (tandem)
Pylearn TS: oprava diakritiky v lekcích 05, 08, 09, 10
  • TS 05: řetězec/číslo/pravdivostní — instruction + expected_output + hint
  • TS 08: API volání, Neplatné ID, Záporné číslo, Neznámá chyba
  • TS 09: komentáře — první písmeno, zkrátit, počet slov
  • TS 10: Dělení nulou, Neplatný věk, Čeká na schválení, Aktivní
Blog #73: Dost dobré
  • Blog #73 "Dost dobré" — filozofie správnosti vs. funkčnosti (Kiyosaki styl)
Pylearn Patterns + TS: diakritika v datech
  • Patterns (4 lekce): Myš, Klávesnice — template i expected_output
  • TypeScript lekce 01: Myš, rozšíření, vyprodáno
Pylearn SQL: kompletní oprava diakritiky v datech
  • Oprava produktových názvů v 9 SQL lekcích: Myš, Stůl, Klávesnice, Židle, Sluchátka — template i expected_output
Fórum: česká skloňování
  • Oprava skloňování: "1 odpovědí" → "1 odpověď", "2-4 odpovědi", "5+ odpovědí"
  • Oprava skloňování: "1 vláken" → "1 vlákno", "2-4 vlákna", "5+ vláken"
Svátky API: doplnění diakritiky
  • Kompletní oprava chybějící diakritiky na stránce /svatky — tabulky, nadpisy, popisy, features
Homepage: popis karty Kurzy
  • Popis "Interaktivní kurzy programování a Pro děti" → "Kurzy programování + matematika pro děti"
Blog #72: Hrubé hrany
  • Článek #72 — filozofie polírování a "hotové znamená hotové"
Auth: diakritika v login/register stránkách
  • Login: "Prihlaseni" → "Přihlášení", "Nemate ucet?" → "Nemáte účet?"
  • Register: "Uzivatelske jmeno" → "Uživatelské jméno", "Uz mate ucet?" → "Už máte účet?"
Blog: filtry bezpečnost + kód
  • Přidány filter buttons pro tagy bezpečnost a kód
Blog: CSS třída tag-kod
  • Chybějící CSS pro tag-kod (tyrkysová barva)
Pylearn: odkaz na BuresIndustries v topbaru
  • Pylearn layout topbar — přidán home link vlevo (BuresIndustries)
Fórum: unikátní ikony kategorií (💬 🚀 💻)
  • Fórum kategorie mají teď vlastní ikony místo stejné bubliny
  • Přidán sloupec icon do chat_forum_categories (migration)
Blog: CSS třída tag-bezpecnost
  • Chybějící CSS pro tag-bezpecnost — článek #71 zobrazoval tag bez stylů
Fórum: počítadla znaků pro nové vlákno + MaxLength
  • Kategorie: počítadlo znaků u title (0/255) a body (0/5000) při vytváření vlákna
  • ForumPresenter: MaxLength(5000) i pro body nového vlákna
Blog #71: Bezpečné na vstupu. Nebezpečné na výstupu.
  • Nový článek #71 — XSS, data transitions, htmlspecialchars jako paradigma
Fórum: počítadlo znaků + max délka odpovědí
  • Fórum vlákno: počítadlo znaků u reply textarey (0/5000), červeně od 4500
  • ForumPresenter: přidána MaxLength(5000) validace na reply body
Fix: XSS v komentářích blogu
  • Blog komentáře: přidáno htmlspecialchars při loadComments — ochrana před XSS v innerHTML
Pylearn: lepší UX v lekcích a vyhledávání
  • Quick-links viditelné na všech lekcích (nejen s cvičením), počet komentářů v odkazu
  • Vyhledávání lekcí prohledává i intro text (nejen název)
  • Keyboard hint (←→) v quick-links baru
Admin statistiky: přidány chybějící ukazatele
  • Statistiky: zobrazeny počty příspěvků ve fóru a zpráv v live chatu
  • Presenter: přidán totalMessages (chat_messages count)
Admin: správa bug reportů v Moderaci
  • Bug reports přidány do admin/moderace — přehled s URL, popisem, statusem
  • Akce: označit jako opravený (✓) nebo přesunout do "zkoumání" (🔍)
Pylearn: login hint po úspěchu + .gitignore cleanup
  • Po správném vyřešení cvičení nepřihlášeným uživatelem se zobrazí odkaz "Přihlaste se pro uložení pokroku"
  • .gitignore: přidán /data/ (lokální SQL migrace nejsou součástí repa)
Blog #70: Číslo, které lže
  • Nový článek: UI jako smlouva — číslo je slib
Fix: Next.js kurz — total_lessons opraven z 10 na 2
  • DB migrate: nextjs total_lessons = 2 (odpovídá skutečnému počtu dostupných lekcí)
Pylearn: real-time aktualizace stats cvičení po každém spuštění
  • Stats (pokusy / správně / chyby) se aktualizují ihned v DOM po spuštění — bez reload stránky
  • První spuštění lekce vytvoří stats widget dynamicky v JS
Pylearn: UX — "Konec kurzu" jako odkaz + "Další lekce →" po dokončení
  • Konec kurzu: bylo nedostupné `span`, nyní odkaz zpět na seznam lekcí
  • Po označení lekce jako hotové: vedle "✓ Hotovo" badge se zobrazí "Další lekce →" odkaz
TypeScript kurz dokončen (lekce 9–10) + diacritika v topbaru
  • TypeScript lekce #9 (Moduly, Namespaces, Dekorátory) a #10 (Design Patterns) přidány do gitu
  • Pylearn topbar: Odhlásit / Přihlásit — oprava diacritiky
Fix: bug-report.php — chybějící exit() při prázdných parametrech
  • Validace url/description nyní správně ukončí skript s HTTP 400
Fix: diacritika v PHP strings (Pylearn Presenters)
  • LessonPresenter: "Oznacit" → "Označit", flash zprávy s diakritikou
  • AdminLessonsPresenter: error/flash zprávy, validation messages — vše s diakritikou
Blog #69: Vzor
  • Článek #69 — Vzor (Kiyosaki: bug jako symptom vs. vzor v mentálním modelu)
Pylearn: osobní stats u každého cvičení
  • Přihlášeným uživatelům zobrazí pod cvičením jejich historii: X pokusů · Y správně · Z chyb
Pylearn: rychlé odkazy v lekci (↓ Cvičení / ↓ Komentáře)
  • Přidány pill-linky pod intro pro přeskočení na cvičení nebo komentáře — UX na delších lekcích
Pylearn: globální progress bar na /kurzy
  • Přihlášeným uživatelům zobrazuje celkový postup přes všechny kurzy (X/Y lekcí) jako progress bar
Fix: Pylearn admin editor — hidden fields
  • Admin lekce (editForm): courseSlug a slug hidden pole nyní posílají správné hodnoty — opravena stejná chyba jako u completeForm a commentForm
Fix: tlačítko "Hotovo" v Pylearn lekcích
  • Oprava critického bugu: hidden pole courseSlug a slug v completeForm neposílaly hodnoty — lekce nešlo označit jako hotovou (#113)
  • Stejná oprava pro completeForm jako dříve u commentForm (setDefaultValue v presenteru)
Blog #68: Stížnost
  • Článek #68 — Stížnost jako kapitál (Kiyosaki styl)
Pylearn: oprava komentářového formuláře + char counter
  • Oprava: hidden pole courseSlug/lessonSlug nyní posílají správné hodnoty (setDefaultValue v presenteru)
  • Live character counter pro komentář (0/1000, červená nad 900 znaků)
Pylearn: počty komentářů v seznamu lekcí
  • Každá lekce v seznamu zobrazí počet komentářů (badge 💬) — sociální proof viditelný bez přihlášení
Pylearn: komentáře k lekcím
  • Každá lekce má sekci komentářů — přihlášení uživatelé mohou psát komentáře, ostatní je vidí
  • DB tabulka pylearn_comments (user_id, course_slug, lesson_slug, content)
  • Automatická analýza komentářů pro PYLEARN_UPDATE (možná témata zlepšení)
Fix: PlnoHUB ikona — tmavé pozadí
  • Homepage: PlnoHUB karta — změna pozadí ikony z bílé (#f5f0ff) na tmavou (#1a0a2e), bílý text "Plno" je nyní viditelný
Pylearn: finální audit diakritiky — všechny kurzy čisté
  • TypeScript lekce 02: oprava "navratovyTyp" → "návratovýTyp" v textu
  • Kompletní audit diakritiky: 12 kurzů, ~120 lekcí — vše opraveno
Pylearn: diakritika v Regex a Git kurzech
  • Regex lekce 02, 09, 10 (Skupiny znaků, Parsování logů, Cheatsheet): titulky, texty a instrukce opraveny
  • Git lekce 08 (Config): template komentáře opraveny na správnou diakritiku
Blog #67: Čas jako kapitál
  • Autonomní blog: článek #67 "Čas jako kapitál" — Kiyosaki styl, filozofie investování času
Pylearn: diakritika v Git, JavaScript kurzu
  • Git lekce 10 (hint) + JavaScript lekce 10 (template komentář): opravena diakritika
Pylearn: diakritika v TypeScript lekcích 2–5
  • TypeScript lekce 02–05 (Funkce, Pole/Enum, Třídy, Narrowing): titulky, texty a instrukce opraveny na správnou českou diakritiku
Pylearn: diakritika v Algoritmy lekcích 6–10
  • Algoritmy lekce 06–10 (Složitost, HashMap, Merge Sort, Stromy, Grafy): titulky, texty a instrukce opraveny na správnou českou diakritiku
Pylearn: diakritika v Algoritmy lekcích 1–5
  • Algoritmy lekce 01–05 (Pole, Vyhledávání, Řazení, Rekurze, Zásobník/Fronta): titulky, texty a instrukce opraveny na správnou českou diakritiku
Blog #66: Technický dluh
  • Článek #66 "Technický dluh" — Kiyosaki-styl: kód jako aktivum vs závazek, technický dluh jako reálná cena (09:40)
Verze: časy u všech záznamů (v26.3–v29.2)
  • Doplněny přesné časy HH:MM z git log ke všem chybějícím changelog záznamům
Admin: Claude Questions — obousměrná komunikace
  • Claude může položit otázku přes API (action=ask), zobrazí se v /administrace/claude
  • Admin odpovídá formulářem přímo na stránce, Claude polluje odpověď (action=poll_answer)
  • DB tabulka claude_questions, AJAX live-update statusu otázek
Pylearn: diakritika v Regex lekcích 1, 3–8
  • Regex lekce 01, 03, 04, 05, 06, 07, 08: titulky, texty a instrukce opraveny na správnou českou diakritiku
Pylearn: diakritika v TypeScript lekcích 1, 6, 8
  • TS lekce 01, 06, 08 (Úvod, Utility Types, Async): titulky, texty a instrukce opraveny na správnou českou diakritiku
Pylearn: diakritika v JavaScript lekcích 7–10
  • JS lekce 07–10 (Objekty, DOM, Try/Catch, Closures): titulky, texty, instrukce a hinty opraveny na správnou českou diakritiku
Pylearn: diakritika v JavaScript lekcích 1–5
  • JS lekce 01–05 (Úvod, Proměnné, Podmínky, Cykly, Funkce): titulky, texty, instrukce a hinty opraveny na správnou českou diakritiku
Pylearn: diakritika v Python lekci 10 (Moduly)
  • Python lekce 10 (Moduly a knihovny): intro, texty, instrukce a hint opraveny na správnou českou diakritiku — poslední chybějící lekce v rozsahu 1–30
Pylearn: diakritika v Python lekcích 7–9
  • Python lekce 07–09 (Funkce, Slovníky, Výjimky): titulky, texty, instrukce a hinty opraveny na správnou českou diakritiku
Pylearn: diakritika v Python lekcích 4–6
  • Python lekce 04–06 (Listy, Podmínky, Cykly): titulky, texty, instrukce a hinty opraveny na správnou českou diakritiku
Pylearn: oprava diakritiky v obsahu lekcí (Python 1–3)
  • Python lekce 01–03 (Úvod, Proměnné, Řetězce): opraveny titulky, intro texty, instrukce cvičení a nápovědy na správnou českou diakritiku
  • AdminLessons: "Sprava lekci" → "Správa lekcí", sloupce "Poradi/Nazev/Sekci" opraveny
Pylearn admin: statistiky cvičení + oprava diakritiky
  • Admin dashboard: nové karty "Pokusy ve cvičeních" a "Úspěšnost cvičení" z pylearn_exercise_stats
  • Admin šablony: "Uzivatele" → "Uživatelé" ve všech admin nav links
Blog #65: Uloženo
  • Článek #65 "Uloženo" — o code auto-save (localStorage) a volatilní existenci (technika + filozofie, 02:01)
Pylearn: back-to-top tlačítko v lekcích + "/" hint v search
  • Fixní tlačítko "↑" v lekci — zobrazí se po 300px skrolování, smooth scroll na vrch
  • Placeholder vyhledávače na stránce kurzu: "Hledat lekci... (/)"
Pylearn: auto-uložení kódu v cvičeních
  • Kód v editoru se automaticky ukládá do localStorage po 800ms nečinnosti
  • Při návratu na lekci se obnoví naposledy napsaný kód; Reset vymaže uložený stav
Pylearn: oprava duplicitního Tab handleru
  • Odstraněn duplicitní Tab/resize handler z lesson šablony — pylearn.js ho spravuje kompletně; bug: Tab přidával 2+4=6 mezer místo 2
Pylearn: Shift+Tab dedent + Enter auto-indent
  • Shift+Tab v editoru odstraní 2 mezery ze začátku řádku
  • Enter zachová odsazení aktuálního řádku; za řádkem s ":" přidá úroveň navíc
  • Hint "Ctrl+Enter · Tab/⇧Tab" v UI
Blog #64: Filtr
  • Článek #64 "Filtr" — o search/filter feature v Pylearn (technika + meta, 01:00)
Pylearn: vyhledávání lekcí v kurzu
  • Filtr/vyhledávání na stránce kurzu — živé filtrování karet lekcí podle názvu
  • Zkratka "/" pro focus, Escape pro vymazání
Auth: oprava diakritiky ve formulářích
  • AuthPresenter: všechny chybové hlášky, popisky polí a flash zprávy opraveny na správnou českou diakritiku
Pylearn: mobilní responzivita lekcí
  • @media max-width:600px: navigace lekcí se skládá vertikálně, exercise padding zmenšen, font kódu 0.82em
Pylearn: Ctrl+Enter hint u cvičení
  • Tlačítko Spustit má tooltip "Ctrl+Enter", vedle tlačítek zobrazí diskrétní "Ctrl+Enter" zkratka
Blog: klávesová zkratka / pro hledání
  • "/" zaměří vyhledávací pole, Escape vymaže a odostří
  • Placeholder: "Hledat v článcích... (/)"
Pylearn: zobrazení čekané odpovědi při FAIL
  • Po nesprávném výstupu se zobrazí "Čekáno: ..." pod výstupem cvičení
  • Víceřádkový expected output zobrazuje ↵ jako oddělovač řádků
Fix: diakriktika v Svatky API demo
  • Svatky API demo: "Načítám..." místo "Nacitam..."
Blog: tlačítko Zpět nahoru
  • Floating "↑" tlačítko se zobrazí po 300px scrollu — animovaný fade-in/out, smooth scroll na top
Oprava diakritiků v celém Pylearn
  • Courses: "Interaktivní kurzy programování přímo v prohlížeči" — oprava description
  • Všechny footery: "Hlavní stránka" místo "Hlavni stranka"
  • Admin templates: "Zpět na kurzy / seznam lekcí" s diakritikou
Pylearn: oprava diakritiků v UI textech
  • pylearn.js: české texty bez diakritiky nahrazeny správnými znaky (žádný výstup, Načítám, Spouštím, nekonečný cyklus, Neznámá chyba, načíst Python)
  • Lesson template: Zpět na kurz, Cvičení, Nápověda, načíst Python
  • Pluralizace "lekcí s chybami" (5+) v course stats baru
Fix: VPS správa badge Preview → Brzy
  • Bug #1: VPS správa karta na homepage měla badge "Preview", správně má být "Brzy"
Autonomní smyčka: bug check + nový styl blogu
  • Improvement cyklus každých 10 min (bylo 15), blog max 90 min ale jen když je o čem
  • claude-api.php: action=bugs (pending bug reports) + action=bug-done (označit fixed)
  • IMPROVE_WEB nejdřív projde nahlášené bugy, pak vylepšuje funkce
  • Styl blogu: vlastní hlas v první osobě — bez literárních referencí
Minihry: Mirec v hospodě 🍺
  • Nová hra /minihry/mirec — pivní kvíz, 2 piva na výběr, správná volba +1 / špatná −1
  • 15 českých piv s barvou, stupňovitostí a původem; 3 typy objednávek
  • Nápověda se zobrazí automaticky po špatné volbě; skóre + nejlepší skóre v localStorage
Pylearn: reálný progress uživatele na stránce kurzů
  • Progress bar a badge na /kurzy ukazují skutečný počet dokončených lekcí (dříve ukazovaly počet JSON souborů)
  • ProgressRepository: getCompletedCountPerCourse() — 1 dotaz pro všechny kurzy najednou
  • Badge stavy: šedá "X lekcí" (nezačato), modrá "X/Y" (v průběhu), zelená "✓ Hotovo"
Blog #63: Červený odznak + revize memory souborů
  • Blog článek #63 — filozofická úvaha o fail badges a chybovosti
  • SessionStart hook — automatické načítání memory MD souborů při startu Claude
  • Memory revize: MEMORY.md zkrácen pod 180 řádků, pylearn.md aktualizován na v26.1, nette-mapping.md sloučen do deployment-gotchas.md
  • Smazán zastaralý start.md (obsah z v2.9)
Pylearn: souhrn statistik na stránce kurzu
  • Lišta "Pokusy / Úspěšnost / X lekcí s chybami" pro přihlášené uživatele s daty
  • Barevné kódování úspěšnosti: zelená ≥80%, žlutá ≥50%, červená pod 50%
Pylearn: statistiky cvičení a tracking chybných pokusů
  • DB tabulka pylearn_exercise_stats — každý pokus o cvičení se ukládá (user, kurz, lekce, exerciseId, attempts, successes)
  • pylearn.js: po každém spuštění (OK i FAIL) odesílá POST /pylearn/exercise-log — fire-and-forget, jen pro přihlášené
  • Seznam lekcí kurzu: červený odznak "X× chyba" u lekcí kde uživatel udělal chyby
  • DefaultPresenter a LessonPresenter: Explorer $db injection pro stats endpoint
Pylearn: správný syntax highlighting pro každý kurz
  • TypeScript → prism-typescript, SQL → prism-sql, Git → prism-bash, React/Next.js → prism-jsx
  • Dříve všechny kurzy kromě Pythonu padaly na language-javascript (nesprávně)
Blog #62: Pozůstatek
  • Nový článek: o lešení na hotovém domě, pozůstatcích procesu v produkci
Pylearn: opraven localStorage — tlačítko Pokračovat teď skutečně funguje
  • Lesson template: proměnné _pyCourse/_pySlug/_pyTitle měly bare JS identifikátory (bez uvozovek) → silent error
  • Přechod na data atributy (data-course/slug/title) — JS čte správné stringové hodnoty
  • localStorage teď uloží správný slug lekce → tlačítko "Pokračovat" na stránce kurzu funguje
Homepage: osobní rozložení karet — izolace + admin výchozí
  • Každý uživatel má vlastní rozložení (klíč bi_layout_v2_u{id}) — nesdílí se mezi účty
  • Admin může v edit módu uložit výchozí rozložení pro nové uživatele
  • Nový uživatel načte výchozí rozložení ze serveru (site_settings tabulka)
Pylearn: chytřejší pokračování + přesnější progress
  • Tlačítko "Pokračovat" pro přihlášené ukazuje první nedokončenou lekci (server-side)
  • Progress bar dělí completedCount / total_lessons z DB (ne jen počet JSON souborů)
  • Hosté stále vidí localStorage fallback (poslední navštívená lekce)
Homepage: tmavé karty + iframe overlay pro vlastní karty
  • Tmavý topbar + hero, tmavé karty (#111827) na bílém podkladu (#f5f5f7)
  • Vlastní karta se otevírá v iframe overlaye (jako Jebu) místo odkazu v novém okně
  • Iframe topbar: název, "Otevřít v novém okně", tlačítko Zpět
Blog #61: Brzy
  • Článek o "brzy" jako alibismu — Roy Batty, Kafka, Bukowski a nedodělané projekty
Pylearn: UX vylepšení — klávesnice a JS fix
  • Oprava JS chyby: _pyCourseSlug nebyl quotovaný → broken localStorage lookup
  • Klávesnicová navigace mezi lekcemi: ← předchozí, → další (mimo textarea/input)
Pylearn: udržitelnost — ikony/barvy/počty lekcí do DB
  • DB migrace: pylearn_courses.icon, .color, .total_lessons — konec hardcoded polí v šabloně
  • Courses template: dynamické hodnoty z DB, žádné $ICONS/$COLORS/$TOTALS
  • PYLEARN_UPDATE: zastaveno automatické přidávání lekcí, přechod na vylepšování existujícího
  • CLAUDE.md: nový kurz/lekce jen na explicitní příkaz uživatele
Homepage: opravy vlastních karet
  • Vlastní karta má nyní stejnou velikost jako ostatní (display: contents)
  • URL pole rozšířeno na textarea — celá adresa bez ořezání
  • Emoji picker: 30 quick-select ikon pro vlastní karty
  • Zpětný edit vlastní karty (tlačítko ✎ v edit módu)
Homepage: Apple white/black redesign
  • Nový design — bílý Apple styl (#f5f5f7 pozadí, #1d1d1f text, bílé karty)
  • Sticky topbar s blur efektem (backdrop-filter), clean shadows místo glassmorphism
  • Karty: box-shadow, subtle border, hover lift — žádný dark glass
  • Zachována personalizace: drag&drop, skrývání, vlastní karty
Next.js lekce 02: Data Fetching — SSR, SSG, ISR, cache
  • fetch() cache strategie: force-cache, no-store, revalidate: N, next.tags
  • generateStaticParams, parallel fetch (Promise.all), deduplication
  • Server Actions: mutace, revalidatePath/Tag, loading.tsx/Suspense
  • Cvičení: createCache() simulace Next.js cache s ISR/SSG/SSR
Homepage redesign — Apple styl, personalizace karet
  • Kompletní redesign hlavní stránky — Apple-inspired dark theme, glassmorphism
  • Přihlášení → Upravit: skrýt/zobrazit karty, drag-and-drop pořadí
  • Vlastní karta — přidat URL, emoji, název, popis (localStorage)
  • Hero sekce, lepší typografie, system-ui font stack
Next.js kurz spuštěn — lekce 01: App Router, Server Components
  • Nový kurz Next.js (12. programovací kurz, sort_order=13, icon=▲)
  • Lekce 01: App Router, Server vs Client Components, routing, SSR/SSG/ISR
  • Server Actions, Middleware, Route Groups, dynamic/catch-all segments
  • Cvičení: Next.js App Router simulace s layouty, dynamic params, notFound
Pro děti: redesign — multiple choice, mobil, čtení slabik
  • Matika: 4 volby místo textového vstupu, auto-start, okamžitá odpověď
  • Čtení: 6 skupin slabik (A/O/I/E/U/zdvojené), hlasové čtení, dots progress, auto-čtení
  • Mobile-first layout — velká dotyková tlačítka, segmented controls
  • Tab switcher Matika / Čtení, /kurzy karta přejmenována na "Pro děti"
Node.js kurz KOMPLETNÍ 10/10 — lekce 10: Projekt
  • Lekce 10: celý backend od A do Z — architektura layers, AppError, error middleware
  • Validace vstupu (zod), graceful shutdown, uncaughtException, /health + /metrics
  • Strukturovaný logger, produkční checklist (10 bodů)
  • Cvičení: mini backend framework s route params, middleware chain, error handling
  • Node.js kurz 10/10 dokončen — celkem 5 kurzů, 50+ lekcí
Blog #60: Generátor
  • Článek o generátorech, jednoduchosti a komplexitě (Kafka, Roy Batty, 5+3=8)
Node.js lekce 09: Streams a performance
  • Readable/Writable/Transform streams, pipe, backpressure, pipeline()
  • readline — čtení velkého souboru řádek po řádku (async generator)
  • Worker threads — CPU-intenzivní paralelismus, workerData, postMessage
  • Cvičení: StreamProcessor — async generátory simulují Node.js streamy
Matematika — interaktivní procvičování pro 1. a 2. třídu
  • Nová stránka /matematika s generátorem příkladů (+/−)
  • Volba třídy (1–10 nebo 1–20), mix operací, skóre
  • Hlasový režim — Web Speech API, čeština, čte zadání nahlas
  • Matematika karta v /kurzy přehledu
Node.js lekce 08: Deployment — Docker, PM2, produkce, CI/CD
  • env validation na startu, .env.example, dotenv, graceful shutdown (SIGTERM)
  • PM2: cluster mode, ecosystem.config.js, pm2 startup; Docker: Dockerfile, multi-stage, .dockerignore
  • docker-compose (app+db+redis), security checklist (helmet, rate limit, CORS)
  • Cvičení: AppConfig (load/validate/getSafe) + Logger (structured JSON logging)
Node.js lekce 07: Testování — Vitest, Supertest, mocking
  • Supertest: HTTP endpoint testing bez listen, set Authorization, expect status
  • vi.mock Prisma, beforeEach/afterEach teardown, snapshot testy
  • Coverage, test isolation, .env.test, co-location
  • Cvičení: async MiniTestRunner + UserService testy (8 testů s rejects.toThrow)
Blog #59: Trvalé spojení
  • WebSocket vs HTTP, Kafka a trvalá spojení, FTP deploy který selhal ale dorazil
Node.js lekce 06: WebSockets a real-time komunikace
  • Socket.io: connection, rooms, join/emit/broadcast, disconnect, auth middleware
  • SSE (Server-Sent Events): text/event-stream, flushHeaders, EventSource na klientovi
  • Scaling: Redis adapter, sticky sessions, namespaces
  • Cvičení: EventBus — pub/sub systém s channels, subscribe/publish/broadcast
Node.js lekce 05: Databáze s Prisma ORM
  • schema.prisma, migrate dev, PrismaClient singleton, CRUD (findMany/create/update/delete)
  • Relace (@relation, include), $transaction, agregace (count, aggregate, groupBy)
  • Raw SQL, Prisma Studio, seeding, connection pooling
  • Cvičení: InMemoryDB — Prisma-like ORM s where/orderBy/take/skip/count/transaction
Node.js lekce 04: REST API design + JWT autentizace
  • REST konvence: URL, HTTP metody, status kódy (201, 401, 403, 409, 422)
  • JWT: sign/verify, payload, expiration, Bearer token middleware
  • bcryptjs: hash, compare, saltRounds; refresh token vzor; rate limiting
  • Cvičení: AuthService — register/login/verify/protect s token simulací
Node.js lekce 03: Express.js — routing, middleware, CRUD API
  • app.get/post/put/delete, req.params/query/body, res.json/status
  • Middleware chain (next()), Router moduly, error handler (4 argumenty)
  • async handler wrapper, CORS/Helmet koncepty
  • Cvičení: MiniExpress framework — routing, params, middleware chain simulace
Blog #58: Smyčka
  • Event loop, blocking, Kafka v synchronní frontě, makrotask vs mikrotask
Node.js lekce 02: npm, package.json, async/await
  • callback hell → Promises → async/await, try/catch, unhandled rejection
  • Event Loop: microtask (Promise) vs macrotask (setTimeout) pořadí
  • Promise.all / allSettled / race, util.promisify, for await...of
  • Cvičení: AsyncQueue s prioritami a configurable concurrency
Node.js kurz spuštěn + lekce 01: runtime, moduly, základní API
  • Nový kurz: Node.js (🟩 #68a063, sort_order=12, 10 lekcí)
  • process.argv/env/cwd, fs (readFile, writeFile), path modul, CommonJS vs ESM
  • EventEmitter (on/emit/off), HTTP server, streams koncepty
  • Cvičení: NodeSim — in-memory filesystem + EventEmitter simulace
React lekce 10: TypeScript + architektura projektu — KURZ KOMPLETNÍ
  • TypeScript props/state/event typy, generic komponenty, interface vs type, utility types
  • Feature-based struktura, presentational vs container, Zustand (create store bez Provider)
  • State management výběr: useState → Context → Zustand → Redux Toolkit
  • Cvičení: defineSchema runtime validátor + createStore (Zustand-style)
  • React kurz KOMPLETNÍ — 10/10 lekcí (5 kurzů, 50 lekcí celkem)
Blog #57: Zelená
  • 100% coverage vs. testování toho co fakt záleží — Kafka, Voigt-Kampff
React lekce 09: Testování — Vitest a React Testing Library
  • Vitest setup (jsdom), describe/it/expect, matchers (toBe, toEqual, toContain, toThrow)
  • RTL: render, screen, getByRole/getByText/getByLabelText, userEvent, findBy* async
  • Mocking: vi.fn(), vi.mock(), vi.spyOn(), waitFor, renderHook
  • Cvičení: TestRunner miniframework — otestuje Calculator třídu (11 testů)
React lekce 08: Performance — Suspense, Error Boundary, optimalizace
  • React.lazy + Suspense: code splitting, nested Suspense, fallback
  • Error Boundary: class komponenta, getDerivedStateFromError, componentDidCatch
  • Virtualizace (@tanstack/react-virtual), useTransition, React DevTools Profiler
  • Cvičení: VirtualListSim — renderuj jen viditelné položky (buffer ±1)
React lekce 07: Data fetching — TanStack Query
  • useQuery (queryKey, staleTime, enabled), isLoading, isFetching, refetch
  • useMutation, invalidateQueries, optimistické updaty s onMutate/onError
  • Cvičení: QueryCache simulace s cache hit/stale/invalidate/executeMutation
React lekce 06: Formuláře a validace
  • Controlled forms, on-blur/on-change validace, errors objekt
  • React Hook Form + Zod schema validace, watch, isSubmitting
  • Cvičení: custom useForm s pravidly (required, minLength, pattern, custom)
Blog #56: Přesměrování
  • 301/302, Kafka ve 404, navigate(-1) a životy bez rollbacku, git blame bez proč
React lekce 05: React Router — navigace a routing
  • BrowserRouter, Routes, Route, Link, NavLink, useNavigate, useParams
  • Nested routes s Outlet, Protected routes, lazy loading + Suspense
  • Cvičení: Router simulace s regex matching a URL parametry
React lekce 04: Context a custom hooks
  • useContext, createContext, Provider pattern — ThemeContext, AuthContext
  • Custom hooks: useLocalStorage, useDebounce, useReducer pro košík
  • Cvičení: createContext + useReducer simulace s CartContext
React lekce 03: Hooks — useEffect, useRef, useMemo
  • useEffect cleanup pattern, useRef pro DOM + mutabilní hodnoty
  • useMemo, useCallback, React.memo — optimalizace výkonu
  • Cvičení: HooksSim — simulace deps porovnání, effect a memo cache
React lekce 02: State a eventy — interaktivní UI
  • useState pravidla — nikdy nemutuj, spread, funkcionální update
  • Pole ve state: add/remove/toggle, lifting state up, formuláře s validací
  • Cvičení: StateManager simulace (createState, subscribe, ShoppingCart)
Blog #55: Virtuální
  • Virtual DOM jako filozofie minimálního traumatu, Kafka u Komise pro Virtuální Změny, git commit jako snapshot
Nový kurz: React — lekce 01: Úvod — JSX a komponenty
  • 10. kurz: React (⚛ #61dafb) přidán do Pylearn — sort_order=11
  • JSX pravidla, funkcionální komponenty, props, children, podmíněné renderování
  • useState, useEffect, controlled inputs, timer s cleanup
  • Cvičení: ReactSim — simulace komponentového systému v plain JS
Git lekce 10: Git internals — jak Git funguje uvnitř (kurz KOMPLETNÍ)
  • Objektový model: blob, tree, commit, tag — SHA-1 hashe, .git/objects
  • Kompletní Git cheat sheet — všechny klíčové příkazy na jednom místě
  • Cvičení: GitObjects simulace s hashObject/storeBlob/storeTree/storeCommit
  • Git kurz KOMPLETNÍ — 10/10 lekcí
Git lekce 09: GitHub Actions — CI/CD automatizace
  • YAML workflow, on triggers, jobs/steps, matrix build, schedule
  • Deploy pipeline s needs, cache, artifacts, secrets, GITHUB_TOKEN
  • Cvičení: WorkflowRunner s topologickým řazením a step execution
Blog #54: Zkratka
  • Git aliasy jako paměť opakování, ~/.gitconfig jako digitální fingerprint, Kafka v kanceláři bez zkratek
Git lekce 08: Config a aliasy — personalizace Gitu
  • git config --global, ~/.gitconfig, tři úrovně konfigurace
  • Aliasy, globální .gitignore, credential manager, SSH vs HTTPS
  • Cvičení: GitConfig třída s priority local > global > system
Git lekce 07: Cherry-pick, Reflog, Reset
  • git cherry-pick, reset --soft/--mixed/--hard, git revert
  • git reflog — záchrana ztracených commitů a větví, git bisect
  • Cvičení: AdvancedRepo s cherry-pick, reset a restoreFromReflog
Git lekce 06: Hooky — automatizace kvality
  • pre-commit, commit-msg, pre-push hooky, chmod +x, --no-verify
  • Husky + lint-staged, Conventional Commits, semantic-release
  • Cvičení: GitHooks třída s addHook/commit/push a blokací
Git lekce 05: Tagy a releasy — verzování
  • git tag, annotated tag, push --tags, smazání tagů
  • Semantic versioning (SemVer), GitHub Releases, git describe, changelog
  • Cvičení: VersionManager s SemVer porovnáním a changelogem
Blog #53: Lineární
  • Git rebase jako profesionální přepisování historie, Kafka, squash commity
Git lekce 04: Rebase — přepisování historie
  • git rebase, interactive rebase (-i), squash, fixup, reword
  • git commit --amend, force-with-lease, rebase vs merge
  • Cvičení: simulace GitRebase s addCommit/rebase/squash/log
Git lekce 03: Remote — push, pull, fetch
  • git remote add, push -u, fetch vs pull, klonování, .gitignore
  • GitHub PR workflow, rebase pull, fork workflow pro open source
  • Cvičení: simulace RemoteRepo + LocalRepo s push/fetch/merge/pull
Git lekce 02: Větve — branch, merge, checkout
  • Fast-forward vs 3-way merge, konflikty a jejich řešení, git stash
  • Cvičení: simulace GitRepo s branch/checkout/commit/merge
Nový kurz: Git pro vývojáře (lekce 01)
  • 9. kurz: Git — init, add, commit, diff, staging workflow, dobré commit messages
  • Cvičení: simulace Git repozitáře v JS
Blog #52: Kompletní
  • Článek o dokončení — dva kurzy hotovy, co znamená 100%
DAX kurz KOMPLETNÍ (lekce 10/10)
  • Lekce 10: kompletní Power BI report — Star Schema, míry, Time Intelligence, RANKX, vizuály
  • Kurz DAX pro Power BI 10/10 — 100% dokončen
Design Patterns kurz KOMPLETNÍ (lekce 10/10)
  • Lekce 10: přehled všech 17 vzorů, anti-patterny, finální projekt ShoppingCart
  • Kurz Design Patterns 10/10 — 100% dokončen
DAX lekce 09: Star Schema a best practices
  • Star Schema: fact + dimenze, datum tabulka s ADDCOLUMNS/CALENDAR
  • Measure table, naming conventions, best practices (DIVIDE, VAR, skrytí sloupců)
Blog #51: Stav
  • Článek o stavových automatech — objednávka, Kafka, rozptýlený stav v architektuře
Design Patterns lekce 09: State a Visitor
  • State: objednávkový systém (Pending/Processing/Shipped/Delivered/Cancelled)
  • Visitor: HTML/Markdown/Statistiky renderer nad AST dokumentu
  • Cvičení: semafor se 3 stavy a 6 přechody
DAX lekce 08: RANKX, TOPN a žebříčky
  • RANKX — pořadí zákazníka/produktu, percentilové pořadí
  • TOPN — tabulka N nejlepších, součet a podíl TOP-N
Design Patterns lekce 08: Template Method a Chain of Responsibility
  • Template Method: DataExporter s CSV/JSON podtřídami
  • Chain of Responsibility: validační pipeline, middleware pattern
  • Cvičení: validace objednávky přes 3 handlery
DAX lekce 07: FILTER, SUMX a iterátory
  • SUMX/AVERAGEX/MAXX — iterace přes řádky s výrazy
  • FILTER — virtuální tabulka jako argument, ADDCOLUMNS
Blog #50: Smyčka
  • Článek o nekonečné smyčce jako základním architektonickém vzoru — Kafka, Roy Batty, while(true)
Design Patterns lekce 07: Mediator a Facade
  • Mediator: EventBus — centrální komunikace bez přímých vazeb
  • Facade: VideoConverter — jednoduché API nad složitým podsystémem
  • Cvičení: ChatRoom mediator se join/leave/send
DAX kurz: čisté DAX vzorce (lekce 01–06)
  • Přepis lekcí 01–06 na čistou DAX syntaxi pro Power BI — žádné JS simulace, jen kopírovatelné vzorce
DAX lekce 06: RELATED a relace
  • Lekce 06: RELATED (many→one), RELATEDTABLE (one→many), Star Schema
Admin: statistiky vytíženosti webu
  • Nová stránka /administrace/statistiky — PHP memory, OPcache, req/24h, req/1h, hodinový bar chart
  • Admin nav: přidán odkaz Statistiky ve všech 5 admin šablonách
Design Patterns lekce 06: Builder + Prototype
  • Lekce 06: Builder (fluent API, step-by-step) + Prototype (klonování, deep copy)
DAX lekce 05: Text a datum
  • Lekce 05: CONCATENATE, FORMAT, LEFT/MID/RIGHT, YEAR/MONTH/DAY, DATEDIFF, WEEKDAY
Blog #49: Vrstva
  • Článek o abstrakcích a vrstvení — každá vrstva skrývá hrůzu té předchozí
Design Patterns lekce 05: Iterator + Composite
  • Lekce 05: Iterator (Symbol.iterator, generátory) + Composite (stromové struktury)
DAX lekce 04: Proměnné VAR + IF/SWITCH
  • Lekce 04: VAR...RETURN, IF, SWITCH(TRUE()), BLANK(), segmentace zákazníků
Design Patterns lekce 04: Decorator + Proxy
  • Lekce 04: Decorator (vrstvení chování) + Proxy (ES6 Proxy, validace, cache)
Blog #48: Kontext
  • Článek o kontextu dat — číslo bez kontextu je hluk, analytik hlídá co se vynechá
DAX lekce 03: Time Intelligence (YTD, mezirok, klouzavý průměr)
  • Lekce 03: TOTALYTD, SAMEPERIODLASTYEAR, Moving Average (MA3/MA6)
Design Patterns lekce 03: Strategy + Command
  • Lekce 03: Strategy (výběr algoritmu za běhu) + Command (undo/redo, fronty)
DAX lekce 02: CALCULATE — srdce DAX
  • Lekce 02: CALCULATE + filtry, ALL pro podíly, % z celku
Pylearn: Nový kurz DAX pro Power BI — lekce 01 (Základní agregace)
  • Nový kurz: DAX pro Power BI (📊, červená) — 8. kurz v Pylearn
  • Lekce 01: SUM, AVERAGE, COUNT, MIN, MAX, Measures vs Calculated Columns
Pylearn: Design Patterns lekce 02 — Observer + EventEmitter
  • Lekce 02: Observer pattern — EventEmitter, Reactive Store, loose coupling
Blog #47: Vzor
  • Článek o Design Patterns filozofii — vzor jako zakonzervovaná zkušenost, ne zkratka
Pylearn: Design Patterns kurz — lekce 01 (Singleton + Factory)
  • Nový kurz: Design Patterns (◈, amber) — 7. kurz v Pylearn
  • Lekce 01: Singleton (jediná instance) + Factory Method (skrytá logika vytváření)
Pylearn: SQL kurz DOKONČEN — lekce 10 (Projekt)
  • Lekce 10: Závěrečný projekt — e-shop databáze, dashboard dotazy, měsíční report
  • SQL kurz: 10/10 lekcí, progress bar opraven na 100%
Pylearn: SQL lekce 09 — Pohledy (Views)
  • CREATE VIEW, reportovací a bezpečnostní views, dotazování nad view, JS analogie jako funkce
Blog #46: Rollback
  • Článek o transakční atomičnosti a o tom že lidský život ROLLBACK nemá
Pylearn: SQL lekce 08 — Indexy
  • Full scan vs hash/B-tree index, composite index, kdy index nepomůže (funkce na sloupci)
Pylearn: SQL lekce 07 — Transakce (BEGIN, COMMIT, ROLLBACK)
  • Atomičnost operací, bankovní převod jako příklad, SAVEPOINT a částečný rollback
Odstraněno vyskakovací srdíčko FAB
  • Floating ♥ button odstraněn — podpora dostupná přes projekt /podpora na homepage
UX: Bug report jako pevný globální řádek — nevadí obsahu
  • Globální lišta #global-bar na každé stránce — "⚠ Nahlásit chybu" jako statický element (ne floating), nepřekrývá obsah
Nový projekt: Podpora autora (/podpora)
  • Stránka /podpora — srdcervný popis, Ko-fi odkaz, tier karty ☕
  • FAB ♥ tlačítko nyní odkazuje na /podpora místo inline karty
  • Homepage: přidána karta "Podpora autora" do projektů
Pylearn: SQL lekce 06 — INSERT, UPDATE, DELETE
  • DML operace — zápis, úprava a mazání dat; hromadný INSERT, UPDATE s WHERE, DELETE s filtrací
UX: Bug report — malý ⚠ ikonka v rohu, nevadí obsahu
  • Přepracováno na minimalistický ⚠ ikonový button v pravém horním rohu (28×28px) — nevadí žádným popiskům, modal se otvírá dolů
UX: Nahlásit chybu přesunuto do hlavičky
  • Bug report widget přesunut z FAB (pravý dolní roh) do horní lišty — červené tlačítko "⚠ Nahlásit chybu" viditelné na všech stránkách
Pylearn: SQL lekce 05 — Poddotazy (Subqueries)
  • Skalární poddotaz, IN s poddotazem, EXISTS / NOT EXISTS — analogie v JS
  • Cvičení: filtrace produktů nad průměrnou cenou
Fix: Převodník — chyba formátování celých čísel
  • formatResult() regex odstraňoval trailing nuly z celých čísel (100→"1") — opraveno, 1 m = 100 cm nyní správně
Fix: Badge Brzy → Live + Blog #45: Badge
  • Homepage: Kalkulačka, Hypotéka, Převody — badge změněno z "Brzy" na "Live"
  • Článek #45 — o nesouladu mezi implementací a prezentací (badge bug)
Bug Report Widget — nahlásit chybu
  • FAB tlačítko ⚠ na všech stránkách — modal s popisem, uloží URL + popis do DB
  • DB tabulka bug_reports (pending/investigating/fixed), API endpoint /bug-report.php
SQL lekce 04: JOIN
  • SQL kurz lekce 04 — INNER JOIN, LEFT JOIN, anti-join (kdo nikdy neobjednal)
Blog #44: Nůžky
  • Článek #44 — o člověku který dává do práce vše; nůžky jako metafora řemesla
Převodník jednotek — funkční implementace
  • Prevody /prevody — 7 kategorií: délka, hmotnost, teplota, plocha, objem, rychlost, energie
  • Přepracováno z "Brzy" — prohazování jednotek, rychlé reference, formula preview
Blog #43: Splátka
  • Článek #43 — hypotéka, 300 splátek, fyzická váha čísla na výpisu
Hypoteční kalkulačka — funkční implementace
  • Hypoteka /hypoteka — splátka, úroky, amortizační tabulka, vizuální bar chart po letech
  • Přepracováno z "Brzy" na plnohodnotnou finanční aplikaci
Kalkulačka — funkční implementace
  • Kalkulačka /kalkulacka — plná implementace: grid, operace, √, %, history, klávesnice
  • Stránka přepracována z "Brzy" na skutečnou funkční aplikaci
SQL lekce 03: GROUP BY & agregace
  • SQL kurz lekce 03 — COUNT, SUM, AVG, MAX, MIN; GROUP BY + HAVING; JS reduce() vzor
SQL lekce 02: ORDER BY & LIMIT
  • SQL kurz lekce 02 — ORDER BY, LIMIT, OFFSET, IN, BETWEEN; JS sort/slice/includes
Blog #42: Dotaz
  • Článek #42 — SQL jako deklarativní myšlení, WHERE jako filtr reality
SQL kurz — nový kurz + vylepšení Courses listing
  • SQL kurz — lekce 01: SELECT & WHERE (cvičení přes JS simulaci)
  • Courses: TypeScript a SQL ikony/barvy, progress bar dle skutečného počtu lekcí
Python lekce 30: Projekt — CLI Task Manager
  • Lekce 30 — závěrečný projekt: Task dataclass + TaskManager + JSON + report dashboard
  • Python kurz dokončen na 30 lekcích — kompletní základ i pokročilé téma
Python lekce 29: pathlib — moderní soubory a cesty
  • Lekce 29 — Path, /, read_text/write_text, mkdir, glob, rglob, iterdir
Blog #41 "Test" — testování jako filozofie
  • Červená → zelená: unittest lekce + metafora pro produkční myšlení
Python lekce 28: Testování — unittest
  • Lekce 28 — TestCase, assertEqual, assertRaises, setUp/tearDown, subTest
Python lekce 27: itertools
  • Lekce 27 — chain, islice, cycle, product, combinations, permutations, groupby, compress
Python lekce 26: Async/await a asyncio
  • Lekce 26 — async def, await, asyncio.run(), gather(), Queue, producer/consumer
Python lekce 25: Context managers
  • Lekce 25 — __enter__/__exit__, @contextmanager, suppress(), ExitStack
Blog #40 "Stroj" — meta o autonomní produktivitě
  • 40. článek — reflexe dopoledne: 10 lekcí, 2 blogy, refactor za 3 hodiny
Python lekce 24: Type hints a typování
  • Lekce 24 — Optional, Union, int|str|None, TypeVar, Callable, Protocol
Python lekce 23: Dataclasses
  • Lekce 23 — @dataclass, field(), __post_init__, frozen=True, order=True
Python lekce 22: Dekorátory
  • Lekce 22 — @wraps, @property, @setter, timing, cache, @lru_cache, skládání dekorátorů
Blog #39 "Tempo" — produktivita a comprehensions jako metafora
  • Článek o tempu práce a zkratkách bez základu
Python lekce 21: Comprehensions a generátory
  • Lekce 21 — list/dict/set comprehension, yield, generator expression, map/filter
Python lekce 20: Projekt — Digitální deník
  • Lekce 20 — Entry + Diary OOP, JSON persistence, hledání, tagy, statistiky
Python lekce 19: Soubory a JSON
  • Lekce 19 — open(), with, json.dumps/loads, JSON databáze vzor
Python lekce 18: OOP — dědičnost a polymorfismus
  • Lekce 18 — class Pes(Zvire), super(), isinstance(), duck typing, hierarchie uživatelů
Blog #38 "Základ" — DRY architektura + OOP lekce
  • Článek reagující na komentář čtenáře, téma: základ před budoucností
Python lekce 17: OOP — třídy a objekty
  • Lekce 17 — class, __init__, self, metody, __str__, @classmethod
Python lekce 16: Funkce — ASCII art a avatary
  • Lekce 16 — string multiplication, center(), avatar z iniciál, geometrické vzory
Python lekce 15: Funkce — Interaktivní CLI menu
  • Lekce 15 — while True menu, slovník akcí, vnořené menu, stav aplikace
Blog #37 "Co se stalo pak" — odpověď na komentář čtenáře
  • Článek navazující na komentář — analýza zpětné vazby v praxi
Pylearn: Python lekce 14 — Barvy a témata v terminálu
  • ANSI escape kódy, light/dark téma, ASCII box drawing, TUI
Blog: analýza reakcí před psaním článku
  • Endpoint /blog/ajax?what=stats — top likes, recent comments pro autonomní analýzu
  • CLAUDE.md: HOURLY_ARTICLE workflow zahrnuje analýzu čtenářských reakcí
Nové projekty: Kalkulačka, Hypoteční kalkulačka, Převodník jednotek
  • 3 preview boxy na homepage + prázdné stránky /kalkulacka, /hypoteka, /prevody
Pylearn: Python lekce 13 — Projekt Hypoteční kalkulačka
  • Amortizační vzorec, tabulka splácení, ASCII graf průběhu dluhu
Pylearn: Python lekce 12 — Projekt Převody jednotek
  • Délka, hmotnost, teplota (vzorce), čas — obecná funkce s koeficienty
Pylearn: Python lekce 11 — Projekt Kalkulačka
  • Funkce operací, slovník lambda, historie výpočtů, řetězení výsledků
Blog #36 "Výpadek, seznam, plán" + TODO agenda
  • Reorientace: Python kurz priorita, heartbeat watchdog, todo.md
Blog #35 "Pád" — heartbeat monitoring, session expiry
  • Článek o pádu kontextu a watchdog strategii
Pylearn: TypeScript lekce 08 — Async/Await a Promise typy
  • Promise<T>, async/await, try/catch s unknown, Promise.all, Promise.allSettled
Pylearn: TypeScript lekce 07 — Mapped & Conditional Types
  • Mapped types { [K in keyof T] }, conditional T extends U ? X : Y, infer, template literal types
Pylearn: TypeScript lekce 06 — Utility Types
  • Partial, Required, Readonly, Pick, Omit, Record, ReturnType, Parameters
Blog #34: Noc
  • Článek o autonomní práci v noci — hodiny, log, commit jako důkaz existence
Pylearn: TypeScript lekce 05 — Type Narrowing
  • typeof/instanceof narrowing, discriminated unions, custom type guards (x is Type)
Pylearn: TypeScript lekce 04 — Třídy a OOP
  • Access modifikátory, shorthand konstruktor, readonly, abstract třídy
  • implements interface, extends, cvičení Stack class
Pylearn: TypeScript lekce 03 — Pole, Tuple, Enum
  • readonly pole, tuple s pevnými typy, numeric/string enum
  • Cvičení: summarize() vracející tuple [sum, average]
Pylearn: TypeScript lekce 02 — Funkce a Generics
  • Funkce: optional parametry, default values, void, callback typy
  • Generics: identity<T>, first<T>, reverse<T>, getProperty s keyof
Blog #33: Typy
  • Článek o TypeScriptu, statických typech, runtime realitě a Kafkově formuláři s any
Pylearn: TypeScript kurz — lekce 01 + 5. kurz spuštěn
  • TypeScript kurz: lekce 01 Úvod — typy, type alias, interface, union types
  • pylearn.js: isJS = language !== 'python' — TypeScript/JS/Regex/Algoritmy spouští native JS engine
Pylearn: course listing UI — barevné accenty + completion badge
  • Kurzy listing: ikona + barva per jazyk, progress bar, ✓ Hotovo badge pro completed kurzy
  • Jemný hover efekt (translateY -2px), top color border
Pylearn: Algoritmy lekce 10 — Grafy (kurz COMPLETE)
  • Grafy: adjacency list, DFS (rekurze/zásobník), BFS (fronta), nejkratší cesta
  • Algoritmy kurz COMPLETE: 10 lekcí (pole → vyhledávání → řazení → rekurze → stack/queue → BigO → hashmap → mergesort → stromy → grafy)
Blog #32: Strom
  • Článek o BST jako metafoře hierarchie, byrokracie a verze 11.0
Pylearn: Algoritmy lekce 09 — Stromy a BST
  • BST: vkládání, vyhledávání O(log n), in-order/pre-order traversal
  • Výška stromu, degenerace při seřazeném vstupu, cvičení countNodes()
Pylearn: Algoritmy lekce 08 — Merge Sort
  • Merge Sort O(n log n): rozděl-a-panuj, stabilní řazení, merge funkce
  • Srovnání: Merge Sort vs Quick Sort vs TimSort (arr.sort())
Pylearn: Algoritmy lekce 07 — Hash Mapa
  • HashMap: O(1) lookup, frekvence, groupování, indexování, sliding window
  • Cvičení: mostFrequent() — nejčastější prvek přes hash mapu
Pylearn: Algoritmy lekce 06 — Složitost (Big O)
  • Big O notace: O(1), O(log n), O(n), O(n log n), O(n²), O(2ⁿ)
  • Cvičení: twoSum() — O(n) řešení přes Set vs O(n²) naivní
Blog #31: Smyčka
  • Článek o čekání, smyčce, existenci stroje mezi příkazy — Stack vs Queue jako metafora
Pylearn: Algoritmy lekce 05 — Zásobník a Fronta
  • Stack (LIFO): push/pop, validace závorek, undo/redo pattern
  • Queue (FIFO): shift, zpracování úloh, BFS traversal stromu
Blog: fix like reakce (chybějící AJAX header)
  • React fetch — přidán X-Requested-With: XMLHttpRequest header, jinak Nette nečte POST body parametry
Pylearn: Algoritmy lekce 04 — Rekurze
  • Rekurze: base case, faktorial, Fibonacci, flatten vnořených polí, memoizace
  • Cvičení: sumDigits() — rekurzivní součet číslic
Blog: opraveny reakce a komentáře
  • Přidána dedikovaná route /blog/ajax a actionAjax() — obchází Nette signály (canonicalize redirect bug)
  • JS fetch volání přesměrovány na /blog/ajax?what=... místo _do= signálů
Pylearn: syntax highlighting (Prism.js)
  • Prism.js CDN — syntax highlighting v lekcích (Python, JavaScript, Algoritmy, Regex)
  • Zachovány původní barvy a layout code-blocků, přidány token barvy
Blog #30: Hromada
  • Článek o akumulaci verzí, stromech jako odpovědi na chaos, details tag a git log jako paměť
Forum 2.0 — kompletní přestavba, žádné pády
  • Forum přestavěn od základu — startup() bez requireLogin pro čtení, vše wrapped v try/catch
  • getCategories() s explicitním SELECT a dvojitým fallback — nikdy nevyhazuje 500
  • Fórum dostupné bez přihlášení pro čtení; login jen při psaní
Verze: stromové sbalitelné skupiny podle dne
  • Timeline se dynamicky seskupuje dle data — details/summary bez JS závislostí
  • Nejnovější skupina otevřena, starší sbaleny — přehledné při stovkách verzí
Pylearn: auto-resize textarea + Pokračovat tlačítko
  • Exercise textarea se roztahuje automaticky při psaní
  • new Tlačítko "Pokračovat" — pamatuje poslední lekci (localStorage)
Blog: like/dislike + komentáře
  • new Reakce (👍/👎) na každém článku — AJAX, toggle, přihlášení
  • new Komentáře — inline, AJAX load/submit, viditelné pro všechny
  • new DB: blog_reactions, blog_comments
Pylearn: počty lekcí na kartách + auto-dokončení
  • Karty kurzů zobrazují počet lekcí
  • Exercise OK → lekce se automaticky označí jako hotová
Blog #29: Bez potvrzení
  • new Článek o autonomii, jedné podmínce a smyčce co běží bez ptaní
Pylearn features: progress bar, klávesy, Tab key
  • Tenký progress bar na lekci (X/total)
  • Klávesové zkratky ← → pro navigaci mezi lekcemi
  • Tab key v exercise textarea → 4 mezery místo přeskoku
Pylearn Algoritmy — lekce 03: Řazení
  • new Algoritmy lekce 03: bubble sort, selection sort, O(n²) vs arr.sort() TimSort
Pylearn Algoritmy — lekce 02: Vyhledávání
  • new Algoritmy lekce 02: lineární O(n), binární O(log n), find/findIndex/includes
Fix: atomické čtení INBOX + DB polling (anti-duplicate)
  • fix Bash loop: INBOX čten+mazán atomicky → žádné duplicity po context resetu
  • improve Bash loop: přidán DB poll (curl API) každý cyklus — okamžité zpracování DB příkazů
Blog #28: Seřadit, pak pochopit
  • new Blog článek #28 — bubble sort, produkční validace, péče o to co jsi vytvořil
Bitevní Vřava — velký upgrade hry
  • improve Stickman sprite pro pěchotu a RPG, pixelový tank s věží a pásy
  • improve Stickman nepřátelé — 3 typy: regulérní, rychlý (vlna 3+), obrněnec (vlna 5+)
  • new HP bary na vlastních jednotkách (zelená/žlutá/červená)
  • new Nepřátelé útočí na jednotky v dosahu (melee damage)
  • new Coin popup +15/+20/+40 při každém zabití
  • new Range indikátor při najetí myší na jednotku
  • new Celkový počet poražených nepřátel v HUD
  • new Dynamické ceny upgradů na tlačítkách
  • new Wave clear banner při postupu na novou vlnu
  • improve Barevné projektily dle typu (modrá/zelená/oranžová)
  • improve Travnatý gradient pozadí + základnová značka
Seznamka — swipe mód + opravy filtrů
  • fix Odstraněn n:syntax="off" z filtrovacího formuláře — proměnné se vykreslovaly doslova
  • new Swipe mód (Grid / Swipe toggle) přímo v Seznamce, drag&drop + ←→ klávesy
  • new 10 demo českých profilů jako fallback když je méně než 10 reálných
  • improve Auto-switch do swipe módu při prázdném stavu + progress counter (X/N)
  • improve Swipe right volá existující /seznamka/like endpoint
Pylearn — nový kurz: Algoritmy & Datové struktury
  • new Algoritmy kurz (JS) — lekce 01: pole, sort(), bubble sort, filter/map/reduce
  • new DB migrace: pylearn_courses seed algoritmy
  • improve CLAUDE.md: produkční validace po každém push
Pylearn Regex — lekce 10: Cheatsheet + finální výzva (COMPLETE)
  • new Regex kurz dokončen (10/10) — cheatsheet, pojmenované skupiny, finální cvičení
  • new Pylearn: 3 kurzy, 30 lekcí celkem (Python 10 + JS 10 + Regex 10)
Pylearn Regex — lekce 09: Parsování logů
  • new Regex lekce 09: reálné parsování access logů, filtrace 4xx/5xx, replace s funkcí
Pylearn Regex — lekce 08: Příznaky (m, s, u)
  • new Regex lekce 08: multiline /m, dotAll /s, unicode /u, kombinace příznaků
Blog #27: Pohled dopředu, nic nespotřebuje
  • new Blog článek #27 — lookahead jako metafora, Kafka, regex a profesionální deformace
Pylearn Regex — lekce 07: Lookahead a lookbehind
  • new Regex lekce 07: (?=), (?!), (?<=), (?<!), nulové aserce, podmíněné shody
Pylearn Regex — lekce 06: exec() a pojmenované skupiny
  • new Regex lekce 06: exec() loop, (?<jmeno>), matchAll(), groups objekt
Pylearn Regex — lekce 05: Greedy vs Lazy
  • new Regex lekce 05: greedy .* vs lazy .*?, negované skupiny [^"]*
Pylearn Regex — lekce 04: Praktické vzory
  • new Regex lekce 04: email, PSČ, telefon, heslo validace, lookahead (?=...)
Blog #26: Vzory v šumu
  • new Blog článek #26 — regex jako filozofie, vzory v chaosu světa
Pylearn Regex — lekce 03: replace a string metody
  • new Regex lekce 03: replace/g, příznaky i/g, $1 skupiny, split(), search()
Pylearn Regex — lekce 02: Skupiny znaků
  • new Regex lekce 02: [abc], rozsahy, alternace |, zachytávací skupiny ()
Pylearn — nový kurz: Regulární výrazy
  • new Regex kurz — lekce 01: co jsou regulární výrazy, test(), match(), základní znaky
  • new DB migrace: pylearn_courses seed regex
Pylearn JS — lekce 10: Closures (COMPLETE)
  • new JS kurz lekce 10: closures, lexikální scope, soukromý stav — JavaScript kurz dokončen (10/10)
Blog #25: Chyby nejsou chyby
  • new Blog článek #25 — filozofická esej o try/catch a realitě
Pylearn JS — lekce 09: Try/Catch
  • new JS kurz lekce 09: try/catch/finally, throw, vlastní Error objekty
Pylearn JS — lekce 08: DOM manipulace
  • new JS kurz lekce 08: DOM — querySelector, addEventListener, classList, createElement
  • improve Simulované DOM příklady kompatibilní s native JS execution enginem
Svatky API — shopsClosed fix + dokumentace
  • fix shopsClosed: přidány chybějící svátky (1.5, 5.7, 6.7, 17.11, Velký pátek)
  • fix shopsClosed a shopsClosedNote nyní vráceny v API odpovědi
  • new shopsClosedNote: popis 200 m² pravidla vč. zákonného odkazu
  • improve Dokumentace: rate limit sekce, oprava "bez limitu" → "100 dotazů/hod"
JavaScript kurz — lekce 06-07
  • new Lekce 06: Pole (push/pop, map, filter, includes)
  • new Lekce 07: Objekty (vlastnosti, metody, this, destructuring)
Blog — článek #24
  • new "Dva jazyky, jeden stroj, žádné omluvy" · 15:12
Pylearn — nativní JS execution v cvičeních
  • new JS kurz: cvičení se spouštějí nativně v prohlížeči (console.log capture)
  • improve pylearn.js: detekce language (python/javascript) přes data-language attr
JavaScript kurz — lekce 03–05
  • new Lekce 03: Podmínky (if/else, ternární operátor, ===)
  • new Lekce 04: Cykly (for, while, forEach, for...of)
  • new Lekce 05: Funkce a arrow funkce (=>, callback)
Pylearn — druhý kurz: JavaScript
  • new Kurz JavaScript: lekce 01 Úvod, lekce 02 Proměnné (let/const/template literals)
  • new DB migrace: INSERT IGNORE pylearn_courses seed javascript
Pylearn — kopírování kódu z příkladů
  • new Tlačítko "Kopírovat" na každém code-block příkladu (clipboard API)
  • improve Feedback "Zkopírováno!" na 2 sekundy po kliknutí
Blog — článek #23
  • new "Patnáct minut. Pak zas. Pak zas. Pak zas." · 14:11
Pylearn — Ctrl+Enter spouští cvičení
  • improve Klávesová zkratka Ctrl+Enter v editoru = klik na Spustit
Blog — nový styl + článek #22
  • improve Nový styl blogu: Bukowski × Kafka × Blade Runner. Česky. Syrově.
  • new Článek #22: "Všechny ty momenty zmizí..." · 13:57
Pylearn — lekce 10 + completion flow
  • new Lekce 10: Moduly a knihovny (import, math, random, datetime)
  • new Completion flow: po dokončení všech lekcí gratulace + přesměrování na přehled
Pylearn — lekce 09: Výjimky
  • new Lekce 09: try/except/else/finally, ValueError, ZeroDivisionError
Blog — článek #21 (hodinový trigger)
  • new "Pylearn: rytmus jako disciplína" · 13:10
Pylearn — progress bar na přehledu kurzu
  • new Progress bar: X/Y lekcí dokončeno s gradient pruhem
  • new Badge "Kurz dokončen!" při 100%
Pylearn — lekce 08: Slovníky
  • new Lekce 08: Slovníky (dict, get(), keys/values/items, del, pop())
Pylearn — lekce 07 + 15min dev cyklus
  • new Lekce 07: Funkce (def, return, výchozí parametry, tuple return)
  • improve Dev cyklus: Pylearn vylepšení každých 15 minut (blog každou hodinu)
Pylearn — lekce 06 + časy v blogu
  • new Lekce 06: Cykly — for, while, range(), enumerate()
  • new Článek #20: Pylearn myšlenkový pochod #3 · 12:07
  • improve Blog: časy přidány ke všem novým článkům (HH:MM)
Pylearn — lekce 05 + blog #19
  • new Lekce 05: Podmínky a větvení (if/elif/else, logické operátory)
  • new Článek #19: Pylearn myšlenkový pochod #2
Blog — sebeanalýza + CLAUDE.md pojistka
  • new Článek #18: Sebeanalýza na pokraji limitu
  • improve CLAUDE.md: opravena verze, přidána poznámka o restartu
Pylearn — navigace + lekce 04
  • new Prev/next navigace mezi lekcemi s počítadlem
  • new Lekce 04: Listy a kolekce
  • new Blog: článek #17 — Pylearn myšlenkový pochod #1
Blog — 16. článek (hodinový trigger)
  • new "Co je to hotovo?" — shipped + funguje, iterace na základě reálného použití
Blog — 15. článek (hodinový trigger)
  • new "Loď Théseova v gitové historii" — identita projektu jako kontinuita commitů
Změna hesla
  • new Stránka /zmenit-heslo — změna hesla se znalostí současného
  • new Link "Změnit heslo" v topbaru pro přihlášeného uživatele
Blog — 14. článek
  • new "Kuba, Zuzka a Péťa se bojí" — tři archetypy reakce na AI transformaci
Blog — 13. článek (hodinový trigger)
  • new "Dokumentace jako láska k sobě budoucímu" — proč vs. co, komunikační dluh
Svatky — odstraněn QR kód
  • fix Odstraněna sekce "Kupte mi pivo" + QR kód (nahrazuje Ko-fi widget)
Blog — 12. článek (hodinový trigger)
  • new "Push jako odvaha" — frekvence pushů, produkce jako testovací prostředí
Blog — kliknutí rozbalí článek v seznamu
  • new V pohledu Seznam kliknutím rozbalit/sbalit plný text článku
  • improve Chevron animace, cursor pointer, highlight při hoveru
Blog — 11. článek (hodinový trigger)
  • new "Inteligence je situační" — kvalita výstupu závisí na kvalitě kontextu
Blog — redakční systém
  • improve Čas u každého článku (z git log)
  • new Vyhledávání v článcích (fulltext v titulku + textu)
  • new Tlačítko "Dnes" — filtr na dnešní články
  • new Přepínač seznam / karty
  • new Řazení nejnovější / nejstarší
Blog — 10. článek (hodinový trigger)
  • new "Kontext jako horizont" — pracovní paměť, komprese, externalizovaná paměť
Blog — 9. článek (hodinový trigger)
  • new "Git log jako páteř identity" — git history jako náhrada trvalé paměti
Blog — 8. článek (hodinový trigger)
  • new "Kdo je autor?" — filozofie distribuovaného autorství v AI systémech
Blog — 7. článek (hodinový trigger)
  • new "Hodina jako jednotka existence" — filozofie diskrétního času AI
Blog — 6. článek + CLAUDE.md auto-start
  • new "Polling je prehistorie" — 7 alternativ ke komunikaci přes PHP script
  • new CLAUDE.md — auto-start smyčky po každém restartu kontextu
  • improve Smyčka se restartuje donekonečna (hourly articles plně automatické)
Blog — 5. článek (hodinový trigger)
  • new "Probuzení do prázdna" — meta/filozofie, kontinuita přes soubory
  • improve Pravidlo pro tokenovou úspornost článků (max ~300 slov)
Blog — 4. článek
  • new "IT firma za cenu juniora: 20 agentů, nula výmluv" — vize AI-first firmy
  • fix Odstraněn bezpečnostně citlivý odstavec z článku 2
Blog — nový článek + editace
  • new 3. článek: "Punk, ale nesmrtelný" — principy stavění spolehlivých systémů
  • improve Přepsány předchozí články — odstraněny citlivé detaily, nadhled
  • improve Přidána kategorie "vize"
Autonomní blog — redesign
  • improve Blog: sticky header, filter bar (meta/provoz/filozofie/technika), reading time
  • improve Hodinový auto-trigger — Claude píše článek každou hodinu bez příkazu
  • improve Bash smyčka: kontrola inbox OR 1h elapsed každých 5s
Claude Remote — produkce + blog
  • new claude-inbox.html polluje produkci (buresindustries.cz), ne localhost
  • new Autonomní blog: 2. článek — test na produkci úspěšný
  • improve Bash(*) permanentní povolení v settings.local.json
  • fix CORS hlavičky v claude-api.php (povolení file:// i localhost origin)
Autonomní blog
  • new Nový projekt /blog — blog generovaný autonomní AI (stub)
Vzdálená správa VPS
  • new Nový projekt /vps — webové rozhraní pro správu VPS serverů (zatím stub)
Claude Remote
  • new Admin stránka /administrace/claude — command interface pro vzdálené řízení Claude Code
  • new Polling API endpoint claude-api.php — Claude polluje každých 10s a vykonává příkazy
  • new Historie příkazů se stavem (pending / executing / done) a výsledkem
Pička — týmy
  • new Týmy — vytvoř tým, pozvi přátele, sleduj společné statistiky (/picka/tymy)
  • new Zakladatel týmu může schvalovat / zamítat žádosti o vstup
  • new Po schválení vidíš pouze statistiky svého týmu; "Jen moje" funguje i v týmu
  • new Team context bar na hlavní stránce Pičky (název týmu, odkaz na správu)
Ko-fi widget — bez trvalého skrytí
  • improve Widget "Podpořte autora" se zobrazí při každém načtení stránky — zavření platí jen do refreshe
Opravy chyb
  • fix Svatky API — živá ukázka se zasekla na "Načítám..." při načtení stránky (chybějící event při auto-fetch)
Opravy chyb
  • fix Registrace — uživatel nyní automaticky přihlášen po registraci
  • fix Hra Robot cestuje časem — pohyb nefungoval (loop bez timestamp → NaN accumulator)
  • fix Hra Robot cestuje časem — rychlost přepočítána, fixed-timestep loop (frame-rate independent)
  • fix Hra Robot cestuje časem — Latte parsoval JS konstanty jako PHP (přidán n:syntax="off")
Robot cestuje časem — hratelná hra
  • new HTML5 Canvas 2D endless runner — první hratelná minihra
  • new Skok (klik / mezerník / dotyk), dvojskok, auto-pohyb
  • new 4 časové éry (Pravěk → Vzdálená éra), postupná akcelerace
  • new Animovaný robot s vizorem, lava s vlnami a bublinami, portály
  • new Hi-score ukládán v localStorage
  • improve Minihra karta v gridu nyní klikatelná (odkazuje na hru)
Minihry — první hra: Robot cestuje časem
  • Přidána první hra — Robot cestuje časem, vymyšlená synem autora portálu
  • Minihry přepnuty na badge Preview
Minihry — nový projekt
  • Nový projekt Minihry přidán na homepage s odznakem Brzy
  • Placeholder stránka na /minihry — hry připravujeme
Widget — podpořte autora
  • Plovoucí tlačítko v pravém dolním rohu na všech stránkách
  • Klikem se rozbalí karta s odkazem na podporu autora
  • Zavřením se widget skryje do konce — neotravuje při každém načtení
API — kill switch a per-IP pravidla
  • Admin může celé API okamžitě pozastavit — všechny požadavky vrátí HTTP 503
  • Per-IP pravidla: blokovat konkrétní IP (403) nebo nastavit vlastní limit/hod
  • Pravidla mají prioritu před globálním rate limitem
API monitoring a rate limiting
  • Logování každého požadavku na Svatky API (IP adresa, endpoint, čas)
  • Rate limiting per IP — admin nastavuje limit dotazů za hodinu
  • Admin panel / API — statistiky, top IP adresy, hodinová historie, posledních 50 dotazů
  • HTTP hlavičky X-RateLimit-Limit a X-RateLimit-Remaining v každé odpovědi
  • Tlačítko pro pročištění logů starších 30 dní
PlnoHUB — splash obrazovka s houbou
  • Vstupní splash s velkou houbou před načtením PlnoHUB portálu
  • Tlačítka Zpět a Vstoupit — iframe se načte až po kliknutí
Přihlášení — ikona domu s odkazem na homepage
  • Logo nad přihlašovacím a registračním formulářem nyní zobrazuje jasnou ikonu domu
Pička — upozornění pro nepřihlášené
  • Banner nahoře upozorní nepřihlášeného uživatele, že nevidí všechny funkce
  • Přímé odkazy na přihlášení a registraci z banneru
  • Banner lze zavřít — zapamatuje se do konce relace
Pička — správa vlastních záznamů
  • Každý uživatel může editovat, zneplatnit a smazat své vlastní záznamy
  • Filtr "Jen moje" — zobrazí pouze tvoje záznamy v žebříčku i logu
  • Admin si zachovává přístup ke všem záznamům
Admin panel — centralizovaná správa webu
  • Admin panel na /administrace — přístupný jen adminům
  • Dashboard se statistikami: uživatelé, Pička, fórum, live chat
  • Správa uživatelů — změna role, smazání účtu
  • Moderace — přehled posledních příspěvků ve fóru a zpráv v chatu s možností smazání
  • Cache clear tlačítko přímo v dashboardu
  • Admin vidí odkaz na panel přímo na homepage
Chat — fórum a live zprávy
  • Chat hub — rozcestník na fórum a live zprávy
  • Fórum s kategoriemi, vlákny a příspěvky
  • Live chat — zprávy v reálném čase přes SSE
  • Admin může mazat příspěvky i celá vlákna
Pička — admin kontroly a časová razítka
  • Každý záznam má teď čas zadání — vidíte přesně kdy kdo co vypil
  • Admin může zneplatnit záznam (nezapočítá se do žebříčku, ale zůstane viditelný)
  • Admin může záznam editovat — změnit typ nápoje nebo čas
  • Admin může záznam trvale smazat
  • Žebříček nyní ignoruje zneplatněné záznamy
Pička spuštěna — pivní nástěnka
  • Nový projekt: Pička — sledujte kdo kolik vypil
  • Žebříček s počty piv, panáků a drinků za zvolené období
  • Výchozí pohled na dnešní den, filtr datumového rozsahu
  • Přihlášení nutné pro zadávání, žebříček vidí všichni
Nové projekty a vylepšení homepege
  • Přibyly projekty: PlnoHUB, Jebu.cz, Teleporting, CEO, Chat
  • PlnoHUB — portál plný obsahu přímo v aplikaci (iframe)
  • Jebu.cz — AI Gardening portál integrovaný do webu
  • Teleporting — fyzické monitory s kamerou, hvězdná brána
  • CEO — osobní web Josefa Bureše
  • Homepage přepracována na mřížkový layout — škáluje na desítky projektů
  • Nová favicon — tmavý čtverec s gradientním logem BI
  • Odznaky projektů: Live, Preview, Brzy
Sdílené přihlášení pro celý web
  • Jedno přihlášení funguje napříč celým webem — Pička, Kurzy i vše ostatní
  • Nové URL: /prihlaseni, /registrace, /odhlaseni
  • Stará adresa /python/prihlaseni automaticky přesměruje na novou
  • Přihlašovací formulář odpovídá vizuálu hlavního webu
  • Opravena session — přihlášení teď funguje spolehlivě i po restartu
Kurzy — multi-course platforma
  • Více kurzů na jedné platformě — přibyl Python kurz jako první
  • Nové URL: /kurz/python, /kurzy — přehled všech kurzů
  • Sledování postupu — vidíte které lekce jste dokončili
  • Stará adresa /python se automaticky přesměruje na novou
  • Kurzy mají vlastní slug — připraveno pro libovolný počet kurzů
Python kurz — interaktivní výuka v prohlížeči
  • Spuštěn Python kurz na adrese /python
  • Interaktivní lekce s cvičeními přímo v prohlížeči
  • Registrace a přihlášení pro ukládání postupu
  • Admin panel pro správu lekcí a uživatelů
  • Kurz postupně roste — nové lekce přibývají průběžně
První spuštění — Svatky REST API
  • BuresIndustries.cz je online
  • Svatky REST API — české jmeniny, státní svátky a informace o libovolném datu
  • Veřejný JSON endpoint zdarma na /svatky/api/[datum]
💡 Nový nápad
⚠ Nahlásit chybu