7.6 KiB
Avvio locale — Krèios
Guida per avviare l'ambiente completo di sviluppo: configuratore 3D, backoffice Laravel (API + pannello admin) e app cliente per i preventivi.
Panoramica
| Componente | Cartella | Stack | Porta | URL dev |
|---|---|---|---|---|
| Configuratore 3D | . (root del repo) |
Vite 6 + Three.js + jQuery | 5173 | http://localhost:5173 |
| Backoffice (API + admin) | backoffice/ |
Laravel 13 + Filament 3 + MySQL | 8000 | http://localhost:8000/api, admin su http://localhost:8000/admin |
| App cliente preventivi | backoffice/cliente/ |
Vue 3 + Vite | 5199 | http://localhost:5199 |
Le tre porte sono fisse (strictPort: true nei vari vite.config.js / serve --port): se una porta è già occupata l'avvio fallisce con un errore esplicito invece di spostarsi silenziosamente su un'altra.
Come si collegano:
- Il configuratore chiama l'API Laravel per il carrello (
POST /api/carrello/aggiungi, ecc.). - L'URL dell'app cliente non è hardcoded nel configuratore: all'avvio chiama
GET /api/confige usa ilfrontend_cliente_urlrestituito da Laravel (letto daAPP_FRONTEND_CLIENTE_URLnel.envdel backoffice). - Il flusso completo è descritto in PREVENTIVI_BACKOFFICE.md.
Requisiti
| Strumento | Versione minima | Note |
|---|---|---|
| Node.js | 20+ | per i tre front (Vite) |
| pnpm | 8+ | package manager della root e dell'app cliente (pnpm-lock.yaml è il lockfile di riferimento) — npm i -g pnpm o corepack enable |
| PHP | 8.3+ | richiesta da composer.json ("php": "^8.3") |
| Composer | 2+ | dipendenze Laravel |
| MySQL | 8 | host 127.0.0.1, user root, nessuna password |
| Python 3 | 3.10+ | opzionale: solo per rigenerare i listini PVC |
1) Backoffice Laravel (API + admin) — porta 8000
cd backoffice
composer install
Database
Creare il database (una volta sola):
CREATE DATABASE kreios_preventivi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
.env
Il backoffice ignora il suo .env in git: in un clone fresco va creato:
cp .env.example .env
php artisan key:generate
Poi impostare le variabili di sviluppo (in questo repo il .env è già configurato così):
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=kreios_preventivi
DB_USERNAME=root
DB_PASSWORD=
APP_URL=http://localhost:8000
APP_FRONTEND_CLIENTE_URL=http://localhost:5199
ADMIN_NOTIFY_EMAIL=tua-email@example.com
MAIL_MAILER=log
| Variabile | Descrizione |
|---|---|
APP_URL |
Base URL del backoffice |
APP_FRONTEND_CLIENTE_URL |
URL dell'app cliente — restituito al configuratore da GET /api/config |
ADMIN_NOTIFY_EMAIL |
Email che riceve la notifica di nuovo preventivo |
CONFIGURATOR_SESSION_DAYS |
Durata (giorni) della sessione di login del configuratore |
MAIL_MAILER |
log in dev: le email finiscono in storage/logs/laravel.log (incluso il PDF allegato) |
Migrations, seed e asset
php artisan migrate --seed # crea le tabelle + l'utente admin
php artisan storage:link
npm install # asset Vite del pannello (nessun lockfile; .npmrc ha ignore-scripts=true)
Avvio
php artisan serve --port=8000
- API: http://localhost:8000/api
- Pannello admin: http://localhost:8000/admin
- Email:
admin@kreiosinfissi.it— Password:password(seed di default)
- Email:
- Le email di conferma preventivo sono inviate in modo sincrono (
Mail::send): in dev non serve avviarequeue:listen.
Alternativa:
composer devavvia in parallelo server, queue, log (pail) e Vite.
2) App cliente (Vue) — porta 5199
cd backoffice/cliente
pnpm install
pnpm dev
.env già presente in repo con il default corretto per lo sviluppo: VITE_API_BASE=http://localhost:8000/api.
3) Configuratore 3D — porta 5173
pnpm install
pnpm dev
-
Il server parte su
0.0.0.0:5173(vedivite.config.js). -
L'entry point richiede due parametri obbligatori nella query string:
http://localhost:5173/?sistema=pvc&type=finestra_2_antesistema:pvc|alluminio|legno|acciaiotype: id modello valido per quel sistema (elenco completo in URL_PARAMS.md)
Senza i due parametri l'app lancia un errore in fase di avvio.
-
In produzione il configuratore gira dentro un
<iframe>sukreiosinfissi.it; in dev si apre direttamente in una tab.
Sequenza completa (tre terminali)
# Terminale 1 — backoffice Laravel (API + admin)
cd backoffice && php artisan serve --port=8000
# Terminale 2 — app cliente
cd backoffice/cliente && pnpm dev
# Terminale 3 — configuratore (dalla root del repo)
pnpm dev
Verifica end-to-end
- Apri http://localhost:5173/?sistema=pvc&type=finestra_2_ante — il modello 3D si carica e il menu è attivo.
- Configura dimensioni/finiture e clicca "Aggiungi al preventivo" →
POST /api/carrello/aggiungi; il token del carrello viene salvato inlocalStorage. - Clicca "Vai al preventivo" → si apre http://localhost:5199/?token=XXX con il riepilogo del carrello.
- Compila i dati del cliente e conferma.
- Controlla il risultato:
- il preventivo compare in http://localhost:8000/admin con stato
inviato; - le email (cliente con PDF allegato + notifica admin) sono in
backoffice/storage/logs/laravel.log.
- il preventivo compare in http://localhost:8000/admin con stato
Build di produzione (configuratore)
# 1. Creare .env.production (non tracciato in git) con l'URL API reale
cp .env.production.example .env.production
# -> VITE_PREVENTIVI_API_BASE=https://preventivi.kreiosinfissi.it/api
# 2. Build + zip (build.sh fallisce se .env.production manca)
./build.sh # pnpm build -> dist/ -> rinominata in kreios/ + kreios.zip
pnpm preview serve localmente la build di produzione per un'anteprima.
Rigenerare i listini PVC (opzionale)
scripts/extract_listini_pvc.py parsa PVC_LISTINO.xls e rigenera i file
src/assets/data/modelli/pvc/<modello>/listino.json.
python3 -m venv .venv && source .venv/bin/activate
pip install -r scripts/requirements.txt # xlrd
python3 scripts/extract_listini_pvc.py # eseguire dalla root del repo
Nota: ogni nuovo titolo presente nel foglio ma non ancora mappato va aggiunto alla costante
KNOWN_FOLDERS dello script, altrimenti il modello non viene riconosciuto (vedi
ORIGINE_LISTINI_PVC.md).
Troubleshooting
| Sintomo | Causa probabile / soluzione |
|---|---|
Port 5173/5199 is already in use o errore di porta su 8000 |
Le porte sono fisse: individuare e fermare l'altro processo (lsof -i :5173) |
| "Aggiungi al preventivo" dà errore / richieste CORS rifiutate | Laravel non è in ascolto su 8000, oppure VITE_PREVENTIVI_API_BASE nel .env della root non punta a http://localhost:8000/api |
| "Vai al preventivo" apre la URL sbagliata | Controllare APP_FRONTEND_CLIENTE_URL nel .env del backoffice: il configuratore legge l'URL dell'app cliente da GET /api/config |
SQLSTATE[HY000] [2002] Connection refused |
MySQL non è in esecuzione, oppure credenziali/host errati nel .env del backoffice |
SQLSTATE[HY000] [1049] Unknown database 'kreios_preventivi' |
Creare il database (vedi sezione 1) |
| Login admin rifiutato | Eseguire php artisan migrate --seed e usare admin@kreiosinfissi.it / password |
| Il configuratore parte con errore a schermo | Manca o è errato uno dei parametri sistema/type nell'URL |
| Prezzi assenti o a zero | Listini non presenti: rigenerarli con lo script Python o verificare i JSON in src/assets/data/modelli/<sistema>/<modello>/listino.json |
php artisan serve dice che la porta è occupata |
Fermare l'altro server: lsof -i :8000 |