Všechny články
Astro 2026-04-22 · 2 min čtení

Z natvrdo psaného JSX do typované content collection

Sekce „Na čem pracuji" na homepage byla původně pět karet napsaných ručně v komponentě. Teď je to typovaná content collection v Astru — a každý projekt má vlastní stránku.


Když jsem před rokem skládal první verzi téhle stránky, sekce „Na čem pracuji” se mi nezdála jako problém. Pět karet, každá s názvem, popisem a ikonou, všechno natvrdo v JSX komponentě. Šlo to rychle a vypadalo to dobře.

Problém s dvojjazyčností

Problém přišel ve chvíli, kdy jsem začal řešit dvojjazyčnost. Najednou jsem měl dvě komponenty se stejnou strukturou ale jiným textem, dva zdroje pravdy o tom, co vlastně dělám, a žádnou možnost na to z homepage rozkliknout detail. Když jsem k jednomu z projektů chtěl napsat víc, musel jsem mu vyrobit vlastní stránku — což znamenalo zase ručně.

Řešení: content collections

Vyřešil jsem to přechodem na content collections v Astru. Každý projekt je teď jeden markdown soubor pod src/content/projects/. Schéma drží Zod: vyžaduje název, krátký podnadpis, popis, ikonu, stav (active/paused/completed), pořadí, jazyk a volitelně odkazy ven. Jméno souboru kóduje slug a jazyk — evidy.cs.md, evidy.en.md. Astro to při buildu zkontroluje a vygeneruje TypeScript typy, takže homepage komponenta dostává typově bezpečné objekty.

Detailní stránky z markdownu

Z toho samého markdownu pak vznikají detailní stránky /projekty/[slug] a /en/projects/[slug]. Tělo článku je markdown, frontmatter řídí hlavičku stránky, layout BaseLayout dál řeší canonical, hreflang a sociální karty. Když přidám nový projekt, stačí přidat dva soubory (CS a EN) a build sám vyrobí všechny URL.

Status badge z dat

Vedlejší efekt, který mě potěšil: status badge na kartě homepage teď vychází z dat. „Aktivní” / „Pozastaveno” / „Dokončeno” se mění bez sahání do JSX. Pro někoho, kdo se snaží mít web pravdivý ke skutečnému stavu věcí, je to docela funkční.

Co bych udělal jinak

Co bych udělal jinak: kdybych začínal znovu, dal bych si víc práce se schématem hned od začátku. Zod validace mi několikrát chytila překlep ve frontmatteru — věc, kterou jsem v ručně psaném JSX nikdy nezachytil, protože tam to byl prostě string.


PP
Peter Pleško
Datový a analytický inženýr · spoluzakladatel EVIDY

Začínal jsem v PPC v roce 2011. Dnes vedu data a analytiku v EVIDY — agentuře na pomezí výkonnostního marketingu a datové vědy.


Pokračovat
2026-05-01

Cloudflare Pages a obsah na míru pro AI agenty

Po roce na Firebase Hostingu se web stěhuje na Cloudflare Pages. Hlavní motivace není rychlost, ale to, co s edge funkcemi půjde — třeba servírovat markdown rovnou Claudovi nebo GPTBotu.

Cloudflare
2026-04-15

Nový web: CS-first, Cloudflare, agent-ready

Krátké shrnutí toho, proč přestavuji osobní web jako česky-mluvící značku, kam jsem ho přestěhoval a co znamená „připravené pro AI agenty".

Meta