Files
InsanityLab-web/docs/superpowers/plans/2026-07-05-inventario-contenuti.md
T
2026-07-05 15:26:26 +02:00

11 KiB
Raw Blame History

Inventario contenuti — pagine vetrina (2026-07-05)

Documento di riferimento per il piano 2026-07-05-contenuti-taggati-pannello-editor.md. Elenca, file per file, i testi visibili e le immagini da estrarre nel sistema di tag. I valori esatti si copiano SEMPRE dal file sorgente al momento dell'estrazione; qui compaiono abbreviati per identificazione.

Nota nomenclatura: i nomi tag canonici sono quelli nella sezione "Interfaces → Produces" dei task del piano (segmenti kebab-case, es. home.hero.title-line-1); dove questo inventario usa camelCase va convertito.

Pagine

src/pages/index.astro (home)

Solo orchestrazione componenti. Hardcoded: home.meta.title ("Performance. Balance. Longevity.", prop title di Base), home.training.title ("Training"), home.training.subtitle ("Porta i tuoi allenamenti al livello successivo: trova il percorso…"). Nessuna immagine diretta.

src/pages/about.astro

Meta (2): about.meta.title ("Insanitylab"), about.meta.description ("Mission, storia, team e metodo…"). Hero: about.hero.title ("Insanitylab", via PageHero). Sezioni testo: mission (title + body), direzione (title + body + cta "Scopri"), approccio (title + body + cta "Contattaci"), about (title + body), convenzioni (title + body + item1-3 in <ul class="conv"> + riga finale con {site.email} · {site.phone} interpolati → spezzare in about.convenzioni.cta-text + tag global), team (title + body + staff-intro), metodo (title + body + closing), studios (title + body1-3), vision (title + body1-2). Immagini (glob, alt hardcoded): about.mission.image (about-training-group.jpg), about.about.image (about-pushup.jpg), about.convenzioni.image (about-conventions.jpg), about.metodo.image (about-team-group.jpg), about.studios.image (about-studios.jpg), about.vision.image (about-vision.jpg). Griglia team: 9 foto da imageAbout (tag team.<slug>.image-about).

src/pages/contact.astro

contact.meta.title ("Contatti"), contact.meta.description, contact.hero.title ("Contattaci"), contact.hero.image (contact-hero.jpg, background PageHero), contact.map.button ("Carica la mappa (Google Maps)"), contact.map.note ("La mappa viene caricata da Google solo dopo il tuo consenso."), label info (address-label "Indirizzo", phone-label "Telefono", email-label "E-mail" — i valori sono i tag global.contact.*), contact.invite ("Per informazioni o per richiedere una consulenza iniziale…"). Iframe Maps generato via JS (title tecnico, escluso).

src/pages/training.astro

training.meta.title, training.meta.description, training.hero.title ("training"), training.intro.title ("Training"), training.intro.subtitle ("Porta i tuoi allenamenti al livello successivo: programmi completi…" — variante diversa dalla home), training.trial.title ("Prenota la lezione di prova"), training.trial.body, training.trial.cta ("Prenota"), training.trial.image (trial-class.jpg). Blocchi per-training: testi dai tag training.<id>.* (vedi trainings.ts); nota <h2>{t.title.toLowerCase()}</h2> (lowercase a runtime, conservare).

src/pages/404.astro

notfound.meta.title, notfound.eyebrow ("Errore 404"), notfound.title ("Pagina non trovata"), notfound.body, notfound.cta ("Torna alla home").

src/pages/programs/index.astro

programs.meta.title, programs.meta.description, programs.hero.title ("Programmi"), programs.intro.title, programs.intro.body ("Questi sono i programmi delle classi di Insanity Lab…"), programs.card.more-label ("Per saperne di più →", ripetuto). Card e immagini (program-<slug>.jpg, alt = title) da programs.ts.

src/pages/programs/[slug].astro

