LydiaCMS je modulární CMS postavený na Nette a Symfony komponentách, který od roku 2020 vyvíjím a provozuji. Na LydiaCMS běží také tento web.
V číslech
- Od roku 2020 LydiaCMS průběžně vyvíjím a provozuji
- 24 samostatně verzovaných modulů, například Core, Data, Integration, API a Backup
- 800+ / 250+ testovacích metod jádra a E2E testů v Playwrightu
- 21 vlastních pravidel pro PHPStan a Rector
Vybraná technická rozhodnutí
Administrace generovaná z datového modelu
U více než sta entit by ruční vytváření formulářů, přehledů a filtrů znamenalo velké množství boilerplate kódu. Základní administrační komponenty, jako jsou formuláře a tabulkové přehledy, proto generuji automaticky z metadat Doctrine ORM. Vlastní kód píšu jen pro specifická rozhraní a komponenty.
Moduly distribuované pomocí Composeru
LydiaCMS jsem rozdělil do samostatných modulů distribuovaných jako Composer balíčky. Jednotlivé moduly se do aplikace registrují prostřednictvím Nette DI, takže konkrétní projekt může použít jen ty, které potřebuje. Každý balíček má vlastní repozitář a verzi, a mohu ho proto vyvíjet a vydávat nezávisle na ostatních.
Kvalita a automatizace
V jádře udržuji více než 800 jednotkových a integračních testovacích metod; ukázkovou aplikaci ověřuji více než 250 E2E testy v Playwrightu. Kód analyzuji PHPStanem na maximální úrovni, doplněným o vlastní pravidla projektu. Opakované refaktoringy automatizuji pomocí Rectoru. Vydávání balíčků a nasazování aplikace automatizuji prostřednictvím GitLab CI/CD.
Správa administrace pomocí AI
Díky implementaci MCP mohu administraci LydiaCMS spravovat z ChatGPT nebo Codexu, stejně jako z Claude či Claude Code. Protože rozhraní využívá otevřený protokol MCP, nejsem vázaný na jednoho poskytovatele a mohu připojit také další AI nástroje s podporou MCP. Každé volání se provádí pod samostatným uživatelem administrace, kterému přiděluji pouze oprávnění potřebná pro daný úkol. Provedené změny se zapisují do auditního logu, kde je mohu zkontrolovat a případně vrátit. AI tak mohu používat pro skutečnou správu obsahu, aniž bych jí poskytl neomezený přístup k administraci nebo databázi.
AI a bezpečnost · lydiacms-api
Technický základ
LydiaCMS je serverová aplikace postavená na PHP 8.5, Nette, Latte a Tracy. Datovou vrstvu tvoří Doctrine ORM zapojené přes Nettrine. Samostatně verzované Composer balíčky za běhu tvoří jeden modulární monolit.
Data a integrace: Doctrine ORM · Nettrine · Migrations · Fixtures · Nette Security · Nette Caching · Nette Mail · Contributte · Ublaboo Datagrid · Symfony Workflow · Symfony Cache · Symfony String · Flysystem · REST/MCP API
Kvalita: Nette Tester · PHPStan · Rector · ECS · PHP-CS-Fixer · Playwright
Provoz a nasazení: Docker · Docker Compose · GitLab CI/CD
Co bych dnes udělal jinak
LydiaCMS vznikl jako pískoviště a postupně vyrostl v celý systém. Díky tomu jsem si prakticky prošel návrhem architektury, datového modelu, oprávnění, administrace, testů, automatizace i provozu. Současně jsem poznal cenu vlastního řešení: vedle funkcí pro konkrétní web udržuji také obecnou infrastrukturu, kterou už řeší existující platformy.
Dnes bych proto pravděpodobně nezačínal kompletně na zelené louce. Nejprve bych prověřil existující headless platformu a rozšířil ji o potřebné části. Architekturu bych navrhl volněji a více API-first, aby šlo samostatně měnit administraci, veřejný web a integrační rozhraní. Vlastní řešení bych stavěl až tam, kde by dostupné platformy narážely na konkrétní požadavky.
Projekt proto nepovažuji za chybu. Splnil svůj původní účel a dal mi zkušenosti, které bych pouhým skládáním hotových komponent nezískal. S dnešními znalostmi bych ale přísněji rozlišoval, co má smysl vyvíjet vlastními silami a co je výhodnější převzít a rozšířit.
Vyzkoušejte si to
Veřejná část LydiaCMS běží na cms.krejciradek.cz. Repozitář lydiacms-demo obsahuje aplikaci v Docker Compose, ukázková data a automatické založení administrátora s náhodným heslem. Core zůstává soukromým Composer balíčkem, takže lokální spuštění vyžaduje deploy klíč, který mohu zájemci zpřístupnit.