Producto propio

Festarama

Toda la logística de tu festival en un sitio. Sin abrir 12 pestañas.

Stack técnico

  • Laravel 13.12 + PHP 8.3
  • MySQL 8
  • Blade + Tailwind 4 + htmx (sin SPA)
  • Leaflet + OpenStreetMap self-hosted
  • Open-Meteo para clima (sin API key)
  • Anthropic API para scrapers asistidos
  • Plausible o GA4 (env-driven)

El reto técnico

Cada festival es una ficha rica: cartel con horarios, alojamientos cercanos, opciones de transporte desde 8 ciudades, POIs alrededor, clima previsto, tips reales. No es contenido libre, es contenido estructurado que se repite con la misma forma para cada festival. El modelo de datos tenía que separar bien lo que es del festival como entidad permanente, lo que es de esta edición concreta (fechas, cartel, precios) y lo que es de la ciudad.

Después viene la parte SEO. El tráfico viene de búsquedas tipo "transporte a {festival} desde {ciudad}" o "alojamiento {festival}". Cada combinación es una landing por derecho propio. La web tiene sub-rutas long-tail por festival: `/{festival}/alojamiento`, `/{festival}/desde-{city}`, con su propio título, descripción, contenido y JSON-LD. Filtros que solo funcionen con JavaScript no servirían: las combinaciones tienen que ser indexables.

La recomendación "Para ti" cruza contexto del visitante (ubicación detectada, fechas) con los festivales próximos para ofrecer el más relevante. Es lógica de scoring, no un modelo entrenado.

Proceso y decisiones

Laravel + Blade + htmx, sin SPA. Para un sitio que vive del SEO, renderizar en servidor es lo correcto. htmx aporta interacciones puntuales (filtros, carga progresiva) sin meter un framework JS entero por encima. Menos JS, menos peso, mejor LCP.

Clima vía Open-Meteo (sin API key, sin coste recurrente) en vez de OpenWeather o similar. Mapas con Leaflet sobre OpenStreetMap self-hosted, no Google Maps: cero coste por carga, cero cuota mensual sorpresa cuando el tráfico crece.

Para llenar la base de datos con festivales reales se usaron scrapers asistidos por LLM (Anthropic API). El LLM no entra en producción, solo en el pipeline de ingesta: descarga la web del festival, pide al modelo que estructure los datos según el modelo objetivo, valida, y solo entonces se siembra. Sale más rápido que escribir scrapers a mano para cada sitio distinto.

Tracción

9 (MVP)Festivales con ficha completa
alojamiento + transporte desde 8 ciudadesFichas SEO long-tail por festival
Mínima (htmx, sin SPA)Carga JS adicional
0€/mes (OSM + Open-Meteo)Coste de mapas y clima
MusicEvent, FAQPage, BreadcrumbList, ItemListJSON-LD

¿Qué significa esto para tu proyecto?

Si necesitas un sitio editorial con contenido estructurado, repetible y filtrable (eventos, festivales, viajes, restaurantes, rutas, ferias), este proyecto demuestra que se puede montar el modelo de datos, las sub-rutas SEO por combinación y la plantilla editorial sin tener que mantener un SPA en JavaScript ni pagar mensualmente por cada API de mapa o clima.

También sirve como ejemplo de proyecto orientado a SEO desde el primer día. URLs por taxonomía y por combinación (festival + ciudad + categoría), datos estructurados, paginación indexable, fichas largas con jerarquía clara. Si tu modelo de negocio depende de tráfico orgánico, así se construye.

Y si tu pipeline de contenido se beneficia de LLMs para estructurar datos crudos (PDF, webs de proveedores, hojas de cálculo desordenadas), aquí se usó Anthropic API en el lado del pipeline de ingesta y funciona. Misma lógica aplicable a tu caso si lo tuyo es cargar contenido externo de muchas fuentes con formato distinto.

¿Quieres algo parecido?

Cuéntame qué tienes en mente y te digo qué puedo hacer.