Druhá generácia mojej vlastnej štartovacej šablóny pre Next.js a Payload CMS. Poskytuje základ pre ďalšie projekty a AI asistenta na tvorbu, preklad, preformulovanie obsahu a generovanie blokov na požiadanie.

Vývojári začínajúci nové webové projekty a redakčné tímy pracujúce s obsahom v Payload CMS.
Šablóna bola opakovane použitá ako základ klientskych projektov.
AI asistent poskytuje nástroje na tvorbu a úpravu obsahu priamo v rámci riešenia.
Táto šablóna je druhou iteráciou môjho vlastného základu pre webové projekty. Cieľom je mať pripravenú spoločnú funkcionalitu a pri ďalšom projekte ju prispôsobiť konkrétnemu zadaniu. Podľa existujúcich podkladov bola šablóna použitá vo viacerých klientskych projektoch.
Pripraviť opakovane použiteľný základ pre nové projekty a doplniť redakčné prostredie o nástroje na tvorbu a úpravu obsahu.
Šablóna kombinuje Next.js 16, Payload CMS 3, TypeScript a PostgreSQL. Integrovaný AI asistent podporuje tvorbu textov, preklady, preformulovanie a generovanie obsahových blokov na požiadanie.
Rozšírenie o AI asistenta zahŕňa tvorbu textov, preklad, preformulovanie aj generovanie blokov na požiadanie. Projekt tým prepája vývojársku infraštruktúru s nástrojmi pre redakciu. Stack uvádza aj Playwright a Vitest; bez výsledkov testov však neuvádzam pokrytie ani garancie kvality.
Vývoj druhej generácie vlastnej štartovacej šablóny Next.js a Payload CMS.
Rozšírenie šablóny o integrovaného AI asistenta pre prácu s obsahom.
Opakované využitie šablóny ako základu klientskych projektov.
Príklad ukazuje typovo rozlíšené požiadavky na asistenta. Každá operácia nesie iba údaje, ktoré potrebuje. Skutočná integrácia modelu, validácia vstupov a ukladanie obsahu tu nie sú implementované.
type ContentTask =
| { action: "compose"; brief: string }
| { action: "translate"; text: string; locale: "sk" | "en" }
| { action: "rephrase"; text: string }
| { action: "generate-block"; brief: string; blockType: string };
function taskSource(task: ContentTask): string {
switch (task.action) {
case "compose":
case "generate-block":
return task.brief;
case "translate":
case "rephrase":
return task.text;
}
}