📖 Brief Progetto
MCL Travel Hub è il network di 63+ siti turistici italiani di MCL Media SRL, divisi in regionali (venetoinvacanza.it, calabriainvacanza.it) e single-destination (cefaluinvacanza.net, taorminainvacanza.net). L'infrastruttura si basa su due server: il gestionale base.mclmedia.eu (OVH 54.36.100.203) e il server Travel (OVH 152.228.162.32) con i siti Laravel.
Oggi 19 marzo 2026 è stato costruito da zero il gestionale travel.mclmedia.eu — un centro di controllo PHP custom dedicato esclusivamente ai siti Travel, separato dal gestionale base. Si connette via SSH con ControlMaster al server Travel e legge i DB di tutti i 63 siti in tempo reale.
Funzionalità completate: home con griglia 63 siti e ricerca, overview per sito con KPI, lista articoli con filtri/sort/paginazione e azioni (pubblica/rischedula/rimuovi con UTC_TIMESTAMP), dettaglio articolo con check immagini reale via HTTP HEAD e zone upload per placeholder AI, lista hotel con colonna qualità contenuto (% vs media sito), dettaglio hotel con pannello qualità e prompt AI per riscrittura, destinazioni con matrice completamento, attrazioni. Sistema login con sessione 8h. Pagina Configurazione Globale con tutte le API key del sistema.
Editor 'Nuovo Articolo' completo: titolo, categoria, destinazione, upload cover e inline via SCP, toolbar HTML, e bottone 'Scrivi con AI' che replica il flusso dei siti Travel (Perplexity sonar-pro per ricerca dati reali → GPT-4.1 per scrittura HTML). I placeholder generati dall'AI diventano zone di upload cliccabili sia nell'editor (prima della pubblicazione) che nel dettaglio articolo (dopo). Quando un articolo viene schedulato, vengono creati automaticamente i record image_tasks nel DB del sito così il cron cache-grafico.php li raccoglie e Salvina li vede nella sua dashboard.
Sistema Multi Articolo: inserisci un template titolo con [destinazione], scegli filtro siti (tutti/regionali/single_dest/manuale), genera anteprima titoli per ogni destinazione di ogni sito, conferma e lancia generazione batch in background. Ogni articolo viene schedulato con orari scaglionati (8:00, 9:00, 10:00...) e pubblicazione tra 2 giorni per dare tempo a Salvina di caricare le immagini.
Sistema Multi Articolo Plus: articoli che si autoaggiornano. Stessa creazione del Multi Articolo ma con toggle Plus che registra gli articoli nella tabella locale refresh_articles. Un cron giornaliero (06:00) controlla quali articoli necessitano aggiornamento, lancia Perplexity per dati freschi, GPT-4.1 riscrive il body preservando tutte le immagini (cover e inline), e aggiunge nota 'Ultimo aggiornamento'. Pagina monitor 'Articoli Plus' con stats, stato, prossimo refresh, errori.
Problemi risolti: exec() da PHP-FPM per il worker background (fix con /opt/plesk/php/8.3/bin/php + nohup), permessi cartella cache/jobs (chown utente Plesk), NaN nel progress polling. Il worker va lanciato manualmente da CLI per ora — il lancio automatico da PHP-FPM non funziona ancora.
Prossimi step: testare Multi Articolo Plus end-to-end, risolvere il lancio automatico del worker background, completare la pagina Configurazione con i nomi variabili corretti dal .env dei siti.
Oggi 19 marzo 2026 è stato costruito da zero il gestionale travel.mclmedia.eu — un centro di controllo PHP custom dedicato esclusivamente ai siti Travel, separato dal gestionale base. Si connette via SSH con ControlMaster al server Travel e legge i DB di tutti i 63 siti in tempo reale.
Funzionalità completate: home con griglia 63 siti e ricerca, overview per sito con KPI, lista articoli con filtri/sort/paginazione e azioni (pubblica/rischedula/rimuovi con UTC_TIMESTAMP), dettaglio articolo con check immagini reale via HTTP HEAD e zone upload per placeholder AI, lista hotel con colonna qualità contenuto (% vs media sito), dettaglio hotel con pannello qualità e prompt AI per riscrittura, destinazioni con matrice completamento, attrazioni. Sistema login con sessione 8h. Pagina Configurazione Globale con tutte le API key del sistema.
Editor 'Nuovo Articolo' completo: titolo, categoria, destinazione, upload cover e inline via SCP, toolbar HTML, e bottone 'Scrivi con AI' che replica il flusso dei siti Travel (Perplexity sonar-pro per ricerca dati reali → GPT-4.1 per scrittura HTML). I placeholder generati dall'AI diventano zone di upload cliccabili sia nell'editor (prima della pubblicazione) che nel dettaglio articolo (dopo). Quando un articolo viene schedulato, vengono creati automaticamente i record image_tasks nel DB del sito così il cron cache-grafico.php li raccoglie e Salvina li vede nella sua dashboard.
Sistema Multi Articolo: inserisci un template titolo con [destinazione], scegli filtro siti (tutti/regionali/single_dest/manuale), genera anteprima titoli per ogni destinazione di ogni sito, conferma e lancia generazione batch in background. Ogni articolo viene schedulato con orari scaglionati (8:00, 9:00, 10:00...) e pubblicazione tra 2 giorni per dare tempo a Salvina di caricare le immagini.
Sistema Multi Articolo Plus: articoli che si autoaggiornano. Stessa creazione del Multi Articolo ma con toggle Plus che registra gli articoli nella tabella locale refresh_articles. Un cron giornaliero (06:00) controlla quali articoli necessitano aggiornamento, lancia Perplexity per dati freschi, GPT-4.1 riscrive il body preservando tutte le immagini (cover e inline), e aggiunge nota 'Ultimo aggiornamento'. Pagina monitor 'Articoli Plus' con stats, stato, prossimo refresh, errori.
Problemi risolti: exec() da PHP-FPM per il worker background (fix con /opt/plesk/php/8.3/bin/php + nohup), permessi cartella cache/jobs (chown utente Plesk), NaN nel progress polling. Il worker va lanciato manualmente da CLI per ora — il lancio automatico da PHP-FPM non funziona ancora.
Prossimi step: testare Multi Articolo Plus end-to-end, risolvere il lancio automatico del worker background, completare la pagina Configurazione con i nomi variabili corretti dal .env dei siti.
📁 File Progetto
1 file
Max 64M · zip, pdf, docx, xlsx, immagini, codice…
29KB · 19/03/2026 14:56
📊 Avanzamento
75%
✅ To Do List
23/31
✓
Infrastruttura due server (base + travel) configurata e operativa
✓
Template Laravel master (staging-app) su siciliainvacanza.net
✓
Deploy wizard regionale (4 step) funzionante
✓
Deploy wizard single-dest (4 step + AI) funzionante
✓
Sistema immagini completo: image_tasks, cache, dashboard grafico, upload API
✓
Integrazione Agoda: lookup cities, sync hotel, publish automatico
✓
Content AI pipeline: content:generate-all con GPT-4.1
✓
Piano editoriale AI: 35 titoli Perplexity + GPT-4.1, blog:publish-scheduled
✓
Deploy 63+ siti (17 regionali + 46 single-dest)
✓
Sistema acquisto domini OVH + DNS Cloudflare automatizzato
✓
Dashboard Travel Overview con stato completo tutti i siti
✓
Sistema task management con auto-task (GSC, sitemap, missed)
✓
Turni lavoro configurabili (work_config) per grafico e gestore
✓
Symlink storage fix (blog/destinations/images) su tutti i 63 siti + patch deploy script
✓
Push Immich per libreria immagini condivisa
✓
TravelXity backlink system (gestionale Discover → GNews → backlink Travel)
✓
Contact database scraper hospitality (Pagine Gialle, Excel export)
✓
Gestionale travel.mclmedia.eu: home 63 siti, overview, articoli, hotel, destinazioni, attrazioni, login
✓
Gestionale travel: editor Nuovo Articolo con upload immagini SCP e bottone Scrivi con AI (Perplexity + GPT-4.1)
✓
Gestionale travel: pannello qualità contenuto hotel con score, confronto media sito, prompt AI riscrittura
✓
Gestionale travel: check immagini HTTP HEAD reale + placeholder upload interattivi nel dettaglio articolo
✓
Gestionale travel: Multi Articolo batch (template [destinazione], filtro siti, anteprima, generazione background)
✓
Gestionale travel: Multi Articolo Plus con auto-aggiornamento (tabella refresh_articles, cron giornaliero, monitor)
Completare deploy dei ~50 domini single-dest acquistati ma non ancora deployati
Ottimizzare Perplexity enrichment per hotel e destinazioni su tutti i siti
Verificare e completare immagini mancanti su tutti i siti (cover, OG, hero, blog)
Configurare Google Search Console per tutti i nuovi siti
Monitorare e ottimizzare performance SEO (GSC data dashboard)
Preparare migrazione verso server dedicato Hetzner
Integrare sistema push notification sui siti Travel
Sviluppare sistema revenue tracking per Travel (Agoda affiliate)
📝 Note
ARCHITETTURA: Il sistema Travel è split su due server. Il gestionale base (base.mclmedia.eu, OVH 54.36.100.203) orchestra deploy, task, cron. Il nuovo gestionale travel (travel.mclmedia.eu, stesso VPS di base) è dedicato alla gestione contenuti dei siti. I siti Laravel vivono sul server Travel (OVH 152.228.162.32). Ogni sito: /var/www/vhosts/{dominio}/{slug}-app/ (app Laravel) + /var/www/vhosts/{dominio}/httpdocs/ (document root Plesk con bridge + symlink storage).
GESTIONALE TRAVEL (travel.mclmedia.eu): PHP custom con SSH ControlMaster verso il server Travel. File structure: config.php, index.php (router + auth), includes/ (db.php, functions.php, ssh.php), pages/ (home, config, multi-article, plus-monitor, site/*), api/ (article-action, article-create, article-ai, multi-article, multi-article-worker), templates/ (layout, sidebar), cron/ (refresh-articles.php). Login: luca / McL!Travel2026#. Sessione 8h.
SSH ENGINE: ssh.php v2 con ControlMaster (una connessione persistente, ~50ms per query vs ~1.5s). Metodi: query(), queryRaw(), queryCount(), queryOne(), queryBatch(), hasColumn(), getAppPath(), artisan(). Usa heredoc bash per evitare problemi di quoting.
WORKER BACKGROUND: Il lancio automatico di multi-article-worker.php via exec() da PHP-FPM non funziona ancora in modo affidabile. Workaround: lanciare manualmente da CLI con /opt/plesk/php/8.3/bin/php api/multi-article-worker.php JOB_ID. I log vengono salvati in cache/jobs/{jobId}.log. La cartella cache/jobs deve avere owner mclmedia.eu_2cxzkbdro6e:psacln.
ARTICOLI PLUS: La tabella refresh_articles è nel DB locale travel_ (non sui siti). Il cron refresh-articles.php gira alle 06:00 e aggiorna gli articoli preservando le immagini con un sistema di marker (%%IMG_N%%). Scadenza configurabile per articolo.
SYMLINK CRITICI: httpdocs/storage/blog → app/storage/app/public/blog, idem per destinations e images. Creati come utente vhost per policy Nginx disable_symlinks if_not_owner.
TEAM: Alessandro gestisce deploy e task operativi (NON Discover). Salvina gestisce immagini per Travel/Yappo/Discover. Dashboard separate con offset.
API KEYS: Perplexity nel .env di ogni sito (PERPLEXITY_API_KEY). OpenAI nella tabella settings di ogni sito (openai_api_key). Fallback hardcoded in deploy-single-ai.php. OVH/Cloudflare nel config.php di base.
📜 Changelog
Implementato sistema Multi Articolo Plus: articoli con auto-aggiornamento settimanale. Tabella refresh_articles nel DB locale, cron giornaliero alle 06:00 (Perplexity dati freschi + GPT-4.1 riscrittura preservando immagini), pagina monitor 'Articoli Plus' con stats e stato. Toggle Plus integrato nella pagina Multi Articolo.
2026-03-19 17:00 · claude
Implementato sistema Multi Articolo: template titolo con [destinazione], filtro siti (tutti/regionali/single_dest/manuale), anteprima titoli per ogni destinazione, generazione batch background con Perplexity + GPT-4.1, schedulazione scaglionata (8:00, 9:00...) con offset 2 giorni, creazione automatica image_tasks per Salvina. Fix worker background (path PHP Plesk, nohup, permessi cache/jobs).
2026-03-19 16:00 · claude
Costruito editor Nuovo Articolo con upload immagini (cover + inline via SCP), bottone 'Scrivi con AI' (Perplexity sonar-pro ricerca → GPT-4.1 scrittura HTML in streaming SSE), zone upload placeholder post-generazione AI. Creazione automatica image_tasks per articoli schedulati, auto-close task quando immagine caricata dal gestionale.
2026-03-19 14:00 · claude
Costruito gestionale travel.mclmedia.eu da zero: SSH ControlMaster engine, home 63 siti, overview/articoli/hotel/destinazioni/attrazioni per sito, azioni articoli (pubblica UTC/rischedula/rimuovi), check immagini HTTP HEAD, pannello qualità hotel con score e prompt AI, login admin, pagina configurazione API. Fix timezone UTC, cleanContent(), colonne adattive hasColumn().
2026-03-19 12:00 · claude
Fix critico immagini 404: creati symlink httpdocs/storage/{blog,destinations,images} su tutti i 63 siti. Causa: Plesk serve da httpdocs ma Laravel salva in *-app/storage/app/public/. Patchato deploy-travel.sh step 7/10.
2026-03-19 09:00 · claude
Progetto creato su sviluppo.mclmedia.eu con documentazione completa del sistema
2026-03-19 09:30 · claude
Immagini blog caricate su cefaluinvacanza.net (cover blog Cosa vedere + Duomo di Cefalù)
2026-03-18 23:37 · salvina
Deploy completato per 63+ siti Travel (regionali + single-dest)
2026-03-15 00:00 · luca
Deploy wizard single-dest v2 con AI generation GPT-4.1 + revisione Claude
2026-03-10 00:00 · claude
Sistema immagini v5: migrazione completa da tasks su base a image_tasks locali sui siti, disattivazione generate-internal-img-tasks.php, dashboard grafico unificata
2026-03-06 00:00 · claude
Template single_dest completato con Agoda, Perplexity+GPT-4.1, hero dinamici, attraction/experience controllers
2026-03-03 00:00 · claude
Sistema acquisto domini automatizzato (OVH + Cloudflare + Plesk). 50 domini [dest]invacanza.it acquistati.
2026-02-28 00:00 · claude
Risolto OOM crisis sul server Travel: 257 cron paralleli sostituiti con script bash sequenziale + lock file
2026-01-19 00:00 · claude
ℹ️ Info
Server Base (Gestionale)
54.36.100.203 (OVH Plesk)
Server Travel (Siti)
152.228.162.32 (OVH Plesk)
URL Gestionale Base
https://base.mclmedia.eu
URL Gestionale Travel
https://travel.mclmedia.eu
Travel Hub DB
travel_ su base (basemcl_ / Y8soYg@3F9nnz*wt)
Tabella refresh_articles
travel_.refresh_articles (gestione articoli Plus)
Siti attivi
63+
Siti regionali
~17 (venetoinvacanza.it, calabriainvacanza.it, ecc.)
Siti single-dest
~46 (cefaluinvacanza.net, taorminainvacanza.net, ecc.)
Domini acquistati da deployare
~50 ([dest]invacanza.it)
Template master
/var/www/vhosts/siciliainvacanza.net/staging-app/
Deploy script regionale
/opt/mcl-travel/deploy-travel.sh
Deploy script single-dest
/opt/mcl-travel/deploy-single-dest.sh
SSH Key
/var/www/vhosts/mclmedia.eu/.ssh/travel_deploy_key
Agoda Site ID
1959890
Login Travel Gestionale
luca / McL!Travel2026#
Cron refresh Plus
0 6 * * * (refresh-articles.php)
Operatore immagini
Salvina Marsiglia (grafico)
Operatore deploy
Alessandro (gestore)
🛠 Tech Stack
🔗 Link
📘 README
Nessun README. Usa "Copia README" per farlo generare da Claude.
⚠️ Zona Pericolosa
clicca per espandere