added files with prompts

This commit is contained in:
2026-06-12 12:54:10 +02:00
parent 0f791c3a90
commit 2cd8671014
21 changed files with 1517 additions and 0 deletions

View File

@ -85,5 +85,89 @@
<p>Plán implementácie MVP. Kompletný zoznam očíslovaných krokov pre postupnú realizáciu celého projektu.</p>
</li>
</ul>
<h2>Implementation Prompts</h2>
<ul>
<li>
<a href="prompts/step01.md">step01.md</a>
<p>Inicializácia projektu a základná štruktúra.</p>
</li>
<li>
<a href="prompts/step02.md">step02.md</a>
<p>Core Data Services (Úložisko).</p>
</li>
<li>
<a href="prompts/step03.md">step03.md</a>
<p>API vrstva a Error Handling.</p>
</li>
<li>
<a href="prompts/step04.md">step04.md</a>
<p>Správa používateľov a projektov (Session).</p>
</li>
<li>
<a href="prompts/step05.md">step05.md</a>
<p>Služba pre GDPR súhlas.</p>
</li>
<li>
<a href="prompts/step06.md">step06.md</a>
<p>Kostra Wizardu (Frontend UI).</p>
</li>
<li>
<a href="prompts/step07.md">step07.md</a>
<p>Wizard - Segmentácia biznisu (Krok 1).</p>
</li>
<li>
<a href="prompts/step08.md">step08.md</a>
<p>Wizard - Identita a Kontakt (Krok 2).</p>
</li>
<li>
<a href="prompts/step09.md">step09.md</a>
<p>Wizard - Služby a Smart otázky (Krok 3).</p>
</li>
<li>
<a href="prompts/step10.md">step10.md</a>
<p>Wizard - Vizuál a Assety (Krok 4).</p>
</li>
<li>
<a href="prompts/step11.md">step11.md</a>
<p>Wizard - Moduly a Formulár (Krok 5).</p>
</li>
<li>
<a href="prompts/step12.md">step12.md</a>
<p>Generovanie fronty úloh (AI Queue).</p>
</li>
<li>
<a href="prompts/step13.md">step13.md</a>
<p>Architektúra promptov a DAIAPI klient.</p>
</li>
<li>
<a href="prompts/step14.md">step14.md</a>
<p>Služba LLMpool a Validácia AI výstupu.</p>
</li>
<li>
<a href="prompts/step15.md">step15.md</a>
<p>Rendering Vrstva (Jadro a Baseline šablóna).</p>
</li>
<li>
<a href="prompts/step16.md">step16.md</a>
<p>Rendering Vrstva (Obsahové Sekcie).</p>
</li>
<li>
<a href="prompts/step17.md">step17.md</a>
<p>Rendering Vrstva (CSS Assety).</p>
</li>
<li>
<a href="prompts/step18.md">step18.md</a>
<p>Kontakt a Formuláre (SMTP & Lokálny mód).</p>
</li>
<li>
<a href="prompts/step19.md">step19.md</a>
<p>Preview a Export (Posledné fázy Wizarda).</p>
</li>
<li>
<a href="prompts/step20.md">step20.md</a>
<p>Kvalitatívne Validácie a Error Handling Fixes.</p>
</li>
</ul>
</body>
</html>

67
docs/prompts/step01.md Normal file
View File

@ -0,0 +1,67 @@
# Krok 01 - Inicializácia projektu a základná štruktúra
## Kontext projektu
WebWizard je AI website concierge (MVP), ktorý umožňuje používateľom vytvoriť statický web prostredníctvom wizardu. Projekt využíva PHP 8.2, JSON súbory pre ukladanie dát, Vanilla JavaScript a lokálne DAIAPI pre generovanie obsahu. Celá architektúra je postavená na jednoduchosti bez externých frameworkov.
## Pred implementáciou si preštuduj
- `docs/mvp.md` - Celkový rozsah a ciele MVP.
- `docs/architecture.md` - Definícia adresárovej štruktúry a technologického stacku.
## Cieľ
Vytvoriť základnú adresárovú štruktúru projektu a zabezpečiť ochranu citlivých dát v priečinku `data/`. Nastaviť základný autoloading pre PHP triedy v `src/`.
## Požadované zmeny
1. Vytvorenie adresárovej štruktúry podľa `architecture.md`.
2. Vytvorenie `composer.json` so základným nastavením PSR-4 autoloadingu pre menný priestor `App\\` v priečinku `src/`.
3. Vytvorenie `.htaccess` v koreňovom adresári (alebo konfigurácia servera), ktorá zakáže priamy prístup do priečinka `data/`.
## Implementačné pravidlá
- Nepoužívaj žiadne externé knižnice v `composer.json` okrem vývojových nástrojov, ak sú potrebné.
- Adresárová štruktúra musí presne zodpovedať `architecture.md`.
- `data/` priečinok musí byť neverejný.
## Súbory ktoré je potrebné vytvoriť
- `data/users/.gitkeep` (a podobné pre ostatné podadresáre v data/)
- `data/projects/`
- `data/consent/`
- `data/llm/`
- `data/admin/`
- `exports/`
- `src/`
- `public/`
- `composer.json`
- `.htaccess` (v koreni projektu)
- `data/.htaccess` (na zablokovanie prístupu)
## Súbory ktoré je potrebné upraviť
Žiadne (inicializácia nového projektu).
## API a dátové štruktúry
V tomto kroku sa nedefinujú API endpointy.
## Frontend požiadavky
Nerelevantné pre tento krok.
## Backend požiadavky
- PHP 8.2.
- PSR-4 autoloading.
## Testovací scenár
1. Spusti `composer dump-autoload` a over, či nevznikli chyby.
2. Pokús sa v prehliadači pristúpiť na `http://localhost/data/` (alebo ekvivalent) a over, či dostaneš 403 Forbidden.
3. Over, či existujú všetky požadované adresáre.
## Definition of Done
- Adresárová štruktúra je vytvorená.
- Autoloading z `src/` funguje.
- Priečinok `data/` je chránený pred priamym prístupom z webu.
## Obmedzenia
- Nepridávaj žiadne frameworky (Laravel, Symfony, atď.).
- Nepridávaj databázu.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

63
docs/prompts/step02.md Normal file
View File

@ -0,0 +1,63 @@
# Krok 02 - Core Data Services (Úložisko)
## Kontext projektu
WebWizard ukladá všetky dáta (používatelia, projekty, súhlasy) do JSON súborov v priečinku `data/`. Je potrebné mať jednotnú službu, ktorá bude tieto operácie bezpečne vykonávať.
## Pred implementáciou si preštuduj
- `docs/architecture.md` - Sekcia 4 (Adresárová štruktúra) a 5 (Dátové súbory).
- `docs/prompts/step01.md` - Predpokladá sa vytvorená štruktúra.
## Cieľ
Implementovať triedu `FileStorage` v PHP, ktorá bude slúžiť ako hlavné rozhranie pre prácu s JSON súbormi v rámci systému.
## Požadované zmeny
1. Vytvorenie triedy `App\Services\FileStorage` v `src/Services/FileStorage.php`.
2. Implementácia metód pre:
- `put(string $path, array $data): bool` - Uloží pole ako JSON.
- `get(string $path): ?array` - Načíta JSON a vráti pole.
- `exists(string $path): bool` - Overí existenciu súboru.
- `delete(string $path): bool` - Vymaže súbor.
3. Pridanie ochrany proti "path traversal" (napr. použitie `realpath` alebo sanitizácia cesty, aby sa operácie obmedzili na priečinok `data/`).
## Implementačné pravidlá
- Používaj `json_encode` s `JSON_PRETTY_PRINT` pre lepšiu čitateľnosť súborov.
- Zabezpeč ošetrenie chýb pri čítaní/zápise (napr. neexistujúci súbor, neplatný JSON).
- Trieda musí byť v namespace `App\Services`.
## Súbory ktoré je potrebné vytvoriť
- `src/Services/FileStorage.php`
## Súbory ktoré je potrebné upraviť
Žiadne.
## API a dátové štruktúry
Metódy triedy `FileStorage` pracujú s asociatívnymi poľami PHP.
## Frontend požiadavky
Nerelevantné.
## Backend požiadavky
- PHP 8.2.
- Prístupové práva na zápis do `data/`.
## Testovací scenár
1. Vytvor testovací skript, ktorý vytvorí inštanciu `FileStorage`.
2. Skús uložiť pole `['test' => 123]` do `users/test.json`.
3. Over, či súbor existuje a obsahuje správny JSON.
4. Skús načítať dáta zo súboru.
5. Skús zadať cestu s `../` a over, či služba vyhodí výnimku alebo chybu (path traversal protection).
## Definition of Done
- Trieda `FileStorage` je funkčná a otestovaná.
- Ukladanie a načítavanie JSON dát funguje bezpečne.
- Path traversal ochrana je implementovaná.
## Obmedzenia
- Nepoužívaj žiadnu externú DB knižnicu.
- Všetky cesty musia byť relatívne k base path projektu alebo striktne v `data/`.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

