Rende la pagina Promo ed eventi modificabile dal pannello contenuti
Tutti i testi della landing (hero, launch, card con prezzi, nota validità e FAQ)
passano ora dal sistema di content-tag `promo.*`, editabili inline e da pannello.
Il numero WhatsApp è centralizzato nel tag globale `global.whatsapp`: le risposte
FAQ usano il segnaposto {{whatsapp}}, sostituito a runtime, così si aggiorna in un
punto solo. Struttura delle 4 card e link di acquisto bsport restano nel codice.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+54
-110
@@ -1,142 +1,86 @@
|
||||
---
|
||||
import Base from '../layouts/Base.astro';
|
||||
import T from '../components/content/T.astro';
|
||||
import { t, resolveContent } from '../lib/content';
|
||||
// Landing promo/lancio integrata nel sito (header e footer del sito, non standalone).
|
||||
// I bottoni "Acquista" portano al gestionale bsport: l'utente crea l'account,
|
||||
// inserisce i dati e paga via Stripe dentro la piattaforma. Link centralizzato qui:
|
||||
// quando avremo gli ID membership per singolo prodotto basterà mappare BSPORT_URL card per card.
|
||||
const BSPORT_URL = 'https://backoffice.bsport.io/login/signup?membership=3428';
|
||||
export const prerender = false;
|
||||
|
||||
// I testi sono editabili dal pannello contenuti (tag `promo.*`). Qui resta solo la
|
||||
// struttura: quante card, quante feature ciascuna e quale è "in evidenza".
|
||||
const cards = [
|
||||
{ id: 1, features: 4, featured: false },
|
||||
{ id: 2, features: 4, featured: true },
|
||||
{ id: 3, features: 3, featured: false },
|
||||
{ id: 4, features: 3, featured: false },
|
||||
];
|
||||
const faqs = [1, 2, 3, 4, 5, 6];
|
||||
// Numero WhatsApp centralizzato: le risposte FAQ contengono il segnaposto {{whatsapp}}
|
||||
// che qui viene sostituito col valore del tag globale, così si aggiorna in un punto solo.
|
||||
const wa = t('global.whatsapp');
|
||||
---
|
||||
<Base title="Promo ed eventi — InsanityLab" description="Edizione apertura: pacchetti a 5 incontri per One to One, Small Group, Reformer e Holistic Class. Acquisto online, pagamento sicuro via Stripe.">
|
||||
<div class="lp">
|
||||
<div class="page">
|
||||
|
||||
<section class="hero">
|
||||
<div class="badge">insanity.lab · bologna savena</div>
|
||||
<h1>Allenati con metodo.</h1>
|
||||
<p class="accent">Scegli come</p>
|
||||
<h1>vuoi farlo.</h1>
|
||||
<p class="desc">Allenati con flessibilità, senza vincoli, da subito.<br>Acquisto online in pochi secondi, pagamento sicuro via Stripe.</p>
|
||||
<a class="btn-sand" href="#proposte">LE NOSTRE PROPOSTE →</a>
|
||||
<T tag="promo.hero.badge" as="div" class="badge" />
|
||||
<T tag="promo.hero.title1" as="h1" />
|
||||
<T tag="promo.hero.accent" as="p" class="accent" />
|
||||
<T tag="promo.hero.title2" as="h1" />
|
||||
<T tag="promo.hero.desc" as="p" class="desc" />
|
||||
<a class="btn-sand" href="#proposte"><T tag="promo.hero.cta" as="span" /></a>
|
||||
</section>
|
||||
|
||||
<section class="launch">
|
||||
<div class="badge">solo per apertura nuova sede Settembre 2026</div>
|
||||
<h1>Il nostro metodo nasce per durare.</h1>
|
||||
<p class="accent">Per l'apertura, un'eccezione. Solo per poco.</p>
|
||||
<p class="desc">In-Sanity Lab lavora per percorsi strutturati — trimestrali, semestrali — perché i risultati veri si costruiscono nel tempo. Per la nuova apertura, ci sarà un'eccezione: 5 incontri pensati come un vero mini-percorso, non semplici lezioni sciolte.</p>
|
||||
<T tag="promo.launch.badge" as="div" class="badge" />
|
||||
<T tag="promo.launch.title" as="h1" />
|
||||
<T tag="promo.launch.accent" as="p" class="accent" />
|
||||
<T tag="promo.launch.desc" as="p" class="desc" />
|
||||
</section>
|
||||
|
||||
<section class="why5">
|
||||
<p>Non è una prova. È un percorso in miniatura — per capire come lavoriamo prima di impegnarti su un programma trimestrale o semestrale.</p>
|
||||
<T tag="promo.why5.text" as="p" />
|
||||
</section>
|
||||
|
||||
<section class="cards-wrap" id="proposte">
|
||||
<div class="cards">
|
||||
|
||||
<div class="card">
|
||||
<div class="eyebrow">Personal training</div>
|
||||
<div class="title">One to One</div>
|
||||
<div class="price-row">
|
||||
<div class="price">163 €</div>
|
||||
<div class="price-old">300 €</div>
|
||||
{cards.map((c) => (
|
||||
<div class:list={['card', c.featured && 'featured']}>
|
||||
{c.featured && <T tag={`promo.card.${c.id}.badge`} as="div" class="featured-badge" />}
|
||||
<T tag={`promo.card.${c.id}.eyebrow`} as="div" class="eyebrow" />
|
||||
<T tag={`promo.card.${c.id}.title`} as="div" class="title" />
|
||||
<div class="price-row">
|
||||
<T tag={`promo.card.${c.id}.price`} as="div" class="price" />
|
||||
<T tag={`promo.card.${c.id}.price-old`} as="div" class="price-old" />
|
||||
</div>
|
||||
<T tag={`promo.card.${c.id}.unit`} as="div" class="unit" />
|
||||
<ul>
|
||||
{Array.from({ length: c.features }, (_, i) => i + 1).map((m) => (
|
||||
<T tag={`promo.card.${c.id}.feature.${m}`} as="li" />
|
||||
))}
|
||||
</ul>
|
||||
<a class="buy" href={BSPORT_URL} target="_blank" rel="noopener"><T tag="promo.buy-label" as="span" /></a>
|
||||
</div>
|
||||
<div class="unit">5 incontri</div>
|
||||
<ul>
|
||||
<li>Screening iniziale, definizione dei tuoi obiettivi</li>
|
||||
<li>Check-up con profilazione fisica, il tuo punto di partenza</li>
|
||||
<li>PT dedicato, presente a ogni sessione</li>
|
||||
<li>In-sanity plan, il tuo programma personalizzato</li>
|
||||
</ul>
|
||||
<a class="buy" href={BSPORT_URL} target="_blank" rel="noopener">ACQUISTA →</a>
|
||||
</div>
|
||||
|
||||
<div class="card featured">
|
||||
<div class="featured-badge">Più scelto</div>
|
||||
<div class="eyebrow">Personal training</div>
|
||||
<div class="title">Small Group</div>
|
||||
<div class="price-row">
|
||||
<div class="price">110 €</div>
|
||||
<div class="price-old">220 €</div>
|
||||
</div>
|
||||
<div class="unit">5 incontri</div>
|
||||
<ul>
|
||||
<li>Screening iniziale, definizione dei tuoi obiettivi</li>
|
||||
<li>Check-up con profilazione fisica, il tuo punto di partenza</li>
|
||||
<li>PT dedicato, presente a ogni sessione</li>
|
||||
<li>In-sanity plan, il tuo programma personalizzato</li>
|
||||
</ul>
|
||||
<a class="buy" href={BSPORT_URL} target="_blank" rel="noopener">ACQUISTA →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="eyebrow">Pilates class</div>
|
||||
<div class="title">Reformer</div>
|
||||
<div class="price-row">
|
||||
<div class="price">100 €</div>
|
||||
<div class="price-old">140 €</div>
|
||||
</div>
|
||||
<div class="unit">5 incontri</div>
|
||||
<ul>
|
||||
<li>Core, postura e mobilità su macchina Reformer</li>
|
||||
<li>Lavoro a basso impatto sulle articolazioni</li>
|
||||
<li>Percorso breve, non lezioni isolate</li>
|
||||
</ul>
|
||||
<a class="buy" href={BSPORT_URL} target="_blank" rel="noopener">ACQUISTA →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="eyebrow">Holistic class</div>
|
||||
<div class="title">Pilates Mat, Mobility, Yoga</div>
|
||||
<div class="price-row">
|
||||
<div class="price">50 €</div>
|
||||
<div class="price-old">100 €</div>
|
||||
</div>
|
||||
<div class="unit">5 incontri</div>
|
||||
<ul>
|
||||
<li>Mobilità articolare, respirazione, equilibrio</li>
|
||||
<li>Da solo, o integrato nei tuoi allenamenti</li>
|
||||
<li>Adatto a tutti i livelli</li>
|
||||
</ul>
|
||||
<a class="buy" href={BSPORT_URL} target="_blank" rel="noopener">ACQUISTA →</a>
|
||||
</div>
|
||||
|
||||
))}
|
||||
</div>
|
||||
<p class="validity-note">Disponibile solo per l'apertura · Valido entro 2 mesi dal primo incontro e comunque non oltre il 1° dicembre 2026</p>
|
||||
<T tag="promo.validity-note" as="p" class="validity-note" />
|
||||
</section>
|
||||
|
||||
<section class="faq-wrap">
|
||||
<h1>Tutto quello che vuoi sapere prima di acquistare.</h1>
|
||||
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><p>Come funziona il pacchetto a incontri per One to One e Small Group?</p><div class="faq-toggle">+</div></div>
|
||||
<p class="faq-a">Acquisti il pacchetto online con pagamento sicuro via <span class="hl">Stripe</span>. Ricevi una conferma via email. Poi ci scrivi su <span class="hl">WhatsApp (351 753 5977)</span> per prenotare le singole sessioni in base agli orari disponibili. Verrai ricontattato subito tramite messaggio o chiamata! Gli incontri sono validi 2 mesi dalla data del primo incontro e comunque non oltre il 1° dicembre 2026.</p>
|
||||
</div>
|
||||
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><p>Come funziona il percorso Reformer o Holistic Class?</p><div class="faq-toggle">+</div></div>
|
||||
<p class="faq-a">Acquisti il pacchetto online con pagamento sicuro via <span class="hl">Stripe</span>. Ricevi una conferma via email. Poi vai nella schermata Home, clicca il servizio che hai acquistato e seleziona autonomamente la class nel giorno e nell'orario che desideri. In caso di problemi contattaci su <span class="hl">WhatsApp (351 753 5977)</span>! Gli incontri sono validi 2 mesi dalla data del primo incontro e comunque non oltre il 1° dicembre 2026.</p>
|
||||
</div>
|
||||
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><p>Posso usare gli incontri su servizi diversi?</p><div class="faq-toggle">+</div></div>
|
||||
<p class="faq-a">Ogni pacchetto è dedicato a un singolo servizio (<span class="hl">One to One</span>, <span class="hl">Small Group</span>, <span class="hl">Reformer</span> o <span class="hl">Holistic Class</span>). Se vuoi accedere a più servizi puoi acquistare pacchetti separati per ciascuno.</p>
|
||||
</div>
|
||||
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><p>Posso regalare un pacchetto a qualcun altro?</p><div class="faq-toggle">+</div></div>
|
||||
<p class="faq-a">Sì. Puoi acquistare il pacchetto a tuo nome — per la fatturazione — e farlo utilizzare a un'altra persona: perfetto se vuoi fare un regalo a un amico o un familiare. Ti basterà comunicarci chi userà gli incontri quando ci scriverai su <span class="hl">WhatsApp (351 753 5977)</span> per organizzare le sessioni.</p>
|
||||
</div>
|
||||
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><p>Il pagamento è sicuro?</p><div class="faq-toggle">+</div></div>
|
||||
<p class="faq-a">Sì. Il pagamento avviene tramite <span class="hl">Stripe</span>, una delle piattaforme di pagamento online più sicure al mondo. I tuoi dati bancari non vengono mai condivisi con insanity.lab — tutto è gestito in modo cifrato da Stripe.</p>
|
||||
</div>
|
||||
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><p>Posso chiedere un rimborso?</p><div class="faq-toggle">+</div></div>
|
||||
<p class="faq-a">Per richieste di rimborso o problemi con l'acquisto scrivici su <span class="hl">WhatsApp</span> o via email. Valutiamo ogni situazione in modo diretto e umano.</p>
|
||||
</div>
|
||||
<T tag="promo.faq.title" as="h1" />
|
||||
{faqs.map((n) => {
|
||||
const a = resolveContent(`promo.faq.${n}.a`);
|
||||
return (
|
||||
<div class="faq-block">
|
||||
<div class="faq-q"><T tag={`promo.faq.${n}.q`} as="p" /><div class="faq-toggle">+</div></div>
|
||||
<p class:list={['faq-a', a.classes]} data-tag={`promo.faq.${n}.a`} data-guid={a.guid || undefined} set:html={a.value.replaceAll('{{whatsapp}}', wa)} />
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user