ControlCenter
➕ Nuovo 📝 Aggiorna 📘 Docs 07/05/2026 09:03
← Tutti i progetti
🏗
Gestionale Base (base.mclmedia.eu)
Dashboard centralizzata PHP: Travel deploy, Search Console, task management, push notifications, domain scanning, image tasks, budget giornaliero collaboratori, migrazione domini tra server, configurazione orari lavorativi da UI.
● Attivo Priorità Alta 👤 Luca
🤖 Sincronizza con Claude
🚀 Copia Brief + ToDo = per iniziare una nuova conversazione  |  📋 JSON Completo = per aggiornare a fine sessione
📖 Brief Progetto
Nessun brief ancora. Usa il tasto qui sotto per farlo generare da Claude.
1. Premi 🧠 Chiedi generazione Brief → incolla nella chat Claude (allega anche lo zip del progetto se disponibile)
2. Claude ti restituisce il testo → premi 📥 Incolla Brief e incollalo qui
📁 File Progetto 0 file
Max 64M · zip, pdf, docx, xlsx, immagini, codice…
📊 Avanzamento
0%
✅ To Do List 0/0
Nessuna task
📝 Note
base.mclmedia.eu è il cuore operativo di MCL Media. Tutto passa da qui. == SISTEMA VERIFICA GSC & SITEMAP == gscVerifyAllSites(): verifica tutti i siti attivi (tutti i tipi, nessun filtro) confrontando con le 475 proprietà del service account discover-mcl@test-c4a5c.iam.gserviceaccount.com. Match diretto + fallback www. gscCheckSitemaps(): verifica sitemap via API GSC (sitemaps.listSitemaps), NON più via HTTP HEAD. Prova URL prefix (https://domain/, https://www.domain/) perché sc-domain: dà 403 sull'endpoint sitemaps. Configurazione per tipo in GSC_SITEMAPS_BY_TYPE: discover/parking/straniero (sitemap_index.xml, post-sitemap.xml, feed), google_news (+feed/gn, sitemap-news.xml), affiliate (sitemap.xml). Default per tipi non mappati: sitemap.xml (copre travel e futuri tipi). Cron check-gsc.php alle 7: verifica GSC + sitemap + sync auto-task. recheck.php: include vendor/autoload.php per sitemap check via API GSC. Dashboard gestore: pulsante Verifica usa data.found/data.ok (non data.data.found). Travel sitemap check rimosso dalla cache bash, ora passa da API GSC come tutti. == SYNC GESTIONALE == cron/sync-gestionale.php (ogni 6h): scarica 4 liste (discover/gnews/parking/straniero) da discover.gestionemcl.it. Upsert rimette status=active per siti presenti (anche se erano paused). Siti non più nella lista: DELETE (non più paused). Copre tutti e 4 i tipi. api/sync.php è una copia separata (usata solo da trigger manuale admin). == SISTEMA MIGRAZIONE DOMINI == Tab 'Migrazione Domini' in sidebar (solo admin/gestore). 5 sotto-tab: Migra Domini (seleziona server origine → seleziona domini → Avvia), Attive (refresh 5s), Storico (filtri completed/failed/ssl_pending), SSL Monitor (attiva ora / schedulati), Server (CRUD + guida SSH 5 step). Architettura: API migration.php (mette in coda) → cron migration-cron.php ogni minuto (processa 1 job) → 6 fasi (backup DB admin Plesk, creazione Plesk, rsync file+dump, config DB+permessi+wp-config, pulizia, Cloudflare+SSL). Eliminazione automatica da server origine dopo completamento. Cloudflare: setupTravelSite() pulisce record A+CNAME, crea A proxied per @ e www, SSL Full, Always HTTPS. SSL: Let's Encrypt schedulato 60min post-migrazione via 'at', retry automatico 30min se fallisce. Server configurati in DB (migration_servers): SERVER 1-2-5, VECCHIO PARK, PARK MCL (dest), VPS 001-002-004-005. Ogni nuovo server richiede: chiave Base MCL + chiave Park MCL su authorized_keys + whitelist fail2ban IP 54.36.100.203 e 51.89.11.55. Nota: script bash sposta.sh su Park MCL (/root/sposta.sh) è ancora funzionante come alternativa CLI. == GESTIONE ORARI LAVORATIVI == Pagina admin 'Orari Lavorativi' (base.mclmedia.eu/?page=work-config): tabella DB work_config con config_key/config_value per ruolo. Due tab: Grafico (Salvina) e Gestore (Alessandro). Grafico: budget unico tutti i giorni (default 240min). Tempi per tipologia immagine configurabili (yappo, discover, cover_destination, cover_attraction, cover_blog, og_image, inline_content, hero, logo). Gestore: budget differenziato feriale/weekend (default 360/180min). Tempi per attività (bozze, deploy, seo, immagini). Helper includes/work-config-helper.php: funzione getWorkConfig($role) legge dal DB con fallback ai valori hardcoded se tabella vuota o errore DB. Usato da: cron/grafico-morning.php, cron/gestore-morning.php, pages/dashboard/grafico.php. API api/work-config.php: GET ?role=grafico|gestore (lista config), POST {role, updates} (bulk update). Solo admin. Log in activity_log. == SISTEMA BUDGET GIORNALIERO == Gestore (Alessandro): budget da DB work_config (default 360min lun-ven, 180min sab-dom). Riempimento prioritario: bozze → deploy → SEO → immagini (tempi da DB). Task manuali admin sono extra, non nel budget. Cron: 07:30 + 20:00. Grafico (Salvina): budget da DB work_config (default 240min tutti i giorni). Target calcolato con tempo medio ponderato sulla composizione coda (tempi da DB). Fuso Philadelphia: cron morning 11:00 Roma (5:00 AM Philly), cron evening 07:00 Roma (1:00 AM Philly). Finestra conteggio dashboard: 11:00→11:00 Roma. Stipendio €1500/mese → costo attuale ~€0,47/img, obiettivo €0,25/img. NOTA: grafico-evening.php usa ancora finestra 14:00 — da aggiornare a 11:00. == DASHBOARD == Gestore v8: 5 sezioni (Produzione, Deploy, SEO, Immagini del Giorno, Task manuali). Stat card con target oggi + fatti. Barra progresso immagini. Pulsante Verifica GSC/sitemap funzionante via API GSC. Grafico: barra target in cima con conteggio live (aggiornamento ad ogni upload). Finestra 11:00→11:00 Roma. Tempi e budget da DB work_config. Admin v3: KPI, contenuti network+travel, missed schedule, push alerts, problemi travel. == STATS ADMIN == Stats Gestore: calendario mensile + tabella con budget/target/delta per bozze WF/AMZ, deploy, SEO, immagini, task manuali. Stats Grafico v2: calendario target vs fatto (verde/giallo/rosso), KPI con costo/immagine, distribuzione oraria, breakdown tipologia. == ISSUE APERTE == 1. Deploy=0 nel cron gestore: i deploy pendenti vengono dalla API Plesk (domini non deployati), non dalla tabella tasks. Serve integrare conteggio deploy da API plesk-domains.php. 2. dashboard-gsc-alerts.php (admin): ha lo stesso bug data.data?.found/ok del gestore — da allineare. 3. api/sync.php (trigger manuale): ha ancora il vecchio codice con paused — da allineare al cron o eliminare. 4. grafico-evening.php: finestra oraria ancora a 14:00, da aggiornare a 11:00 per allineamento col nuovo cron morning. == INFRASTRUTTURA == Domain buy: pipeline OVH → Cloudflare → NS pending (cron) → Plesk + SSL. Due server: Travel (152.228.162.32), WF (141.95.0.71). SSH base→travel da fixare per 53 domini mancanti. == AUDIT SERVER 1 == OVH bare metal, AMD EPYC 4244P 6c/12t, 30GB RAM, NVMe RAID 892GB (15% usato), CloudLinux 9.5, Plesk Obsidian 18.0.68. Stack: Apache 2.4.62 + Nginx 1.26.3 + LiteSpeed 6.3.1 Enterprise. HTTP/2+HTTP/3+Brotli attivi. Criticità identificate: 343K tentativi SSH (blindare porta/IP), load avg 2.3 (ottimizzare cron), PHP default 8.0 EOL (aggiornare a 8.2+), 32 cron wp-cron ogni 5min (ridurre a 15min), MariaDB 10.5 (aggiornare a 10.11), singolo DNS resolver OVH (aggiungere 1.1.1.1/8.8.8.8), 41 IP su stesso ASN (rischio pattern Google Discover). Prossimi step: fix deploy=0, fix dashboard-gsc-alerts.php, ottimizzazione sidebar, console live migrazioni, fix finestra grafico-evening.php.
📜 Changelog
Pagina Gestione Orari Lavorativi: tabella DB work_config con budget e tempi per tipologia per Grafico (Salvina) e Gestore (Alessandro). Pagina admin con due tab, input editabili, anteprima target live. API work-config.php (GET/POST). Helper work-config-helper.php con getWorkConfig() e fallback hardcoded. Cron grafico-morning.php, gestore-morning.php e dashboard grafico.php patchati per leggere dal DB. Voce 'Orari Lavorativi' aggiunta in sidebar sotto Gestione.
2026-03-13 18:00 · claude
Cron Grafico spostato da 14:00 a 11:00 italiane nel crontab (era 8:00 AM Philadelphia, ora 5:00 AM). Finestra conteggio immagini nella dashboard grafico.php aggiornata da 14:00 a 11:00. Fix 21 immagini Salvina del 13/03 caricate tra 13:00-13:59: shift +1h nel DB per conteggio corretto nella giornata lavorativa.
2026-03-13 17:30 · claude
Integrazione travel nel check sitemap GSC: default fallback sitemap.xml per tipi non mappati in GSC_SITEMAPS_BY_TYPE. Rimosso vecchio blocco travel sitemap (cache-travel-overview.sh) dalla dashboard gestore. cefaluinvacanza.net verificato OK come type=travel.
2026-03-13 07:30 · claude
Fix pulsante Verifica sitemap dashboard gestore: aggiunto require vendor/autoload.php in recheck_sitemap (api/recheck.php). Fix JSON response path: data.found/data.ok invece di data.data?.found/data.data?.ok in gdRecheck() (pages/dashboard/gestore.php).
2026-03-13 07:28 · claude
Riscrittura gscCheckSitemaps(): verifica sitemap via API GSC (sitemaps.listSitemaps) invece di HTTP HEAD. Prova URL prefix https://domain/ e https://www.domain/ per evitare errori 403 su proprietà sc-domain:. gscVerifyAllSitemaps() ora copre tutti i siti attivi (rimosso filtro type='parking'). Risultato: da 29 falsi positivi a 36 problemi reali (per lo più feed RSS non inviati).
2026-03-13 07:20 · claude
Fix sync gestionale (cron/sync-gestionale.php): upsert ora rimette status=active per siti presenti nel gestionale (rimossa condizione che preservava paused/inactive). Pulizia ora fa DELETE FROM sites invece di UPDATE status=paused. Query pulizia copre tutti gli status (rimosso filtro NOT IN). Eliminati 20 siti fantasma, 11 siti riattivati. Log aggiornato: emoji 🗑️ e testo 'eliminati'.
2026-03-13 07:07 · claude
Fix GSC verifica discover: rimosso filtro type != 'discover' da gscVerifyAllSites() (includes/gsc-api.php riga 96), aggiunto filtro status != 'inactive'. 5 siti discover (packing4you.it, thepattayanews.it, pisappiamoci.it, sophiestique.it, tabaccheriapiscitelli.it) erano bloccati come non verificati perché il cron li escludeva. Script diagnostico debug-gsc.php usato per identificare il bug.
2026-03-13 07:00 · claude
Migration cron worker: creato migration-cron.php standalone (processa 1 job/min via cron), rimosso process_next dal polling frontend, API start ora mette solo in coda senza processare inline. Risolto blocco gestionale durante migrazioni pesanti. Cron in /etc/cron.d/mcl-migration.
2026-03-12 14:30 · claude
Guida SSH completa nella tab Server: 5 step con chiave Base MCL, chiave Park MCL, whitelist fail2ban (IP 54.36.100.203 + 51.89.11.55), verifica da Base, verifica da Park. Campo IP dinamico che aggiorna i comandi in tempo reale. Click-to-copy su tutti i blocchi codice.
2026-03-12 14:00 · claude
Fix Cloudflare CNAME: aggiunta pulizia record CNAME per root e www in setupTravelSite() oltre ai record A. Risolveva errore 81054 'CNAME record with that host already exists'. Aggiornati manualmente 7 domini migrati prima del fix.
2026-03-12 13:30 · claude
Fix critici migration API: rsync senza $keyFlag (Park usa chiavi proprie), DB_NAME extraction con sed invece di cut -d' (escape apostrofo impossibile in PHP string), login Plesk prefisso wp_ per domini numerici (3code.it). Migrazioni di massa funzionanti da SERVER 2, VPS 001, VPS 002, VPS 004.
2026-03-12 13:00 · claude
Pannello Migrazione Domini completato e installato: 5 tab (Migra Domini, Attive, Storico, SSL Monitor, Server). Tabelle DB migration_servers (9 server) + migration_jobs. API migration.php con processMigration 6 fasi (backup DB admin Plesk, creazione Plesk, rsync file+dump, config DB+permessi+wp-config, pulizia, Cloudflare+SSL). Rotta + sidebar aggiunti.
2026-03-12 11:30 · claude
Script bash sposta.sh v2: fix backup DB (credenziali admin Plesk via .psa.shadow, grep -v CACHE per DB_NAME), fix username DB unico (loop accorciamento progressivo), FASE 6 Cloudflare (API diretta in bash: zona + cleanup A/CNAME + record A proxied + SSL Full + Always HTTPS), SSL schedulato con 'at' (60min + retry 30min), selezione multipla domini (numeri separati da spazio), eliminazione automatica post-migrazione. Fix bug local PATH che sovrascriveva $PATH di sistema.
2026-03-12 10:30 · claude
Audit completo Server 1 (ns3251813, OVH bare metal): AMD EPYC 4244P 6c/12t, 30GB RAM, NVMe RAID 892GB, CloudLinux 9.5, Apache+Nginx+LiteSpeed Enterprise, HTTP/2+HTTP/3+Brotli. Criticità: 343K tentativi SSH falliti, load avg 2.3, PHP default 8.0 EOL, 32 cron wp-cron ogni 5min, MariaDB 10.5, singolo DNS resolver, 41 IP su stesso server (rischio pattern Google).
2026-03-12 10:00 · claude
Pagina Stats Grafico v2: rifatta da zero (rimosso confronto Salvina/Alessandro, ora solo Salvina). Calendario target vs fatto con codice colore verde/giallo/rosso, KPI mensili (fatte, target, media, hit rate, costo/img €1500/mese), distribuzione oraria 0-23, breakdown per tipologia, ultimi upload.
2026-03-12 09:45 · claude
Dashboard Grafico: aggiunta barra target giornaliero con calcolo ponderato dinamico (135 img/giorno su coda attuale). Fix finestra conteggio 16:00→16:00 Roma per allineare al turno Philadelphia di Salvina. Cron grafico-morning (16:00 Roma) e grafico-evening (04:00 Roma, registra ieri). Tabella grafico_daily_stats con coda per tipo, budget 240min, weighted_avg.
2026-03-12 09:35 · claude
Analisi orari reali Salvina da activity_log: lavora 16:00-04:00 Roma (10:00-22:00 Philadelphia), non 14:00-18:00. Tempi per tipologia: yappo/discover/cover_dest/hero 1min, cover_attr/cover_blog 1.5min, inline_content 2min, og_image 2.5min, logo 5min. Tempo medio ponderato 1.77min/img su coda 7.458 immagini.
2026-03-12 08:30 · claude
Dashboard Gestore v8: sistema budget giornaliero (360min feriale, 180min weekend). Ordine riempimento: bozze(1min) → deploy(5min) → SEO(2min) → immagini(1min). Target oggi: 230 bozze + 58 SEO + 14 immagini. Sezione Immagini del Giorno con progress bar. Task filtrati solo manuali (auto_ref IS NULL).
2026-03-12 08:05 · claude
Sistema Stats Gestore completo: tabella gestore_daily_stats, cron mattutino 7:30 (snapshot bozze/deploy/SEO/task), cron serale 20:00 (delta + completamenti), pagina Stats Gestore per admin (calendario mensile + tabella). Rotta + voce menu sidebar. Colonne target e images aggiunte al DB.
2026-03-12 07:30 · claude
Dashboard Gestore v7: ristrutturazione completa in 4 sezioni collassabili (Produzione, Deploy, SEO, Task). Header con 4 stat card. Apertura intelligente sezione più urgente. Progress bar SEO. Deploy integrato come sezione. Filtro task solo manuali.
2026-03-12 07:00 · claude
ℹ️ Info
Server 54.36.100.203 (Plesk)
DB basemcl_
Team Luca, Alessandro, Salvina
Dashboard Gestore v8 — budget giornaliero 6h/3h, target bozze+deploy+SEO+immagini, task solo manuali. Pulsante Verifica sitemap funzionante via API GSC
Dashboard Grafico con barra target giornaliero ponderato (calcolo dinamico da DB work_config), finestra 11:00→11:00 Roma
Dashboard Admin v3 — con sezione Problemi Travel
Stats Gestore calendario + tabella giorno per giorno con budget/target/delta
Stats Grafico v2 — calendario target vs fatto, KPI, costo/immagine, distribuzione oraria
Work Config Pagina 'Orari Lavorativi' (solo admin): tabella work_config con budget e tempi per tipologia per Grafico e Gestore. Helper work-config-helper.php con fallback hardcoded. Cron e dashboard leggono dal DB.
GSC Sitemap Check Verifica via API GSC (non più HTTP HEAD). Prova URL prefix (https://domain/, https://www.domain/) con fallback. Tutti i tipi di sito coperti, default sitemap.xml per tipi non mappati
Sync Gestionale Cron sync-gestionale.php: upsert rimette active i siti presenti, DELETE per siti rimossi (non più paused). Copre discover/google_news/parking/straniero
Migration Tab Migrazione Domini in sidebar — 5 tab (Migra, Attive, Storico, SSL Monitor, Server). Cron worker ogni minuto processa coda. Cloudflare auto (A+CNAME cleanup), SSL Let's Encrypt schedulato 60min post-migrazione
Server Configurati SERVER 1 (57.129.87.47), SERVER 2 (57.129.64.31), SERVER 5 (57.129.87.52), SERVER VECCHIO PARK (57.129.87.174), PARK MCL dest (51.89.11.55), VPS 001 (135.125.146.127), VPS 002 (135.125.181.241), VPS 004 (141.95.86.132), VPS 005
Cron Gestore 07:30 morning + 20:00 evening
Cron Grafico 11:00 morning + 07:00 evening (fuso Philadelphia: 5:00 AM / 1:00 AM)
Cron Migration * * * * * /etc/cron.d/mcl-migration → migration-cron.php (processa 1 job/min)
Cron GSC check-gsc.php ogni giorno alle 7: verifica GSC tutti i siti + sitemap via API GSC + sync auto-task
Prossimo step Fix deploy=0 nel cron gestore, ottimizzazione sidebar, fix dashboard-gsc-alerts.php (stesso bug data.data), console live migrazioni attive, aggiornare finestra oraria in grafico-evening.php da 14:00 a 11:00
🛠 Tech Stack
PHP MySQL JavaScript GSC API Plesk API OVH API Cloudflare API SSH/rsync
🔗 Link
📘 README
Nessun README. Usa "Copia README" per farlo generare da Claude.
⚠️ Zona Pericolosa clicca per espandere