67
docs/prompts/step03.md Normal file
View File

@ -0,0 +1,67 @@
# Krok 03 - API vrstva a Error Handling
## Kontext projektu
Frontend komunikuje s backendom výhradne cez jeden endpoint `ajax.php` pomocou POST požiadaviek s JSON payloadom.
## Pred implementáciou si preštuduj
- `docs/architecture.md` - Sekcia 9 (AJAX API).
## Cieľ
Vytvoriť základný API router `public/ajax.php` a implementovať jednotný systém pre spracovanie chýb a formátovanie odpovedí.
## Požadované zmeny
1. Vytvorenie súboru `public/ajax.php`.
2. Implementácia logiky pre:
- Načítanie JSON vstupu z `php://input`.
- Overenie prítomnosti hlavičky `X-User-ID`.
- Základný router (switch podľa poľa `action`).
- Jednotný formát úspešnej odpovede: `{"success": true, "data": {...}}`.
- Jednotný formát chybovej odpovede: `{"success": false, "error": {"code": "...", "message": "..."}}`.
3. Globálny `try-catch` blok na zachytávanie výnimiek a ich transformáciu do JSON odpovede.
4. Nastavenie správnych HTTP hlavičiek (`Content-Type: application/json`).
## Implementačné pravidlá
- Nepoužívaj frameworky pre routing.
- Každá odpoveď musí mať nastavený status kód (typicky 200 pre aplikačné chyby v JSONe, alebo 4xx/5xx pri systémových chybách).
- Zabezpeč, aby PHP warningy a errory neboli vypisované priamo do výstupu (použi `display_errors = 0` v produkčnom nastavení a vlastný error handler).
## Súbory ktoré je potrebné vytvoriť
- `public/ajax.php`
## Súbory ktoré je potrebné upraviť
Žiadne.
## API a dátové štruktúry
Vstupné dáta (JSON):
```json
{
"action": "string",
"project_id": "string",
"payload": {}
}
```
## Frontend požiadavky
Nerelevantné (v tomto kroku len backend).
## Backend požiadavky
- PHP 8.2.
## Testovací scenár
1. Pošli POST požiadavku na `ajax.php` s prázdnym telom. Mal by si dostať JSON chybu.
2. Pošli POST požiadavku s neexistujúcou akciou. Mal by si dostať JSON chybu `UNKNOWN_ACTION`.
3. Pošli validnú požiadavku (zatiaľ môžeš implementovať akciu `ping`) a over formát `success: true`.
## Definition of Done
- `ajax.php` funguje ako centrálny router.
- Odpovede majú jednotnú štruktúru.
- Chybové stavy sú ošetrené a vracajú JSON.
## Obmedzenia
- Žiadne HTML vo výstupe z `ajax.php`.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

74
docs/prompts/step04.md Normal file
View File

@ -0,0 +1,74 @@
# Krok 04 - Správa používateľov a projektov (Session)
## Kontext projektu
WebWizard potrebuje identifikovať používateľa (pomocou ID uloženého v prehliadači) a priradiť k nemu jeho projekty. MVP nepoužíva klasické prihlasovanie, ale `user_id` generované pri prvej návšteve.
## Pred implementáciou si preštuduj
- `docs/architecture.md` - Sekcia 5 (Projekt) a 8 (Identifikácia používateľa).
- `docs/wizard.md` - Sekcia 10 (Wizard Data Schema).
## Cieľ
Implementovať logiku pre inicializáciu session (vytvorenie `user_id`) a základnú správu projektov (vytvorenie, zoznam).
## Požadované zmeny
1. Implementácia akcie `initSession` v `ajax.php`:
- Ak `user_id` chýba, vygeneruj unikátne ID (napr. `u_` + hash).
- Vytvor súbor `data/users/<user_id>.json`.
2. Implementácia akcie `createProject` v `ajax.php`:
- Vygeneruj unikátne `project_id`.
- Vytvor základnú štruktúru projektu v `data/projects/<project_id>.json` so stavom `draft`.
- Pridaj `project_id` do zoznamu projektov v používateľskom JSONe.
3. Implementácia akcie `listProjects` v `ajax.php`:
- Vráti zoznam projektov pre dané `user_id` so základnými metadátami (názov z identity, stav, dátum).
4. Implementácia akcie `getProjectStatus` v `ajax.php`:
- Vráti kompletné dáta projektu pre dané `project_id`.
## Implementačné pravidlá
- Používaj `FileStorage` službu z Kroku 02.
- ID musia byť bezpečne generované.
- Overuj, či projekt patrí danému `user_id` pri každej operácii s projektom.
## Súbory ktoré je potrebné vytvoriť
- `src/Actions/ProjectActions.php` (odporúčané pre logiku)
## Súbory ktoré je potrebné upraviť
- `public/ajax.php` (pridanie nových akcií)
## API a dátové štruktúry
Šruktúra projektu (`data/projects/<project_id>.json`):
```json
{
"project_id": "...",
"user_id": "...",
"status": "draft",
"current_step": 1,
"wizard_data": {},
"created_at": "...",
"updated_at": "..."
}
```
## Frontend požiadavky
Nerelevantné (implementácia backend logic).
## Backend požiadavky
- PHP 8.2.
## Testovací scenár
1. Zavolaj `initSession` bez `X-User-ID`. Dostaneš nové ID.
2. Zavolaj `createProject` s novým ID. Dostaneš `project_id`.
3. Over, či vznikli súbory v `data/users/` a `data/projects/`.
4. Zavolaj `listProjects` a over, či obsahuje vytvorený projekt.
## Definition of Done
- Používateľské relácie a projekty sú perzistentne uložené v JSON súboroch.
- API akcie pre správu projektov sú funkčné.
## Obmedzenia
- Nepoužívaj PHP natívne sessions (`session_start()`), identifikácia je čiste cez `user_id` v hlavičke a perzistenciu v súboroch.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

67
docs/prompts/step05.md Normal file
View File