Hardcoded: program.side.categories-label ("Categorie"), program.side.category.1-4 ("Fitness", "Salute", "Stile di vita", "Nutrizione"), program.side.others-label ("Altri programmi"), program.pricing.empty-note (html con link "Contattaci per i dettagli… Scrivici →"), program.pricing.per ("al mese, semestrale"), program.pricing.entries-singular/-plural ("ingresso settimanale"/"ingressi settimanali"), program.pricing.buy-cta ("Acquista"). Dinamici: meta = title/excerpt del programma; hero = title.toUpperCase() (conservare la trasformazione); corpo/features/faq/pricing da data. Immagine program-<slug>.jpg come hero bg e inline.

Componenti condivisi

Header.astro

Logo /img/logo-dark.png (public) con alt "InsanityLab" (header.logo.alt). Nav: label da site.navigation → tag global.nav.<i>.label (5 voci: "Insanitylab", "Training", "Programmi", "Blog & Edugo", "Contatti"). Aria-label esclusi.

Footer.astro

Logo light + alt; footer.tagline (html, "PERFORMANCE.  BALANCE.  LONGEVITY."); footer.about ("Promuoviamo il movimento come cura di sé…"); riga contatti con <br> (comporre dai tag global.contact.*); orari (global.hours.1/2); titoli colonne training/programs/contact; footer.copyright ("Insanitylab, All Rights Reserved" — <strong> e anno dinamico restano fuori dal tag); footer.social-label ("Seguici"); label link da site.footerTraining (4) e site.footerPrograms (6) → footer.training.<i>.label, footer.programs.<i>.label.

ContactForm.astro

Placeholder: first-name "Nome", last-name "Cognome" (solo full), phone "Telefono" (solo full), email "E-mail", message "Messaggio". Submit "Invia messaggio". Messaggi nello <script> client (passare via data-*): success "Messaggio inviato, ti ricontatteremo al più presto.", error-generic "Errore di invio, riprova più tardi.", error-network "Errore di rete, riprova più tardi.".

Agenda.astro + agenda.ts

agenda.title ("Agenda"); da agenda.ts: agenda.discipline.<i> (7: Events, Crossfit, Cardio, Box, Meditation, Yoga Classes, Body Balance), agenda.day.<i> (7: Lunedì…Domenica), agenda.slot.<i> (5: 10.00…20.00). Celle (28 voci discipline/time/trainer) ESCLUSE: dati placeholder Prowess, in attesa orario reale dal cliente.

PageHero.astro

Nessun testo proprio (props title/eyebrow/bgImage passate dalle pagine con i rispettivi tag). Per bgImage da override serve accettare anche URL stringa.

Componenti home

HeroSlider.astro

home.hero.title-line-1/-2/-3 ("PERFORMANCE." / "BALANCE." / "LONGEVITY."), home.hero.cta ("Scopri"), home.hero.image (hero-1.png, alt "Atleti InsanityLab"). Frecce slider: aria, escluse.

InfoColumns.astro

3 colonne: home.info.col<n>.title ("PERFORMANCE." / "BALANCE." / "LONGEVITY.") + home.info.col<n>.image (info-performance/balance/longevity.jpg, background via getImage → usare contentImageUrl).

FeatureBlocks.astro

3 blocchi × (title, body, cta "Scopri") → home.feature.<performance|balance|longevity>.title/.body/.cta + .image (feature-*.jpg, alt = title).

QuoteBanner.astro

