Solo úkol: ICS export období sběru

Samostatná práce mimo běžný vývojový balík — neimplementováno v hlavní větvi produktu. Kontext: sezonnost-a-kalendar.md §3 (dříve backlog), uzivatelsky-ucet.md §1 u připomínek.

Cíl

Umožnit uživateli (nebo návštěvníkovi bez účtu v minimální variantě) stáhnout kalendářový soubor (.ics) s událostmi odpovídajícími obdobím sběru z harvest_periods — alespoň jedna z variant:

  • Per měsíc — např. „květen: všechny byliny v katalogu, které mají v datech sběr v květnu“ (agregát, může být hlučný).
  • Per bylina — jedna karta byliny → tlačítko „Přidat sběrová okna do kalendáře“ (události podle řádků harvest_periods, respektovat přesah přes rok).
  • Per uživatelský výběr (později) — vyžaduje účet a uložený herbář (uzivatelsky-ucet.md).

Technické poznámky

  • Formát iCalendar (RFC 5545) — VEVENT, DTSTART/DTEND nebo celodenní série; u měsíčního sběru bez konkrétního dne použít celoměsíční nebo první/poslední den měsíce a jasný popis v SUMMARY/DESCRIPTION.
  • Route navrhovaná např. GET /sezona/:month.ics nebo GET /byliny/:slug/harvest.icsContent-Type: text/calendar; charset=utf-8, rozumný Content-Disposition pro stažení.
  • Cache a SEO — dynamické ICS obvykle noindex; sitemap typicky ne.
  • Časová zóna — konzistentně s Europe/Prague (viz app/lib/calendar-month.ts na úvodní stránce).

Akceptace

  • Alespoň jedna varianta (měsíc nebo bylina) vrací validní .ics otestovaný importem do běžného kalendáře (Apple Calendar / Google Calendar).
  • Text události neobsahuje léčebná tvrzení — jen popis období sběru z dat.
  • Dokumentace v sezonnost-a-kalendar.md a 23-api-and-routes.md aktualizována po dodání.

Po dokončení

Označit tento soubor jako hotový (checkboxy v sekci „Stav") a v průřezovém dokumentu sezóny (sezonnost-a-kalendar.md) doplnit odkaz na konkrétní cestu API.