@ -0,0 +1,67 @@
# Krok 05 - Služba pre GDPR súhlas
## Kontext projektu
Podľa právnych požiadaviek a špecifikácie MVP musí systém evidovať explicitný súhlas používateľa so spracovaním údajov pred tým, než povolí uloženie akýchkoľvek citlivých dát alebo generovanie webu.
## Pred implementáciou si preštuduj
- `docs/mvp.md` - Sekcia 10 (GDPR).
- `docs/architecture.md` - Sekcia 7 (GDPR súhlas).
## Cieľ
Vytvoriť službu na správu GDPR súhlasov a implementovať API akciu na uloženie súhlasu.
## Požadované zmeny
1. Vytvorenie triedy `App\Services\ConsentService` v `src/Services/ConsentService.php`.
2. Implementácia metódy `saveConsent(string $projectId, string $userId, string $consentText): bool`.
- Uloží súbor `data/consent/<project_id>.json`.
- Záznam musí obsahovať: `project_id`, `user_id`, `consent_text_version`, `consent_text`, `accepted: true`, `accepted_at` (v UTC).
3. Implementácia metódy `hasConsent(string $projectId): bool`.
4. Implementácia API akcie `saveConsent` v `ajax.php`.
## Implementačné pravidlá
- Verzia textu súhlasu by mala byť konštanta v kóde (napr. `webwizard-mvp-2026-06-12`).
- Dátum musí byť v ISO 8601 formáte (UTC).
- Bez súhlasu nesmie systém povoliť krok generovania AI (bude validované v neskorších krokoch).
## Súbory ktoré je potrebné vytvoriť
- `src/Services/ConsentService.php`
## Súbory ktoré je potrebné upraviť
- `public/ajax.php` (pridanie akcie `saveConsent`)
## API a dátové štruktúry
JSON súhlasu:
```json
{
"project_id": "...",
"user_id": "...",
"consent_text_version": "...",
"consent_text": "...",
"accepted": true,
"accepted_at": "2026-06-12T10:00:00Z"
}
```
## Frontend požiadavky
Nerelevantné.
## Backend požiadavky
- PHP 8.2.
## Testovací scenár
1. Zavolaj akciu `saveConsent` s platným `project_id` a textom.
2. Over, či sa vytvoril súbor v `data/consent/`.
3. Over obsah súboru, najmä formát dátumu a prítomnosť všetkých polí.
## Definition of Done
- Systém dokáže auditovateľne ukladať GDPR súhlasy.
- Existuje služba na overenie existencie súhlasu pre daný projekt.
## Obmedzenia
- Súhlas je neprenosný medzi projektami (každý projekt musí mať vlastný záznam súhlasu, aj keď je to ten istý používateľ).
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

70
docs/prompts/step06.md Normal file
View File

@ -0,0 +1,70 @@
# Krok 06 - Kostra Wizardu (Frontend UI)
## Kontext projektu
Používateľské rozhranie WebWizardu je postavené na Vanilla JavaScript bez použitia frontend frameworkov. Celá interakcia prebieha v rámci jednej stránky (`index.html`).
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 1 (Prehľad wizardu).
- `docs/architecture.md` - Sekcia 8 (Identifikácia používateľa).
## Cieľ
Vytvoriť základnú HTML štruktúru, CSS štýly a JavaScriptovú logiku pre navigáciu v rámci wizardu a inicializáciu používateľskej relácie.
## Požadované zmeny
1. Vytvorenie `public/index.html` s:
- Kontajnerom pre jednotlivé kroky wizardu.
- Navigačnými prvkami (Späť / Pokračovať).
- Indikátorom progresu.
2. Vytvorenie `public/css/wizard.css` pre základný layout a vizuálnu stránku wizardu.
3. Vytvorenie `public/js/wizard.js` s logikou:
- Kontrola `localStorage.getItem('ww_user_id')`.
- Volanie `initSession` cez AJAX, ak ID chýba.
- Správa stavu (aktuálny krok).
- Funkcie `nextStep()` a `prevStep()`.
- Funkcia `showStep(n)` pre zobrazenie správneho kontajnera v DOM.
## Implementačné pravidlá
- Používaj moderný Vanilla JS (ES6+).
- AJAX volania realizuj pomocou `fetch`.
- Nepoužívaj žiadne externé knižnice (jQuery, Bootstrap, atď.).
- Layout musí byť responzívny.
## Súbory ktoré je potrebné vytvoriť
- `public/index.html`
- `public/css/wizard.css`
- `public/js/wizard.js`
## Súbory ktoré je potrebné upraviť
Žiadne.
## API a dátové štruktúry
Používa API akciu `initSession` z Kroku 04.
## Frontend požiadavky
- Čistý a moderný dizajn.
- Plynulé prechody medzi krokmi (môže byť jednoduchý show/hide).
- Ukladanie `ww_user_id` do `localStorage`.
## Backend požiadavky
- API musí byť dostupné na `ajax.php`.
## Testovací scenár
1. Otvor `public/index.html` v prehliadači.
2. Over v DevTools (Application -> Local Storage), či sa vygenerovalo `ww_user_id`.
3. Vyskúšaj klikanie na tlačidlá pre prechod medzi krokmi.
4. Over, či sa vizuálne mení obsah podľa aktuálneho kroku.
## Definition of Done
- Kostra wizardu je funkčná.
- Používateľ je identifikovaný a relácia je inicializovaná.
- Prepínanie krokov funguje správne.
## Obmedzenia
- Žiadny build proces (žiadne Webpack, Vite, atď.).
- Všetko v rámci priečinka `public/`.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

78
docs/prompts/step07.md Normal file
View File

@ -0,0 +1,78 @@
# Krok 07 - Wizard - Segmentácia biznisu (Krok 1)
## Kontext projektu
Prvým krokom wizardu je výber kategórie podnikania. Tento výber ovplyvňuje ďalšie otázky (Smart answers) a obsah, ktorý AI vygeneruje.
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 2 (Krok 1 - Segmentácia biznisu).
## Cieľ
Implementovať UI pre výber kategórie a podkategórie podnikania a uloženie týchto dát na backend.
## Požadované zmeny
1. Vytvorenie súboru `data/categories.json` s definíciou kategórií (Gastro, Krása, Remeslá, atď.) a ich podkategórií.
2. Na frontende (`wizard.js`):
- Načítanie kategórií (môže byť hardcoded v JS alebo načítané cez API).
- Zobrazenie kategórií ako "radio cards" (vizuálne boxy s ikonou/názvom).
- Po výbere kategórie zobrazenie podkategórií (napr. ako chips alebo dropdown).
- Pole pre vlastný popis, ak používateľ zvolí "Iné".
- Volanie `saveStep` pri prechode na ďalší krok.
3. Na backende (`ajax.php`):
- Implementácia akcie `saveStep`.
- Validácia, že vybraná kategória a podkategória sú platné.
- Uloženie do `wizard_data.business_category`.
## Implementačné pravidlá
- Používaj moderné UI prvky (napr. CSS Grid pre radio cards).
- Zabezpeč plynulú interakciu pri zmene kategórie (reset podkategórií).
## Súbory ktoré je potrebné vytvoriť
- `data/categories.json`
## Súbory ktoré je potrebné upraviť
- `public/js/wizard.js` (logika pre Krok 1)
- `public/index.html` (DOM pre Krok 1)
- `public/ajax.php` (implementácia `saveStep`)
## API a dátové štruktúry
Payload pre `saveStep`:
```json
{
"step": 1,
"data": {
"business_category": {
"group": "gastro",
"subcategory": "restaurant",
"custom_description": null
}
}
}
```
## Frontend požiadavky
- Atraktívne zobrazenie kategórií.
- Intuitívny výber podkategórie.
## Backend požiadavky
- Validácia vstupov.
## Testovací scenár
1. Vyber kategóriu "Gastro".
2. Vyber podkategóriu "Reštaurácia".
3. Klikni na "Pokračovať".
4. Over v JSONe projektu v `data/projects/`, či sa dáta správne uložili.
5. Skús zvoliť "Iné" a napísať vlastný text.
## Definition of Done
- Používateľ vie vybrať segment biznisu.
- Dáta sa správne ukladajú na server.
- UI reaguje na výbery používateľa.
## Obmedzenia
- Nepoužívaj externé UI knižnice (napr. Vuetify, Material UI).
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

74
docs/prompts/step08.md Normal file
View File

