Changelog
Historie úprav webu (kromě přidávání nových článků).Changelog
Tento soubor sleduje změny webu Vibecoding. Zapisujeme sem všechny úpravy kromě přidávání nových článků.
[2.11.0] — 2026-05-13
Přidáno
- Lístek zdarma z administrace — v
/admin/akce/[id]tab Objednávky nové tlačítko „+ Lístek zdarma" otvírá modal pro manuální vystavení free registrace (speaker, partner, VIP, host). BackendPOST /api/admin/create-free-ticketzakládá registraci spayment_status='manual',verified=1,payment_amount=0,promo_code='ADMIN_FREE'(pro reporting) a interní poznámkou. Email pozve příjemce na/moje-misto?token=..., kde si vybere sedadlo a zároveň upraví veřejnou jmenovku (display_name / URL / emoji — už existující SeatSelector). Volitelné: osobní zpráva v markdownu, BCC admina, override kapacity. Žádná faktura, žádný promo blok. - Markdown export výsledků dotazníku —
/admin/vysledky-dotaznikumá nové tlačítko „Stáhnout (Markdown)". Generuje na klientovi z už načtených dat: souhrn (response rate, počty), tabulky pro rating a single-choice otázky, blockquote pro textové odpovědi po respondentech, sekce s uloženou LLM analýzou. Název souborudotaznik_<akce>_<dotaznik>_<termin>.md.
Dokumentace
docs/free-ticket-admin.md— popis flow, UI, endpointu, obsahu emailu, auditu (promo_code='ADMIN_FREE').
[2.10.0] — 2026-05-07
Přidáno
- Zoom integrace pro online workshopy (ADR-005) — kompletní automatizace lifecyklu online akce. Server-to-Server OAuth pod
patrick.zandl@marigold.cz, app „Vibecoding events" v Zoom Marketplace.- PR1 Foundation — admin tlačítka „Vytvořit/Smazat Zoom meeting" v
/admin/akce/[id], sloupcezoom_meeting_id,zoom_start_url,zoom_passcode,zoom_start_at_utc,zoom_end_at_utc,zoom_host_email,zoom_created_atnaevent_dates. UTC instanty z Zoom API response (žádný hardcoded TZ offset). - PR2 User flow — auto-registrace zaplacených účastníků jako Zoom registrants po každé úspěšné platbě (FIO admin, FIO self-service, manuální confirm, Stripe webhook, FIO cron). Separátní
join_token≠registration.idchrání před iterací ID. Proxy/akce/join/[token]validuje cancel/payment/zoom-status, časové okno (-30 min až +24 h od konce). 4 email cesty přepnuty na proxy URL (potvrzovací po platbě, preview, 10-min reminder, 7d/1d reminder). Cancel flow ruší registranta v Zoomu. Retry cron (5 min) pro pending/failed registrace, max 5 pokusů. Backfill button pro hromadnou registraci už zaplacených. - PR3 Attendance — webhook
/api/webhook/zooms CRC challenge + HMAC-SHA256 signature verify (5 min replay window, timing-safe). Branch handlery promeeting.participant_joined/left/ended→INSERT OR IGNOREdozoom_attendance_logs(idempotency proti Zoom retry). Finalize cron (každé 2 h) doplňuje data z report API a počítáattended_seconds / meeting_seconds→ statusattended(≥70 %),partial(≥20 %),no_show. Double URL-encode meeting UUID když začíná/nebo obsahuje//(Zoom API quirk). Admin „Účast" tab s live counterem, anomáliemi (účastníci bez registrace → Telegram alert), finalizovanou tabulkou a CSV exportem.
- PR1 Foundation — admin tlačítka „Vytvořit/Smazat Zoom meeting" v
- Branded error tracking pro Zoom — všechny Zoom endpointy (admin create/delete/backfill/attendance, webhook, retry+finalize cron, proxy) napojené na BetterStack přes
initErrorTracking+captureException. Nový helpercaptureMessage(sentry, msg, { level, extra })vsrc/lib/error-tracking.tspro warningy/info eventy (signature failures, neznámé meetings, unmatched participants). - Admin akce — survey results card na detailu termínu po odeslání dotazníku.
- PassKit ticket POC — proof-of-concept Apple Wallet pasy pro účastníky, zatím odložené (viz commit historie).
- Admin dashboard v3 — 2-řádkový layout termínů s countdownem, inline email status ikonkami, readiness checklistem, last-activity sloupcem; šedě odlišené proběhlé termíny ≤30 dní, skryté archivované karty.
Migrace
db/migration-079-zoom-foundation.sql— 7 sloupců naevent_datespro Zoom meeting state + UNIQUE index.db/migration-080-zoom-registrants.sql— 7 sloupců naregistrations(zoom_registrant_id,zoom_personal_url,join_token,zoom_registration_status,attempts,last_attempt_at,error) + 2 indexy.db/migration-081-zoom-attendance.sql— tabulkazoom_attendance_logss UNIQUE dedup indexem;attended,attendance_seconds,attendance_statusnaregistrations;attendance_finalized_atnaevent_dates.
Operační
- Cloudflare secrets:
ZOOM_ACCOUNT_ID,ZOOM_CLIENT_ID,ZOOM_CLIENT_SECRET,ZOOM_WEBHOOK_SECRET(volitelněZOOM_ALT_HOSTS). - Cron-job.org úlohy:
zoom-registration-retry(každých 5 min),zoom-attendance-finalize(každé 2 h). - Zoom Marketplace webhook subscription „Vibecoding Workshopy" aktivní s eventy
meeting.participant_joined/left/ended.
Dokumentace
docs/decisions/005-zoom-integration.md(ADR),docs/zoom-integration.md(kompletní popis PR1–PR3 + plán PR4 recording), aktualizovanýdocs/error-tracking.mdo Zoom routes acaptureMessagehelper.
[2.9.0] — 2026-05-05
Přidáno
- Nový flow upomínek platby — dvě upomínky (D+3, D+6 osoba / D+7, D+13 firma) + auto-storno (D+7 / D+14). Counter-based logika (
payment_reminder_count, separátní timestampy), společné šablony vlib/payment-emails.ts. Manuální endpoint/api/admin/send-payment-reminderpřepsán na sdílené šablony, podporujeforceoverride. - Event-proximity timing — cron porovnává standardní timeline od objednávky s blízkostí akce; všechny upomínky musí padnout před akcí (E−4, E−2, storno E−1). Použije se ten z obou, který spadne dřív (logické OR).
- Post-event auto-storno — pending registrace u akcí, jejichž termín už proběhl, jsou cronem stornovány automaticky (řeší dříve „zaseknuté" objednávky).
- Auto-restore na pozdní platbu — když FIO matching najde platbu pro auto-stornovanou registraci, registraci obnoví (
cancelled_at = NULL), pošle email „Platba přijata — registrace obnovena" a pokračuje standardním paid-flow (Fakturoid faktura, wallet pass). - Stripe upgrade z bank-transfer na card — na platební stránce
/akce/platba?token=...se u objednávek ≥ 500 Kč zobrazuje tlačítko „Zaplatit kartou" (vyžadujeSTRIPE_ENABLED). Endpoint/api/stripe/create-checkoutnově přijímáupgradeToCard: truea sám přepnepayment_methodztransfernacard. - Korporátní note v upomínkách — text „Máte ve firmě delší schvalovací proces? Odepište prosím na tento email…" v každé upomínce.
- Logování upomínek do
email_log— typypayment_reminder_1,payment_reminder_2,payment_cancellation,payment_restore. Cron + manuální endpoint loguje vše. - Dokumentace
docs/payment-reminder-flow.mds kompletním popisem flow, timeline, šablon a edge cases.
Opraveno
- Cron filtr přes
events.date— cronsend-remindersignoroval pending registrace, jejichž akce měla hlavní datum v minulosti, aleevent_datesvariantu v budoucnu. Filtr přepsán naCOALESCE(event_dates.date, events.date). send-payment-reminderendpoint per-registrace — UI v/admin/objednavkyvolalo sregistrationId, endpoint vyžadovaleventIda vracel chybu. Endpoint nyní podporuje oba módy.- Tlačítko „Náhled emailu" v
/admin/vysledky-dotazniku— popup blocker rušil okno otevřené poawait. Otevírá se nyní synchronně s placeholderem, HTML se dopisuje po fetchi. - Odesílatel dotazníkových emailů — sjednoceno na
Patrick Zandl <patrick@vibecoding.cz>+ explicitní Reply-To.
Migrace
db/migration-078-payment-reminder-tracking.sql— nové sloupcepayment_reminder_count,payment_reminder_1_sent_at,payment_reminder_2_sent_at+ backfill ze staréhopayment_reminder_sent_at. Legacy alias zachován.
[2.8.0] — 2026-05-05
Přidáno
- Microsoft Clarity analytics — integrace
@microsoft/claritynpm balíčku s custom tagy (typ stránky, kategorie článku) a sledováním scroll events. Project ID nastaveno přes env, načítá se jen v produkci. - X (Twitter) conversion tracking — pixel pro sledování konverzí z X kampaní přidán do
Base.astro. - Dotazník pro Claude Code Workshop — seed script
scripts/seed-claude-code-workshop-survey.mjspro 13-otázkový feedback survey (idempotentní, sdílený napříč termíny workshopu). DefaultBASE_URLcílí na produkcihttps://www.vibecoding.cz. Nasazená šablonabbe30b30-63f8-4728-b806-04c66e03bceau akceevt_1773221277734_o0o9wc2rm. - Email template pro účastníky workshopu — detailní instrukce „co si přinést" s prerekvizitami (Claude Code instalace, Git, projekt).
- Dokumentace —
docs/claude-code-workshop-survey.md(popis dotazníku, identifikátory, vzorový úvodní text emailu) a gotcha vdocs/gotchas.mdo nutnostiwww.BASE_URL pro admin scripty proti produkci.
Vylepšeno
- TOC u krátkých článků — Table of Contents se skrývá u článků pod 600 slov, kde je rušivý a navigačně zbytečný.
[2.7.3] — 2026-04-18
Vylepšeno
- SEO: interní prolinkování — 180+ interních odkazů přidáno do 40 článků pro klíčová slova cursor, replit, lovable a gpt-5. Titulky 69 článků zkráceny pod 60 znaků (včetně suffixu
| Vibecoding.cz). Meta descriptions doplněny nebo zkráceny na 130–155 znaků u 76 článků. - SEO: schema.org opravy — VideoObject na
/videa/doplněn oembedUrl,contentUrla správný formátinteractionType. ZCollectionPagena/zpravicky/tyden/*odstraněno nevalidní polenumberOfItems. - SEO: sitemap — přidány chybějící stránky
/workshopy/a/obchodni-podminky/. - SEO: orphan pages —
/ostatni/přidáno do navigace článků, interní linky akcí opraveny na trailing slash. - SEO: výkon — CDN cache 30 min přidána na
/zpravicky/[company](TTFB bylo 6 s). N+1 query v detailu akce nahrazena jedním batch dotazem. - IndexNow — klíč
5e156b89529f427ba90a433a4b812428nastaven, 34 URL odesláno naapi.indexnow.org.
Opraveno
- Broken 3XX redirect linky — opraven odkaz na Convex v
codex-09.mda odkaz na Droid vclaude-code-na-webu.md. - Alt texty — 9 obrázků bez alt textu ve 4 článcích doplněno o popisné texty.
[2.7.2] — 2026-04-18
Opraveno
- 21 broken links v LLM stránkách — odkazy v popisech modelů typu
[text](/openai/o3-mini)ukazovaly na neexistující URL (správný formát je/llm/openai-o3-mini/). Opraveno ve 16 souborech vsrc/content/llm/. Kde cílový model nemá content soubor, link byl odstraněn a ponechán jen text.
[2.7.1] — 2026-04-17
Přidáno
- Stripe platby kartou v live módu — nasazen live webhook endpoint, secrets (
STRIPE_SECRET_KEY,STRIPE_WEBHOOK_SECRET,STRIPE_ENABLED) v Cloudflare Pages. Kartová platba dostupná vedle bankovního převodu pro akce od 500 Kč.
Opraveno
- Editace programu termínu v adminu — pole
program_variableu variant termínů (event_dates) nebylo dostupné v editačním formuláři v/admin/akce/[id]. Přidána textarea "Program termínu (markdown)" do modalu "Upravit termín". API endpoint pole již podporoval, chybělo jen UI. - Test order s kartou — objednávky přes testovací email
patrick@zandl.czs platbou kartou se nyní účtují 20 Kč místo 1 Kč (Stripe CZK minimum je 15 Kč). Bankovní převod zůstává na 1 Kč.
[2.7.0] — 2026-04-16
Přidáno
- Admin dashboard akcí — kompletní přepis přehledu akcí (
/admin/akce/). Produktové karty seskupené per akce s termíny uvnitř místo plochého seznamu. Tříměsíční finanční přehled (zaplaceno / čeká na platbu) nahoře. Alert panel pro přeprodané termíny a staré nezaplacené objednávky. Kapacitní bary rozlišují zaplacené (zelená) a čekající na platbu (žlutá). Waitlist počty per termín. - Monthly revenue API — nový dotaz v
/api/admin/get-dataagregující příjmy per měsíc podle data konání akce.
Opraveno
- Rozcestník akcí s budoucími termíny — stránka
/akce/[slug]/se zobrazovala jako „proběhlá akce" i když existovaly budoucí termíny vevent_dates. Nyní seisPastEventpočítá z termínů, ne jen z hlavního data eventu.
[2.6.0] — 2026-04-06
Přidáno
- llms.txt a llms-full.txt — soubory pro AI discovery (LLM crawlery). Kurátorský přehled webu s klíčovými články a rozšířená verze se všemi sekcemi.
- robots.txt rozšíření — explicitní povolení AI crawlerů (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, ChatGPT-User, Claude-Web).
- TechArticle schema — upgrade Article → TechArticle v JSON-LD pro články, přidáno inLanguage a publisher.url.
- EducationEvent JSON-LD na stránce /workshopy/ — structured data pro workshop Claude Code pro vývojáře (cena, kapacita, délka, teaches).
- Service JSON-LD na stránce /workshopy/ — structured data pro firemní workshop.
- FAQPage JSON-LD na stránce /workshopy/ — 5 nejčastějších otázek (pro koho, cena, co se naučím, firemní varianta, notebook).
- VideoObject JSON-LD na stránce /videa/ — ItemList s VideoObject pro každé video (název, popis, zhlédnutí, datum).
- Event ItemList JSON-LD na přehledu /akce/ — structured data pro nadcházející akce.
- RSS feed pro akce — nový endpoint /akce-feed.xml s posledními 30 akcemi.
- RSS autodiscovery — oba RSS feedy (články + akce) v
<head>každé stránky.
Vylepšeno
- Meta descriptions — informačně hustší popisy na homepage, /vibecoding/, /akce/, /workshopy/, /videa/, /changelog/, /podpora/.
[2.5.0] — 2026-04-02
Přidáno
- Výběr místa jako samostatný krok — seat picker odstraněn z objednávkového formuláře. Nová mezikroková stránka
/akce/vybrat-mistos celostránkovou mapou míst, step indikátorem (1. Objednávka → 2. Výběr místa → 3. Platba) a auto-předvýběrem nejlepšího volného místa. - 30minutová rezervace místa (seat hold) — nový endpoint
/api/seats/holds TTL 30 minut. Místo je držené po dobu platby; po expiraci se automaticky uvolní. Seat availability filtruje expirované holds. - DB migrace 057 —
expires_atsloupec vevent_seat_bookingspro dočasné rezervace. - Upozornění na expiraci místa — pokud uživatel zaplatí po expiraci jeho seat holdu, v potvrzovacím emailu je upozorněn a vyzván k novému výběru místa.
- Wallet pass (Passcreator) integrace — tlačítko "Přidat do Apple/Google Wallet" na stránkách
/moje-mistoa/akce/platba. - Admin: odeslání vstupenky — nový endpoint
/api/admin/send-wallet-pass+ tlačítko "Poslat/Přeposlat vstupenku" v detailu registrace. Zobrazení wallet pass odkazu v admin detailu. - Admin: wallet_pass_id/url v get-data query pro zobrazení stavu vstupenky.
Opraveno
- Dark mode kontrast — opravena nečitelnost "Téma týdne" (featured card), LLM ticker chipů a "Obsah článku" (TOC) v tmavém režimu.
[2.4.0] — 2026-04-02
Přidáno
- Modul Reklamy (
/admin/reklamy/) — přehled všech reklamních kampaní s KPI kartami (aktivní kampaně, celkový denní budget, utraceno 7d, konverze), filtrování podle statusu a platformy, progress bary budget vs. utraceno, toggle pause/resume, smazání propojení. - One-click Google Ads Search kampaně — tlačítko "Spustit Google Ads" na detailu akce i v
/admin/reklamy/pro příručku. Vytvoří budget + kampaň (Target Spend bidding) + ad group + RSA reklamu + klíčová slova v jednom batch mutate volání (Google Ads API v20). - LLM generování klíčových slov a RSA textů — endpoint
suggest-ad-keywords(OpenRouter / Gemini 2.0 Flash) navrhne 10–15 klíčových slov a 10 titulků + 4 popisy přímo z metadat akce nebo příručky. - RSA editor s počítadly znaků — titulky (max 30 znaků) a popisy (max 90 znaků) jsou editovatelné s barevným varováním při překročení limitu.
- Auto-pause při dosažení end_date — cron
sync-ad-metricsnově pauzuje kampaně send_date ≤ dnes(status →ended). - Podpora kampaní bez akce — Google Ads kampaně pro
/prirucka(lead magnet) jsou plně podporovány; LEFT JOIN v list query zajistí jejich zobrazení. - Nové sloupce v
ad_campaigns:end_date,max_cpc,rsa_headlines,rsa_descriptions. Nová tabulkaad_keywordspro Google Ads klíčová slova.
[2.3.0] — 2026-04-02
Přidáno
- Seat selection — výběr míst k sezení — kompletní systém pro akce s mapou míst. Tabulky
seat_maps,event_seat_bookings, sloupceseat_tokenaseat_reserved_rowsvregistrations/events. Mapa kina Dlabačov (13 řad, 357 míst). /moje-misto— self-service stránka pro výběr a změnu místa (token auth). Redesign: 2-sloupcový layout (mapa + sticky info panel), malé sedačky 14×14 px bez čísel, centrované řady, všechny řady viditelné bez scrollování. Info panel zobrazuje název akce, datum, místo a zvolené sedadlo; tlačítko Potvrdit na první obrazovce.- Retroaktivní email kampaň — admin "Rozeslat výběr míst" → hromadný email zaregistrovaným bez místa.
- Per-event rezervace řad — admin může označit libovolné řady jako vyhrazené (uloženo jako JSON v
events.seat_reserved_rows). - Vizuální mapa obsazenosti v adminu na detailu akce, banner obsazenosti na veřejné stránce akce (zelená <70 %, žlutá ≥70 %).
- Podpora více vstupenek na jeden email —
request-linkodesílá jeden email s N odkazy. - Responzivní seat picker při mobilním zobrazení
/moje-misto(info panel nad mapou).
Opraveno
- 500 na
/api/seats/request-link— dotaz na neexistující sloupcefirst_name/last_name; opraveno nacontact_name. - Seat picker se nezobrazoval při registraci — chyběly props
hasSeatMapaseatEventIdvWorkshopOrderForm. - Místo se neuvolnilo při zrušení registrace — přidán
DELETE FROM event_seat_bookingsdo obou cancel endpointů. - 500 při uložení místa —
select.tsdotazovalr.cancelledmístor.cancelled_at. - Rezervované řady nebyly vidět na
/moje-misto—moje-misto.astronenačítaloseat_reserved_rowszevents.
[2.3.1] — 2026-04-02
Přidáno
- Potvrzovací email po výběru místa — po rezervaci přijde email s tabulkou: název akce, datum, místo konání, přidělené sedadlo + odkaz pro změnu.
- Veřejný profil na mapě — při výběru místa lze volitelně vyplnit jméno/přezdívku a URL webu. Na veřejné mapě po najetí myší se zobrazí jméno; při vyplněné URL je sedadlo kliknutelný odkaz.
- Kapacitní součet v admin UI — sekce rezervace řad nově zobrazuje "Celkem: X — veřejně: Y" s červeným varováním při překročení kapacity.
- Email výběru místa přepracován — odesílatel
Patrick Zandl <patrick@vibecoding.cz>, formální text, deadline info, podpis. - Migrace 055 —
display_name,display_urldoevent_seat_bookings.
Opraveno
- Kontrast rezervovaných řad — z neviditelné
#f5f5f5na výraznou#d1d5db(SeatPicker.css+SeatSelector.tsx).
[2.2.0] — 2026-03-27
Přidáno
- Redesign /admin/akce/ — kompletní přepracování správy akcí do AdminLayout se sidebarem, 3-měsíční přehled akcí (aktuální + 2 měsíce dopředu), KPI stat karty, tabulka s filtry a context menu.
- Detail akce (
/admin/akce/[id]) — nová stránka s breadcrumb navigací, info kartou, tabulkou registrací s vyhledáváním a 6 status filtry, detail modálem s Fakturoid exportem a správou plateb.
[2.1.0] — 2026-03-27
Přidáno
- PDF Lead Magnet — kompletní systém pro stahování příručky "AI ve firmách 2026" výměnou za email. Double opt-in, PDF delivery z R2, 4týdenní nurturing sekvence s automatickým odesíláním.
- Admin dashboard příručky (
/admin/prirucka/) — KPI karty (registrace, konverze, churn), nurturing funnel, UTM zdroje, denní registrace graf, tabulka leadů. - Editor nurturing emailů — markdown editor s náhledem pro úpravu 4 nurturing emailů z admin UI. Šablony v DB s fallbackem na hardcoded verze.
- Training dashboard timeline — přehled akcí nyní zobrazuje celé 3 měsíce od začátku aktuálního měsíce (ne jen od dneška).
Změněno
- Redesign /prirucka landing page — full-width nadpis, větší obálka knihy (reálný obrázek místo CSS mockup), CTA tlačítko v hero sekci, zkrácený obsah příručky (kompaktní číslovaný seznam místo 8 karet), social proof přesunutý do hero.
- Email deliverability — vylepšení doručitelnosti verifikačních a nurturing emailů.
Opraveno
- Resend topic ID fallback — robustnější handling chybějící env proměnné pro ai-pro-firmy topic.
[2.0.1] — 2026-03-25
Opraveno
- Videa se neaktualizovala — stránka
/videabyla staticky prerenderovaná při buildu, kdy YouTube API klíč není dostupný. Přepnuto na SSR s CDN cache (1 h) — videa jsou vždy aktuální, API se volá max 1× za hodinu.
[2.0.0] — 2026-03-21
Přidáno
- Admin objednávek (
/admin/objednavky/) — kompletní modul pro správu objednávek placených workshopů. KPI karty (celkem, čekající, zaplacené, zrušené, příjem), tabulka se zebra stripingem, vyhledávání podle jména/emailu/VS/firmy, filtry podle stavu a akce. Detail objednávky s informacemi o zákazníkovi, platbě, workshopu a časovou osou. - FIO synchronizace z admin UI — tlačítko „Sync FIO" v objednávkách volá
/api/admin/sync-payments(chráněno Cloudflare Access místo CRON_SECRET). Zobrazí panel nespárovaných transakcí. - FIO reconciliace (
/api/admin/fio-reconcile) — diagnostický endpoint porovnávající všechny FIO transakce se všemi registracemi. Kategorizuje: already_matched, unmatched, cancelled_match, pending_match. - Email notifikace o nespárovaných platbách — cron
check-paymentspo každém běhu zkontroluje nespárované příchozí platby a pošle admin email s tabulkou k manuálnímu řešení. - Akce v detailu objednávky — ruční potvrzení platby, kontrola FIO podle VS, odeslání upomínky, zrušení/obnovení registrace, změna termínu (date variant).
Změněno
- Platební lhůty — prodlouženy z 1/2 dny na rozlišení osobní/firemní: osobní registrace (bez IČO) — upomínka po 3 dnech, zrušení po 7 dnech; firemní registrace (s IČO) — upomínka po 7 dnech, zrušení po 14 dnech.
- Newsletter odesílatel — přepnuto na
Patrick Zandl <patrick@vibecoding.cz>přes env proměnnouRESEND_NEWSLETTER_FROM.
Opraveno
- 10 chybně zrušených registrací — starý systém (1 den upomínka, 2 dny zrušení) automaticky zrušil registrace dříve, než platby dorazily. Všech 10 + 1 (DEVELMAGIC s VS ve zprávě místo v poli VS) obnoveno, zaplaceno, faktury vystaveny.
- Admin témata — parsování obsahu témat z Telegram bota (extrakce titulku z „Titulek:" řádku, čistý excerpt bez GitHub navigace, lehký markdown renderer pro rozbalený obsah, oprava slepení data).
[1.9.0] — 2026-03-17
Přidáno
- Čekací listina na workshopy — když jsou všechny termíny vyprodané, formulář se změní na waitlist signup (jméno + email). Když jsou volné termíny, přibyla volba „Žádný termín mi nevyhovuje" která skryje cenu a fakturaci a umožní registraci k odběru avíz.
- Notifikace čekajících — admin endpoint pro hromadné odeslání emailu „Nový termín" všem na čekací listině s CTA na registraci.
- Témata z Telegram bota — nové tlačítko 📌 Téma v botu uloží raw obsah URL pro pozdější zpracování do článku. Admin stránka
/admin/temata/se vyhledáváním, rozbalitelným textem a kopírováním do schránky. - Partnerské kódy (přejmenováno ze „Slevové/Promo kódy") — editační modal, strukturované karty s metrikami a progress barem.
- Redesign admin dashboardu — business-first layout s KPI kartami (revenue, pipeline, workshop, poptávky), spojeným kalendářem z obou DB, akčním panelem (poptávky, čekající platby, partnerské kódy) a collapsed zprávičkami.
- FIO kontrola z dashboardu — tlačítko „Spustit kontrolu FIO" volá server-side proxy bez expozice CRON_SECRET na frontend.
Opraveno
- Digest filtrování článků — články publikované na hraničním dni (now - N dní) se nezobrazovaly kvůli porovnání s časovou složkou. Opraveno oříznutím na začátek dne.
- Oddělení featured a regular článků v digestu — nadpis „Další články" mezi sekcemi, regular články se vizuálně neztrácí pod featured kartami.
Změněno
- Cron jobs — přesun na cron-job.org (check-payments každých 30 min, send-reminders denně, weekly-digest úterý, promo-summary denně).
- Navigace — Zprávičky přidány do hlavního menu, „Firemní AI vývoj" nahrazeno interním „Workshopy".
[1.8.0] — 2026-03-16
Přidáno
- Slevové promo kódy — systém slevových kupónů pro workshopy. Kód nastaví novou cenu, lze omezit na konkrétní akci, počet použití a platnost. Podpora provizí pro partnery.
- Promo kód v objednávkovém formuláři — pole „Slevový kód" s živou validací. Po ověření se zobrazí nová cena a přeškrtne původní.
- Admin promo kódů (
/admin/promo-kody/) — vytváření, přehled, aktivace/deaktivace, mazání. Zobrazuje statistiky využití a provizí. - Automatické shrnutí promo kódů — cron endpoint
/api/cron/promo-summarypo vypršení kódu nebo den po workshopu pošle kontaktní osobě email se shrnutím využití a výpočtem provize.
[1.7.0] — 2026-03-16
Přidáno
- Sekce Workshopy (
/workshopy/) — nová landing page s nabídkou workshopů pro vývojáře (Claude Code) a firemních workshopů (Startup/Firma/Enterprise). Dynamické termíny z DB, social proof strip, profil lektora, FAQ accordion a poptávkový formulář. - Poptávkový formulář firemních workshopů — formulář na
/workshopy/#poptavkaodesílá notifikační email a ukládá poptávku do DB (workshop_inquiries). - Admin poptávek (
/admin/poptavky/) — přehled poptávek s barevným rozlišením statusů (nová/kontaktováno/vyhrána/ztracená), inline změna stavu a poznámky. - Zprávičky v hlavní navigaci — přidán odkaz na
/zpravicky/do desktop i mobile menu.
Změněno
- Navigace — položka „Firemní AI vývoj" (externí link na aivefirmach.cz) nahrazena interním tlačítkem „Workshopy" (
/workshopy/). Barva highlight tlačítka změněna z oranžové na zelenou. - Footer — odkaz na aivefirmach.cz nahrazen interním odkazem na
/workshopy/. - Cron jobs — přesun z wrangler.toml cron triggers (nefunkční bez scheduled handleru) na externí cron-job.org. Tři joby: check-payments (30 min), send-reminders (denně), weekly-digest (úterý).
[1.6.0] — 2026-03-14
Přidáno
- Automatické párování plateb — cron endpoint
/api/cron/check-paymentskaždou hodinu kontroluje FIO API a páruje příchozí platby s objednávkami workshopů podle variabilního symbolu. Po spárování se automaticky vytvoří zaplacená faktura ve Fakturoidu a odešle zákazníkovi emailem. - Fakturoid export při ověření platby —
verify-payment.tsnyní při úspěšném ověření platby automaticky exportuje fakturu do Fakturoidu (dříve jen při manuálním potvrzení adminem). - Per-token FIO rate limiting — workshop (FIO_WORKSHOP_TOKEN) a donation (FIO_API_TOKEN) tokeny mají nezávislé rate limity, neblokují se navzájem.
Změněno
- Platební účet workshopů — přesun z Air Bank (1925326058/3030, bez API) na FIO podnikatelský účet (2403461724/2010, s API). Aktualizovány QR kódy, platební stránka, reminder emaily a registrační emaily.
- Generování variabilních symbolů —
crypto.getRandomValues()místoDate.now() % 1000 + Math.random(). Workshop VS ověřuje uniqueness v DB s retry mechanismem (až 5 pokusů). - Cron schedule — přidán hodinový trigger
11 * * * *pro kontrolu plateb.
[1.5.0] — 2026-03-12
Přidáno
- Newsletter s Resend Topics — dvě odběrové skupiny (Vibecoding Akce + Vibecoding Články) v jedné audience. Odhlášení přes brandovanou Resend preferences stránku.
- Formuláře pro odběr newsletteru — v patičce článků (source: clanky) a na homepage (source: both). Double opt-in s topic přiřazením podle zdroje.
- Týdenní přehled článků (weekly digest) — automatický broadcast nových článků každé úterý 8:00 UTC. Formát: logo + „Vibecoding.cz weekly" hlavička, featured články jako „Téma týdne", vlastní akce nahoře, externí akce dole pod „Kde mě potkáte".
- Úvodník v digestu — markdown textarea v admin UI pro osobní komentář. Uloží se do DB, pošle se jednou a automaticky se označí jako odeslaný.
- Admin UI pro digest — náhled, ruční odeslání, nastavení období/předmětu/úvodního textu v /admin/newsletter.
- Cron weekly-digest — endpoint /api/cron/weekly-digest s autentizací přes CRON_SECRET.
- Parallel.ai Extract API — integrace pro extrakci obsahu z URL v Telegram botu. Parallel jako primární zdroj (3–6x více obsahu než Cheerio), Cheerio jako fallback. X/Twitter extrakce nezměněna.
- Promo banner workshopů v článcích — dynamický banner pro placené workshopy v každém článku, kompaktní promo pro ostatní akce.
Změněno
- Předmět digestu — „Vibecoding.cz weekly: [název prvního featured/prvního článku]" místo generického.
- Sync kontaktů — sjednocení registrací a newsletter subscribers přes SQL UNION ALL, oba Resend Topics se nastaví na opt_in.
- Broadcast name limit — oříznutí na 70 znaků (Resend limit).
[1.4.0] — 2026-03-12
Přidáno
- Prémiový workshop landing page — placené workshopy mají nový design: hero sekce s fotkou lektora a tmavým gradientem, detail strip (datum, čas, místo, kapacita), blokové formátování programu (h2/h3 jako karty), instructor karta a sticky objednávkový formulář.
- SEO optimalizace hub stránek — optimalizované title a meta description pro všechny nástroje (Claude Code, Cursor, Windsurf, Lovable.dev, Replit, Gemini CLI, Databutton, Tempo Labs). Úvodní texty 150–200 slov s interním prolinkováním. FAQ sekce s FAQPage JSON-LD schema pro Google featured snippety.
- Navigace AI nástrojů na /vibecoding/ — chip/pill odkazy na všechny sekce AI nástrojů nad seznamem článků.
- Security hardening — centrální CF Access JWT verifikace v middleware pro /api/admin/*, CSRF origin validace na registraci a dotazníky, internal secret pro server-to-server volání, cron secret autentizace, rate limiting na proformu.
- Obchodní podmínky — stránka /obchodni-podminky/ se storno podmínkami, odkazy z objednávky, platební stránky a proformy.
- BCC objednávek — email s platebními údaji se posílá v BCC na patrick@zandl.cz.
Změněno
- Platební účet — workshopy přesunuty na Air Bank (1925326058/3030), FIO zůstává jen pro dary.
- Volitelné firemní údaje — objednávku workshopu lze učinit i bez IČO a názvu firmy.
- Dodavatel na proformě — aktualizovány údaje (IČO 43943420, email patrick@zandl.cz), přidán QR kód pro platbu.
[1.3.1] — 2026-03-10
Přidáno
- Tlačítko pro kopírování code bloků — malá ikonka clipboardu v pravém horním rohu každého
<pre>bloku v článcích. Po kliknutí se obsah zkopíruje do schránky a ikonka se na 1,5 s změní na fajfku. - Responzivní hamburger menu — na mobilech (pod 760px) se navigace schovává do hamburger menu s animovanou ikonkou. „Firemní AI vývoj" zůstává viditelný na tabletech, na malých telefonech (pod 640px) se přesune také do menu. Desktop zůstává beze změn.
[1.3.0] — 2026-02-26
Přidáno
- Strukturovaný logovací systém — nový
src/lib/logger.tss korelačními ID, hierarchickými kroky a měřením doby trvání. Všechny klíčové funkce vtelegram-bot.tsawebhook.tsinstrumentovány pro diagnostiku zpracování URL přeswrangler tail. - SPA detekce — rozpoznání Lark Suite, Notion, Confluence a Google Docs s varováním o JS-renderovaném obsahu.
- Healthcheck panel v admin/zpravicky — nový endpoint
/api/admin/bot-healtha přehledový panel s konfigurací, statistikami zpráv, digestu a poslední aktivitou. - Dynamický event banner v článcích — banner se náhodně střídá mezi vlastními a externími akcemi. Cachovaný API endpoint
/api/upcoming-events(1h na edge) minimalizuje zátěž D1/Workers. Bez nadcházejících akcí se banner skryje. - Pole is_own_event v admin formuláři — checkbox "Vlastní akce" s poli pro název přednášky a URL externí akce.
Změněno
- Redesign admin/zpravicky — nová tabulka s barevnými type badges, entity tagy, relativními daty a indikátorem odeslání do Telegramu.
- Admin/akce filtr — zobrazuje jen vlastní akce (is_own_event = 1), externí akce skryty.
- Odstraněna sekce admin/digest z navigace (digest mód zrušen upstream).
- Karta akce na /akce/ — odstraněno zobrazení URL externí akce v rámečku.
[1.2.0] — 2026-02-23
Přidáno
- X API v2 pro news mode — tweety se nyní zpracovávají výhradně přes X API v2 (
fetchTweetViaApi), včetně plného textu Twitter Articles (note_tweet,article.plain_text). Externí články odkazované z tweetů se automaticky stahují. Bez fallbacku na fxtwitter. - Gemini pro YouTube — YouTube videa se zpracovávají modelem
google/gemini-2.5-flash(konfigurovatelné přesllm_model_youtube), který umí nativně analyzovat obsah videa. - Automatické JSON instrukce —
NEWS_JSON_FORMATblok se vždy přidá ke každému promptu (i ke custom promptům z DB), takže LLM vždy vrátí validní JSON.
Opraveno
- Prázdné zprávičky — příčina: model
google/gemini-3.1-pro-previewnerespektovalresponse_format: json_objecta custom prompty v DB neměly JSON instrukce. Změněn výchozí model nagoogle/gemini-2.5-pro. - OpenRouter + Claude
response_formatnekompatibilita — Anthropic Claude přes OpenRouter nepodporujeresponse_format: json_object(konvertuje na tool_use). Parametr se nyní přeskočí proanthropic/modely; spolehlivé JSON instrukce v promptu stačí. - Markdown místo HTML v zprávičkách — 64 % článků mělo
**tučné**místo<b>tučné</b>. Opraveno robustnějším parsingem s text fallbackem.
[1.1.0] — 2026-02-21
Přidáno
- Training Management System — Frontend SPA — responzivní React SPA na
/training/pro správu zákazníků, zakázek, typů akcí, kalendáře a uživatelů. Hash router, JWT auth, SCSS modules s light/dark mode, cs/en lokalizace. Role-based navigace (admin/editor/external). Desktop sidebar, tablet collapsed, mobile bottom tab bar. CRUD na všech entitách, pipeline dashboard, měsíční kalendář s barevnými bloky dle statusu.
[1.0.0] — 2026-02-21
Přidáno
- Evidenční a objednávkový systém (Training API) — kompletní backend REST API
/api/v1/*pro evidenci zákazníků, zakázek, typů akcí, kalendář obsazenosti a dashboard. RBAC s rolemi admin/editor/external. Separátní D1 databázetraining-db. - D1-based rate limiting — persistentní rate limiting login pokusů v D1 databázi místo in-memory Map, funkční napříč Cloudflare Workers instancemi.
- Bookmark Digest — osobní analytický digest z odkazů přes Telegram bota s LLM zpracováním a streaming voláním.
Změněno
- Streaming LLM volání pro digest — prevence Cloudflare Worker timeoutu.
- Redesign digest emailu — lepší UX, formátování odstavců a podnadpisů.
Opraveno
- HTML sanitizace v Telegram zprávách — konverze
<br>na newlines, korektní odstranění nepodporovaných tagů. - Tiché selhání Telegram API — přidáno logování chyb a sanitizace HTML.
2026-02-17
- Hodnocení článků — přidán widget
mg-feedback.jsz top.marigold.cz do šablony každého článku ([...slug].astro). Widget se zobrazuje pod podpisem autora a umožňuje čtenářům ohodnotit článek (sad/neutral/happy). Hlasy se sbírají centrálně v systému article-engagement-tracker a jsou dostupné v admin dashboardu natop.marigold.cz. Slug článku odpovídá poslednímu segmentu Astro slug (bez data prefixu).
2026-02-16
- Newsletter subscription s double opt-in — formulář na
/akce/pro přihlášení k odběru upozornění na nové akce s potvrzením emailem (GDPR compliant). - Nová databázová tabulka
newsletter_subscriberss verification tokens a cancellation tokens. - Verification flow — uživatel zadá email → obdrží verification email → klikne na odkaz → přidání do Resend segmentu.
- Nové endpointy:
/api/verify-newsletter(potvrzení),/api/cancel-newsletter(odhlášení). - Potvrzovací stránky:
/akce/newsletter-confirmed,/akce/newsletter-cancelled,/akce/newsletter-error. - Oprava dynamického načítání data akce — stránka
/akce/registrace-uspesnanyní zobrazuje správné datum a čas akce místo hardcoded 9. února 2026.
2026-02-15
- Zobrazení náhledového obrázku v článcích — thumbnail z frontmatter (pole
thumbnail) se zobrazuje mezi nadpisem a sekcí "Rychlé body". Obrázek je plně responzivní s jemným borderem a border-radius. - Vylepšení adminu /akce/ — když je vybraná konkrétní akce z rolety, statistiky (aktivní/čekající/zrušení) se počítají pouze pro vybranou akci. Sloupec "Akce" v tabulce registrací se skryje, aby nebyl redundantní.
2026-02-15
- Vylepšení typografie článků — výraznější nadpis (2-2.6rem responsive), zprovoznění italiky (
emtag) a explicitní zobrazení odrážek u seznamů. - Podpis autora na konci každého článku — italika, větší písmo (1.1rem), zarovnání vpravo, oddělený horním okrajem. Pokud autor není uveden, zobrazí se Patrick Zandl.
- Vkusné odrážky v sekci "Rychlé body" — zelené accent barvy (1.1em), větší spacing, konzistentní s designem webu.
- Telegram promo box přesunut na konec článků — zobrazuje se za podpisem autora, před patičkou, jako call-to-action po přečtení.
2026-02-13
- Nová administrace newsletteru na
/admin/newsletter/s markdown editorem, náhledem a rozesláním přes Resend Broadcast. - Newsletter flow převeden na nový Resend segments model (
segmentId), bez závislosti na audience ID. - Přidána synchronizace kontaktů z registrací do Resend segmentu včetně respektování
marketing_optout. - Doplněn One-Click unsubscribe endpoint (
POST /api/unsubscribe) proList-Unsubscribe-Post. - Oprava deploye: doplněny chybějící knihovny
src/lib/newsletter.tsasrc/lib/newsletter-sync.ts. - Vylepšen výstup syncu v adminu: detailnější souhrn výsledků (počty, cílový stav segmentu, doba běhu).
- Odkaz v hlavní navigaci změněn z "Školení" na "Firemní AI vývoj" s novým URL na firemní workshop Claude Code (https://www.aivefirmach.cz/claude-code-workshop/). Odkaz je vizuálně zvýrazněn oranžovým gradientem pro lepší viditelnost.
2026-02-08
- Nová stránka /podpora/ — darovací stránka s QR kódem (SPAYD), volitelnou částkou, ověřením platby přes FIO API a seznamem podporovatelů.
- React komponenta DonationForm s přednastaveními částek (50/100/200/500 Kč), QR kódem generovaným na klientu (qrcode.react) a persistencí VS v localStorage.
- API endpointy /api/fio/verify-donation (ověření platby podle VS) a /api/fio/donors (seznam aktivních dárců).
- Odkaz "Podpor provoz" v patičce webu na všech stránkách.
2026-02-05
- Přechod z Telegram skupiny na kanál @vibecoding_patrick — jednosměrná distribuce zpráviček a článků.
- Bot automaticky maže servisní zprávy (připojení/odchod členů) ve skupině.
- Bot ignoruje servisní zprávy a neodpovídá "nemáš oprávnění" novým členům.
- Aktualizace všech Telegram odkazů na webu (patička, homepage, zprávičky, články).
- Telegram notifikace pro zprávičky — automatické odesílání nových zpráviček do kanálu při publikaci z admin UI (řízeno nastavením
telegram_auto_notify). - Nový endpoint
/api/telegram/notify-articlespro automatické odesílání nových článků na Telegram kanál. - GitHub Actions workflow — denní cron (8:00 UTC) + trigger při push na main pro automatické notifikace článků.
- Propagace Telegram kanálu na webu — odkaz v patičce (vedle LinkedIn), banner na stránce Zprávičky, sidebar box na homepage, promo karta v článcích.
2026-02-03
- Nový Split Hero na titulní stránce — téma týdne vlevo, karusel zpráv vpravo s dynamickým seskupováním podle délky textu.
- Karusel zpráv automaticky zobrazuje více krátkých zpráv nebo méně dlouhých na jedné stránce (limit 350 znaků).
- Auto-rotace karuselu každých 5.5s, pauza při hoveru, swipe gesta na mobilu, klávesnicová navigace.
- Nová sekce Zprávičky (/zpravicky) — krátké zprávy ze světa AI generované z odkazů pomocí Telegram bota.
- Telegram bot @vibecoding_patrick — zpracování odkazů pomocí LLM (OpenRouter), tlačítka pro publikaci/zahození, podpora Twitter/X, článků, GitHub.
- Nové stylování tabulek v článcích — zaoblené rohy, zelený gradient v hlavičce, zebra striping, hover efekty, zvýrazněný první sloupec pro kategorie.
- Responzivní tabulky na mobilu — horizontální scroll se sticky prvním sloupcem pro lepší orientaci.
2026-02-02
- Přidán nový sloupec "Vydáno" v přehledu LLM modelů s možností řazení podle data publikace.
- Pole
release_datevyužívácreatedtimestamp z OpenRouter API (datum přidání modelu na platformu). - Doplněno
release_datedo všech 125 existujících LLM modelů. - Tracker skript automaticky nastavuje
release_datepro nové modely.
2026-02-01
- Přidáno pole
program(markdown) do editačního formuláře akcí v administraci — umožňuje editovat detailní program akce přímo z admin panelu. - Místo konání akce je nyní prolinkované na URL mapy s ikonkou 📍 — kliknutím se otevře mapa v novém okně.
- Redesign changelog stránky — vizuální kategorizace změn (✨ nové funkce, 🔧 opravy, 📝 drobnosti), lepší stylování inline kódu s pozadím, karty pro jednotlivé záznamy.
2026-01-30
- Opraveny Open Graph meta tagy pro články —
og:typezměněn zwebsitenaarticle, přidányarticle:published_timeaarticle:authorpro lepší náhledy při sdílení na sociálních sítích.
2026-01-28
- Plně responzivní design pro mobilní telefony — kompaktní hlavička (menší avatar, skrytý subtitle, inline navigace + hledání), přizpůsobení všech typů stránek (homepage, LLM přehled, LLM detail, články, akce), stacked footer, bottom-sheet vyhledávání, edge-to-edge code bloky.
- Re-analýza 76 LLM modelů s rozšířeným schématem — benchmarky, expert verdikty (killer feature, skryté riziko), celkové skóre a tier hodnocení pro modely od OpenAI, DeepSeek, Google, Anthropic, xAI, Mistral a Z.AI.
- Redesign LLM detailu — hero sekce s provider badge a skóre, vizuální benchmark progress bary, insight karty (killer feature / skryté riziko), porovnávací tabulka s konkurencí, rozhodovací pomocník (použij/nepoužívej).
- Rozšíření LLM analyzátoru o generování nových polí (expert_verdict, benchmark_categories, overall_score) a re-analýzu existujících modelů.
- Přidáno vyhledávání v hlavičce s našeptávačem a server‑side indexem (články, LLM, akce).
- Nová stránka /search pro kompletní výsledky vyhledávání.
- Zkratky pro vyhrazená slova (Codex, Claude Code, Cursor, Lovable, Replit, Gemini, Windsurf, Tempo Labs).
- Přidán veřejný changelog a odkaz v patičce.
- Styling pro vyhledávání v hlavičce i na stránce výsledků.
- Opraven build changelogu (import přes
?rawbez Nodefs). - Nastaveno passthrough pro Astro image service kvůli Cloudflare adapteru.
- Přesun Sass
@importna@usekvůli deprecacím. - Opraven frontmatter u článku o indexování velkých codebase (odstraněn
layout: post). - Přidán odkaz na LinkedIn do patičky včetně ikonky.
- Opraveno vyhledávání (API není prerenderované, vrací živé výsledky).
- Vyhledávání v hlavičce drží jednu řádku s menu; RSS odebráno z hlavičky.
- U registrace akce přidány informace k emailu pod polem.
- Přidán dynamický sitemap.xml (články, LLM, nástroje, akce).
- Přidány 301 přesměrování starých článkových URL bez kategorie/data.
- Redesign stránky /llm s vyhledáváním jen mezi modely, filtry a porovnáním.