c6de02be83
- Rimossa la sezione "Prenota la lezione di prova" da /training (markup, import, CSS, seed e blocchi DB relativi) - Titoli dei riquadri Training non più forzati in minuscolo: rispettano il testo del DB (One to One, Small Groups, ecc.) - Footer e pagina Contatti con i due ingressi dello stesso stabile (Via Leandro Alberti 76 e Via De Mattiolo 5) più l'email; nuovo tag global.contact.map-query e migrazione DB idempotente dell'indirizzo - Mappa Google in /contact caricata automaticamente e a piena dimensione (rimosso il bottone e il relativo script) - Landing Promo ed eventi: rimossa la barra contatti in fondo - service-icons allineate agli slug attuali (one-to-one, small-group; rimosse le chiavi obsolete personal-training e pilates-flow) - Immagini: foto Rehab corretta (prima era di osteopatia) su program-rehab e training-rehab; bande nere letterbox rimosse dalla foto di osteopatia; nuova immagine grafica per Profilazione con grafici HRV (ECG, tacogramma R-R, Poincaré plot) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
305 lines
20 KiB
TypeScript
305 lines
20 KiB
TypeScript
import type { StyleGroup } from '../lib/style-presets';
|
||
import { site } from './site';
|
||
import { trainings } from './trainings';
|
||
import { team } from './team';
|
||
import { methodIntro, methodExtraNote, methodSteps } from './method';
|
||
import { partners } from './partners';
|
||
import { disciplines, days, slots } from './agenda';
|
||
import { services } from './services';
|
||
import { performanceClassPricing } from './pricing';
|
||
|
||
export type ContentType = 'text' | 'html' | 'image';
|
||
export interface SeedEntry { tag: string; type: ContentType; value: string; styleOptions?: StyleGroup[] }
|
||
|
||
const T = (tag: string, value: string, styleOptions: StyleGroup[] = ['size', 'color', 'weight', 'style']): SeedEntry =>
|
||
({ tag, type: 'text', value, styleOptions });
|
||
const H = (tag: string, value: string, styleOptions: StyleGroup[] = ['size', 'color']): SeedEntry =>
|
||
({ tag, type: 'html', value, styleOptions });
|
||
const I = (tag: string): SeedEntry => ({ tag, type: 'image', value: '' });
|
||
|
||
export const contentSeed: SeedEntry[] = [
|
||
// --- Globali (site.ts) ---
|
||
T('global.contact.phone', site.phone, []),
|
||
T('global.contact.email', site.email, []),
|
||
T('global.contact.address', site.address, []),
|
||
T('global.contact.city-line', site.cityLine, []),
|
||
T('global.contact.map-query', site.mapQuery, []),
|
||
T('global.hours.1', site.hours[0], []),
|
||
T('global.hours.2', site.hours[1], []),
|
||
T('global.nav.1.label', site.navigation[0].label, []),
|
||
T('global.nav.2.label', site.navigation[1].label, []),
|
||
T('global.nav.3.label', site.navigation[2].label, []),
|
||
T('global.nav.4.label', site.navigation[3].label, []),
|
||
T('global.nav.5.label', site.navigation[4].label, []),
|
||
T('global.nav.6.label', site.navigation[5].label, []),
|
||
|
||
// --- Header ---
|
||
T('header.logo.alt', 'InsanityLab', []),
|
||
I('header.logo.image'),
|
||
|
||
// --- Footer ---
|
||
I('footer.logo.image'),
|
||
H('footer.tagline', 'PERFORMANCE. BALANCE. LONGEVITY.'),
|
||
T('footer.about', 'Promuoviamo il movimento come cura di sé. Abitudini sostenibili per benessere fisico e mentale.'),
|
||
T('footer.col.training-title', 'Training'),
|
||
T('footer.col.services-title', 'Servizi'),
|
||
T('footer.col.contact-title', 'Contact'),
|
||
H('footer.copyright', '<strong>Insanitylab</strong>, All Rights Reserved'),
|
||
T('footer.social-label', 'Seguici', []),
|
||
T('footer.training.1.label', site.footerTraining[0].label, []),
|
||
T('footer.training.2.label', site.footerTraining[1].label, []),
|
||
T('footer.training.3.label', site.footerTraining[2].label, []),
|
||
T('footer.training.4.label', site.footerTraining[3].label, []),
|
||
T('footer.training.5.label', site.footerTraining[4].label, []),
|
||
T('footer.training.6.label', site.footerTraining[5].label, []),
|
||
T('footer.services.1.label', site.footerServices[0].label, []),
|
||
T('footer.services.2.label', site.footerServices[1].label, []),
|
||
T('footer.services.3.label', site.footerServices[2].label, []),
|
||
T('footer.services.4.label', site.footerServices[3].label, []),
|
||
T('footer.services.5.label', site.footerServices[4].label, []),
|
||
T('footer.services.6.label', site.footerServices[5].label, []),
|
||
|
||
// --- Contact form ---
|
||
T('form.field.first-name', 'Nome', []),
|
||
T('form.field.last-name', 'Cognome', []),
|
||
T('form.field.phone', 'Telefono', []),
|
||
T('form.field.email', 'E-mail', []),
|
||
T('form.field.message', 'Messaggio', []),
|
||
T('form.submit', 'Invia messaggio'),
|
||
T('form.msg.success', 'Messaggio inviato, ti ricontatteremo al più presto.', []),
|
||
T('form.msg.error-generic', 'Errore di invio, riprova più tardi.', []),
|
||
T('form.msg.error-network', 'Errore di rete, riprova più tardi.', []),
|
||
|
||
// --- Home: meta, training heading ---
|
||
T('home.meta.title', 'Performance. Balance. Longevity.', []),
|
||
T('home.training.title', 'Training'),
|
||
T('home.training.subtitle', 'Porta i tuoi allenamenti al livello successivo: trova il percorso più adatto alle tue esigenze.'),
|
||
|
||
// --- Home: hero ---
|
||
T('home.hero.title-line-1', 'PERFORMANCE.'),
|
||
T('home.hero.title-line-2', 'BALANCE.'),
|
||
T('home.hero.title-line-3', 'LONGEVITY.'),
|
||
T('home.hero.cta', 'Scopri'),
|
||
I('home.hero.image'),
|
||
|
||
// --- Home: info columns ---
|
||
T('home.info.col1.title', 'PERFORMANCE.'),
|
||
T('home.info.col2.title', 'BALANCE.'),
|
||
T('home.info.col3.title', 'LONGEVITY.'),
|
||
I('home.info.col1.image'),
|
||
I('home.info.col2.image'),
|
||
I('home.info.col3.image'),
|
||
|
||
// --- Home: feature blocks ---
|
||
T('home.feature.performance.title', 'PERFORMANCE'),
|
||
T('home.feature.performance.body', 'Allenamenti progettati su misura per adattarsi ai tuoi obiettivi e al tuo livello. Programmi mirati che sviluppano forza, resistenza e funzionalità in modo equilibrato. Un metodo efficace per migliorare le performance e ottenere risultati concreti e duraturi.'),
|
||
T('home.feature.performance.cta', 'Scopri'),
|
||
T('home.feature.balance.title', 'BALANCE'),
|
||
T('home.feature.balance.body', 'L’equilibrio tra corpo e mente è la base di ogni performance duratura. Attraverso movimento, recupero e gestione dello stress, costruiamo stabilità e controllo. Un approccio integrato che sostiene benessere, energia e continuità nel tempo.'),
|
||
T('home.feature.balance.cta', 'Scopri'),
|
||
T('home.feature.longevity.title', 'LONGEVITY'),
|
||
T('home.feature.longevity.body', 'Benessere completo tra movimento, nutrizione e stile di vita. Un percorso personalizzato che unisce prevenzione, recupero ed equilibrio. Investi nella tua salute e qualità della vita nel tempo.'),
|
||
T('home.feature.longevity.cta', 'Scopri'),
|
||
I('home.feature.performance.image'),
|
||
I('home.feature.balance.image'),
|
||
I('home.feature.longevity.image'),
|
||
|
||
// --- Home: quote banner ---
|
||
H('home.quote.text', '<strong>PERFORMANCE</strong> È SPINGERE OLTRE I PROPRI LIMITI, <strong>BALANCE</strong> È SAPERLI ASCOLTARE, <strong>LONGEVITY</strong> È COSTRUIRE NEL TEMPO CIÒ CHE DAVVERO CONTA.'),
|
||
T('home.quote.cite', 'Insanitylab', []),
|
||
I('home.quote.image'),
|
||
|
||
// --- Home: training cards (data-driven da trainings.ts) ---
|
||
T('home.training-cards.link-label', 'Scopri', []),
|
||
...trainings.flatMap((tr) => [
|
||
T(`training.${tr.id}.title`, tr.title),
|
||
T(`training.${tr.id}.caption`, tr.caption),
|
||
T(`training.${tr.id}.description`, tr.description),
|
||
T(`training.${tr.id}.cta-label`, tr.cta.label, []),
|
||
I(`training.${tr.id}.image`),
|
||
]),
|
||
|
||
// --- Home: servizi ---
|
||
T('home.services.title', 'Servizi'),
|
||
T('home.services.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.'),
|
||
|
||
// --- Home: team (data-driven da team.ts) ---
|
||
H('home.team.title', 'Team<br />Trainer'),
|
||
T('home.team.cta', 'Scopri team', []),
|
||
...team.flatMap((m) => {
|
||
const slug = m.shortName.toLowerCase();
|
||
return [
|
||
T(`team.${slug}.name`, m.name, []),
|
||
T(`team.${slug}.short-name`, m.shortName),
|
||
T(`team.${slug}.role`, m.role, []),
|
||
T(`team.${slug}.bio`, m.bio),
|
||
I(`team.${slug}.image`),
|
||
I(`team.${slug}.image-about`),
|
||
];
|
||
}),
|
||
|
||
// --- Home: metodo (data-driven da method.ts) ---
|
||
H('home.method.title', 'Il metodo<br />InsanityLab'),
|
||
T('home.method.cta', 'Contattaci', []),
|
||
H('method.intro', methodIntro.replace('Metodo Insanitylab', '<strong>Metodo Insanitylab</strong>')),
|
||
T('method.extra-note', methodExtraNote, []),
|
||
...methodSteps.flatMap((s) => [
|
||
T(`method.step.${s.n}.title`, s.title),
|
||
T(`method.step.${s.n}.text`, s.text),
|
||
I(`method.step.${s.n}.image`),
|
||
]),
|
||
|
||
// --- Home: partner (data-driven da partners.ts) ---
|
||
...partners.flatMap((p, i) => [
|
||
T(`partner.${i + 1}.name`, p.name, []),
|
||
I(`partner.${i + 1}.image`),
|
||
]),
|
||
|
||
// --- Agenda (scope limitato: titolo, discipline, giorni, slot — celle escluse) ---
|
||
T('agenda.title', 'Agenda'),
|
||
...disciplines.map((d, i) => T(`agenda.discipline.${i + 1}`, d, [])),
|
||
...days.map((d, i) => T(`agenda.day.${i + 1}`, d, [])),
|
||
...slots.map((s, i) => T(`agenda.slot.${i + 1}`, s, [])),
|
||
|
||
// --- About: meta, hero ---
|
||
T('about.meta.title', 'Insanitylab', []),
|
||
T('about.meta.description', 'Mission, storia, team e metodo di InsanityLab: un laboratorio esclusivo dove movimento, prevenzione e performance convivono in un approccio personalizzato.', []),
|
||
T('about.hero.title', 'Insanitylab', []),
|
||
|
||
// --- About: mission ---
|
||
T('about.mission.title', 'Mission'),
|
||
T('about.mission.body', 'In InsanityLab crediamo che il movimento non debba essere vissuto come un obbligo o un sacrificio, ma come una forma autentica di cura di sé. La nostra missione è accompagnare ogni persona in un percorso di consapevolezza, aiutandola a riscoprire il benessere fisico e mentale attraverso un approccio sostenibile, concreto e duraturo.'),
|
||
I('about.mission.image'),
|
||
|
||
// --- About: direzione + approccio ---
|
||
T('about.direzione.title', 'Direzione'),
|
||
T('about.direzione.body', 'Non ci limitiamo ad allenare il corpo: creiamo percorsi personalizzati che uniscono movimento, equilibrio e benessere, attraverso il supporto di professionisti qualificati, programmi su misura e un approccio centrato sulla persona e su risultati duraturi.'),
|
||
T('about.direzione.cta', 'Scopri'),
|
||
T('about.approccio.title', 'Approccio'),
|
||
T('about.approccio.body', 'InsanityLab si distingue per un approccio serio e personalizzato al benessere, basato su competenze specializzate, costanza e cura quotidiana, rivolto a chiunque voglia migliorare il proprio stile di vita in modo consapevole e duraturo.'),
|
||
T('about.approccio.cta', 'Contattaci'),
|
||
|
||
// --- About: about ---
|
||
T('about.about.title', 'About'),
|
||
T('about.about.body', "InsanityLab nasce dalla visione di creare uno spazio dove il fitness incontrasse la salute in modo reale e profondo, non superficiale. L'idea di partenza era semplice ma rivoluzionaria nel settore: il movimento non dovrebbe essere vissuto come un sacrificio estetico, ma come un atto di cura verso se stessi. Da questa convinzione è nato un laboratorio esclusivo di benessere, pensato da chi conosce il corpo in profondità — non solo come semplici trainer, ma come osteopati e chinesiologi esperti del movimento."),
|
||
I('about.about.image'),
|
||
|
||
// --- About: convenzioni ---
|
||
T('about.convenzioni.title', 'Convenzioni'),
|
||
T('about.convenzioni.body', "InsanityLab collabora con aziende, enti e organizzazioni che desiderano investire concretamente nel benessere delle proprie persone, attraverso programmi dedicati alla salute, al movimento e alla qualità della vita. Le convenzioni nascono con l'obiettivo di portare il valore del benessere anche all'interno del contesto professionale, creando percorsi che favoriscano equilibrio fisico, prevenzione e performance quotidiana."),
|
||
T('about.convenzioni.item1', 'Le realtà convenzionate possono accedere a programmi di welfare aziendale personalizzati.'),
|
||
T('about.convenzioni.item2', 'Ogni collaborazione parte da una consulenza preliminare per analizzare esigenze e obiettivi, così da sviluppare soluzioni efficaci e sostenibili.'),
|
||
T('about.convenzioni.item3', "Le convenzioni vengono definite su misura insieme a InsanityLab, in base alle caratteristiche e alle necessità dell'azienda partner."),
|
||
T('about.convenzioni.cta-text', 'Per ricevere maggiori informazioni o attivare una convenzione:', []),
|
||
I('about.convenzioni.image'),
|
||
|
||
// --- About: team ---
|
||
T('about.team.title', 'Team'),
|
||
T('about.team.body', 'Il team di InsanityLab riunisce professionisti specializzati in allenamento, salute e benessere, con un approccio multidisciplinare basato su competenza, personalizzazione e attenzione alla persona.'),
|
||
T('about.team.staff-intro', 'Accanto ai fondatori opera un team in continua crescita composto da trainer e professionisti con specializzazioni complementari:'),
|
||
|
||
// --- About: metodo ---
|
||
T('about.metodo.title', 'Metodo'),
|
||
T('about.metodo.body', 'Il team InsanityLab lavora con un approccio empatico e personalizzato, seguendo ogni persona in un percorso continuo e su misura. Unisce competenze multidisciplinari in allenamento, prevenzione, riabilitazione e performance, supportate da formazione costante. Il metodo si basa su sinergia, condivisione e qualità, per generare risultati concreti e duraturi.'),
|
||
T('about.metodo.closing', 'In poche parole, il team di InsanityLab è composto da professionisti che credono profondamente in ciò che fanno: un gruppo unito da valori condivisi, formato per eccellere e guidato dalla convinzione che il movimento sia uno strumento di benessere, equilibrio e qualità della vita.'),
|
||
I('about.metodo.image'),
|
||
|
||
// --- About: studios ---
|
||
T('about.studios.title', 'In-Sanity Studios'),
|
||
T('about.studios.body1', "IN-SANITY STUDIOS è il nuovo spazio professionale nato dall'evoluzione di InsanityLab, dedicato ai professionisti della salute e del benessere."),
|
||
T('about.studios.body2', "Il progetto nasce con l'obiettivo di offrire a liberi professionisti uno spazio elegante, riservato e già attrezzato, in cui poter svolgere la propria attività all'interno di un contesto consolidato e altamente qualificato, senza dover affrontare i costi e le complessità di una struttura indipendente."),
|
||
T('about.studios.body3', 'IN-SANITY STUDIOS si rivolge a figure specializzate nel settore salute e wellness, come fisioterapisti, osteopati, psicologi, nutrizionisti, massaggiatori e altri professionisti dedicati alla cura della persona. Ogni studio è progettato per garantire comfort, professionalità e continuità operativa, all\'interno di un ambiente coerente con la filosofia di InsanityLab: mettere il benessere globale della persona al centro del percorso.'),
|
||
I('about.studios.image'),
|
||
|
||
// --- About: vision ---
|
||
T('about.vision.title', 'Vision'),
|
||
T('about.vision.body1', "InsanityLab nasce con l'obiettivo di aiutare le persone a ritrovare energia ed equilibrio attraverso il movimento, promuovendo un approccio autentico, scientifico e umano al benessere. La sua visione va oltre l'estetica e la performance: allenarsi significa prendersi cura di sé, costruendo abitudini sane, sostenibili e orientate alla longevità, alla prevenzione e alla qualità della vita."),
|
||
T('about.vision.body2', "L'obiettivo è diventare un punto di riferimento capace di lasciare un impatto reale nella comunità, trasformando il movimento in uno strumento di salute, consapevolezza e identità."),
|
||
I('about.vision.image'),
|
||
|
||
// --- About: storylab + timeline (Timeline.astro) ---
|
||
T('about.storylab.title', 'Storylab'),
|
||
T('about.storylab.body', 'Scopri la nostra storia: come nasce InsanityLab, perché abbiamo deciso di creare qualcosa di diverso e chi sono i visionari che hanno trasformato questa idea in un nuovo modo di vivere benessere, movimento e salute.'),
|
||
T('about.timeline.label', 'INSANITYLAB 2021-2024', []),
|
||
T('about.timeline.open-text', "Il percorso di crescita di InsanityLab si è sviluppato attraverso tappe precise e coerenti con la visione iniziale. Nato nel 2021 con un piccolo team e grandi ambizioni, il progetto ha conosciuto una forte evoluzione nel 2024, anno in cui il servizio si è ampliato attraverso nuovi format come gli small group e una sempre maggiore specializzazione nella profilazione fisica del cliente, grazie a sistemi avanzati di valutazione e monitoraggio. Parallelamente, anche l'area dedicata alla riabilitazione e all'esercizio preventivo si è consolidata, ponendo le basi per un importante salto di qualità."),
|
||
T('about.timeline.stage1.label', 'INSANITYLAB 2025', []),
|
||
T('about.timeline.stage1.text', 'Contenuto in arrivo: il cliente fornirà il testo di questa tappa.'),
|
||
T('about.timeline.stage2.label', 'INSANITYLAB 2026', []),
|
||
T('about.timeline.stage2.text', 'Contenuto in arrivo: il cliente fornirà il testo di questa tappa.'),
|
||
T('about.timeline.stage3.label', 'INSANITYLAB OGGI', []),
|
||
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, Profilazione, Osteopatia e Nutrizione.', []),
|
||
T('services.hero.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."),
|
||
T('services.card.more-label', 'Per saperne di più →', []),
|
||
|
||
// --- Services: dettaglio (data-driven da services.ts) ---
|
||
...services.flatMap((p) => [
|
||
T(`service.${p.slug}.title`, p.title),
|
||
T(`service.${p.slug}.subtitle`, p.subtitle),
|
||
T(`service.${p.slug}.excerpt`, p.excerpt),
|
||
T(`service.${p.slug}.long-description`, p.longDescription),
|
||
...p.features.map((f, i) => T(`service.${p.slug}.feature.${i + 1}`, f)),
|
||
...p.faq.flatMap((item, i) => [
|
||
T(`service.${p.slug}.faq.${i + 1}.q`, item.q),
|
||
T(`service.${p.slug}.faq.${i + 1}.a`, item.a),
|
||
]),
|
||
I(`service.${p.slug}.image`),
|
||
]),
|
||
|
||
// --- Services: dettaglio, template ---
|
||
T('service.side.categories-label', 'Categorie'),
|
||
T('service.side.category.1', 'Fitness', []),
|
||
T('service.side.category.2', 'Salute', []),
|
||
T('service.side.category.3', 'Stile di vita', []),
|
||
T('service.side.category.4', 'Nutrizione', []),
|
||
T('service.side.others-label', 'Altri servizi'),
|
||
H('service.pricing.empty-note', 'Contattaci per i dettagli di questo servizio. <a href="/contact">Scrivici →</a>'),
|
||
T('service.pricing.per', 'al mese, semestrale', []),
|
||
T('service.pricing.entries-singular', 'ingresso settimanale', []),
|
||
T('service.pricing.entries-plural', 'ingressi settimanali', []),
|
||
T('service.pricing.buy-cta', 'Acquista', []),
|
||
|
||
// --- Pricing performance class (data-driven da pricing.ts; monthly/entries restano nel data file) ---
|
||
T('pricing.heading', performanceClassPricing.heading),
|
||
T('pricing.intro', performanceClassPricing.intro),
|
||
...performanceClassPricing.groups.flatMap((g, gi) => [
|
||
T(`pricing.group.${gi + 1}.label`, g.label),
|
||
...g.plans.flatMap((plan, pi) => [
|
||
T(`pricing.group.${gi + 1}.plan.${pi + 1}.note`, plan.note, []),
|
||
T(`pricing.group.${gi + 1}.plan.${pi + 1}.installments`, plan.installments, []),
|
||
T(`pricing.group.${gi + 1}.plan.${pi + 1}.best`, plan.best, []),
|
||
]),
|
||
]),
|
||
|
||
// --- Training: meta, hero, intro, trial ---
|
||
T('training.meta.title', 'Training', []),
|
||
T('training.meta.description', 'One to One, Small Group, Rehab, Holistic Class, Reformer Class e Coaching: trova il training InsanityLab più adatto a te.', []),
|
||
T('training.hero.title', 'training', []),
|
||
T('training.intro.subtitle', 'Porta i tuoi allenamenti al livello successivo: programmi completi e percorsi su misura. Trova il training più adatto alle tue esigenze.'),
|
||
|
||
// --- Contact ---
|
||
T('contact.meta.title', 'Contatti', []),
|
||
T('contact.meta.description', 'Contatta InsanityLab: Via Leandro Alberti 76, Bologna. Compila il form o chiamaci per una consulenza iniziale.', []),
|
||
T('contact.hero.title', 'Contattaci', []),
|
||
I('contact.hero.image'),
|
||
T('contact.map.button', 'Carica la mappa (Google Maps)', []),
|
||
T('contact.map.note', 'La mappa viene caricata da Google solo dopo il tuo consenso.', []),
|
||
T('contact.info.address-label', 'Indirizzo'),
|
||
T('contact.info.phone-label', 'Telefono'),
|
||
T('contact.info.email-label', 'E-mail'),
|
||
T('contact.invite', 'Per informazioni o per richiedere una consulenza iniziale, compila il form. Un team specializzato ti accoglierà e ti ricontatterà al più presto, oppure lasciaci il tuo contatto.'),
|
||
|
||
// --- 404 ---
|
||
T('notfound.meta.title', 'Pagina non trovata', []),
|
||
T('notfound.eyebrow', 'Errore 404', []),
|
||
T('notfound.title', 'Pagina non trovata'),
|
||
T('notfound.body', 'La pagina che cerchi non esiste o è stata spostata.'),
|
||
T('notfound.cta', 'Torna alla home', []),
|
||
|
||
];
|
||
|
||
export const seedByTag = new Map(contentSeed.map((e) => [e.tag, e]));
|