@ -0,0 +1,74 @@
# Krok 08 - Wizard - Identita a Kontakt (Krok 2)
## Kontext projektu
Tento krok zbiera základné fakty o firme, ktoré AI nesmie meniť. Zároveň je tu vyžadovaný povinný súhlas s GDPR.
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 3 (Krok 2).
- `docs/prompts/step05.md` - Služba pre GDPR súhlas.
## Cieľ
Implementovať formulár pre zadanie názvu firmy, kontaktov a povinný GDPR checkbox.
## Požadované zmeny
1. Na frontende (`index.html` + `wizard.js`):
- Polia: Názov firmy (povinné), Slogan, Popis firmy.
- Kontaktné polia: Email, Telefón (povinný aspoň jeden), Adresa, Mesto, Sociálne siete.
- GDPR Checkbox s textom súhlasu.
- Validácia: Tlačidlo "Pokračovať" je neaktívne, kým nie je názov firmy a GDPR checkbox.
- Pri uložení: Najprv zavolaj `saveConsent`, potom `saveStep`.
2. Na backende (`ajax.php`):
- Rozšírenie validácie `saveStep` pre krok 2.
- Overenie prítomnosti súhlasu v `data/consent/` pred uložením dát.
- Uloženie do `wizard_data.identity` a `wizard_data.contact`.
## Implementačné pravidlá
- Validácia na frontende aj backende.
- Správne ošetrenie chýb (napr. neplatný email).
## Súbory ktoré je potrebné vytvoriť
Žiadne.
## Súbory ktoré je potrebné upraviť
- `public/index.html` (DOM pre Krok 2)
- `public/js/wizard.js` (logika pre Krok 2)
- `public/ajax.php` (validácia kroku 2)
## API a dátové štruktúry
Payload pre `saveStep`:
```json
{
"step": 2,
"data": {
"identity": { ... },
"contact": { ... }
}
}
```
## Frontend požiadavky
- Jasne označené povinné polia.
- Chybové hlášky pri neplatnom vstupe.
## Backend požiadavky
- PHP validácia (email, povinné polia).
## Testovací scenár
1. Vyplň názov firmy, ale nezaškrtni GDPR. Tlačidlo "Pokračovať" by malo byť blokované (alebo vrátiť chybu).
2. Vyplň všetko správne a zaškrtni GDPR.
3. Over, či sa vytvoril súbor v `data/consent/` a či sú dáta v `data/projects/`.
4. Skús zadať neplatný email a over správanie.
## Definition of Done
- Identita a kontakty sú úspešne uložené.
- GDPR súhlas je riadne evidovaný a vyžadovaný.
- Validácia funguje na oboch stranách.
## Obmedzenia
- Bez GDPR súhlasu nesmie prejsť uloženie kroku 2 na backende.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

78
docs/prompts/step09.md Normal file
View File

@ -0,0 +1,78 @@
# Krok 09 - Wizard - Služby a Smart otázky (Krok 3)
## Kontext projektu
Krok 3 zbiera konkrétne informácie o službách a odpovede na dynamické otázky, ktoré závisia od kategórie vybranej v Kroku 1.
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 4 (Krok 3 - Služby a smart otazky).
- `data/categories.json` - Definícia smart otázok pre jednotlivé kategórie.
## Cieľ
Vytvoriť dynamické rozhranie pre zadávanie služieb a zodpovedanie segmentovo špecifických otázok.
## Požadované zmeny
1. Na frontende (`wizard.js`):
- Rozhranie pre dynamické pridávanie/odoberanie služieb (Názov, Popis, Cena od).
- Logika pre načítanie "Smart questions" z `categories.json` na základe vybranej kategórie.
- Zobrazenie otázok (checkboxy pre Áno/Nie, textové polia pre detaily).
- Tlačidlo "Preskočiť" pre voliteľné polia.
2. Na backende (`ajax.php`):
- Validácia dát pre krok 3.
- Uloženie do `wizard_data.services` a `wizard_data.smart_answers`.
## Implementačné pravidlá
- Minimálne 2 služby by mali byť odporúčané, ale nie striktne povinné pre MVP (AI vie zvyšok domyslieť).
- Smart otázky musia presne zodpovedať kategórii.
## Súbory ktoré je potrebné vytvoriť
Žiadne (predpokladá sa, že `data/categories.json` už existuje).
## Súbory ktoré je potrebné upraviť
- `public/index.html` (DOM pre Krok 3)
- `public/js/wizard.js` (logika pre Krok 3)
- `public/ajax.php` (validácia kroku 3)
- `data/categories.json` (doplnenie smart otázok, ak chýbajú)
## API a dátové štruktúry
Payload pre `saveStep`:
```json
{
"step": 3,
"data": {
"services": {
"items": [{ "name": "...", "description": "...", "price_from": "..." }],
"pricing_note": "..."
},
"smart_answers": {
"question_id": "answer"
}
}
}
```
## Frontend požiadavky
- Jednoduché pridávanie položiek do zoznamu.
- Prehľadné zobrazenie dynamických otázok.
## Backend požiadavky
- PHP validácia štruktúry poľa služieb.
## Testovací scenár
1. Pridaj 3 služby a vyplň im názvy.
2. Odpovedz na smart otázky (napr. pre Gastro: donaska = true).
3. Klikni na "Pokračovať".
4. Over v JSONe projektu, či sú služby a odpovede správne uložené.
## Definition of Done
- Používateľ vie zadať služby a odpovedať na segmentové otázky.
- Dáta sú perzistentne uložené.
- UI je dynamické podľa kategórie.
## Obmedzenia
- Nepoužívaj zložité state management knižnice (Redux a pod.), zostaň pri Vanilla JS.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

75
docs/prompts/step10.md Normal file
View File

@ -0,0 +1,75 @@
# Krok 10 - Wizard - Vizuál a Assety (Krok 4)
## Kontext projektu
V tomto kroku si používateľ vyberá vizuálny štýl webu a nahráva svoje assety (logo, obrázky). MVP podporuje asynchrónny upload súborov.
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 5 (Krok 4 - Vizualny styl a assety).
- `docs/architecture.md` - Sekcia 13 (Bezpečnostné minimum).
## Cieľ
Implementovať výber vizuálneho štýlu a bezpečný asynchrónny upload obrázkov.
## Požadované zmeny
1. Na frontende (`index.html` + `wizard.js`):
- Výber štýlu (Minimal, Modern, Premium, atď.).
- Výber farebnej schémy (preddefinované palety).
- UI pre nahrávanie loga a obrázkov (file input).
- Asynchrónne odoslanie súboru na API akciu `uploadAsset`.
- Zobrazenie náhľadu nahraného obrázka.
2. Na backende (`ajax.php`):
- Implementácia akcie `uploadAsset`.
- Striktná validácia:
- MIME typ (JPG, PNG, WEBP, SVG).
- Prípona súboru.
- Maximálna veľkosť (napr. 2MB).
- Ochrana proti path traversal.
- Ukladanie do `exports/<project_id>/assets/images/`.
- Vrátenie cesty k súboru.
3. Uloženie vizuálnych nastavení cez `saveStep`.
## Implementačné pravidlá
- Nahrané súbory nesmú byť spustiteľné.
- Každý projekt má vlastný podadresár v `exports/`.
- Používaj `FileStorage` pre správu ciest.
## Súbory ktoré je potrebné vytvoriť
Žiadne.
## Súbory ktoré je potrebné upraviť
- `public/index.html` (DOM pre Krok 4)
- `public/js/wizard.js` (logika pre Krok 4 + upload)
- `public/ajax.php` (akcia `uploadAsset` + validácia kroku 4)
## API a dátové štruktúry
Akcia `uploadAsset`:
- Request: `FormData` (file, project_id).
- Response: `{"success": true, "data": {"path": "..."}}`.
## Frontend požiadavky
- Progress bar alebo spinner počas uploadu.
- Možnosť zadať alt text k obrázku.
## Backend požiadavky
- Bezpečné ukladanie súborov (unikátne názvy alebo bezpečné sanitizovanie).
- Kontrola `GD` alebo `finfo` pre MIME typ.
## Testovací scenár
1. Vyber vizuálny štýl.
2. Nahraj JPG súbor ako logo. Over, či sa zobrazí náhľad.
3. Skús nahrať `.php` alebo `.exe` súbor a over, či ho backend odmietne.
4. Over, či sa súbor fyzicky nachádza v `exports/<project_id>/assets/images/`.
## Definition of Done
- Vizuálne nastavenia sú uložené.
- Assety sú bezpečne nahrané a priradené k projektu.
- Validácia súborov funguje správne.
## Obmedzenia
- Nepoužívaj externé knižnice na upload (napr. Dropzone.js).
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

