/** * =========================================== * 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"; import milu from "@/assets/staff/milu.jpg"; import safira from "@/assets/staff/safira.jpg"; import brazromi from "@/assets/staff/braz_romi.jpg"; import emanoel from "@/assets/staff/emanoel.jpg"; import didipatri from "@/assets/staff/didipatri.jpg"; import djhique from "@/assets/staff/djhique.jpg"; import djgg from "@/assets/staff/djgg.jpg"; import djgalzo from "@/assets/staff/djgalzo.jpg"; import aiysha from "@/assets/staff/aiysha.jpg"; import djgui from "@/assets/staff/djgui.jpg"; import rdelano from "@/assets/staff/rdelano.jpg"; import zuluvane from "@/assets/staff/zuluvanesa.jpg"; import patriciac from "@/assets/staff/patriciac.jpg"; import wellington from "@/assets/staff/wellington.jpg"; import xavilau from "@/assets/staff/xavilau.jpg"; import pamela from "@/assets/staff/pamela.jpg"; import papagaio from "@/assets/staff/papagaio.jpg"; import jade from "@/assets/staff/jade.jpg"; import juninho from "@/assets/staff/juninho.jpg"; import rafael from "@/assets/staff/rafael.jpg"; import rodrigo from "@/assets/staff/rodrigo.jpg"; import jessica from "@/assets/staff/jessica.jpg"; import cibele from "@/assets/staff/cibele.jpg"; import giovanni from "@/assets/staff/giovanni.jpg"; import gal1 from "@/assets/gallery/gal1.jpg"; import gal2 from "@/assets/gallery/gal2.jpg"; import gal3 from "@/assets/gallery/gal3.jpg"; import gal4 from "@/assets/gallery/gal4.jpg"; import gal5 from "@/assets/gallery/gal5.jpg"; import gal6 from "@/assets/gallery/gal6.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: "Hotel Don Angel", venueAddress: "Carrer del Pla de la Torre, 14, 08398 Santa Susanna, Barcelona, Spain", /** Google Maps embed URL — reemplazar con la URL real */ mapEmbedUrl: "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2982.0132199519758!2d2.718142676474322!3d41.63384568067116!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x12bb3e942c5ac469%3A0x9153afdd8d15d0c1!2sHotel%20Don%20Angel!5e0!3m2!1ses!2sus!4v1777971058774!5m2!1ses!2sus", }; // ---- 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: "Teacher" as const, /** Reemplazar con ruta a foto real */ image: pablolena, }, { id: "2", name: "Ariel & Yasmin", role: "Teacher" as const, image: arielyasmin, }, { id: "3", name: "Hila & Leo", role: "Teacher" as const, image: hilaleo, }, { id: "4", name: "Matheus & Lydia", role: "Teacher" as const, image: matheuslydia, }, { id: "5", name: "Omer & Adva", role: "Teacher" as const, image: omeradva, }, { id: "6", name: "DJ Biel", role: "DJ" as const, image: djbiel, }, { id: "7", name: "DJ WinX", role: "DJ" as const, image: djwinx, }, { id: "8", name: "DJ Rafael", role: "DJ" as const, image: rafael, }, { id: "9", name: "Leticia & Alex", role: "Teacher" as const, image: letialex, }, { id: "10", name: "Jade Rodrigues", role: "Teacher" as const, image: jade, }, { id: "11", name: "Milu", role: "Teacher" as const, image: milu, }, { id: "12", name: "Safira", role: "Teacher" as const, image: safira, }, { id: "13", name: "Braz & Romina", role: "Teacher" as const, image: brazromi, }, { id: "14", name: "Emanoel", role: "Teacher" as const, image: emanoel, }, { id: "15", name: "Didi & Patricia", role: "Teacher" as const, image: didipatri, }, { id: "16", name: "DJ Hique", role: "DJ" as const, image: djhique, }, { id: "17", name: "DJ GG", role: "DJ" as const, image: djgg, }, { id: "18", name: "DJ Galzo", role: "DJ" as const, image: djgalzo, }, { id: "19", name: "Aiysha", role: "Specials" as const, image: aiysha, }, { id: "20", name: "DJ Gui", role: "DJ" as const, image: djgui, }, { id: "21", name: "Rodrigo Delano", role: "Teacher" as const, image: rdelano, }, { id: "22", name: "Zulu & Vanesa", role: "Specials" as const, image: zuluvane, }, { id: "23", name: "Patricia Cruz", role: "Specials" as const, image: patriciac, }, { id: "24", name: "Wellington", role: "Specials" as const, image: wellington, }, { id: "25", name: "Xavi & Laura", role: "Teacher" as const, image: xavilau, }, { id: "26", name: "Pamela", role: "Specials" as const, image: pamela, }, { id: "27", name: "Papagaio", role: "Specials" as const, image: papagaio, }, { id: "28", name: "Juninho", role: "Specials" as const, image: juninho, }, { id: "29", name: "Rodrigo", role: "Specials" as const, image: rodrigo, }, { id: "30", name: "Jéssica Serrano", role: "Specials" as const, image: jessica, }, { id: "31", name: "Cibele", role: "Specials" as const, image: cibele, }, { id: "32", name: "Giovanni", role: "Specials" as const, image: giovanni, } ]; // ---- PROGRAMA DEL EVENTO ---- export const SCHEDULE = [ { day: "Viernes 4 de Septiembre", events: [ { time: "16:00 – 17:00", title: "Check-in / Registro", type: "checkin" as const }, { time: "17:00 – 18:00", title: "Followers & Style by Jade & Milu", type: "workshop" as const }, { time: "18:00 – 19:00", title: "La Ciencia de los Giros / The Science of Spins by Rodrigo Delano", type: "workshop" as const }, { time: "19:30 – 21:30", title: "Cena / Dinner", type: "break" as const }, { time: "23:00 – 03:00", title: "Social Dance + DJs", type: "social" as const, details: ["Teacher's Presentation", "Special guest: Aiysha Singer", "Competition: 2 Full Pass for MARAU FESTIVAL & social dance"], }, ], }, { day: "Sábado 5 de Septiembre", events: [ { time: "08:00 – 10:00", title: "Desayuno / Breakfast", type: "break" as const }, { time: "11:00 – 12:00", title: "", type: "workshop" as const, parallel: [ { time: "11:00 – 12:00", title: "Matheus & Lydia", type: "workshop" as const }, { time: "11:00 – 12:00", title: "Leticia & Alex", type: "workshop" as const }, ]}, { time: "12:00 – 13:00", title: "[Workshop 4]", type: "workshop" as const, parallel: [ { time: "12:00 – 13:00", title: "Emanoel & Safira", type: "workshop" as const }, { time: "12:00 – 13:00", title: "Ariel & Yasmin", type: "workshop" as const }, ] }, { time: "13:00 – 15:00", title: "Comida / Lunch", type: "break" as const }, { time: "15:00 – 16:00", title: "[Workshop 5]", type: "workshop" as const, parallel: [ { time: "15:00 – 16:00", title: "Xavi & Laura", type: "workshop" as const }, { time: "15:00 – 16:00", title: "Omer & Adva", type: "workshop" as const }, ] }, { time: "16:00 – 17:00", title: "[Workshop 6]", type: "workshop" as const, parallel: [ { time: "16:00 – 17:00", title: "Leo & Hila", type: "workshop" as const }, { time: "16:00 – 17:00", title: "Pablo & Lena", type: "workshop" as const }, ] }, { time: "17:00 – 18:00", title: "[Workshop 7]", type: "workshop" as const, parallel: [ { time: "17:00 – 18:00", title: "Braz & Romina", type: "workshop" as const }, { time: "17:00 – 18:00", title: "Didi & Patricia", type: "workshop" as const }, ] }, { time: "19:30 – 21:30", title: "Cena / Dinner", type: "break" as const }, { time: "23:00 – 05:00", title: "Social Dance + DJs", type: "social" as const, details: ["Showtime 1h & social dance"], }, ], }, { day: "Domingo 6 de Septiembre", events: [ { time: "08:00 – 10:00", title: "Desayuno / Breakfast", type: "break" as const }, { time: "11:30 – 12:30", title: "International Barcelona Flash Mob 2026. Choreo by: Lautaro & Ari. Teacher: Romina Hidalgo", type: "workshop" as const }, { time: "12:00 – 14:00", title: "Pool Party", type: "social" as const }, { time: "13:00 – 15:00", title: "Comida / Lunch", type: "break" as const }, { time: "16:00 – 20:00", title: "Pool Party", type: "social" as const }, { time: "19:30 – 21:30", title: "Cena / Dinner", type: "break" as const }, { time: "23:00 – 05:00", title: "Social Dance + DJs", type: "social" as const, details: ["Competition, 2 Full Pass for CARNALAMBA FESTIVAL by Hila Singer & social dance"], }, ], }, ]; // ---- 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: [ { nameKey: "info.airportBCNName", distanceKey: "info.airportBCNDistance", }, ], howToGet: [ { method: "Bus", detailsKey: "info.bus603Details", link: "https://share.google/gZWgcLkbz4JbNLJ0O", linkLabelKey: "info.viewInfo", }, ], }; // ---- INFORMACIÓN EXTRA FESTIVAL ---- export const RECEPTION_INFO = { openDay: "Viernes", openTime: "15:00h", location: "Zouklambada Beach", }; export const EXTRA_NOTES = { noFullPassEntryFee: 25, noFullPassEntryFeeCurrency: "€", looseClassReserveLocation: "Recepción", looseClassPrice: 25, looseClassCurrency: "€", poolPartyIncludedWith: "Alojamiento en Hotel Don Ángel", showsNightTime: "01:00h", fullBoardPeriod: "De la cena del viernes a la comida del lunes", }; // ---- GALERÍA ---- /** * Añade URLs o importaciones de imágenes. * Para importar: import img from "@/assets/gallery/photo1.jpg" */ export const GALLERY_IMAGES = [ { src: gal1, alt: "[Descripción foto 1]" }, { src: gal2, alt: "[Descripción foto 2]" }, { src: gal3, alt: "[Descripción foto 3]" }, { src: gal4, alt: "[Descripción foto 4]" }, { src: gal5, alt: "[Descripción foto 5]" }, { src: gal6, alt: "[Descripción foto 6]" }, ]; // ---- PAQUETES MIXTOS (Room + Pass) ---- export type RoomType = "individual" | "double" | "suite"; export type PassType = "full" | "party" | "whiteparty"; export const ROOM_TYPES: { id: RoomType }[] = [ { id: "individual" }, { id: "double" }, { id: "suite" }, ]; // ---- PRECIOS DINÁMICOS FULL PASS ---- /** * Calcula el precio del Full Pass según la fecha actual. * - Hasta 1 de junio: 170€ * - 1 de junio - 1 de septiembre: 190€ * - Después del inicio del evento: 200€ (último precio) */ export function getFullPassPrice(): { price: number; isLastPrice: boolean; validUntilKey: string | null } { const now = new Date(); const julyFirst = new Date("2026-07-15T00:00:00"); const septemberFirst = new Date("2026-09-01T00:00:00"); const eventStart = new Date(EVENT_INFO.date); if (now < julyFirst) { return { price: 170, isLastPrice: false, validUntilKey: "validUntilJuly" }; } else if (now < septemberFirst) { return { price: 190, isLastPrice: false, validUntilKey: "validUntilSeptember" }; } else { // After event starts return { price: 200, isLastPrice: true, validUntilKey: null }; } } export const MIXED_BOOKING_PACKAGES = [ { id: "full" as PassType, label: "full", roomPrices: { individual: 100, double: 150, suite: 213 } }, { id: "party" as PassType, label: "party", roomPrices: { individual: 100, double: 150, suite: 213 } }, { id: "whiteparty" as PassType, label: "whiteparty", roomPrices: { individual: 0, double: 0, suite: 0 } }, ]; // ---- SECCIONES VISIBLES ---- export const SECTIONS = { about: true, org: true, staff: true, profesores: true, schedule: false, booking: false, mixed_booking: false, hotel: false, practical: true, gallery: true, }; // ---- NAVEGACIÓN ---- const HREF_TO_SECTION: Record = { "#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]]);