Changelog

Všechny významné změny v projektu Marigold.cz jsou dokumentovány v tomto souboru.

Formát vychází z Keep a Changelog, a projekt dodržuje Semantic Versioning.

[Unreleased]

Added

  • Článek „Šéf Protonu přestřelil s AI ve firmě, která stojí na důvěře…“ (content/posts/2026/2026-10-30-sef-protonu-prestrelil-s-ai.md) podle reportáže 404 Media. Titulní obrázek static/assets/andy-yen-proton.webp (1920×1080, WebP 53 kB), odkaz na reportáž 404 Media. Doplněno prohlášení Protonu z X s odkazem (omluva, popření měřicího softwaru a přepohovorů, slib zveřejnit pravidla pro AI) s komentářem. Upravena formulace bodu o přepohovorech a komentář k ní odkazuje na anglický originál. Doplněn další vývoj: Yenova obhajoba na Redditu (modely bez bezpečnostních omezení), zrušení přepohovorů na poradě celé firmy (404 Media, Frandroid)
  • docs/gotchas.md: pravidlo kontrolovat před vydáním článku titulní obrázek a odkazy na zdroje

Removed

  • Úklid kořene repozitáře (3600+ souborů, vše se nepublikovalo): Jekyll verze webu (_posts/ s ~3000 duplicitními články, _ai/, _mobilnisite/, _obrazy/, _vibecoding/, _llm/, _data/, _layouts/, _includes/, _pages/, _sass/, _config*.yml, Gemfile*, kořenové index.html, 404.md, feedy a manifesty), Cloudflare build Jekyllu (build-cloudflare.sh, simple-build.sh, package.json, .cloudflare*), jednorázové Python a shell skripty v kořeni (OneSignal, chat, obrazy, souhrny, testy), poznámky TECH_NEWS_*.md, ONESIGNAL_*.md a další, .github/scripts/ (podcast, notifikace, překlady), dokumenty o notifikacích ve .github/ a vypnutý workflow build.yml. .DS_Store už není v gitu
  • Zastaralá dokumentace v docs/: health check a monitoring tech-news (HEALTH_CHECK_*.md, MONITORING_DECISION_TREE.md, UPTIMEROBOT_SETUP.md, TECH_NEWS_TESTING_STRATEGY.md) a VIBECODING_GUIDE.md (vibecoding.cz se staví ze samostatného repa)
  • Složka assets/ (Hugo assets) zmenšena ze 406 MB na SCSS: 496 souborů (obrázky, PDF, js/, tipuesearch/, aiprace/) byly duplicity static/assets/ nebo se nikam nepublikovaly, protože Hugo z assets/ bere jen soubory načtené přes resources.Get (tady scss/main.scss)
  • Zbytky tech-news v kořeni repozitáře: tech-news-archive/ (103 MB, 11 tisíc souborů) a tech-news/
  • Sekce tech-news (pozastavená od 2026-03-29) je smazaná celá: content/tech-news/, legacy _tech_news/, layouts/tech-news/, archiv static/tech-news-archive.tar.gz (rozbalený měl 103 MB a 10 875 souborů) i krok, který ho v hugo-build.yml rozbaloval. Odstraněny workflowy tech-news.yml a archive-tech-news.yml, skripty scripts/*tech_news* a další skripty jen pro tech-news, jejich testy, data data/tech_news_* a data/clicky_goals.yaml, permalink v hugo.toml, položka „Zprávy“ v menu a tech-news ve vyhledávání. Adresy /tech-news/… teď vracejí 404

Changed

  • .gitignore uklizen (bez desítek duplicit a pravidel pro smazané soubory), README.md popisuje Hugo strukturu (content/posts, static/assets) místo Jekyllu
  • CLAUDE.md přepsán podle praxe z vibecoding-site: z 367 na ~80 řádků, s diakritikou, sekce Příkazy, Struktura, Záměrná rozhodnutí (datum z názvu souboru, integrace s API vibecoding.cz, Substack promo, audio v R2, WebP, fetch-depth: 1), Konvence a Pracovní dohoda. Vyřazeny duplicity (dva příklady front matter, dvakrát build příkazy), obecný Troubleshooting, historie verzí, nepoužívané secrets a zastaralé hugo --verbose
  • Nový docs/gotchas.md (formát Vzorec / Pravidlo, datum) s poznatky z 2026-10-28: velikost písmen a normalizace diakritiky v názvech souborů na GitHub Pages, limity deploye, Hugo 0.169 a security.allowContent, odkazy z vibecoding.cz na obrázky marigoldu, hledání rozbitých odkazů. Nový rozcestník docs/index.md
  • CLAUDE.md 3.1: odstraněn popis tech-news, opravena informace o vibecoding.cz (staví se ze samostatného repa vibecoding-site), přidána pravidla pro obrázky (WebP), poznámky k rychlosti deploye a k lokálnímu buildu s novějším Hugem

Fixed

  • Dva rozbité obrázky: překlep ttps:// v článku o OpenAI Atlas a obrázek v článku „Piráti se STANem“, který odkazoval na neexistující soubor
  • Obrázky ve static/assets/ převedeny na WebP (max. šířka 2000 px, kvalita 82, bez metadat): 438 z 449 JPG/PNG, 350 MB → 49 MB. U 11 souborů by WebP vyšel větší, ty zůstaly v původním formátu. Ikony ve static/images/ a static/assets/tipuesearch/ se nepřeváděly. Odkazy (front matter thumbnail/urlobrazu, markdown, šablony, i v URL-kódované podobě) přepsány ve 449 souborech, originály smazány. Opraveno 13 odkazů, které se od souboru lišily velikostí písmen, takže na GitHub Pages nefungovaly (hlavně content/obrazy/). Staré adresy …/assets/*.jpg|png převedených obrázků vracejí 404
  • Audio (44 souborů MP3/M4A, 334 MB) se servíruje z Cloudflare R2 stejně jako na vibecoding.cz: bucket vibecoding-assets, prefix marigold/audio/, doména https://media.vibecoding.cz/marigold/audio/ (s podporou Range, takže jde přeskakovat). Přepsány audio_url a odkazy ve 45 článcích. Z repozitáře smazány static/audio/ i identická legacy kopie audio/, takže web nahrávaný na GitHub Pages je zhruba o 334 MB menší. Staré adresy www.marigold.cz/audio/… vracejí 404
  • hugo-build.yml: checkout s fetch-depth: 1 místo 0. Build historii gitu nepotřebuje (nepoužívá .GitInfo), takže se nemusí stahovat celých 6,5 GB repozitáře. Checkout trval 0:30–3:43

Changed

  • Reakce a diskuse pod články (posts, ai) jsou v jednom boxu na místě dřívějšího hodnocení, nad promo Substacku: <mg-comments site="marigold" rating="on"> z vibecoding.cz (tangero/vibecoding-site#294) nahrazuje mg-rating.js. Šest reakcí (🔥 Super, 💡 Poučné, 😂 Pobavilo, 🤔 K zamyšlení, 🥱 Nic nového, 👎 Nesouhlasím; dřívější hlasy převedeny se stejnou vahou), palce a řazení komentářů, připnuté komentáře, odznak živé diskuse. Front matter rating: false / comments: false vypne reakce / diskusi u článku. Synchronizace hlasů mezi zařízeními (kód, QR) z mg-rating.js v boxu není. Třída .article-comments přejmenována na .article-feedback
  • Diskuse pod články (posts, ai) běží na vlastních diskusích vibecoding.cz místo Seznam Diskusí: partial layouts/partials/comments.html vkládá <mg-comments site="marigold"> a skript https://www.vibecoding.cz/js/mg-comments.js (tangero/vibecoding-site#280, #282). page-id má stejný tvar jako hodnocení. Odstraněny partialy szn-discussion.html a nepoužitý szn-discussion-meta.html a loader d21-a.sdn.cz z baseof.html. Starší komentáře ze Seznamu se nepřenesly. Hosté komentují bez přihlášení, první komentář z prohlížeče čeká na schválení. Styly .article-comments (barvy přes --mgc-*, tmavý režim) v assets/scss/main.scss
  • Hodnocení článků (posts, ai) běží na vlastním API vibecoding.cz místo Firebase: widget https://www.vibecoding.cz/js/mg-rating.js místo top.marigold.cz/mg-feedback.js (tangero/vibecoding-site#275). Data převedena z Firestore, po hlasu se ukáže výsledek, funguje tmavý režim
  • Hodnocení článku („Jak se vám líbí tento článek?“) je v posts a ai nad promo blokem Substacku, hned pod textem článku
  • Promo zóna nad AI a mobilnisite články (layouts/partials/ad-zone-top.html): štítek „Reklama“ přejmenován na „Naše akce“ (zóna propaguje jen vlastní akce z vibecoding.cz, ne placenou reklamu); zrušen oddělovač „Obsah článku“ za zónou včetně CSS .ad-zone-end v assets/scss/main.scss. Sjednoceno s vibecoding.cz
  • Štítek promo zóny nastavuje static/js/promo-banner.js podle typu promo: placený slot (isAd) dostane „Reklama“, vlastní akce „Naše akce“. Bez promo zůstává štítek skrytý (nahrazen nefunkční selektor :has(.workshop-banner):empty)
  • Kompaktní promo karta v promo zóně už nemá odznak „Naše akce“, protože ho zdvojoval štítek zóny. Mimo zónu (blogové posty) a u placených slotů (isAd) odznak zůstává

Added

  • Promo zóna na titulní stránce (jen 1. strana výpisu, pod hlavním článkem): layouts/index.html vkládá ad-zone-top.html se surface=homepage, takže kliky a zobrazení jdou ve statistikách vibecoding.cz zvlášť od článků. Partial ad-zone-top.html přijímá (dict "surface" "…"), se stránkou zůstává article
  • static/js/promo-banner.js vykreslí reklamní slot s obrázkem (imageUrl z /api/active-promotion) jako grafický banner 1800×771 (.promo-image-banner) místo textové karty, stejně jako vibecoding.cz. Povolené cesty obrázku jako isSafeBannerSrc ve vibecoding-site. Textová karta slotu nově ukazuje highlight a vlastní text tlačítka ctaLabel; slot s cílem mimo vibecoding.cz (isInternal: false) se otevírá v novém okně s rel="sponsored"
  • Stránka /zebricek/ s nejlépe hodnocenými články za 7 dní, měsíc, 3 a 6 měsíců (layouts/_default/zebricek.html), data z https://www.vibecoding.cz/api/rating/top; nahrazuje žebříček na top.marigold.cz
  • Promo posledních tří článků z newsletteru zandl.substack.com (layouts/partials/substack-promo.html) místo widgetu FeedWind: RSS se stahuje při Hugo buildu (resources.GetRemote, Substack feed nemá CORS), karty s obrázkem ze Substack CDN (ořez 480×300), titulkem a perexem, odkazy s UTM utm_campaign=substack-promo. Na titulce nahrazuje box „Patrickův newsletter“ za 5. článkem (ten zůstává jako záloha, když feed nejde načíst); v článcích (posts, ai, mobilnisite) je pod textem. Při výpadku Substacku build projde s varováním a blok se nevykreslí. Styly .substack-* v assets/scss/main.scss včetně dark mode a kompaktní mobilní varianty
  • Denní cron (5:15 UTC) v .github/workflows/hugo-build.yml, aby se promo obnovilo i bez pushe; [caches.getresource] maxAge = "1h" v hugo.toml
  • Nový článek „Smlouvy, AI, GDPR - můžete smlouvy a osobní údaje nahrávat do Claude nebo ChatGPT?“ (content/posts/2026/2026-10-23-smlouvy-ai-gdpr.md) s thumbnailem static/assets/smlouvy-ai-gdpr.webp
  • Nový článek „K pirátské a obecné povolební situaci pár čísel a úvah“ (content/posts/2026/2026-10-12-povolebni-cisla-pirati-2026.md) s thumbnailem static/assets/pirati-kandidatka-praha-2026.webp

Removed

  • Zbytky Firebase (projekt se vypíná): adresář firebase-functions/ (FCM subscribeToTopic), skript .github/scripts/send_fcm_notifications.py bez workflow a widget top.marigold.cz/mg-feedback.js v legacy Jekyll šabloně _layouts/post.html
  • Box „Patrickův newsletter“ z článků (posts, ai) i jako záloha promo bloku na titulce; nepoužívané styly .newsletter-cta z assets/scss/main.scss. Na newsletter dál odkazuje promo blok Substacku a patička
  • Úklid mrtvých GitHub Actions workflowů, které plnily Actions tab skipped/šumem:
    • Podcast: generate_podcast.yml, podcast-generation.yml (denní cron + if: false → denní skipped runy)
    • Notifikace: send-fcm-notifications.yml (FCM/Firebase), send-notifications.yml, send-notifications-improved.yml, test-notification.yml (OneSignal) — nefungovaly (paths na legacy _posts/, partial disable)
    • Translate: translate.yml (DeepL, legacy _posts/)
    • Aktivní zůstává jen hugo-build.yml; legacy stuby build.yml, tech-news.yml, archive-tech-news.yml jen s workflow_dispatch + if: false (bez schedule/push)
  • Odstraněn plovoucí zvonek notifikací (🔔) a celá push-notifikační frontend vrstva z webu:
    • Hugo: partial layouts/partials/fcm.html + include z baseof.html
    • Jekyll/vibecoding: fcm-marigold.html, fcm-vibecoding.html, mrtvé onesignal.html / onesignal-vibecoding.html
    • Service worker firebase-messaging-sw.js, odkaz na OneSignalSDKWorker.js v site.webmanifest, App ID z _config_vibecoding.yml

Fixed

  • Blogové posty (posts/single.html) vkládají promo přes ad-zone-top.html místo staršího workshop-banner.html (odstraněn): placený slot má nad sebou štítek „Reklama“ a grafický banner už se nezobrazuje bez označení
  • static/js/promo-banner.js posílá beacon zobrazení (impressionUrl, site=marigold), až je banner aspoň z poloviny vidět. Dosud marigold hlásil jen kliky, takže v administraci vibecoding.cz nešlo spočítat zobrazení ani CTR
  • Promo článků ze Substacku se na produkci nezobrazovalo: Substack vrací IP adresám GitHub Actions 403. Feed se nově stahuje přes proxy https://www.vibecoding.cz/api/substack-feed (tangero/vibecoding-site#271)
  • Infografika blackoutu: box Frekvence už neukazuje po celou dobu 50,00 Hz — po výpadku V411 zobrazuje lokální zákmit „50,0 ±0,2 Hz" (žlutý stav; dle zprávy odchylka >200 mHz, která přepnula bloky do otáčkové regulace); nominálních 50,00 Hz během krize je záměr (deficit se dovážel, frekvenci držela synchronní Evropa až do vzniku ostrova)
  • Opraven rozbitý obrázek v článku blackout ENTSO-E: cesta /assets/blackout-situace.jpg → /assets/blackout-situace.webp (soubor v static/assets/ je PNG)
  • Audit infografiky blackoutu (static/assets/blackout/timeline.html): přístupnost a mobilní použitelnost — viditelný focus (:focus-visible), dotykové cíle ≥ 44 px (tlačítka, neviditelné rozšíření teček na ~37 px a celé osy), touch-action pro spolehlivý drag-scrub na iOS/Android, type="button" + přepínání aria-label/aria-pressed u přehrávání, prefers-reduced-motion, kontrast žlutých textů přes nový token --warn-text (WCAG AA v obou režimech), oprava zaokrouhlení hodin (11:59:43 → 11:59:44) a překryvu popisků osy na 320px displejích

Added

  • Interaktivní časová osa blackoutu 4. 7. 2025 (static/assets/blackout/timeline.html) — samostatná HTML infografika podle závěrečné zprávy ENTSO-E: plynulé přehrávání s adaptivní rychlostí, semaforová osa stavu sítě (zelená/žlutá/červená), stavové rámečky (V208, ztráta výroby, frekvence, bilance, bez dodávky), okna prevence, Bod bez návratu, 9 doporučení; klávesové ovládání (šipky, mezerník), světlý/tmavý režim. Vložena přes <iframe src="…?embed=1"> s auto-výškou (postMessage) do článku content/posts/2026/2026-07-11-blackout-cesko-zaverecna-zprava-entso-e.md; embed režim skrývá hero a závěrečné sekce (duplikovaly by text článku)
  • Nový článek do rubriky Apple: „Může Apple za růst cen pamětí, který ho teď donutil zdražit?" (Patrick Zandl, 2026-06-27) — analýza zdražení Maců a iPadů, sporu Apple vs. Micron a čínské paměťové cesty přes CXMT, s thumbnailem 2026-06-27-apple-ceny-pameti.jpg

Removed

  • Odstraněn Ahrefs Analytics (analytics.ahrefs.com/analytics.js, data-key 8DK1Fml+9uQuIb76lJoKXA) — služba se už neplatí. Smazáno ze všech 4 výskytů: Hugo layouty layouts/_default/baseof.html a layouts/page/aiprace.html (marigold.cz) i legacy Jekyll layouty _layouts/default.html a _layouts/aiprace.html (vibecoding.cz)

Changed

  • Jazyková humanizace článku o Karpathym (content/posts/2026/2026-04-04-karpathy-llm-knowledgebase.md): odstranění AI artefaktů bez změny stylu — 70 em dashů (—) nahrazeno krátkou pomlčkou, přeformulována AI klišé („Posun je zásadní", „Rozdíl je klíčový", „To je meta-insight", kalk „jiný příběh", opakovaný kontrast „nutnost, ne volba/luxus"), dočištěny rozepsané autorské vsuvky bez diakritiky
  • Rychlé shrnutí článku (summary_points) je sbalitelné stejně jako Obsah (ToC) — výchozí stav sbalený, rozbalení klikem na hlavičku (layouts/posts/single.html, assets/scss/main.scss)
  • Aktualizace článku „Karpathy přišel na to, jak používat AI jinak" (content/posts/2026/2026-04-04-karpathy-llm-knowledgebase.md) o tři měsíce vývoje: nová sekce „Za tři měsíce: z myšlenky standard" o vydání Open Knowledge Format (OKF v0.1) od Google Cloud (12. 6. 2026), nová sekce „Existují už hotové produkty? Ano" s rozcestníkem produktů (llmwiki.app, Agent Skilly npx add-skill, lcwiki, knowledge-engine, Obsidian implementace, NotebookLM/Mem/Reflect jako kontrast), rozšíření sekce o škálování o oficiální Obsidian CLI, aktualizace perexu, summary_points a závěru
  • Doplnění téhož článku o redakční poznámku „Aktualizováno v červenci 2026" na začátku (odkazuje na tři místa s novinkami) a novou sekci „Má to pro tebe vůbec smysl?" — úvaha o smyslu second brainu (námitka „hřbitov poznámek", kdy je Google+LLM rychlejší volba, jednotlivec jako nástroj na syntézu vs. firma jako infrastruktura), sladěná s anti-RAG tezí článku (kompilace kontextu, ne RAG nad poznámkami)
  • Jazyková humanizace článku o cenách pamětí Apple: odstranění anglicismů („linie" → „řady", „moderní historie" → „novodobá historie", „telegrafoval" → „avizoval"), přirozenější slovosled a přepis negačně-kontrastního obratu („Háček není v datech… Háček je v…" → „Potíž je především v tom, jak se data používají")

Fixed

  • Slovník 3GPP: ořezávání horní řady NF v architektonických SVG diagramech (static/assets/slovnik/*.svg, 13 pojmů). Příčina byla ve zdrojovém rendereru v 3gpp-explorer2 (render-network.ts): embed režim odvozoval posun obsahu nahoru od titulkového pruhu (magické -96), ale vršek obsahu (SBA box) je na y=85, takže po posunu spadl nad horní hranu viewBoxu (0 0 1400 664) a horní řada (NSSF/NRF/UDM…) se ořízla. Oprava: posun i výška viewBoxu se nově odvozují od skutečné geometrie obsahu (viewBox 0 0 1400 673, translate(0,-69), horní okraj 16 px). Přegenerováno všech 13 SVG (CS i EN), znovu vloženo do web glossary JSONů v 3gpp-explorer2

Added

  • Slovník 3GPP: rozšíření architektonických schémat z 13 na 24 pojmů. Diagram je pevná 5G SBA topologie, kde se vysvětlovaný pojem zvýrazní. Nově: CHF, UE, DN, RAN (uzly už v topologii) + SEPP, NWDAF, BSF, UDSF, SCP, N3IWF, TNGF (doplňkové SBA NF). SBA pás se při >7 uzlech zalomí na dvě řady (interleave — horní řada v mezerách spodní, spojky nekříží boxy), zdroj v 3gpp-explorer2 render-network.ts/network-architecture.ts
  • Slovník 3GPP: automatické napojení architektonických SVG diagramů na generátor slovníku — generate-marigold-md.ts (v 3gpp-explorer2) je nově „diagram-aware": pro 13 pojmů 5G Core (5gc, amf, smf, upf, nssf, nrf, udm, udr, ausf, nef, pcf, af, s-nssai) vyexportuje české SVG ze zdrojového manifestu (data/glossary-diagrams/manifest.json, pole svgCs) do static/assets/slovnik/<slug>.svg a zároveň přidá infografika + infografikaAlt do front matteru. Dřív se SVG i pole infografika udržovaly ručně, takže každé přegenerování MD je smazalo (tichý rozpad). Layout single.html čte infografika přednostně, jinak fallback fileExists podle názvu — obojí teď konzistentní
  • Slovník 3GPP: generátor SVG infografik scripts/generate_infographics.py — dvoukrokově (destilace českého popisu → SVG diagram) přes OpenRouter (Claude Sonnet). SVG má nativní text, takže čeština vč. diakritiky je bezchybná (obrazové modely text komolí), je ostré a malé. Jednotný „house-style" (paleta #2563EB/#EA580C/#16A34A, layout zleva doprava, legenda). Ručně udržovaný allowlist scripts/infographic-terms.txt. Pilot: amf, 5gc, nssf (průzkumné — kvalita layoutu kolísá, viz níže)
  • Slovník 3GPP: podpora infografiky/schématu u pojmu — layouts/slovnik/single.html zobrazí obrázek za úvodní definicí, před sekcí „Popis". Obrázek se odvozuje z názvu souboru (static/assets/slovnik/<slug>.{svg,jpg,png}) přes fileExists, takže se napojení nemůže ztratit při přegenerování slovníku (žádné front-matter pole). Širší zobrazení (breakout z textového sloupce na min(1100px, 96vw)) + styly .slovnik-infografika vč. dark mode. Pilot: ACELP (ruční bitmapa), amf/5gc/nssf (generované SVG)
  • Dokument docs/SVG-INFOGRAFIKY-VYZKUM.md — shrnutí zjištění a směrů pro samostatný výzkum automatizovaného generování čitelných SVG schémat přes LLM (co funguje, otevřené problémy s kolizemi layoutu, navrhované přístupy)
  • Slovník 3GPP: dvouvrstvá „nořící se" navigace přehledu (layouts/slovnik/list.html) — místo jednoho dlouhého seznamu všech 2756 pojmů jsou pojmy sbalené do accordionu vrstva sítě (segment) → kategorie → pojmy. Výchozí stav sbalený (krátká stránka), klik rozbalí. Vyhledávání filtruje napříč vším a automaticky rozbaluje sekce s výsledkem. Zařazení jen z dokladovatelných dat (segment 99 %, category 100 %); generační osa zamítnuta, protože ji zdrojová data neunesou spolehlivě
  • Slovník 3GPP: počeštění dalších kategorií (Rozhraní, Mobilita, Internet věcí) v layouts/partials/slovnik-kategorie.html
  • Slovník 3GPP: křížové prolinkování pojmů mezi sebou — generátor v 3gpp-explorer2 (markdown-linking.ts) vkládá inline odkazy do sekcí Popis a K čemu slouží a přidává sekci „## Související pojmy"; case-sensitive akronymy, hranice respektující pomlčku (S-NSSAI nerozbije NSSAI), self-link guard, blocklist obecných termů (3GPP, 5G, UE, RAN…), max 8 inline odkazů/stránka. Slovník rozšířen ze 148 na 2756 pojmů (2703 s inline odkazy, 1883 se sekcí Související pojmy), vše interně na /mobilnisite/slovnik/
  • Centrální skript dynamické inzerce static/js/promo-banner.js — jeden zdroj pravdy čtoucí živá data z vibecoding.cz/api/active-promotion; UTM kampaň konfigurovatelná přes data-utm-campaign
  • Slovník 3GPP (/mobilnisite/slovnik/): live vyhledávání/filtr nad pojmy, navigace kategorií a počty pojmů (layouts/slovnik/list.html)
  • Slovník 3GPP: vlastní layout detailu termínu se zkratkou, plným názvem, badge kategorie/segmentu a breadcrumbem (layouts/slovnik/single.html)
  • Slovník 3GPP: počeštění kategorií a segmentů přes nový partial layouts/partials/slovnik-kategorie.html
  • Slovník 3GPP: styly seznamu i detailu vč. dark mode variant (assets/scss/main.scss)
  • Odkaz na slovník 3GPP na stránce /mobilnisite/ jako banner pod titulkem (shortcode slovnik-banner, styly vč. dark mode)
  • Nový článek do rubiky AI: „Claude Cowork: Kompletní příručka" (Patrick Zandl, 2026-06-07) — průvodce agentním Cowork pro nontechnické uživatele, s thumbnailem claude-cowork-kompletni-pruvodce.png
  • Nový článek: „Když se vás AI agent snaží potěšit objednáváním" (Patrick Zandl, 2026-06-06) — o Hypatě a boji o welcome drink na Vibecoding Talks
  • Reklamní banner Vibecoding Talks 15. 6. 2026 na konci článků (layouts/posts/single.html) — jeden náhodně vybraný obrázek řečníka (static/assets/vt/, Hugo shuffle při buildu), proklik s UTM (vt-06-2026)
  • Sveltia CMS: přidán webový editor článků dostupný na /admin/ — přihlášení přes GitHub, bez OAuth proxy serveru
  • Nový článek: „Jsou AI agenti superinteligence dneška?" (Patrick Zandl, 2026-04-21) — o kooperaci AI agentů, World Models a agentní vrstvě

Fixed

  • Banner slovníku na /mobilnisite/ (slovnik-banner.html): počet hesel se nyní počítá dynamicky z obsahu (zaokrouhleno dolů na stovky) místo natvrdo zapsaného „přes 140 hesel" — aktuálně „přes 2700 hesel"
  • Oprava diakritiky v titulku stránky /mobilnisite/: „Mobilni site" → „Mobilní sítě"
  • Slovník 3GPP: opraveno vyhledávání — display: flex/block na položkách přebíjel HTML atribut hidden, takže filtr vizuálně nic neskrýval; přidáno pravidlo [hidden] { display: none } pro slovníkové prvky
  • Post prirucka-ai-ve-firmach-zdarma přesunut z _posts/ do content/posts/ pro kompatibilitu s Hugo buildem
  • Thumbnail ebook-ai-ve-firmach.png zkopírován do static/assets/ aby byl dostupný v Hugo buildu
  • Opraven rozbitý front matter v článku karpathy-llm-knowledgebase (špatné odsazení, ----- místo ---)
  • Přejmenován karpaty-llm-knowledgebase.md na karpathy-llm-knowledgebase.md (oprava příjmení)

Removed

  • Statický reklamní banner Vibecoding Talks (vt-06-2026) pod hodnocením článku v layouts/posts/single.html — duplicitní s dynamickým bannerem nahoře v článku

Changed

  • Sjednocení dynamické inzerce napříč články — všude se nyní propaguje aktuální akce z vibecoding.cz/api/active-promotion (promo-banner.js + #vibecoding-promo) místo napevno zakódovaných statických bannerů:
    • Reklamní zóna nad obsahem AI článků (layouts/partials/ad-zone-top.html, používá se v ai/single.html): statický banner Vibecoding Talks nahrazen dynamickým systémem; popisky „Reklama" a „Obsah článku" zachovány
    • AI článek (ai/single.html): odstraněn druhý statický VT banner na konci článku (duplicitní s dynamickou reklamou nahoře)
    • Mobilní sítě: nový layouts/mobilnisite/single.html (články dosud dědily minimální default bez reklamy) přidává reklamní zónu ad-zone-top.html nad obsah — list /mobilnisite/ i slovník zůstávají bez reklamy
  • Slovník 3GPP: aktualizace křížového prolinkování napříč pojmy (novější běh generátoru z 3gpp-explorer2 — víc termů má český překlad, takže se rozsvítilo víc interních odkazů)
  • /aiprace: statický banner workshopu (Claude Code, 13. 4. 2026) nahrazen dynamickým bannerem aktuální akce z vibecoding.cz API
  • workshop-banner.html partial refaktorován — inline skript vytažen do sdíleného static/js/promo-banner.js
  • Přidány UTM tagy na všechny odkazy v článku prirucka-ai-ve-firmach-zdarma (kampań ai-prirucka)
  • Accessibility: přidán skip-to-content link do default.html a aiprace.html layoutů
  • Accessibility: emoji search link doplněn o aria-label="Hledat" (WCAG 2.4.6)
  • Accessibility: <p datetime> opraven na validní <time datetime> v post.html
  • Accessibility: toast notifikace doplněna o role="status" aria-live="polite" (WCAG 4.1.3)
  • Accessibility: přidána podpora prefers-reduced-motion pro všechny animace
  • Performance: Mermaid JS podmíněn přítomností .language-mermaid — nenahrává se na každém postu
  • Performance: Liquid navigační loop v tech_news.html nahrazen Jekyll built-in page.previous/next (O(n²)→O(1))
  • Responsive: Substack iframe opraven — width="480" odstraněn, přidán max-width:480px;width:100%
  • Responsive: Audio player tlačítka rozšířena na min 44×44px touch target
  • Theming: dark mode paleta nahrazena — odstraněny AI purple-navy barvy (#1a1a2e→#16181c rodina)
  • Theming: #667eea bullet barva v quick-summary nahrazena proměnnou $blue
  • Theming: Open Sans legacy font reference nahrazen $system-font v .cd-container
  • Code: inline CSS audio playeru přesunut z index.html do assets/style.scss a assets/scss/main.scss
  • Content: Workshop banner aktualizován (prošlá early bird deadline 31.3.2026 nahrazena)

[3.0.0] - 2026-03-29

Changed

  • Migrace z Jekyll na Hugo - build cas z ~500s na ~8s (60x zrychleni)
    • Vsechny layouty prevedeny z Liquid na Go templates
    • Obsah prestan do content/ struktury (posts, ai, mobilnisite, obrazy, tech-news)
    • SCSS zpracovani pres Hugo Pipes misto Jekyll Sass
    • GitHub Actions workflow hugo-build.yml nahradi build.yml
    • Vsechny URL zachovany (2957 postu, 10873 archivnich stranek)
  • Dark/Light mode s manualnim prepinacem - tlacitko slunce/mesic v navigaci
    • Automaticke prepnuti po zapadu slunce (18:00-06:00)
    • Persistence volby v localStorage
    • Kompatibilni s aiprace vlastnim dark mode CSS
  • Redesign paticka - dva sloupce (Projekty / Dalsi) misto jednoradkoveho seznamu
    • Nove inline SVG socialni ikony (email, Facebook, X, LinkedIn, RSS)
    • Nove odkazy: AI ve firmach, Workshopy Claude Code, Kurz AI zdarma, Vliv AI na pracovni mista
  • Newsletter CTA - nahrazuje Substack iframe kompaktnim CTA boxem
  • Navigace - semanticka <ul> s aria-label, white-space: nowrap
    • Aiprace pridano do dropdown menu jako “AI prace”

Added

  • Ahrefs Analytics - mereni navstevnosti v <head>
  • Table of Contents - automaticky generovany obsah z h2/h3 nadpisu
    • Cislovane polozky, rozbalitelny, transparentni pozadi
    • Nahrazuje Jekyll {:toc} syntaxi
  • Scroll progress bar - gradientni linka ukazuje pozici cteni v clanku
  • Audio prehravac - playlist poslednich 20 clanku s audio na homepage
  • Aiprace layout - plna sirka (1600px) s D3.js vizualizaci
  • Post edit link - diskretni odkaz “Upravit” na GitHub edit

Fixed

  • Accessibility - lang="cs", focus-visible styly, iframe title, touch targety 44px
  • Flexbox layout - masthead a footer misto float/absolute
  • Thumbnaily - landscape 4:3 (200x150), nadpis nad thumbnailem
  • Vyhledavani - opraveny dvojite uvozovky v search indexu (safeJS)
  • Case-sensitive URL - 10 postu s velkymi pismeny opraveno explicitnim url: front matter

Removed

  • Smazano assets/tech-news/ - 11073 nepouzivanch obrazku (852 MB)
  • Vypnuty workflows - podcast, OneSignal notifications, tech-news, translate (if: false)
  • Sdilejte clanek sekce - nahrazena kompaktni navigaci + edit linkem

Removed

  • LLM rubrika deaktivována - služba přesunuta na jiný server
    • Smazán GitHub Actions workflow llm-tracker.yml (denní generování zastaveno)
    • Odstraněna kolekce llm z _config.yml (stránky se negenerují)
    • Smazána hlavní stránka _pages/llm.md
    • Soubory v _llm/, skripty a layouty ponechány jako archiv

Changed

  • Migrace z OneSignal na Firebase Cloud Messaging (FCM) - kompletní přepracování push notifikací
    • Nový service worker firebase-messaging-sw.js pro FCM
    • Nové include soubory _includes/fcm-marigold.html a _includes/fcm-vibecoding.html
    • Cloud Functions pro topic subscription (firebase-functions/)
    • Nový Python skript .github/scripts/send_fcm_notifications.py pro odesílání notifikací
    • Nový workflow .github/workflows/send-fcm-notifications.yml
    • Lepší spolehlivost a nulové náklady (Google infrastruktura)
    • Topic-based subscription: marigold-news a vibecoding-news

Fixed

  • Stránkování - přidány chybějící CSS styly pro .pagination element
    • Správné odsazení od obsahu a patičky (padding 30px nahoře, 40px dole)
    • Vizuální styling tlačítek stránkování s hover efekty
    • Zvýraznění aktuální stránky modrou barvou

Removed

  • OneSignalSDKWorker.js - nahrazeno Firebase service workerem
  • _includes/onesignal.html - nahrazeno FCM implementací
  • _includes/onesignal-vibecoding.html - nahrazeno FCM implementací

Added

  • LLM Model Tracker - automatický systém pro sledování a analýzu nových LLM modelů z OpenRouter API
    • Nový skript scripts/track_llm_models.py - detekuje a analyzuje nové modely
    • Watermark mechanismus - sleduje nejnovější známý model, analyzuje pouze novější
    • Automatická analýza pomocí Gemini 3 Pro s porovnáním konkurence
    • Generuje Jekyll posty do _llm/ kolekce (formát YYYY-MM-DD-model-slug.md)
    • Překlad popisů modelů do češtiny pomocí LLM
    • Data tracking v _data/llm_models_tracked.json
    • CLI příkazy: --dry-run, --list-tracked, --status, --reset-watermark
    • GitHub Actions workflow .github/workflows/llm-tracker.yml - denní spuštění v 6:00 UTC
  • Jekyll kolekce _llm - nová kolekce pro recenze LLM modelů
    • Layout _layouts/llm_review.html - kompletní vizuální šablona pro recenze
    • Přehledová stránka /llm/ s filtry podle providera
    • Kolekce nepřidává články na titulní stránku (oddělená od _posts)
    • Permalink struktura: /llm/:slug/
  • LLM Model Card Generator - generátor HTML karet pro jednotlivé modely
    • Skript scripts/fetch_llm_model_card.py - stahuje data a generuje vizualizace
    • HTML šablona scripts/templates/llm_model_card.html - dark mode design
    • Strukturovaná JSON analýza s profily, silnými/slabými stránkami, konkurencí
    • Dynamické porovnání s aktuálními modely od Anthropic, Google, OpenAI, xAI, Mistral, DeepSeek
  • Hybridní navigační menu - implementována dropdown navigace s tlačítkem “Další ☰”
    • Hlavní položky zůstávají viditelné: 🔍 | 🧑‍💻 Kurzy AI | 🖥️ Vibecoding | 🗼 4G/5G | 🤖 AI
    • Pod tlačítko “Další” schovány: 💻 Zprávy | 🖼️ Obrazy
    • Čistý minimalistický design s dropdown menu pod tlačítkem “Další”
    • Vanilla JavaScript pro toggle funkčnost (bez závislostí)
    • Kompletní přístupnost: aria-expanded, keyboard navigation (Enter/Space/Escape)
    • Responzivní na mobilu - dropdown centrovaný, fade-in animace
    • Kliknutí mimo nebo Escape zavře menu
  • Archivace tech_news - automatické převádění starých článků na statické HTML
    • Nový skript scripts/archive_tech_news.py - archivuje články starší než 7 dní
    • Staré články se převedou na statické HTML do tech-news-archive/
    • Jekyll zpracovává pouze čerstvé články - rychlejší build
    • Integrace do GitHub Actions workflow (build.yml)
    • URL zůstávají zachované: /tech-news/YYYY-MM-DD/slug/
  • Optimalizace generátoru tech_news - snížení počtu článků
    • Práh důležitosti zvýšen z 3 na 4 (pouze “velmi důležité” a “průlomové”)
    • PageSize snížen ze 100 na 50 článků
    • Očekávaný výsledek: ~20-30 článků/den místo 300+

Fixed

  • Vibecoding.cz build - opravena chyba “Cannot sort a null object” při buildu
    • Přidány chybějící exclude položky do _config_vibecoding.yml
    • Vyloučeny stránky využívající kolekce nedefinované pro vibecoding (llm, tech_news atd.)
    • Vyloučeny dokumentační markdown soubory v rootu (TECH_NEWS_*.md, CHANGELOG.md atd.)
    • Build nyní úspěšně projde a články z prosince jsou viditelné
  • Tech-news workflow race condition - opraveno selhání git push při paralelních jobech
    • Přidán git pull --rebase před push v tech-news.yml workflow
    • Přidán tech-news-archive/ do git add pro archivované články

Changed

  • Kompaktní patička - redesign footeru na 3 řádky místo 3 sloupců
    • Řádek 1: Sociální ikony (email, facebook, twitter, linkedin, rss) + copyright
    • Řádek 2: Všechny projekty inline (Marigold.cz, Zítřaslavní.cz, VibeCoding.cz, TopFlix.cz, Substack, Fenix svítilny, Vybavení do přírody, Brandýs nad Labem, Letní škola AI, Changelog)
    • Řádek 3: Badges (Clicky analytics, GitHub last commit)
    • Menší výška patičky (~150px místo 300px+)
    • Partnerské odkazy přesunuty z analytics.html do footer.html

Changed

  • LLM model pro tech-news změněn z qwen/qwen3-max na x-ai/grok-4.1-fast:free (scripts/generate_tech_news_newsapi.py)
    • Nový primární model: x-ai/grok-4.1-fast:free (bezplatný)
    • Automatický fallback na anthropic/claude-haiku-4.5 při selhání (HTTP 402, 429, 503)
    • Nová helper metoda _call_llm_with_fallback() s retry logikou
    • Logging aktuálně použitého modelu na konci běhu
    • Konfigurace modelů centralizována do class konstant PRIMARY_MODEL a FALLBACK_MODEL

Added

  • Seznam.cz Discussion System - nativní diskuzní systém místo commentbox.io
    • Nahrazen commentbox.io systém za Seznam.cz diskuze (service-name: marigoldcz)
    • Přidány include soubory: szn-discussion.html, szn-discussion-meta.html, szn-discussion-jsonld.html
    • Meta tag szn:permalink pro propojení s Homepage Seznamu
    • JSON-LD strukturovaná data s discussionUrl pro SEO
    • Diskuze aktivní v layoutech: post.html a tech_news_article.html
    • Obrazy kolekce nadále bez diskuzí (stejně jako předtím)
  • Diagnostic Dashboard (scripts/tech_news_diagnostic_dashboard.py) - komplexní monitoring tech-news pipeline
    • Rejection analysis s breakdown důvodů zamítnutí (content_filter vs low_importance)
    • Sample zamítnutých článků s jejich skóre a důvody
    • LLM cost metriky (daily/weekly breakdown podle operací)
    • Freshness check s alerts pro staré články
    • Success rate trend za 7 dní s grafem
    • Importance distribution pro analýzu kvality
    • Automated recommendations na základě detekovaných problémů
    • JSON output do _data/tech_news_diagnostic.json
  • Archivní stránka /tech-news/archiv/ s přehledem článků po měsících a dnech
  • Zdravotní monitoring systém pro tech-news (scripts/tech_news_health_check.py)
  • JSON endpoint /health-check/ pro Uptimerobot monitoring
  • HTML dashboard /health-status/ pro debugging
  • Komplexní test suite pro health check systém (tests/test_health_check.py)
  • Rozsáhlá dokumentace pro health check systém (5 guidů v docs/)
  • Kompletní CLAUDE.md dokumentace s pokyny pro _posts vs _tech_news
  • Povinnost aktualizovat CHANGELOG.md po každém commitu
  • Archiv odkaz v headeru /tech-news/ stránky - viditelný hned při načtení
  • HTML verze CHANGELOGu dostupná na /changelog/ s odkazem v patičce webu
  • Sekce “Tech News” na titulní stránce - zobrazuje striktně 5 nejnovějších článků s vysokou důležitostí (importance >= 4)
    • Použití dvoustupňového filtru: slice: 0, 5 + limit: 5 v for loop pro garantovaný limit
  • Kompletní monitoring a logging systém pro tech-news pipeline:
    • ProcessingLogger třída (scripts/processing_logger.py) - sleduje celý processing pipeline
    • SQLite databáze (_data/tech_news_metrics.db) - ukládá processing sessions, hourly a daily metriky
    • JSON Lines logy (_data/processing_logs/*.jsonl) - append-only logy pro každý den
    • Dashboard data generátor (scripts/generate_dashboard_data.py) - agreguje 30denní statistiky
    • Rozšířený /health-status/ dashboard s grafy, pipeline funnelem a performance metrikami
    • Sledování: API fetch → LLM processing → Save pipeline s důvody přeskočení článků
    • Metriky: počty článků, LLM náklady, tokeny, časy zpracování, error rate, skip reasons

Fixed

  • Seznam Diskuze API errors (401/404) - oprava canonical string formátu
    • Problém: widget používal relativní cestu místo plné URL v canonical stringu
    • Způsobovalo chyby “Api Error” při pokusu o odeslání komentáře
    • Řešení: změna z {{ page.url }} na {{ site.url }}{{ page.url }} v szn-discussion.html a szn-discussion-meta.html
    • Canonical string nyní: https://www.marigold.cz/item/... místo /item/...
  • NewsAPI freshness - přechod z /v2/top-headlines na /v2/everything endpoint
    • Problém: top-headlines vracel články staré 48-72h, žádné dnešní články
    • Řešení: /v2/everything s from parametrem pro poslední 48h a sortBy: publishedAt
    • Zvýšen pageSize z 40 → 100 článků pro větší výběr
    • Přidána freshness validace s logging stáří článků
    • Očekávaný dopad: Article age 48-72h → <24h (67% rychlejší)
  • LLM cost tracking - přidán debug logging a fallback approximation
    • Problém: llm_costs.db měla 0 záznamů, nebyla viditelnost LLM nákladů
    • Přidán debug logging pro detekci chybějících usage dat z OpenRouter API
    • Fallback aproximace tokenů pomocí heuristiky (~4 znaky = 1 token)
    • Enhanced logging - vždy logovat API calls i když chybí přesná cost data
    • Warning v logu pokud OpenRouter response nemá usage klíč
  • Permalinky v _layouts/tech_news_day.html - články nyní vedou na interní stránky /tech-news/YYYY-MM-DD/slug/ místo externích URL
  • Permalinky v _pages/tech-news-archiv.html - odkazy vedou na interní stránky článků
  • LLM model aktualizován z openrouter/polaris-alpha na qwen/qwen3-max ve všech tech-news skriptech:
    • scripts/generate_tech_news_newsapi.py (5 míst)
    • scripts/generate_tech_news_with_images.py (4 místa)
    • scripts/fetch_tech_news_batch.py (1 místo)
    • scripts/fetch_tech_news.py (1 místo)
  • URL v tech-news manifestu - odstraněn trailing dash ze slugu (scripts/generate_tech_news_manifest.py)
    • Před: /tech-news/2025-11-12/review-new-framework-laptop-16-takes-a-fresh-stab-/ (404)
    • Po: /tech-news/2025-11-12/review-new-framework-laptop-16-takes-a-fresh-stab/ (200)
  • Trailing dash v URL na titulní stránce (Tech News sekce) - odstranění trailing dashe ze slugu v index.html

Changed

  • Filtering thresholds - rozšířený tech whitelist v content filteru
    • Problém: 76.5% článků filtrováno jako hry/sport (příliš agresivní)
    • Rozšířen whitelist tech indicators z 9 → 34 položek
    • Nové kategorie: AI/ML v gamingu, Cloud gaming tech, Hardware/GPU, VR/AR technology
    • Gaming platforms (Steam Deck, ROG Ally), Game engines (Unreal 5), Performance optimization
    • Tech-relevant gaming články nyní ponechány místo zamítnutí
    • Očekávaný dopad: Snížení false positive rejections z 76% → ~40%
  • Přepracován systém hodnocení důležitosti článků (importance 1-5) v scripts/generate_tech_news_newsapi.py:
    • LLM prompt - rozšířena kritéria s jasným zaměřením na AI, robotiku, Apple, Tesla, Elon Musk, Sam Altman (importance 4-5)
    • Nízká priorita (2) pro čínské telefony (OnePlus, Xiaomi, Huawei), rutinní Android/Windows updaty, spekulace
    • Fallback funkce detect_importance() - přidáno keyword-based hodnocení s 80+ klíčovými slovy
    • Cíl: lepší využití celé škály 1-5 (dříve 85% článků mělo importance 3-4)
  • GitHub Actions workflow .github/workflows/tech-news.yml - health check je nyní non-blocking (|| true)
  • Health check přidán jako automatický krok do tech-news workflow
  • UI/UX redesign úvodní stránky /tech-news/ - kompaktnější layout, archiv v headeru
    • Odstraněn redundantní “18 nejnovějších článků” box (úspora ~120px)
    • Zkrácený popis s přímým odkazem na archiv
    • Zjednodušené filtry (odstranění filtru “Kritická” importance)
    • Kompaktní badge s počtem článků místo celého navigation boxu
  • Tech News sekce na titulní stránce - zmenšeny mezery mezi články (10px → 6px)

[1.0.0] - 2025-08-25

Added

  • Základní Jekyll struktura projektu
  • Kolekce: _posts, _tech_news, _ai, _mobilnisite, _obrazy
  • Tech-news automatizace přes NewsAPI
  • LLM cost tracking systém
  • GitHub Actions CI/CD

Changed

  • Initial release

Semantic Versioning Guide

Formát: MAJOR.MINOR.PATCH

  • MAJOR: Breaking changes, zásadní přepisy
  • MINOR: Nové funkce, zpětně kompatibilní
  • PATCH: Bugfixy, drobné změny

Příklad

2.1.3
│ │ │
│ │ └─> PATCH - Oprava permalinků
│ └───> MINOR - Nový health check systém
└─────> MAJOR - Přechod na nový framework

Aktualizováno: 2025-12-08