diff --git a/astro.config.mjs b/astro.config.mjs index 01efcdd..eb7665e 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -14,5 +14,8 @@ export default defineConfig({ redirects: { '/programs': { status: 301, destination: '/services' }, '/programs/[slug]': { status: 301, destination: '/services/[slug]' }, + // Modifiche 02: "Pilates Flow" → "Profilazione"; "Rehab" esce da Servizi e passa a Training. + '/services/pilates-flow': { status: 301, destination: '/services/profilazione' }, + '/services/rehab': { status: 301, destination: '/training' }, }, }); diff --git a/src/assets/img/program-osteopatia.jpg b/src/assets/img/program-osteopatia.jpg new file mode 100644 index 0000000..56e716e Binary files /dev/null and b/src/assets/img/program-osteopatia.jpg differ diff --git a/src/data/content-seed.ts b/src/data/content-seed.ts index d2cdb1a..e66b407 100644 --- a/src/data/content-seed.ts +++ b/src/data/content-seed.ts @@ -225,7 +225,7 @@ export const contentSeed: SeedEntry[] = [ T('about.timeline.stage3.text', 'Contenuto in arrivo: il cliente fornirà il testo di questa tappa.'), // --- Services: lista (/services) --- T('services.meta.title', 'Servizi', []), - T('services.meta.description', 'I servizi InsanityLab: Personal Training, Performance Class, Coaching, Pilates Flow, Rehab e Nutrizione.', []), + T('services.meta.description', 'I servizi InsanityLab: Personal Training, Performance Class, Coaching, Profilazione, Osteopatia e Nutrizione.', []), T('services.hero.title', 'Servizi', []), T('services.intro.title', 'Servizi'), T('services.intro.body', "Questi sono i servizi delle classi di Insanity Lab selezionati per voi. Abbiamo scelto i migliori percorsi per offrirvi un'esperienza di allenamento completa e mirata."), diff --git a/src/data/service-icons.ts b/src/data/service-icons.ts index cea44d8..e2a230a 100644 --- a/src/data/service-icons.ts +++ b/src/data/service-icons.ts @@ -6,4 +6,7 @@ export const serviceIcons: Record = { 'pilates-flow': 'M12 4a2 2 0 110 4 2 2 0 010-4zM6 20c2-6 10-6 12 0M12 8v6', 'rehab': 'M12 21C7 17 3 13 3 9a5 5 0 019-3 5 5 0 019 3c0 4-4 8-9 12z', 'nutrition': 'M12 3c4 0 7 3 7 8s-3 10-7 10-7-5-7-10 3-8 7-8zm0-1v4', + // Servizi rinominati (modifiche 02): profilazione (grafico/analisi), osteopatia (mani) + 'profilazione': 'M4 20V6m5 14V4m5 16v-8m5 8V9M3 20h18', + 'osteopatia': 'M8 3v7a4 4 0 008 0V3M6 14c0 4 3 7 6 7s6-3 6-7', }; diff --git a/src/data/services.ts b/src/data/services.ts index 1c8bf19..d3ffd5c 100644 --- a/src/data/services.ts +++ b/src/data/services.ts @@ -56,30 +56,32 @@ export const services: Service[] = [ hasPricing: false, }, { - slug: "pilates-flow", - title: "Pilates Flow", - subtitle: "Movimento e controllo", - excerpt: "Il Pilates Flow migliora postura, core e consapevolezza corporea con un movimento fluido, mentre l’osteopatia supporta recupero, prevenzione e benessere globale integrandosi con l’allenamento.", - longDescription: "Il Pilates Flow unisce movimento fluido e controllo: migliora postura, core e consapevolezza corporea. Integrato con l’osteopatia, supporta recupero, prevenzione e benessere globale all’interno del percorso di allenamento.", - features: ["Postura e core", "Movimento fluido e controllo", "Integrazione con osteopatia", "Benessere globale"], + // NB: sostituisce "Pilates Flow" (il Pilates confluisce nella Holistic Class in Training). + // Copy BOZZA basata sul metodo ISL (profilazione fisica) — da confermare col cliente. + slug: "profilazione", + title: "Profilazione", + subtitle: "Check-up e valutazione fisica", + excerpt: "La profilazione fisica è il punto di partenza del metodo InsanityLab: una valutazione completa che definisce lo stato di salute iniziale e le priorità del percorso.", + longDescription: "Attraverso check-up, plicometria e analisi antropometriche misuriamo composizione corporea, postura e stato di forma. I dati raccolti guidano la costruzione di un programma personalizzato e permettono di monitorare i progressi nel tempo.", + features: ["Check-up fisico iniziale", "Plicometria e analisi antropometriche", "Definizione delle priorità del percorso", "Monitoraggio periodico dei progressi"], faq: [ - { q: "A chi è adatto il Pilates Flow?", a: "A chiunque voglia migliorare postura, mobilità e controllo del movimento, a ogni livello." }, - { q: "Serve esperienza precedente?", a: "No: le progressioni sono graduali e seguite da professionisti qualificati." }, - { q: "Come si integra con l’osteopatia?", a: "Il lavoro osteopatico supporta recupero e prevenzione, in sinergia con le sessioni di movimento." }, + { q: "Quando si fa la profilazione?", a: "All’inizio del percorso e poi periodicamente, per misurare i progressi e aggiornare il programma." }, + { q: "Che cosa comprende?", a: "Check-up fisico, plicometria e analisi antropometriche; alcune misurazioni avanzate sono disponibili su richiesta." }, ], hasPricing: false, }, { - slug: "rehab", - title: "Rehab", - subtitle: "Recupero post-infortunio, patologie muscolo-scheletriche", - excerpt: "Il Rehab InsanityLab è un percorso supervisionato che accompagna dal recupero riabilitativo al ritorno all’attività fisica in modo sicuro, progressivo e personalizzato.", - longDescription: "Il Rehab accompagna dal recupero post-infortunio o da patologie muscolo-scheletriche fino al ritorno all’attività fisica. Percorso supervisionato da chinesiologi e osteopati, sicuro, progressivo e personalizzato.", - features: ["Recupero post-infortunio", "Patologie muscolo-scheletriche", "Supervisione di chinesiologi e osteopati", "Progressione sicura e personalizzata"], + // NB: sostituisce "Rehab" nella pagina Servizi (il Rehab si sposta in Training). + slug: "osteopatia", + title: "Osteopatia", + subtitle: "Approccio manuale globale non invasivo", + excerpt: "L’osteopatia è una delle colonne portanti dell’approccio integrato di InsanityLab. Non è un servizio aggiunto: è parte della visione.", + longDescription: "L’osteopatia è indicata sia in modo preventivo, per chi vuole mantenere il proprio equilibrio corporeo, sia in modo curativo, per chi sta affrontando un problema specifico. È particolarmente utile in sinergia con l’allenamento, perché permette di lavorare su compensi e rigidità che altrimenti limiterebbero i progressi. Nel nostro approccio rientrano anche l’osteopatia neonatale e pediatrica.", + features: ["Dolori acuti e cronici (cervicale, lombare, articolazioni)", "Tensioni muscolari e fasciali", "Problemi posturali", "Cefalee", "Disturbi viscerali correlati a tensioni strutturali", "Recupero post-traumatico"], faq: [ - { q: "Chi segue il percorso Rehab?", a: "Professionisti specializzati in rieducazione funzionale ed esercizio adattato, in sinergia con l’area osteopatica." }, - { q: "Serve una diagnosi medica?", a: "Se disponibile è utile portarla alla prima consulenza; il percorso si integra con le indicazioni dei sanitari." }, - { q: "Quanto dura il percorso?", a: "Dipende dalla condizione di partenza: la progressione viene definita e aggiornata durante il percorso." }, + { q: "L’osteopatia è preventiva o curativa?", a: "Entrambe: è utile sia per mantenere l’equilibrio corporeo sia per affrontare un problema specifico, in sinergia con l’allenamento." }, + { q: "Trattate anche neonati e bambini?", a: "Sì, il nostro approccio comprende anche l’osteopatia neonatale e pediatrica." }, + { q: "Serve una prescrizione medica?", a: "Non è necessaria; se disponibile, eventuale documentazione clinica è utile alla prima valutazione." }, ], hasPricing: false, }, diff --git a/src/data/site.ts b/src/data/site.ts index 132e491..a961505 100644 --- a/src/data/site.ts +++ b/src/data/site.ts @@ -27,8 +27,8 @@ export const site = { { label: "Personal Training", href: "/services/personal-training" }, { label: "Performance Class", href: "/services/performance-class" }, { label: "Coaching", href: "/services/coaching" }, - { label: "Rehab", href: "/services/rehab" }, - { label: "Pilates Flow", href: "/services/pilates-flow" }, + { label: "Profilazione", href: "/services/profilazione" }, + { label: "Osteopatia", href: "/services/osteopatia" }, { label: "Nutrizione", href: "/services/nutrition" }, ], }; diff --git a/src/lib/db.ts b/src/lib/db.ts index 7260f13..0036f1b 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -114,6 +114,22 @@ export function createDb(path?: string): Database.Database { const ins = db.prepare('INSERT OR IGNORE INTO content_blocks (tag, type, value, guid) VALUES (?, ?, ?, ?)'); const syncTx = db.transaction(() => { for (const e of contentSeed) ins.run(e.tag, e.type, e.value, randomUUID()); }); syncTx(); + + // Modifiche 02 (pagina Servizi): "Pilates Flow" → "Profilazione" e "Rehab" → "Osteopatia". + // I nuovi servizi hanno slug nuovi (tag service.profilazione.* / service.osteopatia.*) e + // vengono inseriti dal seed qui sopra. Restano da aggiornare le righe EXISTING il cui valore + // cambia: label del footer e meta description. UPDATE guardato dal vecchio valore → idempotente + // e non sovrascrive eventuali modifiche fatte dal pannello. + const SERVIZI_02: [string, string, string][] = [ + ['footer.services.4.label', 'Rehab', 'Profilazione'], + ['footer.services.5.label', 'Pilates Flow', 'Osteopatia'], + ['services.meta.description', + 'I servizi InsanityLab: Personal Training, Performance Class, Coaching, Pilates Flow, Rehab e Nutrizione.', + 'I servizi InsanityLab: Personal Training, Performance Class, Coaching, Profilazione, Osteopatia e Nutrizione.'], + ]; + const upd02 = db.prepare('UPDATE content_blocks SET value = ? WHERE tag = ? AND value = ?'); + const upd02Tx = db.transaction(() => { for (const [tag, oldV, newV] of SERVIZI_02) upd02.run(newV, tag, oldV); }); + upd02Tx(); // Backfill: righe pre-esistenti (già presenti prima dell'introduzione del guid) restano // ignorate dall'INSERT OR IGNORE e hanno guid nullo → assegna un UUID a ciascuna. const missing = db.prepare(`SELECT tag FROM content_blocks WHERE guid IS NULL OR guid = ''`).all() as { tag: string }[];