feat: tag contenuti programmi e pricing

This commit is contained in:
2026-07-05 16:48:03 +02:00
parent b84463c9df
commit 31354c4457
3 changed files with 91 additions and 37 deletions
+49
View File
@@ -5,6 +5,8 @@ import { team } from './team';
import { methodIntro, methodExtraNote, methodSteps } from './method';
import { partners } from './partners';
import { disciplines, days, slots } from './agenda';
import { programs } from './programs';
import { performanceClassPricing } from './pricing';
export type ContentType = 'text' | 'html' | 'image';
export interface SeedEntry { tag: string; type: ContentType; value: string; styleOptions?: StyleGroup[] }
@@ -221,6 +223,53 @@ export const contentSeed: SeedEntry[] = [
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.'),
// --- Programs: lista (/programs) ---
T('programs.meta.title', 'Programmi', []),
T('programs.meta.description', 'I programmi InsanityLab: Personal Training, Performance Class, Coaching, Pilates Flow, Rehab e Nutrizione.', []),
T('programs.hero.title', 'Programmi', []),
T('programs.intro.title', 'Programmi'),
T('programs.intro.body', "Questi sono i programmi delle classi di Insanity Lab selezionati per voi. Abbiamo scelto i migliori percorsi per offrirvi un'esperienza di allenamento completa e mirata."),
T('programs.card.more-label', 'Per saperne di più →', []),
// --- Programs: dettaglio (data-driven da programs.ts) ---
...programs.flatMap((p) => [
T(`program.${p.slug}.title`, p.title),
T(`program.${p.slug}.subtitle`, p.subtitle),
T(`program.${p.slug}.excerpt`, p.excerpt),
T(`program.${p.slug}.long-description`, p.longDescription),
...p.features.map((f, i) => T(`program.${p.slug}.feature.${i + 1}`, f)),
...p.faq.flatMap((item, i) => [
T(`program.${p.slug}.faq.${i + 1}.q`, item.q),
T(`program.${p.slug}.faq.${i + 1}.a`, item.a),
]),
I(`program.${p.slug}.image`),
]),
// --- Programs: dettaglio, template ---
T('program.side.categories-label', 'Categorie'),
T('program.side.category.1', 'Fitness', []),
T('program.side.category.2', 'Salute', []),
T('program.side.category.3', 'Stile di vita', []),
T('program.side.category.4', 'Nutrizione', []),
T('program.side.others-label', 'Altri programmi'),
H('program.pricing.empty-note', 'Contattaci per i dettagli di questo programma. <a href="/contact">Scrivici →</a>'),
T('program.pricing.per', 'al mese, semestrale', []),
T('program.pricing.entries-singular', 'ingresso settimanale', []),
T('program.pricing.entries-plural', 'ingressi settimanali', []),
T('program.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, []),
]),
]),
// I task di estrazione aggiungono qui le entry di header/footer/pagine/data file.
];