84
docs/prompts/step11.md Normal file
View File

@ -0,0 +1,84 @@
# Krok 11 - Wizard - Moduly a Formulár (Krok 5)
## Kontext projektu
V poslednom kroku zberu dát si používateľ vyberá sekcie webu a konfiguruje kontaktný formulár (SMTP alebo lokálny mód).
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 6 (Krok 5 - Moduly webu a kontaktny formular).
- `docs/mvp.md` - Sekcia 9 (Kontaktny formular).
## Cieľ
Implementovať výber sekcií webu a konfiguráciu kontaktného formulára vrátane zabezpečeného uloženia hesla pre lokálny mód.
## Požadované zmeny
1. Na frontende (`index.html` + `wizard.js`):
- Checkboxy pre výber sekcií (Hero, O nás, Služby, Cenník, Galéria, FAQ, Kontakt).
- Prepínač pre kontaktný formulár (Zapnutý/Vypnutý).
- Výber módu formulára: SMTP alebo Lokálny.
- Polia pre SMTP (Host, Port, User, Pass, atď.).
- Pole pre heslo k lokálnemu módu.
2. Na backende (`ajax.php`):
- Implementácia validácie pre krok 5.
- Pri lokálnom móde: Heshovanie hesla pomocou `password_hash()` pred uložením do `wizard_data`.
- Uloženie do `wizard_data.modules`.
## Implementačné pravidlá
- Heslo pre lokálny mód sa nikdy neukladá v plain-texte.
- Sekcia "Hero" a "Kontakt" by mali byť predvolene vybrané.
## Súbory ktoré je potrebné vytvoriť
Žiadne.
## Súbory ktoré je potrebné upraviť
- `public/index.html` (DOM pre Krok 5)
- `public/js/wizard.js` (logika pre Krok 5)
- `public/ajax.php` (validácia a heshovanie hesla)
## API a dátové štruktúry
Payload pre `saveStep`:
```json
{
"step": 5,
"data": {
"modules": {
"pages": ["home"],
"sections": ["hero", "about", "services", "contact"],
"contact_form": {
"enabled": true,
"mode": "local",
"smtp": null,
"local_viewer": {
"password_hash": "..."
}
}
}
}
}
```
## Frontend požiadavky
- Podmienené zobrazenie polí pre SMTP vs Lokálny mód.
- Validácia sily hesla (voliteľne).
## Backend požiadavky
- Použitie `PASSWORD_DEFAULT` pre `password_hash`.
## Testovací scenár
1. Vyber sekcie "Hero", "O nás" a "Kontakt".
2. Zvoľ Lokálny mód formulára a zadaj heslo "mojeheslo123".
3. Klikni na "Pokračovať".
4. Over v JSONe projektu, či je v `contact_form.local_viewer.password_hash` uložený hash, nie plain-text.
## Definition of Done
- Konfigurácia modulov a formulára je uložená.
- Heslo pre lokálny prehliadač správ je bezpečne zaheshované.
- UI správne prepína medzi módmi formulára.
## Obmedzenia
- Žiadne odosielanie testovacích mailov v tomto kroku.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

75
docs/prompts/step12.md Normal file
View File

@ -0,0 +1,75 @@
# Krok 12 - Generovanie fronty úloh (AI Queue)
## Kontext projektu
Po dokončení wizardu sa spustí proces generovania obsahu pomocou AI. Tento proces je asynchrónny a prebieha cez frontu úloh v `data/llm/`.
## Pred implementáciou si preštuduj
- `docs/architecture.md` - Sekcia 10 (AI workflow).
- `docs/prompts/step04.md` - Správa projektov.
## Cieľ
Implementovať API akciu `generateWebsite`, ktorá vytvorí AI úlohu a prepne stav projektu.
## Požadované zmeny
1. Na backende (`ajax.php` alebo `TaskActions.php`):
- Implementácia akcie `generateWebsite`.
- Overenie, či projekt existuje a má všetky potrebné dáta (najmä GDPR súhlas).
- Zmena stavu projektu na `queued`.
- Vytvorenie JSON súboru úlohy v `data/llm/` s unikátnym `task_id`.
- Súbor úlohy obsahuje `project_id`, `wizard_data` a metadáta (pokusy, čas vytvorenia).
2. Na frontende (`wizard.js`):
- Volanie `generateWebsite` po poslednom kroku wizardu.
- Implementácia "polling" mechanizmu (volanie `getProjectStatus` každých pár sekúnd) na sledovanie progresu.
- Zobrazenie loaderu s aktuálnym stavom (`queued`, `generating`, `rendering`).
## Implementačné pravidlá
- Úloha vo fronte musí obsahovať snapshot `wizard_data` v čase vytvorenia.
- Stav projektu `queued` blokuje ďalšie zmeny v `wizard_data`.
## Súbory ktoré je potrebné vytvoriť
- `src/Actions/TaskActions.php` (voliteľné, pre čistotu kódu)
## Súbory ktoré je potrebné upraviť
- `public/ajax.php` (pridanie akcie `generateWebsite`)
- `public/js/wizard.js` (logika pre spustenie generovania a polling)
## API a dátové štruktúry
Štruktúra úlohy (`data/llm/t_<id>.json`):
```json
{
"task_id": "t_...",
"project_id": "p_...",
"status": "queued",
"attempt_count": 0,
"max_attempts": 3,
"created_at": "...",
"wizard_data": { ... }
}
```
## Frontend požiadavky
- Animovaný spinner alebo progress bar.
- Informovanie používateľa, že generovanie môže trvať niekoľko desiatok sekúnd.
## Backend požiadavky
- Zabezpečenie, aby nevznikali duplicitné úlohy pre ten istý projekt, ak už jedna prebieha.
## Testovací scenár
1. Prejdi celým wizardom a na konci klikni na "Generovať web".
2. Over, či sa v `data/llm/` vytvoril súbor úlohy.
3. Over, či sa stav projektu v `data/projects/` zmenil na `queued`.
4. Sleduj v konzole prehliadača, či polling (`getProjectStatus`) prebieha správne.
## Definition of Done
- Systém úspešne zaraďuje projekty do AI fronty.
- Frontend korektne sleduje stav generovania.
- Dáta pre AI sú správne pripravené.
## Obmedzenia
- V tomto kroku sa ešte nevykonáva samotné volanie AI (len zaradenie do fronty).
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

66
docs/prompts/step13.md Normal file
View File

