implemented step 20 by Gemini
- README documentation
This commit is contained in:
78
README.md
78
README.md
@ -1,3 +1,77 @@
|
|||||||
# WebWizard
|
# WebWizard - AI Website Concierge (MVP)
|
||||||
|
|
||||||
Simple wizard for create website with LLM.
|
WebWizard je inteligentný asistent na tvorbu statických webových stránok pre malé podniky a živnostníkov. Pomocou intuitívneho wizardu a umelej inteligencie (DAIAPI) premení vaše základné informácie na profesionálny, responzívny web pripravený na nasadenie.
|
||||||
|
|
||||||
|
## 🚀 Hlavné funkcie
|
||||||
|
- **Inteligentný Wizard**: 8 krokov od definície biznisu až po finálny export.
|
||||||
|
- **AI Content Generation**: Automatické písanie marketingových textov a SEO metadát cez DAIAPI.
|
||||||
|
- **Vizuálna personalizácia**: Výber z preddefinovaných farebných paliet a dizajnových štýlov.
|
||||||
|
- **Správa Assetov**: Asynchrónne nahrávanie loga a fotogalérie.
|
||||||
|
- **Kontaktný formulár**: Podpora SMTP odosielania alebo lokálneho ukladania správ s vlastným prehliadačom.
|
||||||
|
- **Statický Export**: Kompletný balíček webu v ZIP formáte pripravený na FTP upload.
|
||||||
|
|
||||||
|
## 🛠️ Technický Stack
|
||||||
|
- **Backend**: PHP 8.2+ (bez frameworkov, čistý kód).
|
||||||
|
- **Frontend**: Vanilla JavaScript (ES6+), CSS Grid/Flexbox.
|
||||||
|
- **Dáta**: Súborový systém (JSON), žiadna databáza.
|
||||||
|
- **AI**: Integrácia s lokálnym DAIAPI.
|
||||||
|
|
||||||
|
## 📋 Požiadavky
|
||||||
|
- Webový server (Apache/Nginx) s podporou PHP 8.2.
|
||||||
|
- PHP rozšírenia: `curl`, `zip`, `fileinfo`.
|
||||||
|
- Povolený zápis (write permissions) do priečinkov `data/` a `exports/`.
|
||||||
|
|
||||||
|
## ⚙️ Inštalácia
|
||||||
|
1. Naklonujte repozitár na váš server.
|
||||||
|
2. Spustite `composer install` pre vygenerovanie autoloadera.
|
||||||
|
3. Skopírujte `.env.example` do `.env` a nastavte URL pre vaše DAIAPI:
|
||||||
|
```ini
|
||||||
|
DAIAPI_URL=http://10.2.8.1:9001/run
|
||||||
|
```
|
||||||
|
4. Nastavte Document Root vášho webservera do priečinka `public/`.
|
||||||
|
|
||||||
|
### Príklad NGINX konfigurácie
|
||||||
|
Pre správne fungovanie (najmä prístup k náhľadom v `/exports`) odporúčame nasledovnú konfiguráciu:
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name webwizard.test;
|
||||||
|
|
||||||
|
root /cesta/k/projektu/public;
|
||||||
|
|
||||||
|
# Sprístupnenie vygenerovaných webov pre náhľad
|
||||||
|
location /exports {
|
||||||
|
alias /cesta/k/projektu/exports;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
index index.php index.html;
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
include php.conf; # alebo vaša konfigurácia pre PHP-FPM
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🤖 Spustenie Workera
|
||||||
|
Pre spracovanie AI úloh na pozadí je potrebné spustiť worker skript:
|
||||||
|
|
||||||
|
**Manuálne (DEV):**
|
||||||
|
```powershell
|
||||||
|
php scripts/worker.php --loop
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cez Cron (PROD):**
|
||||||
|
Nastavte spúšťanie každú minútu:
|
||||||
|
```cron
|
||||||
|
* * * * * /usr/bin/php /cesta/k/projektu/scripts/worker.php >> /cesta/k/projektu/data/worker.log 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔒 Bezpečnosť
|
||||||
|
- Všetky vstupné dáta sú sanitizované.
|
||||||
|
- Prístup do `data/` je blokovaný cez `.htaccess`.
|
||||||
|
- Citlivé konfigurácie exportovaných webov sú uložené v `.php` súboroch.
|
||||||
|
- Heslá pre prezeranie správ sú hašované pomocou `password_hash()`.
|
||||||
|
|
||||||
|
## 📄 Licencia
|
||||||
|
MIT
|
||||||
|
|||||||
@ -784,7 +784,7 @@ const App = {
|
|||||||
try {
|
try {
|
||||||
const result = await this.apiCall('generateWebsite');
|
const result = await this.apiCall('generateWebsite');
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
console.log('Generation started:', result.data.task_id);
|
|
||||||
this.startPolling();
|
this.startPolling();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -817,7 +817,7 @@ const App = {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Polling error:', error);
|
console.error('Polling error:', error);
|
||||||
}
|
}
|
||||||
}, 10000);
|
}, 5000);
|
||||||
},
|
},
|
||||||
|
|
||||||
updateGenerationStatus(status) {
|
updateGenerationStatus(status) {
|
||||||
@ -886,3 +886,5 @@ const App = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => App.init());
|
document.addEventListener('DOMContentLoaded', () => App.init());
|
||||||
|
|
||||||
|
App.init());
|
||||||
|
|||||||
Reference in New Issue
Block a user