mirror of
https://github.com/Ichitux/lambada-fiesta-live.git
synced 2026-05-15 17:12:19 +02:00
331 lines
9.1 KiB
TypeScript
331 lines
9.1 KiB
TypeScript
/**
|
||
* ===========================================
|
||
* DATOS DEL EVENTO — ZoukLambadaBCN
|
||
* ===========================================
|
||
*
|
||
* Este archivo centraliza datos "no traducibles" del evento:
|
||
* fechas, URLs, embeds, imágenes y arrays estructurados.
|
||
*
|
||
* El texto visible (títulos, descripciones, labels) vive en:
|
||
* `src/locales/*.json` y se consume vía i18n.
|
||
*
|
||
* NOTA: Las imágenes deben colocarse en src/assets/ e importarse.
|
||
*/
|
||
import arielyasmin from "@/assets/staff/arielyasmin.jpg";
|
||
import hilaleo from "@/assets/staff/hilaleo.jpg";
|
||
import matheuslydia from "@/assets/staff/matheuslydia.jpg";
|
||
import omeradva from "@/assets/staff/omeradva.jpg";
|
||
import pablolena from "@/assets/staff/pablolena.jpg";
|
||
import djbiel from "@/assets/staff/djbiel.jpg";
|
||
import djwinx from "@/assets/staff/djwinx.jpg";
|
||
import djklebynho from "@/assets/staff/djklebynho.jpg";
|
||
import letialex from "@/assets/staff/letialex.jpg";
|
||
import djcathie from "@/assets/staff/djcathie.jpg";
|
||
|
||
|
||
|
||
// ---- INFORMACIÓN GENERAL DEL EVENTO ----
|
||
export const EVENT_INFO = {
|
||
/** Fecha del evento — formato ISO para el countdown */
|
||
date: "2026-09-04T12:00:00",
|
||
venue: "[Nombre del Venue]",
|
||
venueAddress: "[Dirección del venue, Barcelona]",
|
||
/** Google Maps embed URL — reemplazar con la URL real */
|
||
mapEmbedUrl: "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2993.5!2d2.1734!3d41.3851!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zNDHCsDIzJzA2LjQiTiAywrAxMCcyNC4yIkU!5e0!3m2!1ses!2ses!4v1234567890",
|
||
};
|
||
|
||
// ---- WEBHOOK N8N ----
|
||
/**
|
||
* CONFIGURACIÓN DEL WEBHOOK:
|
||
*
|
||
* 1. En n8n, crea un nuevo workflow con un nodo "Webhook"
|
||
* 2. Configura el webhook como POST
|
||
* 3. Copia la URL generada y pégala aquí abajo
|
||
* 4. En n8n, conecta el webhook a tu destino (Google Sheets, Airtable, etc.)
|
||
*
|
||
* Ejemplo de payload que se envía:
|
||
* {
|
||
* "name": "Juan García",
|
||
* "email": "juan@example.com",
|
||
* "seats": "2",
|
||
* "country": "España",
|
||
* "comment": "Primera vez en el festival"
|
||
* }
|
||
*/
|
||
export const WEBHOOK_URL = "https://n8n.hacecalor.net/webhook/event-reservation";
|
||
/**
|
||
* CLAVE DE AUTENTICACIÓN:
|
||
*
|
||
* Si activas "Header Auth" en n8n, asegúrate de que el nombre del header
|
||
* sea "X-Webhook-Secret" y que este valor coincida con el que pongas allí.
|
||
*/
|
||
export const WEBHOOK_SECRET = "oWkS4cAgj0LVgIbnO3cGKTePPLnRAIAa5NTvXahx5z0=";
|
||
|
||
export const ABOUT_ORG = {
|
||
socials: {
|
||
instagram: "https://instagram.com/zouklambadabcn",
|
||
facebook: "https://facebook.com/zouklambadabcn",
|
||
youtube: "https://youtube.com/@zouklambadabcn",
|
||
},
|
||
};
|
||
|
||
// ---- STAFF DEL EVENTO ----
|
||
/**
|
||
* Para añadir un nuevo miembro del staff,
|
||
* simplemente agrega un nuevo objeto al array.
|
||
*/
|
||
export const STAFF = [
|
||
{
|
||
id: "1",
|
||
name: "[Pablo & Lena]",
|
||
role: "Instructor" as const,
|
||
description: "[Breve biografía del instructor]",
|
||
/** Reemplazar con ruta a foto real */
|
||
image: pablolena,
|
||
socials: {
|
||
instagram: "",
|
||
},
|
||
},
|
||
{
|
||
id: "2",
|
||
name: "[Ariel & Yasmin]",
|
||
role: "Instructor" as const,
|
||
description: "[Breve biografía del instructor]",
|
||
image: arielyasmin,
|
||
socials: {
|
||
instagram: "",
|
||
},
|
||
},
|
||
{
|
||
id: "3",
|
||
name: "[Hila & Leo]",
|
||
role: "Instructor" as const,
|
||
description: "[Breve biografía del instructor]",
|
||
image: hilaleo,
|
||
socials: {
|
||
instagram: "",
|
||
},
|
||
},
|
||
{
|
||
id: "4",
|
||
name: "[Matheus & Lydia]",
|
||
role: "Instructor" as const,
|
||
description: "[Breve biografía del instructor]",
|
||
image: matheuslydia,
|
||
socials: {
|
||
instagram: "",
|
||
},
|
||
},
|
||
{
|
||
id: "5",
|
||
name: "[Omer & Adva]",
|
||
role: "Instructor" as const,
|
||
description: "[Breve biografía del instructor]",
|
||
image: omeradva,
|
||
socials: {
|
||
instagram: "",
|
||
},
|
||
},
|
||
{
|
||
id: "6",
|
||
name: "[DJ Biel]",
|
||
role: "DJ" as const,
|
||
description: "[Breve biografía del DJ]",
|
||
image: djbiel,
|
||
socials: {
|
||
instagram: "",
|
||
soundcloud: "",
|
||
},
|
||
},
|
||
{
|
||
id: "7",
|
||
name: "[DJ WinX]",
|
||
role: "DJ" as const,
|
||
description: "[Breve biografía del DJ]",
|
||
image: djwinx,
|
||
socials: {
|
||
instagram: "",
|
||
soundcloud: "",
|
||
},
|
||
},
|
||
{
|
||
id: "8",
|
||
name: "[DJ Klebynho]",
|
||
role: "DJ" as const,
|
||
description: "[Breve biografía del DJ]",
|
||
image: djklebynho,
|
||
socials: {
|
||
instagram: "",
|
||
soundcloud: "",
|
||
},
|
||
},
|
||
{
|
||
id: "9",
|
||
name: "[Leticia & Alex]",
|
||
role: "Instructor" as const,
|
||
description: "[Breve biografía del instructor]",
|
||
image: letialex,
|
||
socials: {
|
||
instagram: "",
|
||
},
|
||
},
|
||
{
|
||
id: "10",
|
||
name: "[DJ Cathie]",
|
||
role: "DJ" as const,
|
||
description: "[Breve biografía del DJ]",
|
||
image: djcathie,
|
||
socials: {
|
||
instagram: "",
|
||
soundcloud: "",
|
||
},
|
||
},
|
||
];
|
||
|
||
// ---- PROGRAMA DEL EVENTO ----
|
||
export const SCHEDULE = [
|
||
{
|
||
day: "Viernes 20 Junio",
|
||
events: [
|
||
{ time: "18:00 – 19:30", title: "[Workshop 1]", type: "workshop" as const },
|
||
{ time: "19:30 – 20:00", title: "Pausa", type: "break" as const },
|
||
{ time: "20:00 – 21:30", title: "[Workshop 2]", type: "workshop" as const },
|
||
{ time: "22:00 – 03:00", title: "Social Dance + DJ Set", type: "social" as const },
|
||
],
|
||
},
|
||
{
|
||
day: "Sábado 21 Junio",
|
||
events: [
|
||
{ time: "12:00 – 13:30", title: "[Workshop 3]", type: "workshop" as const },
|
||
{ time: "14:00 – 15:30", title: "[Workshop 4]", type: "workshop" as const },
|
||
{ time: "16:00 – 17:30", title: "[Workshop 5]", type: "workshop" as const },
|
||
{ time: "21:00 – 22:00", title: "Shows en Vivo", type: "show" as const },
|
||
{ time: "22:00 – 04:00", title: "Social Dance + DJ Sets", type: "social" as const },
|
||
],
|
||
},
|
||
{
|
||
day: "Domingo 22 Junio",
|
||
events: [
|
||
{ time: "12:00 – 13:30", title: "[Workshop 6]", type: "workshop" as const },
|
||
{ time: "14:00 – 15:30", title: "[Workshop 7]", type: "workshop" as const },
|
||
{ time: "17:00 – 22:00", title: "Farewell Party", type: "social" as const },
|
||
],
|
||
},
|
||
];
|
||
|
||
// ---- HABITACIONES DE HOTEL ----
|
||
/**
|
||
* Para añadir habitaciones, agrega objetos al array.
|
||
* El botón "Reservar" abre el link en nueva pestaña.
|
||
*/
|
||
export const HOTEL_ROOMS = [
|
||
{
|
||
id: "1",
|
||
name: "[Habitación Individual]",
|
||
price: "[XX€/noche]",
|
||
description: "[Descripción breve de la habitación]",
|
||
/** Reemplazar con URL de imagen real */
|
||
image: "",
|
||
link: "https://hotel-example.com/booking",
|
||
},
|
||
{
|
||
id: "2",
|
||
name: "[Habitación Doble]",
|
||
price: "[XX€/noche]",
|
||
description: "[Descripción breve de la habitación]",
|
||
image: "",
|
||
link: "https://hotel-example.com/booking",
|
||
},
|
||
{
|
||
id: "3",
|
||
name: "[Suite]",
|
||
price: "[XX€/noche]",
|
||
description: "[Descripción breve de la habitación]",
|
||
image: "",
|
||
link: "https://hotel-example.com/booking",
|
||
},
|
||
];
|
||
|
||
// ---- INFORMACIÓN PRÁCTICA ----
|
||
export const PRACTICAL_INFO = {
|
||
airports: [
|
||
{ name: "Aeropuerto de Barcelona-El Prat (BCN)", distance: "~15 km del venue" },
|
||
{ name: "Aeropuerto de Girona (GRO)", distance: "~100 km del venue" },
|
||
{ name: "Aeropuerto de Reus (REU)", distance: "~110 km del venue" },
|
||
],
|
||
howToGet: [
|
||
{ method: "Metro", details: "[Línea y parada más cercana]" },
|
||
{ method: "Bus", details: "[Líneas de bus cercanas]" },
|
||
{ method: "Taxi/Uber", details: "Disponible desde cualquier punto de Barcelona" },
|
||
],
|
||
};
|
||
|
||
// ---- GALERÍA ----
|
||
/**
|
||
* Añade URLs o importaciones de imágenes.
|
||
* Para importar: import img from "@/assets/gallery/photo1.jpg"
|
||
*/
|
||
export const GALLERY_IMAGES = [
|
||
{ src: "", alt: "[Descripción foto 1]" },
|
||
{ src: "", alt: "[Descripción foto 2]" },
|
||
{ src: "", alt: "[Descripción foto 3]" },
|
||
{ src: "", alt: "[Descripción foto 4]" },
|
||
{ src: "", alt: "[Descripción foto 5]" },
|
||
{ src: "", alt: "[Descripción foto 6]" },
|
||
];
|
||
|
||
// ---- PAQUETES MIXTOS (Room + Pass) ----
|
||
export type RoomType = "individual" | "double" | "suite";
|
||
export type PassType = "full" | "party" | "single";
|
||
|
||
export const ROOM_TYPES: { id: RoomType }[] = [
|
||
{ id: "individual" },
|
||
{ id: "double" },
|
||
{ id: "suite" },
|
||
];
|
||
|
||
export const MIXED_BOOKING_PACKAGES = [
|
||
{ id: "full" as PassType, label: "full", roomPrices: { individual: 0, double: 0, suite: 0 } },
|
||
{ id: "party" as PassType, label: "party", roomPrices: { individual: 0, double: 0, suite: 0 } },
|
||
{ id: "single" as PassType, label: "single", roomPrices: { individual: 0, double: 0, suite: 0 } },
|
||
];
|
||
|
||
// ---- SECCIONES VISIBLES ----
|
||
export const SECTIONS = {
|
||
about: true,
|
||
org: true,
|
||
staff: true,
|
||
profesores: true,
|
||
schedule: true,
|
||
booking: false,
|
||
mixed_booking: true,
|
||
hotel: true,
|
||
practical: true,
|
||
gallery: true,
|
||
};
|
||
|
||
// ---- NAVEGACIÓN ----
|
||
const HREF_TO_SECTION: Record<string, keyof typeof SECTIONS> = {
|
||
"#about": "about",
|
||
"#staff": "staff",
|
||
"#schedule": "schedule",
|
||
"#booking": "booking",
|
||
"#mixed-booking": "mixed_booking",
|
||
"#hotel": "hotel",
|
||
"#info": "practical",
|
||
"#gallery": "gallery",
|
||
};
|
||
|
||
export const NAV_LINKS = (
|
||
[
|
||
{ href: "#about" },
|
||
{ href: "#staff" },
|
||
{ href: "#schedule" },
|
||
{ href: "#booking" },
|
||
{ href: "#mixed-booking" },
|
||
{ href: "#hotel" },
|
||
{ href: "#info" },
|
||
{ href: "#gallery" },
|
||
] as const
|
||
).filter((link) => SECTIONS[HREF_TO_SECTION[link.href]]);
|