@ -0,0 +1,66 @@
# Krok 13 - Architektúra promptov a DAIAPI klient
## Kontext projektu
Systém využíva lokálne DAIAPI na generovanie textového obsahu (JSON content layer). AI nesmie generovať HTML, ale štruktúrované dáta podľa dodaného promptu.
## Pred implementáciou si preštuduj
- `docs/mvp.md` - Sekcia 7 (AI workflow).
- `docs/architecture.md` - Sekcia 10 (AI workflow).
## Cieľ
Implementovať klienta pre DAIAPI a vytvoriť generátor promptov, ktorý na základe `wizard_data` pripraví zadanie pre AI.
## Požadované zmeny
1. Vytvorenie triedy `App\Services\DAIClient` v `src/Services/DAIClient.php`:
- Metóda `sendRequest(string $prompt): ?string` (použitie `curl` alebo `file_get_contents` pre POST na lokalne API).
- Spracovanie odpovede a ošetrenie timeoutov.
2. Vytvorenie triedy `App\Prompts\ContentPrompt` v `src/Prompts/ContentPrompt.php`:
- Metóda `generate(array $wizardData): string`.
- Prompt musí obsahovať:
- Kontext projektu.
- Inštrukcie pre "Content Layer" (SEO, Hero, Služby, atď.).
- Striktný zákaz HTML výstupu.
- Príklad požadovaného JSON formátu.
- Vstupné fakty z `wizard_data`.
## Implementačné pravidlá
- Prompt musí byť v slovenskom jazyku (alebo podľa `wizard_data.language`).
- Klient musí logovať chyby komunikácie s API.
- Použi systémovú premennú alebo konfiguračný súbor pre URL DAIAPI.
## Súbory ktoré je potrebné vytvoriť
- `src/Services/DAIClient.php`
- `src/Prompts/ContentPrompt.php`
## Súbory ktoré je potrebné upraviť
Žiadne.
## API a dátové štruktúry
DAIAPI typicky očakáva:
- URL: `http://localhost:port/v1/chat/completions` (podľa lokálneho nastavenia).
- Formát: JSON (messages, temperature, atď.).
## Frontend požiadavky
Nerelevantné.
## Backend požiadavky
- Povolené rozšírenie `curl` v PHP.
## Testovací scenár
1. Vytvor testovací skript, ktorý vygeneruje prompt pre mock `wizard_data`.
2. Over, či prompt obsahuje všetky kľúčové informácie (názov firmy, služby).
3. Skús (ak máš prístup k API) poslať testovací dopyt a over, či vráti validný JSON bez HTML.
## Definition of Done
- Klient pre AI je funkčný.
- Prompt je správne navrhnutý a generuje štruktúrované zadanie.
- Systém je pripravený na integráciu s workerom.
## Obmedzenia
- AI nesmie v žiadnom prípade generovať tagy ako `<div>`, `<h1>` a pod. v rámci content layer.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

79
docs/prompts/step14.md Normal file
View File

@ -0,0 +1,79 @@
# Krok 14 - Služba LLMpool a Validácia AI výstupu
## Kontext projektu
`LLMpool.php` je "worker", ktorý konzumuje frontu úloh, komunikuje s AI a ukladá výsledný obsah do projektu.
## Pred implementáciou si preštuduj
- `docs/architecture.md` - Sekcia 10 (AI workflow).
- `docs/prompts/step13.md` - DAIClient a Prompt.
## Cieľ
Implementovať logiku pre spracovanie AI fronty, validáciu JSON výstupu a aktualizáciu stavu projektu.
## Požadované zmeny
1. Vytvorenie skriptu `src/Services/LLMpool.php` (alebo CLI skriptu):
- Vyhľadanie úloh v stave `queued` v `data/llm/`.
- Uzamknutie úlohy (zmena stavu na `generating`).
- Volanie `ContentPrompt` na vygenerovanie zadania.
- Volanie `DAIClient` na získanie odpovede od AI.
- Validácia odpovede:
- Musí to byť validný JSON.
- Nesmie obsahovať HTML tagy.
- Musí obsahovať povinné sekcie (napr. `seo`, `hero`, `sections`).
- Pri úspechu:
- Uloženie obsahu do projektu (`data/projects/<id>.json` pod kľúč `content.generated`).
- Zmena stavu projektu na `content_ready`.
- Vymazanie alebo archivácia úlohy z `data/llm/`.
- Pri chybe:
- Inkrementácia `attempt_count`.
- Ak prekročený limit (3), stav projektu `failed`.
- Uloženie chyby do projektu.
## Implementačné pravidlá
- Zabezpeč ochranu proti súbežnému spusteniu viacerých workerov na tej istej úlohe (atomic file operations).
- Loguj všetky dôležité udalosti (začiatok, koniec, chybu AI).
## Súbory ktoré je potrebné vytvoriť
- `src/Services/LLMpool.php`
## Súbory ktoré je potrebné upraviť
- `public/ajax.php` (môže spúšťať LLMpool synchrónne pre MVP ak nie je cron).
## API a dátové štruktúry
Štruktúra `content.generated`:
```json
{
"seo": { "title": "...", "description": "..." },
"hero": { "headline": "...", "subheadline": "..." },
"sections": {
"about": { "title": "...", "text": "..." },
"services": [ { "title": "...", "description": "..." } ]
}
}
```
## Frontend požiadavky
Nerelevantné (worker beží na pozadí).
## Backend požiadavky
- PHP 8.2.
## Testovací scenár
1. Vlož manuálne úlohu do `data/llm/`.
2. Spusti `php src/Services/LLMpool.php`.
3. Sleduj logy a over, či sa projekt v `data/projects/` aktualizoval o vygenerovaný obsah.
4. Skús simulovať neplatný JSON od AI a over, či worker správne inkrementuje pokusy.
## Definition of Done
- Worker spoľahlivo spracováva AI frontu.
- Výstup od AI je zvalidovaný a bezpečne uložený.
- Stavy projektu sa menia podľa priebehu generovania.
## Obmedzenia
- Worker sa v MVP môže volať aj na konci `generateWebsite` requestu pre jednoduchosť, ak je DAIAPI rýchle.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

67
docs/prompts/step15.md Normal file
View File

@ -0,0 +1,67 @@
# Krok 15 - Rendering Vrstva (Jadro a Baseline šablóna)
## Kontext projektu
Renderer je PHP služba, ktorá z `wizard_data` a AI vygenerovaného obsahu vytvorí statický HTML web. Rendering layer je oddelená od content layer.
## Pred implementáciou si preštuduj
- `docs/mvp.md` - Sekcia 4 (Rendering layer).
- `docs/architecture.md` - Sekcia 12 (Website Quality Requirements).
## Cieľ
Vytvoriť základnú triedu `Renderer` a baseline HTML šablónu, ktorá bude slúžiť ako kostra pre generovaný web.
## Požadované zmeny
1. Vytvorenie triedy `App\Services\Renderer` v `src/Services/Renderer.php`:
- Metóda `render(string $projectId): bool`.
- Načítanie dát projektu.
- Implementácia "tvrdého" HTML escapovania pre všetky texty z JSONu (`htmlspecialchars`).
2. Vytvorenie základnej šablóny `src/Templates/base.php`:
- Kompletná HTML5 štruktúra.
- Dynamické vkladanie SEO meta tagov (`title`, `description`, OpenGraph).
- Inklúzia CSS a JS súborov (relatívne cesty).
- Kontajner `<main id="content">`, do ktorého sa budú vkladať sekcie.
3. Vytvorenie statických assetov pre export:
- `src/Templates/css/site.css` (základný reset a štruktúra).
- `src/Templates/js/site.js` (voliteľné pre interaktivitu).
## Implementačné pravidlá
- Všetky URL v exporte musia byť relatívne.
- Renderer nesmie generovať žiadne inline štýly, ak to nie je nevyhnutné (napr. farby v :root).
- Striktné dodržanie sémantiky HTML5.
## Súbory ktoré je potrebné vytvoriť
- `src/Services/Renderer.php`
- `src/Templates/base.php`
- `src/Templates/css/site.css`
## Súbory ktoré je potrebné upraviť
Žiadne.
## API a dátové štruktúry
Metóda `render` zapisuje výsledok do `exports/<project_id>/index.html`.
## Frontend požiadavky
Nerelevantné (generovanie výstupu).
## Backend požiadavky
- PHP 8.2 (použitie `ob_start()` / `ob_get_clean()` pre buffering šablón).
## Testovací scenár
1. Spusti `Renderer::render()` pre projekt, ktorý má v `content.generated` základné SEO dáta.
2. Over, či vznikol súbor `exports/<project_id>/index.html`.
3. Over v prehliadači, či má stránka správny titulok a meta tagy.
4. Over, či je HTML kód čistý a správne escapovaný.
## Definition of Done
- Renderer dokáže vytvoriť základnú HTML kostru webu.
- SEO metadáta sú správne namapované.
- Escapovanie je implementované na úrovni jadra.
## Obmedzenia
- Žiadne externé template engine (ako Twig/Blade), použi čisté PHP šablóny.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

