Radek Krejčí

LydiaCMS

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.

Architektura

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.

Architektura

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.

Kvalita a automatizace

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.

Zdrojové kódy ostatních balíčků jsou na GitLabu a GitHubu.

Napište mi přes kontaktní formulář

Kontakt

Hledáte posilu do PHP týmu?

Pokud řešíte nový backendový projekt, integraci nebo potřebujete posílit vývoj existujícího systému, napište mi.