home.quote.text (html — congelare nel seed l'output della regex che avvolge le parole chiave in <strong>, poi rimuovere la regex), home.quote.cite ("Insanitylab"), home.quote.image (quote-bg.jpg, background). Testo renderizzato 2× per il marquee (seconda copia aria-hidden).

TrainingCards.astro

home.training-cards.link-label ("Scopri →"). Card: testi/immagini dai tag training.<id>.*. Usato in home e in training.astro.

ProgramsGrid.astro

home.programs.title ("Programmi"), home.programs.body (uguale a programs.intro.body ma tag separato). Griglia da programs.ts + SVG da program-icons.ts (icone escluse dal tagging).

TeamSection.astro

home.team.title (html, "Team
Trainer"), home.team.cta ("Scopri team"). Membri: filtro homeTeam su team.ts, foto team.<slug>.image, figcaption = shortName.

MethodSteps.astro

home.method.title (html, "Il metodo
InsanityLab"). Intro/note/steps dai tag method.* (intro html con <strong> congelato, rimuovere il set:html con wrapping runtime). Immagini step alt="" (decorative).

PartnersStrip.astro

Solo loghi: partner.<i>.name (alt) + partner.<i>.image da partners.ts.

Componente about

about/Timeline.astro

about.storylab.title ("Storylab"), about.storylab.body, about.timeline.label ("INSANITYLAB 2021-2024"), about.timeline.open-text, about.timeline.stage<1-3>.label ("INSANITYLAB 2025"/"2026"/"OGGI") + .text (placeholder "Contenuto in arrivo…" — testi Storylab attesi dal cliente). Struttura <details>/<summary> da conservare.

Data file

  • site.ts: phone "351 7535977", email "info@insanitylab.it", address "Via Leandro Alberti, 76", cityLine "40139 Bologna", hours (2), socials (3, label+url — url restano nel data file), navigation (5), footerTraining (4), footerPrograms (6).
  • team.ts: 9 membri (slug da shortName lowercase): donata, nicola, eva (founder); alessandro, eleonora, antonello, alice, davide, giulia. Campi: name, role, bio → team.<slug>.name/.role/.bio; immagini: image (4: donata, nicola, eleonora, antonello) e imageAbout (tutti e 9, file team-*-dark).
  • programs.ts: 6 slug: personal-training, performance-class, coaching, pilates-flow, rehab, nutrition. Campi: title, subtitle, excerpt, longDescription, features[] (4-5), faq[] (3-6 coppie q/a). Solo performance-class ha hasPricing. → program.<slug>.title/.subtitle/.excerpt/.long-description/.feature.<i>/.faq.<i>.q/.a.
  • pricing.ts: heading "Acquista la tua performance class", intro, 3 gruppi (label; solo il gruppo 1 "semestrale" ha 3 plans). Per plan: monthly/entries (numerici, restano nel data file), note, installments, best → pricing.group.1.plan.<i>.note/.installments/.best.
  • method.ts: intro (html), extraNote, 4 step (title, text, image method-step-1..4) → method.intro, method.extra-note, method.step.<n>.title/.text/.image.
  • trainings.ts: 4 id: one-to-one, small-groups, performance-class, fit-remote. Campi title, caption, description, cta.label (href resta) + image → training.<id>.title/.caption/.description/.cta-label/.image.
  • partners.ts: 4: "Ticket Welfare Edenred", "Welbee", "AON", "Howden" → partner.<i>.name/.image.
  • program-icons.ts: path SVG, esclusi dal tagging.

Note trasversali

  1. Tag type: 'html' necessari per: footer.tagline (&nbsp;), home.team.title e home.method.title (<br>), home.quote.text e method.intro (<strong> congelato), program.pricing.empty-note (link <a>).
  2. Trasformazioni runtime da conservare nel template (non nel valore): .toLowerCase() (training h2), .toUpperCase() (hero dettaglio programma), anno copyright.
  3. Duplicazioni intenzionali (tag distinti, valori oggi identici): programs.intro.body / home.programs.body / pricing.intro; home.training.subtitle / training.intro.subtitle (varianti).
  4. Loghi header/footer stanno in public/img/ (non passano dalla pipeline asset): TImg non applicabile — per l'override basta contentImageUrl(tag, '/img/logo-dark.png') su <img>.
  5. Conteggi indicativi: ~150 tag testo da template, ~200 da data file, ~60 slot immagine.