75
docs/prompts/step16.md Normal file
View File

@ -0,0 +1,75 @@
# Krok 16 - Rendering Vrstva (Obsahové Sekcie)
## Kontext projektu
Po vytvorení HTML kostry je potrebné implementovať vykresľovanie jednotlivých sekcií webu (Hero, O nás, Služby, atď.) na základe AI dát.
## Pred implementáciou si preštuduj
- `docs/mvp.md` - Sekcia 4 (Rendering layer).
- `docs/wizard.md` - Sekcia 11 (Website Quality Requirements).
- `docs/prompts/step15.md` - Core Renderer.
## Cieľ
Implementovať šablóny pre jednotlivé sekcie webu a zabezpečiť ich dynamické vkladanie do výsledného HTML.
## Požadované zmeny
1. Vytvorenie adresára `src/Templates/sections/`.
2. Implementácia PHP šablón pre sekcie:
- `hero.php` - Headline, subheadline, CTA tlačidlo.
- `about.php` - Titulok a text O nás.
- `services.php` - Zoznam služieb (karty).
- `pricing.php` - Cenník alebo balíky.
- `gallery.php` - Zobrazenie nahraných obrázkov.
- `faq.php` - Harmonika s otázkami a odpoveďami.
- `contact.php` - Kontaktné údaje a formulár.
3. Úprava `Renderer.php`:
- Logika pre iteráciu cez `wizard_data.modules.sections`.
- Inklúzia príslušných šablón sekcií.
- Odovzdávanie dát z `content.generated` do šablón.
## Implementačné pravidlá
- Používaj sémantické HTML tagy (`<section>`, `<article>`, `<header>`, `<footer>`).
- Zabezpeč logickú hierarchiu nadpisov (H1 len v Hero, H2 pre sekcie).
- Každá sekcia musí mať unikátne ID pre navigáciu (anchor links).
- Obrázky musia mať alt texty (z AI alebo fallback).
## Súbory ktoré je potrebné vytvoriť
- `src/Templates/sections/hero.php`
- `src/Templates/sections/about.php`
- `src/Templates/sections/services.php`
- `src/Templates/sections/pricing.php`
- `src/Templates/sections/gallery.php`
- `src/Templates/sections/faq.php`
- `src/Templates/sections/contact.php`
## Súbory ktoré je potrebné upraviť
- `src/Services/Renderer.php`
## API a dátové štruktúry
Vstupné dáta sú `wizard_data` a `content.generated` z JSONu projektu.
## Frontend požiadavky
- Responzívny layout pre všetky sekcie.
- Moderný styling (definovaný v `site.css` z kroku 15).
## Backend požiadavky
- PHP 8.2.
## Testovací scenár
1. Vygeneruj web pre projekt s viacerými sekciami.
2. Over, či sa v `index.html` nachádzajú všetky vybrané sekcie.
3. Skontroluj sémantiku HTML (napr. či sú služby v zozname `<ul>` alebo v kartách).
4. Over, či sú texty správne escapované.
## Definition of Done
- Všetky podporované sekcie sú implementované a vykresľujú sa.
- Web obsahuje kompletný obsah z AI content layer.
- HTML je sémantické a validné.
## Obmedzenia
- Nepoužívaj žiadne JS frameworky v šablónach sekcií.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

64
docs/prompts/step17.md Normal file
View File

@ -0,0 +1,64 @@
# Krok 17 - Rendering Vrstva (CSS Assety)
## Kontext projektu
Vizuálny štýl webu (farby, fonty, spacing) je definovaný v `wizard_data`. Renderer musí tieto nastavenia transformovať do CSS, ktoré sa aplikuje na exportovaný web.
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 5 (Krok 4 - Vizualny styl).
- `docs/prompts/step15.md` - Core Renderer.
## Cieľ
Implementovať generovanie dynamického CSS na základe vizuálnych preferencií používateľa.
## Požadované zmeny
1. Úprava `Renderer.php`:
- Generovanie bloku `:root` v HTML hlavičke alebo v samostatnom súbore.
- Mapovanie `wizard_data.visuals.color_scheme` na CSS premenné (`--primary-color`, `--bg-color`, atď.).
- Mapovanie `wizard_data.visuals.font_style` na konkrétne font-family (napr. Google Fonts importy).
- Mapovanie `wizard_data.visuals.layout_density` na premenné pre padding a margin.
2. Úprava `src/Templates/css/site.css`:
- Použitie CSS premenných v celom štýle.
- Definícia tried pre rôzne štýly (Minimal, Modern, Corporate) - napr. zaoblenie rohov, tiene.
3. Zabezpečenie kopírovania finalizovaného `site.css` do `exports/<project_id>/assets/site.css`.
## Implementačné pravidlá
- Preferuj systémové fonty alebo bezpečné webové fonty pre MVP.
- Farby musia mať dostatočný kontrast (WCAG compliance).
- Žiadny inline CSS v HTML tagoch (okrem `:root` premenných).
## Súbory ktoré je potrebné vytvoriť
Žiadne.
## Súbory ktoré je potrebné upraviť
- `src/Services/Renderer.php`
- `src/Templates/css/site.css`
## API a dátové štruktúry
Vstupné dáta: `wizard_data.visuals`.
## Frontend požiadavky
- Web musí vizuálne zodpovedať voľbe vo wizadre.
- Podpora tmavého/svetlého módu (ak je v rozsahu).
## Backend požiadavky
- PHP logika pre výpočet kontrastnej farby textu (voliteľne).
## Testovací scenár
1. Zmeň primárnu farbu vo wizadre na červenú.
2. Vygeneruj web a over, či sú kľúčové prvky (tlačidlá, nadpisy) červené.
3. Skontroluj `index.html` alebo `site.css`, či obsahuje správne CSS premenné.
4. Zmeň štýl na "Minimal" a over, či sa zmenili napr. zaoblenia rohov (border-radius).
## Definition of Done
- Vizuálne nastavenia sú úspešne aplikované cez CSS premenné.
- Exportovaný web rešpektuje voľbu farieb, fontov a layoutu.
- CSS je čisté a udržiavateľné.
## Obmedzenia
- Nepoužívaj CSS preprocesory (Sass/Less) pri renderovaní na serveri.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

78
docs/prompts/step18.md Normal file
View File

@ -0,0 +1,78 @@
# Krok 18 - Kontakt a Formuláre (SMTP & Lokálny mód)
## Kontext projektu
Exportovaný web musí obsahovať funkčný kontaktný formulár. Podľa konfigurácie buď odosiela maily cez SMTP, alebo ukladá správy lokálne.
## Pred implementáciou si preštuduj
- `docs/mvp.md` - Sekcia 9 (Kontaktny formular).
- `docs/architecture.md` - Sekcia 11 (Kontaktny formular).
## Cieľ
Implementovať backendové skripty pre formuláre, ktoré budú súčasťou exportu.
## Požadované zmeny
1. Vytvorenie šablóny `src/Templates/emailer.php`:
- PHP skript, ktorý prijme POST dáta z formulára.
- Odoslanie emailu cez SMTP (použitie PHP `mail()` alebo jednoduchá SMTP implementácia bez externých knižníc).
- Ochrana proti spamu (honeypot, rate limit).
2. Vytvorenie šablóny `src/Templates/form-viewer.php`:
- PHP skript pre lokálny mód.
- Prihlasovacia obrazovka (overenie voči hashu z `config.json`).
- Výpis prijatých správ zo zložky `messages/`.
- Detail správy.
3. Úprava `Renderer.php`:
- Ak je formulár zapnutý, skopíruj príslušný PHP skript do exportu.
- Vygeneruj `config.json` v exporte s nastaveniami (SMTP údaje alebo hash hesla).
- Zabezpeč vytvorenie prázdneho priečinka `messages/` a `.htaccess` na jeho ochranu.
## Implementačné pravidlá
- `emailer.php` nesmie obsahovať SMTP heslo priamo v kóde (načíta ho z `config.json`).
- `form-viewer.php` musí používať session pre prihlásenie.
- Zabezpeč ochranu proti XSS pri výpise správ v lokálnom móde.
## Súbory ktoré je potrebné vytvoriť
- `src/Templates/emailer.php`
- `src/Templates/form-viewer.php`
## Súbory ktoré je potrebné upraviť
- `src/Services/Renderer.php`
## API a dátové štruktúry
Štruktúra správy v lokálnom móde:
```json
{
"id": "...",
"timestamp": "...",
"sender_name": "...",
"sender_email": "...",
"subject": "...",
"message": "..."
}
```
## Frontend požiadavky
- AJAX odosielanie formulára na webe s feedbackom (Úspech/Chyba).
## Backend požiadavky
- PHP 8.2 na cieľovom hostingu.
## Testovací scenár
1. Vygeneruj web s lokálnym módom formulára.
2. Odošli správu cez formulár na webe.
3. Over, či vznikol súbor v `exports/<id>/messages/`.
4. Prihlás sa do `form-viewer.php` so zadaným heslom a over, či vidíš správu.
5. Zopakuj pre SMTP mód (over odoslanie mailu).
## Definition of Done
- Kontaktný formulár je plne funkčný v oboch módoch.
- Bezpečnosť dát a ochrana proti spamu je implementovaná.
- Prehliadač správ funguje správne.
## Obmedzenia
- Žiadne externé knižnice ako PHPMailer (ak je to možné, použiť natívne PHP riešenie pre MVP).
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

66
docs/prompts/step19.md Normal file
View File

@ -0,0 +1,66 @@
# Krok 19 - Preview a Export (Posledné fázy Wizarda)
## Kontext projektu
Po úspešnom vygenerovaní a vyrenderovaní webu si ho používateľ môže prezrieť a následne stiahnuť ako ZIP archív.
## Pred implementáciou si preštuduj
- `docs/wizard.md` - Sekcia 8 (Krok 7 - Preview) a 9 (Krok 8 - Export).
## Cieľ
Implementovať UI pre náhľad vygenerovaného webu a funkčnosť pre stiahnutie projektu v ZIP formáte.
## Požadované zmeny
1. Na frontende (`index.html` + `wizard.js`):
- Krok 7: Zobrazenie náhľadu (napr. cez `<iframe>` smerujúci na `exports/<project_id>/index.html`).
- Možnosť prepínať medzi Desktop/Mobile náhľadom.
- Tlačidlo "Upraviť zadanie" (návrat do wizardu).
- Tlačidlo "Stiahnuť web" (volanie exportu).
2. Na backende (`ajax.php`):
- Implementácia akcie `exportWebsite`.
- Vytvorenie ZIP archívu z obsahu priečinka `exports/<project_id>/`.
- ZIP nesmie obsahovať konfiguračné súbory wizardu alebo AI pracovné súbory (iba výsledný web).
- Vrátenie linku na stiahnutie alebo priamy download.
## Implementačné pravidlá
- Preview musí byť izolované (iframe), aby CSS exportu neovplyvňovalo wizard.
- ZIP archív by mal mať názov podľa firmy (napr. `web-pizza-marco.zip`).
## Súbory ktoré je potrebné vytvoriť
Žiadne.
## Súbory ktoré je potrebné upraviť
- `public/index.html` (DOM pre náhľad a export)
- `public/js/wizard.js` (logika pre iframe a download)
- `public/ajax.php` (akcia `exportWebsite` - ZIP generovanie)
## API a dátové štruktúry
Akcia `exportWebsite`:
- Request: `{ "project_id": "..." }`.
- Response: `{ "success": true, "data": { "download_url": "..." } }`.
## Frontend požiadavky
- Pútavé zobrazenie náhľadu.
- Jasné inštrukcie, čo robiť po stiahnutí (napr. "Nahrajte obsah na váš FTP").
## Backend požiadavky
- PHP rozšírenie `ZipArchive`.
## Testovací scenár
1. Dokonči generovanie webu.
2. Over, či sa v Kroku 7 správne zobrazí náhľad v iframe.
3. Klikni na stiahnutie.
4. Rozbaľ ZIP a over, či obsahuje všetky potrebné súbory (index, assets, php skripty) a či web funguje po otvorení z disku.
## Definition of Done
- Používateľ si môže prezrieť web pred stiahnutím.
- Export do ZIP funguje a obsahuje kompletný, funkčný statický web.
- Proces je plynulý od konca generovania až po download.
## Obmedzenia
- ZIP nesmie byť príliš veľký (obmedzenie na assety).
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy

66
docs/prompts/step20.md Normal file
View File

@ -0,0 +1,66 @@
# Krok 20 - Kvalitatívne Validácie a Error Handling Fixes
## Kontext projektu
Pred dokončením MVP je potrebné vykonať finálnu revíziu kódu, opraviť drobné chyby a zabezpečiť súlad so všetkými technickými požiadavkami.
## Pred implementáciou si preštuduj
- `docs/architecture.md` - Celý dokument, najmä sekcie 12 a 13.
- `docs/mvp.md` - "Website Quality Requirements".
## Cieľ
Vykonať plošnú kontrolu kvality, optimalizovať výkon (v rámci možností) a zabezpečiť robustné ošetrenie chýb.
## Požadované zmeny
1. Revízia backendu:
- Kontrola všetkých `try-catch` blokov.
- Odstránenie `var_dump` a debug logov.
- Overenie bezpečnosti (path traversal, sanitizácia vstupov).
2. Revízia frontendu:
- Kontrola konzoly prehliadača na JS chyby.
- Optimalizácia načítavania assetov.
- Finálne doladenie CSS (responzivita, prístupnosť).
3. Revízia generovaného webu:
- Validácia HTML cez W3C (mock test).
- Kontrola relatívnych ciest.
- Overenie funkčnosti bez JavaScriptu (kde je to možné).
4. Dokumentácia:
- Aktualizácia `README.md` s inštrukciami pre inštaláciu a spustenie.
## Implementačné pravidlá
- Kód musí byť čistý, komentovaný a v súlade s PSR štandardmi.
- Žiadne "hidden" závislosti.
- Systém musí fungovať na štandardnom PHP 8.2 hostingu.
## Súbory ktoré je potrebné vytvoriť
- `README.md` (aktualizácia/vytvorenie)
## Súbory ktoré je potrebné upraviť
- Plošne všetky súbory podľa potreby.
## API a dátové štruktúry
Žiadne zmeny, len stabilizácia.
## Frontend požiadavky
- Plynulý zážitok bez "preblikávania" alebo neošetrených stavov.
## Backend požiadavky
- Stabilný výkon, žiadne memory leaky pri spracovaní úloh.
## Testovací scenár
1. Prejdi celým procesom od prvej návštevy až po export pre 3 rôzne kategórie biznisu.
2. V každom kroku skús zadať neplatné dáta a over, či ich systém správne odmietne.
3. Skontroluj vygenerované ZIP archívy na rôznych zariadeniach/prehliadačoch.
## Definition of Done
- Systém je stabilný, bezpečný a pripravený na nasadenie.
- Kvalita kódu a výstupu spĺňa MVP požiadavky.
- Všetky známe chyby sú opravené.
## Obmedzenia
- Nepridávaj nové funkcie, ktoré nie sú v MVP scope.
## Výstup
- zoznam vytvorených súborov
- zoznam upravených súborov
- stručné zhrnutie vykonaných zmien
- prípadné otvorené problémy