Guía de Configuración

Horizon Studio y Configura tu App

Personaliza tu app y descubre todas las funciones de Horizon Studio. Los campos ya están pre-rellenados con valores óptimos: cambia solo lo que quieras personalizar.

CORS Fix para Integración Externa

Si tu sitio se muestra dentro de la app y las imágenes no se ven, debes añadir estas líneas a tu servidor. Sin esta configuración, la app no puede cargar las imágenes de tu sitio.

¿Por qué es necesario CORS?
📱 Tu App
🌐 Tu sitio
❌ Imágenes bloqueadasEl servidor no permite la carga externa
📱 Tu App
✅ Tu sitio
con CORS activo
✅ ¡Imágenes cargadas!El servidor permite la carga
⚠️
Copia este código al principio de tu archivo .htaccess. Debe ser el primer bloque del archivo. Si no sabes dónde encontrar este archivo, pregunta a tu webmaster o a tu proveedor de hosting.
.htaccess
# CORS FIX
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS, POST"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization"
</IfModule>
⚠️
En caso de error 500 o si el servidor no reconoce las directivas, es necesario habilitar el módulo headers de Apache desde el terminal del servidor con el comando:
sudo a2enmod headers
A continuación, reinicia Apache con sudo systemctl restart apache2
Después de añadir el código, las imágenes de tu sitio serán visibles en la app en pocos minutos. Si el problema persiste, contacta con soporte.

Integración de Sitio, Blog o Social Embed (White-Label)

Para mostrar tu sitio web, blog o contenido social dentro de la plataforma, la fuente debe permitir el "framing". Sigue este procedimiento. En pocos minutos estará todo listo.

📌
Plan Pro: La integración de tu sitio web o blog personalizado dentro de la app está disponible exclusivamente con el plan Pro. Los planes Starter y Premium utilizan Horizon Studio como plataforma de publicación.

Fase 1: Test de Compatibilidad

Antes de modificar nada, verifica si tu sitio/blog ya está listo.

1
Ve al sitio IFrameTester.com
2
Pega la URL completa de tu sitio o blog (ej. https://www.miblog.es)
3
Haz clic en Render
¿Tu sitio aparece en el recuadro? No tienes que hacer nada: ¡tu sitio/blog ya es compatible!
¿Ves un error tipo "Refused to connect" o un recuadro gris? Tu servidor está bloqueando la integración. Pasa a la Fase 2.

Fase 2: Solución Técnica

Pide a tu webmaster o a tu proveedor de hosting que aplique una de estas configuraciones. Estas instrucciones eliminan los bloqueos de seguridad y permiten a la plataforma mostrar tu contenido.

Opción A: Servidor Nginx

Edita el archivo de configuración del sitio añadiendo estas líneas:

nginx
# Elimina el bloqueo de seguridad restrictivo
proxy_hide_header X-Frame-Options;
add_header X-Frame-Options "" always;
# Permite la integración universal (White-Label)
add_header Content-Security-Policy "frame-ancestors *;" always;
Opción B: Servidor Apache (.htaccess) ← Recomendada

Añade estas líneas al principio de tu archivo .htaccess:

apache
<IfModule mod_headers.c>
Header always unset X-Frame-Options
Header always set Content-Security-Policy "frame-ancestors *"
</IfModule>
Opción C: functions.php ← Más sencillo

Si no tienes acceso a los archivos del servidor, añade este código al archivo functions.php de tu tema activo:

php
function allow_white_label_framing() {
// Desbloquea las restricciones de seguridad del sitio
remove_action( 'login_init', 'send_frame_options_header', 10 );
remove_action( 'admin_init', 'send_frame_options_header', 10 );
// Habilita la visualización externa
header("Content-Security-Policy: frame-ancestors *");
header_remove("X-Frame-Options");
}
add_action('send_headers', 'allow_white_label_framing', 1);

Fase 3: Habilitar Funciones Avanzadas (Opcional)

Para ofrecer la mejor experiencia a tus usuarios, añade este script en el <head> de tu sitio. El script habilita funciones adicionales como navegación optimizada y animaciones fluidas dentro de la app.

1
Abre el archivo HTML de tu sitio (o el archivo template del tema)
2
Busca la etiqueta <head> ... </head>
3
Pega el siguiente script antes del cierre de </head>
html
<script src="https://scripts.travelinfluencer.co/horizon-webview-helper.js" data-horizon-webview async></script>
Qué hace este script: Habilita navegación optimizada, animaciones fluidas y transiciones avanzadas cuando tu sitio se visualiza dentro de la app de Travelinfluencer. El sitio sigue funcionando con normalidad incluso sin el script.
💡
Opcional pero recomendado: El script es ligero, se carga de forma asíncrona y no afecta al rendimiento de tu sitio. No hace nada si el sitio no se abre dentro de la app.

Requisitos Fundamentales

🔒
Protocolo HTTPS: Tu sitio/blog debe tener un certificado SSL activo. Los sitios en http:// (no seguros) no pueden cargarse.
☁️
Cloudflare: Si usas Cloudflare, desactiva cualquier regla de tipo "HSTS" u "Origin Shield" que fuerce el header X-Frame-Options: SAMEORIGIN.
💬
Soporte: Si después de aplicar estos cambios la prueba sigue fallando, contacta con el soporte técnico de tu proveedor proporcionando la captura de pantalla de la prueba realizada en IFrameTester.com.
📱
Social Embed: Algunas plataformas sociales permiten integrar (embed) sus contenidos directamente en tu app. La disponibilidad de esta función depende de la plataforma social: no todas las redes sociales admiten embed. Si la red social lo permite, el contenido se mostrará de forma nativa dentro de la app sin necesidad de configuraciones adicionales.

Dominio Personalizado (White-Label)

Si tu plan incluye la opción Custom Domain, puedes vincular tu dominio o subdominio (ej. app.tunombre.es) a la plataforma. Tus usuarios accederán a tu app desde tu dirección web.

Cómo funciona el apuntamiento DNS
🌐 app.tunombre.es
🔗 Registro CNAME
apunta a
connect.travelinfluencer.co
🔒 Certificado SSL
generado automáticamente
✅ ¡Tu App está en línea!
accesible desde app.tunombre.es

Instrucciones para el Apuntamiento DNS

Accede al panel de gestión de tu dominio (ej. Aruba, Cloudflare, Register) y añade un nuevo registro DNS:

CampoValor a introducir
Tipo de RegistroCNAME
Host / Nombreapp, o el nombre que prefieras: viajes, portal, connect...
Destino / Valorconnect.travelinfluencer.co
TTLAutomático o 3600

Notas Importantes

🚫
No uses registros de tipo A (direcciones IP). Usa exclusivamente el registro CNAME apuntando a connect.travelinfluencer.co. Esto garantiza que tu servicio siga activo incluso en caso de actualizaciones de nuestros servidores.
🔒
SSL / HTTPS automático: Una vez configurado el apuntamiento, nuestro sistema generará automáticamente un certificado SSL gratuito para tu dominio en pocos minutos.
⏱️
Propagación DNS: Los cambios en los DNS pueden tardar desde unos minutos hasta algunas horas en ser visibles a nivel global.

¿Qué pasa después?

1
Creas el registro CNAME en tu panel DNS
2
Nuestro sistema detecta el apuntamiento y genera automáticamente el certificado SSL
3
Tu app será accesible desde tu dirección personalizada (ej. app.tunombre.es)
🔴
Atención. Degradación de dominio personalizado a subdominio: El dominio personalizado está integrado en la configuración interna de tu app (sesiones de usuario, certificados SSL, indexación). El paso de un dominio personalizado a un subdominio estándar conlleva una reestructuración completa del entorno que hace incompatibles los datos existentes. La configuración de la app, los ajustes personalizados y los contenidos asociados al dominio se perderán definitivamente. Esta operación es irreversible: antes de hacer una degradación, asegúrate de haber guardado todo lo que necesites.

Horizon Studio

Horizon Studio es la plataforma que te permite configurar tu app y gestionar tu blog de contenidos.

💡
Plataforma completa: Horizon Studio es mucho más que un simple blog. Incluye editor avanzado, badges promocionales, CTA con enlaces externos, monitorización de visualizaciones, sistema de likes, comentarios y perfiles de autor personalizables — todo gestionado desde el frontend.

📝 Creación y Gestión de Contenidos

Todo lo que necesitas para crear y gestionar tus artículos, directamente desde el frontend.

FunciónDescripción
Editor frontend completoCreación y edición de artículos con editor visual TinyMCE (barra de herramientas completa). Formato de texto, inserción de imágenes, enlaces y mucho más.
Imágenes destacadasSubida con vista previa inmediata. El sistema muestra una vista previa antes de la publicación.
Estado de publicaciónAlternancia rápida entre Publicado y Borrador directamente desde la lista de artículos. No se requiere confirmación: un clic para cambiar de estado.
Eliminación permanenteEliminación de artículos con confirmación explícita. Las imágenes asociadas se eliminan automáticamente.
ComentariosActivación/desactivación para cada artículo. Plantilla de comentarios personalizada con soporte para respuestas anidadas. Activa o desactiva los comentarios individualmente para cada contenido.

🏷️ Sistema de Badges

Cada artículo puede marcarse con un badge visual que se muestra en la tarjeta y en el post individual. Los badges aparecen como etiquetas de color superpuestas en la imagen destacada.

BadgeSignificadoCaso de uso
PromoOferta promocionalDescuentos, ofertas por tiempo limitado, códigos promocionales
NuovoContenido recién publicadoDestacar novedades, añadidos recientes al catálogo
HotContenido popularBest-sellers, tendencias del momento, contenidos virales
GratisContenido gratuitoRecursos gratuitos, guías gratuitas, pruebas, regalos
📍
Dónde aparecen: Los badges son visibles en la tarjeta del artículo de la lista, en el perfil del autor y en el post individual — siempre superpuestos en la imagen destacada.

🔗 CTA con Enlaces Externos

Cada artículo puede incluir una Call-To-Action con enlace externo, perfecta para monetizar contenidos y enlazar a recursos externos.

Casos de uso

TipoDescripciónEjemplo
Enlace de afiliaciónEnlazar a productos/servicios de terceros con seguimiento de comisionesEnlace a Booking.com, Amazon, etc.
Paquetes y productosEnlace a páginas de compra, landing pages, e-commerce"Reserva el paquete de vacaciones"
Guías y recursosEnlazar a tutoriales, documentación, cursos online"Descarga la guía PDF"
Sitios externosCualquier URL externa para más información, demos, etc."Visita el sitio del partner"

Cómo funciona en el post individual

La CTA se muestra como un botón visible en el box promo del post individual, con:

  • Label — el texto del botón (ej. "29,99 €", "Descubre", "Reserva ahora")
  • Enlace — se abre en una nueva pestaña con rel="noopener noreferrer" por seguridad
  • Icono de flecha — indica la acción de salida hacia el sitio externo

👁 Monitorización de Visualizaciones

El conteo de visualizaciones es automático y está activo por defecto para todos los artículos. No se requiere ninguna configuración.

FunciónDetalle
Contador automáticoEl contador se incrementa automáticamente en cada visita al post individual.
Visualización en la listaEl conteo se muestra en cada tarjeta de artículo con el icono 👁.
Sin configuraciónEl seguimiento está activo por defecto para todos los artículos publicados.

👤 Visualizaciones de Perfil

El conteo de visualizaciones de los perfiles de autor/influencer es automático y está activo por defecto. No se requiere ninguna configuración.

FunciónDetalle
Contador automáticoEl contador se incrementa automáticamente en cada visita al perfil del autor/influencer.
Visualización en el perfilEl conteo se muestra en la página del perfil de autor/influencer con el icono 👁.
Sin configuraciónEl seguimiento está activo por defecto para todos los perfiles de autor/influencer publicados.

❤️ Sistema de Likes

Sistema de apreciación pública, sin necesidad de inicio de sesión. Funciona para todos los visitantes, incluidos los anónimos.

FunciónDetalle
Like públicoNo se requiere inicio de sesión. Los visitantes anónimos pueden dar like a cualquier artículo.
Prevención de duplicadosEl estado del like se guarda en el navegador para evitar múltiples likes desde el mismo dispositivo.
Feedback visualEl corazón se rellena y el contador se actualiza en tiempo real con una animación fluida.
Endpoint públicoAccesible tanto por usuarios autenticados como por visitantes anónimos. No se requiere autenticación.

👤 Perfiles de Autor Personalizables

Cada autor tiene una página de perfil pública completamente personalizable, visible para todos los visitantes.

ElementoDescripción
Imagen heroBanner de ancho completo con superposición de degradado. La imagen cubre toda la parte superior del perfil.
AvatarImagen circular superpuesta al hero. Se convierte en el símbolo visual del autor en todo el sitio.
Bio HTMLDescripción con formato enriquecido (negrita, enlaces, listas). Admite HTML completo para una bio profesional.
NicknameNombre mostrado personalizado, independiente del nombre de usuario.
Colores personalizados6 colores personalizables (fondo, botones, texto, tarjetas) + redondeo de imagen. Cada perfil puede tener su propio estilo único.
Cuadrícula de artículosTodos los posts publicados del autor, mostrados en cuadrícula con badge y precio destacado en cada tarjeta.
🎨
Personalización total: Los perfiles de autor son completamente independientes. Cada autor puede elegir sus propios colores, su propio hero y su propio estilo — creando una identidad visual única dentro de la plataforma.

Configuración de la App

Todos los campos ya están pre-rellenados con valores óptimos. Cambia solo lo que quieras personalizar. Siempre puedes volver a los valores originales con el botón Reset.

💡
¡No tienes que rellenar todo! Los valores predeterminados ya son óptimos para la mayoría de los usuarios. Personaliza solo aquello que hace única a tu app.
🔒
Campos y planes: Algunos campos dependen del plan contratado (Starter, Premium, Pro). Los campos bloqueados por el plan no son modificables. Esta guía muestra todos los campos disponibles. Los que no sean accesibles aparecerán deshabilitados en la configuración.
🌐
Primer acceso: Antes de poder acceder a tu app, se te pide elegir un nombre de dominio (ej. tunombre.travelinfluencer.co). Para abrir la app, escribe esa dirección en la barra de búsqueda de tu navegador.

branding · colors

La identidad visual de tu app: logo, colores y fuente.

CampoPredeterminadoQué hace
logoUrlURLLogo TravelInfluencerLa imagen que representa tu app. Formato PNG, mínimo 512×512px. Usada como icono en cada punto de la app.

Cómo insertar el logo: sube una imagen desde tu perfil y copia la URL generada, o pega directamente la URL de una imagen online. Si las imágenes no se cargan, consulta la sección CORS Fix.
backgroundColorColor#00519CEl color principal de tu marca. Usado en la barra del navegador y como color del tema.
splashBackgroundColorColor#FFFFFFEl color de fondo cuando se inicia la app. Normalmente blanco o el color de la marca.
Mostrar todos los colores personalizables

Cada color está en formato #RRGGBB. Los valores mostrados son los predeterminados.

Superficie y Fondo

CampoPredeterminadoUso
colors.primary#00519CBotones primarios, indicadores activos, AppBar
colors.surface#FFFFFFFondo de tarjetas, diálogos, bottom sheet
colors.background#F7F9FCFondo principal detrás de todo
colors.surfaceTint#E8EDF5Fondos semitransparentes, switch track
colors.surfaceTintLight#F0F4FAVariante más clara de surfaceTint

Texto

CampoPredeterminadoUso
colors.textPrimary#0F172ATítulos y contenidos importantes
colors.textSecondary#475569Subtítulos e información complementaria
colors.textTertiary#94A3B8Hints, placeholders, información poco importante
colors.textDisabled#CBD5E1Elementos deshabilitados

Stati

CampoPredeterminadoUso
colors.success#16A34AConfirmaciones, estado "completado"
colors.warning#F59E0BAvisos y atención
colors.error#DC2626Errores principales
colors.errorLight#FEF2F2Fondo claro para áreas de error
colors.errorBorder#FECACABorde de tarjetas/contenedores de error
colors.errorSecondary#EF9A9AColor de error secundario, fondo claro
colors.errorText#E53935Texto de mensajes de error
colors.errorDark#D32F2FColor de error oscuro, para acciones importantes

Categorías de Viaje

CampoPredeterminadoUso
colors.categoryAccommodationColor de alojamientoHoteles, B&B, etc.
colors.categoryTransportColor de transporteVuelos, trenes, etc.
colors.categoryFoodColor de comidaRestaurantes, etc.
colors.categoryActivitiesColor de actividadesTours, excursiones
colors.categoryOtherColor otrosGastos no clasificables

Estados de Viaje

CampoUso
colors.statusUpcomingBadge "In arrivo"
colors.statusInProgressBadge "In corso"
colors.statusCompletedBadge "Completato"

Varie

CampoUso
colors.borderBorde estándar para tarjetas e inputs
colors.borderLightBorde claro para separaciones sutiles
colors.dividerLíneas divisorias entre secciones
colors.iconSecondaryIconos decorativos secundarios
colors.overlayBackgroundFondo de overlay oscuro (popup, diálogo)
colors.overlayTextTexto sobre fondo de overlay oscuro
colors.shadowColor base de sombras (normalmente #000000)
colors.shadowOpacity0.0-1.0Transparencia de las sombras
colors.onPrimaryTexto/iconos sobre el color primary
colors.onSecondaryTexto/iconos sobre el color secondary
colors.onSurfaceTexto/iconos sobre el color surface
colors.onErrorTexto/iconos sobre el color error

app

La información base: nombre, versión e identidad de la app.

CampoPredeterminadoQué hace
appNameTextoHorizonEl nombre de tu app mostrado a los usuarios: aparece en el título, en la barra y en toda la app.
appVersionTexto1.0.0Número de versión (referencia interna).
poweredByTextTextopowered by travelinfluencer.coTexto "powered by" al final de la página info. Visible solo si "Mostrar powered by" está activo.
aiButtonTextTextoHorizonAIEl nombre de tu asistente AI: aparece en la barra y en la pantalla AI. Para cambiar la identidad ve a la sección ai.

links

Todos los enlaces y páginas conectadas a tu app.

CampoTipoQué hace
websiteURLEnlace a tu sitio web, Horizon Studio o social (si embed es posible): mostrado como botón "Explorar" en la página info. Nota: el enlace a tu sitio web personalizado está disponible solo con el plan Pro.
privacyPolicyURLEnlace a la página de Política de Privacidad.
termsAndConditionsURLEnlace a la página de Términos y Condiciones.
promoPopupURLURL de la página mostrada en el popup promocional. Apare después de X segundos de la apertura.
infoHeaderImageUrlURLImagen de cabecera en la parte superior de la página info. Ancho recomendado: 1200px+.

Cómo insertar la imagen de cabecera: sube una imagen desde tu perfil y copia la URL generada, o pega directamente la URL de una imagen online. Si las imágenes no se cargan, consulta la sección CORS Fix.

services · socialLinks

Los servicios mostrados en la barra de navegación (bottom bar) y los enlaces sociales en el menú lateral (drawer) de la app.

📌
Máximo 5 servicios activos en la barra de navegación. El número de servicios disponibles depende del plan. Solo los primeros 5 servicios con toggle activo aparecerán en la barra inferior.

Servicios disponibles

Para cada servicio introduce el enlace de afiliación y usa el toggle para activarlo o desactivarlo. El número de servicios disponibles depende del plan.

IconoNombre del ServicioQué introducir en el campo URL
✈️FlightsEnlace de afiliación para busqueda de vuelos
🏨HotelsEnlace de afiliación para reserva de hotel
🏡Vacation HomesEnlace de afiliación para casas vacacionales y apartamentos
📦PackagesEnlace de afiliación para paquetes vacacionales (vuelo + hotel)
🚗CarsEnlace de afiliación para alquiler de coche
🛡️InsuranceEnlace de afiliación para seguro de viaje
📱eSIMEnlace de afiliación para tarjetas SIM virtuales
🗺️ToursLink affiliato per tour, biglietti musei e attività
🚢CruisesEnlace de afiliación para cruceros
🧳Luggage StorageEnlace de afiliación para deposito de equipaje
🚂TrainsEnlace de afiliación para billetes de tren
🚌BusEnlace de afiliación para billetes de autobus
⛴️FerriesEnlace de afiliación para transbordadores y ferris
🚕TaxiEnlace de afiliación para reserva de taxi
🛺Airport TransferEnlace de afiliación para transfer desde/hacia el aeropuerto
🔒VPNEnlace de afiliación para servicios VPN
🍽️RestaurantsEnlace de afiliación para reserva de restaurantes
⛷️Equipment RentalEnlace de afiliación para alquiler de equipamiento deportivo
🛥️YachtsEnlace de afiliación para alquiler de yates y barcos
🚐CamperEnlace de afiliación para alquiler de autocaravana y RV
📋Book NowEnlace a la página de reserva generica
🛍️Buy NowEnlace a la página de compra
🚲BikeEnlace de afiliación para alquiler de bicicletas
🏍️MotorcycleEnlace de afiliación para alquiler de motos
🔑Rent NowEnlace de afiliación para alquiler genérico
💬WhatsAppEscribe whatsapp: abre chat con el número configurado en Empresa
✉️EmailEscribe email: abre cliente de email con la dirección de la empresa
📞PhoneEscribe phone: abre marcador con el número de la empresa
💬
URL especiales: Para WhatsApp, Email y Teléfono usa respectivamente whatsapp, email, phone come URL: l'app aprirà automáticamente l'applicazione corretta. Le informazioni di contatto di questi campi vengono impostate nella sezione "business".

Plataformas Sociales (visibles en el menú lateral de la app)

IconoPlataformaQué introducir en el campo URL
▶️YouTubeURL del canal de YouTube, ej. https://youtube.com/@tucanal
🎵TikTokURL del perfil de TikTok, ej. https://tiktok.com/@tuperfil
📸InstagramURL del perfil de Instagram, ej. https://instagram.com/tuperfil
👍FacebookURL de la página de Facebook, ej. https://facebook.com/tupagina
🐦X (Twitter)URL del perfil de X, ej. https://x.com/tuperfil
💼LinkedInURL de la página o perfil de LinkedIn, ej. https://linkedin.com/company/tu-empresa
📌PinterestURL del perfil o tablero de Pinterest, ej. https://pinterest.com/tuperfil
🎧SpotifyURL del perfil o playlist de Spotify, ej. https://open.spotify.com/user/tuperfil
🎶Apple MusicURL del perfil de Apple Music, ej. https://music.apple.com/tuperfil
☁️SoundCloudURL del perfil de SoundCloud, ej. https://soundcloud.com/tuperfil
📦AmazonURL de la tienda o storefront de Amazon, ej. https://amazon.com/shop/tuperfil
🎬VimeoURL del perfil de Vimeo, ej. https://vimeo.com/tuperfil

ai

Configura el comportamiento de tu asistente AI integrado. El modelo utilizado es LFM de Liquid AI, ejecutado íntegramente en el dispositivo: ningún dato se envía a servidores externos.

CampoPredeterminadoQué hace
aiModelTemperature0.0-1.00.5Cuán creativa es la AI. 0 = precisa y repetitiva, 1 = creativa y variable. Recomendado: 0.3-0.7.
aiModelTopKNúmero38Variedad de las respuestas en cada paso. Valores bajos = más enfocado, valores altos = más variado.
aiSystemPromptTexto-Las instrucciones que definen el comportamiento de tu AI. Puedes estructurar el prompt con etiquetas XML y usar estos placeholders especiales:
<identity> = identidad y rol del asistente
<rules> = reglas y restricciones del comportamiento
<context> = contexto dinámico (viajes y enlaces)
<user_trips> = lista de viajes del usuario
<app_links> = enlaces de los servicios activos

ui · webview

Controla el aspecto visual de la interfaz: barra de navegación, iconos, sombras y más.

CampoPredeterminadoQué hace
useIslandBottomBarSí/NofalseEstilo de barra de navegación: activo = barra flotante "isla" con bordes redondeados, desactivado = barra clásica pegada al borde.
showBottomBarLabelsSí/NotrueMuestra el texto bajo los iconos en la barra. Desactivado = solo iconos.
showAISí/NotrueMuestra el botón del asistente AI en la barra.
showMyTripsSí/NotrueMuestra la pestaña "Mis Viajes" en la barra.
loadingIndicatorShapeTextoCircleLa forma de la animación de carga. Ver todos los estilos disponibles ↓
Mostrar ajustes gráficos avanzados
CampoPredeterminadoQué hace
useIconBackgroundHighlightSí/NofalseAñade un fondo de color detrás del icono activo en la barra.
showPoweredBySí/NotrueMuestra el texto "powered by" al final de la página info.
showBusinessInfoCardSí/NotrueMuestra la tarjeta con información de la empresa en la página info.
useOutlinedIconsSí/NotrueEstilo de iconos: activo = solo contorno, desactivado = rellenos.
showInputFieldBordersSí/NofalseMuestra el borde en los campos de input. Activo = campos con borde visible, desactivado = campos sin borde.
showPromoPopupSí/NotrueHabilita el popup promocional después de X segundos.
promoPopupDelaySecondsNúmero15Segundos de espera antes de mostrar el popup.
buttonRadiusPixel30.0Bordes redondeados de los botones. 0 = cuadrados, 30+ = muy redondeados.
cardRadiusPixel30.0Bordes redondeados de las tarjetas. Mismo principio que buttonRadius.
elevation0.0+5.0Intensidad de la sombra en tarjetas y elementos flotantes. 0 = sin sombra.

redirect

La animación de transición cuando la app abre un enlace externo.

CampoPredeterminadoQué hace
redirectOverlayEnabledSí/NotrueMuestra un overlay oscuro de transición antes de abrir enlaces externos.
redirectOverlayDurationMsms800Duración del overlay en milisegundos. Valores típicos: 500-1500.

business

La información de la empresa mostrada en la página info de tu app.

CampoTipoQué hace
whatsappPhoneNumberTextoNúmero de WhatsAppNúmero para contacto rápido. Formato internacional: +39123456789
emailEmailEmail de contactoEl email donde los clientes pueden contactarte.
phoneNumberTextoTeléfonoNúmero de teléfono. Formato internacional: +39123456789
aboutDescriptionTextoTexto libreLa descripción "Quiénes Somos" de tu negocio.
businessAddressTextoDirecciónLa dirección legal de tu empresa.
businessVatTextoP. IVANúmero de IVA / VAT number.
businessOpeningHoursTextoHorariosLos horarios de apertura de tu negocio.

network

Cómo tu app se presenta al resto de la web.

CampoPredeterminadoQué hace
userAgentTexto-El "nombre" con el que tu app se presenta a los sitios web. Formato recomendado: NomeApp/1.0 (email@esempio.com)
defaultCurrencyTextoEURMoneda predeterminada para los viajes. Codigo ISO: EUR, USD, GBP, JPY, etc.
map (avanzadas)

La mayoría de los usuarios no necesita cambiar estos ajustes. El mapa usa OpenStreetMap.

CampoPredeterminadoQué hace
defaultMapLatitudeNúmero41.9028Latitud del centro del mapa al abrir (predeterminado: Roma).
defaultMapLongitudeNúmero12.4964Longitud del centro del mapa al abrir (predeterminado: Roma).
mapInitialZoomNúmero3.0Zoom inicial. Valores bajos = vista de continente, altos = vista de calle.
mapSelectedLocationZoomNúmero5.0Zoom al seleccionar una ubicación de la lista.
mapMarkerSizePixel40.0Tamaño de los marcadores en el mapa.
mapPolylineWidthPixel3.0Grosor de la línea que conecta los puntos del recorrido.
mapZoomForSelectionNúmero15.0Zoom para la selección precisa de una dirección.
mapMinZoomNúmero2.0Zoom mínimo permitido.
mapMaxZoomNúmero18.0Zoom máximo permitido.
💡
Recuerda: siempre tienes el botón Reset para volver a los valores predeterminados. No puedes "romper" nada: todo vuelve como antes con un clic.

Guia de Fuentes

Las fuentes de tu app se cargan desde Google Fonts. Usa el nombre exacto como aparece en Google Fonts: basta una letra diferente para que la fuente no se cargue.

⚠️
Atención: El nombre debe corresponder exactamente al de Google Fonts, incluyendo espacios y mayúsculas. Si la fuente no existe, se usará la fuente del sistema.

Los dos campos de fuente

CampoQué controla
bodyFontLa fuente para todo el texto de la app: párrafos, descripciones, listas, botones. Normalmente una fuente simple y legible.
titleFontLa fuente para los títulos: AppBar, títulos de sección, logo. Normalmente una fuente más decorativa o en negrita.

Fuentes populares: haz clic para ver en Google Fonts

🔍
No encuentras la fuente que buscas? Visita fonts.google.com: hay más de 1500 fuentes gratuitas. Recuerda copiar el nombre exacto!

Indicadores de Carga

Elige la animación de carga para tu app. Cada estilo tiene un nombre e insértalo en el campo loadingIndicatorShape de la sección ui · webview.

Circle
Predeterminado
FadingCircle
ThreeBounce
DoubleBounce
Wave
Pulse
RotatingCircle
FadingFour
DualRing
HourGlass
PouringHourGlass
PouringHourGlassRefined
Ripple
DancingSquare
CubeGrid
Ring
SpinningCircle
ChasingDots
ThreeInOut
FoldingCube
PumpingHeart
WanderingCubes
FadingGrid
SpinningLines
SquareCircle
PianoWave
RotatingPlain
FadingCube
WaveSpinner
PulsingGrid
📝
Cómo usarlo: Elige la animación que prefieras e introduce el nombre exacto (como se muestra arriba) en el campo loadingIndicatorShape en la sección ui · webview.

📱 Cómo instalar la App

Tu app es una PWA (Progressive Web App): no se descarga de la App Store o de Google Play Store, sino que se instala directamente desde el navegador. Es rápida, ligera y funciona como una app nativa. Sigue el procedimiento para tu dispositivo.

🤖 Android (Chrome)

Para instalar la app en un dispositivo Android, usa el navegador Google Chrome.

1
Abre Chrome en tu teléfono Android.
2
Abre tu app en el navegador — ve a la dirección de tu app.
3
Toca el menú pulsando el icono (tres puntos verticales) en la parte superior derecha de la pantalla.
4
Selecciona "Añadir a la pantalla de inicio" o "Instalar app" del menú desplegable.
5
Confirma pulsando "Añadir" o "Instalar" en la ventana de confirmación.
6
¡Hecho! El icono de la app aparecerá en tu pantalla de inicio. Ahora puedes abrirla como cualquier otra app.
💡
Sugerencia: En algunos dispositivos Android puedes ver un banner automatico en la parte inferior que te invita a instalar la app. En ese caso, basta con tocar "Installa" directamente desde el banner.

🍎 iPhone y iPad (Safari)

Para instalar la app en iPhone o iPad, usa el navegador Safari (no Chrome u otros navegadores).

1
Abre Safari en tu iPhone o iPad.
2
Abre tu app en el navegador — ve a la dirección de tu app.
3
Toca el icono Compartir pulsando ⬆️ (el cuadrado con la flecha que apunta hacia arriba) en la barra inferior.
4
Desliza el menú hacia abajo y selecciona "Añadir a inicio" (o "Añadir a pantalla de inicio").
5
Personaliza el nombre de la app si lo deseas, luego toca "Añadir" en la parte superior derecha.
6
¡Hecho! El icono de la app aparecerá en tu pantalla de inicio. Ahora puedes abrirla como cualquier otra app.
⚠️
Importante: En iOS la instalación de la PWA funciona solo desde Safari. Si estás usando Chrome, Firefox u otro navegador en iPhone, la opción "Añadir a inicio" no estará disponible. Abre el enlace en Safari.

🖥️ Desktop (Chrome, Edge, Brave)

Puedes instalar la app también en tu ordenador, con Google Chrome, Microsoft Edge o Brave.

1
Abre el navegador (Chrome, Edge o Brave) en tu ordenador.
2
Abre tu app en el navegador — ve a la dirección de tu app.
3
Busca el icono de instalación en la barra de direcciones: un icono (símbolo de instalación) o el menú ⋮ (tres puntos) en la parte superior derecha.
4
Haz clic en "Instalar app" o "Instalar Travelinfluencer" del menú.
5
Confirma haciendo clic en "Instalar" en la ventana de diálogo.
6
¡Hecho! La app se abrirá en una ventana dedicada sin barra de direcciones, y encontrarás el icono en el escritorio o en el menú de aplicaciones.
💡
Sugerencia: En Chrome y Edge puedes ver directamente un icono en la barra de direcciones cuando se detecta la PWA. Haz clic en él para una instalación rápida con un solo clic.
¿Por qué instalar la app? Una vez instalada, la app se abrirá a pantalla completa sin la barra del navegador, como una app nativa. Tendrás un acceso más rápido, una experiencia más fluida y el icono siempre a mano en tu pantalla de inicio.

Problemas Comunes

¿Tienes un problema? Probablemente la solución está aquí abajo. Los cambios pueden tardar algunos minutos en verse en la app. Y recuerda: siempre tienes el botón Reset para volver a los valores originales.

He modificado un campo pero no veo el cambio

Si un campo se deja vacío o se elimina, el sistema carga automáticamente el valor predeterminado. Esto significa que tu cambio podría no haberse guardado correctamente.

Qué hacer: Asegúrate de que el campo esté rellenado con un valor válido. Si el campo está vacío, el sistema usará el valor predeterminado: ¡no es un error, es de diseño!
💡
Sugerencia: Después de rellenar el campo, recuerda guardar los cambios, luego recarga la página para verificar.

El color que introduje no funciona

Los colores deben estar en el formato HEX de 6 cifras, con el símbolo # al principio.

FormatoEjemploFunciona?
HEX 6 cifras#00519C✅ Sí
Sin #00519C❌ No
Nombre de colorred❌ No
RGBrgb(0,81,156)❌ No
🎨
¿Necesitas inspiración? Usa un color picker online como ColorHunt para encontrar paletas armoniosas, luego copia el código HEX.

La fuente no cambia

El nombre de la fuente debe corresponder exactamente al de Google Fonts, incluyendo mayúsculas, minúsculas y espacios. Si el nombre no es correcto, se usará la fuente del sistema.

Nombre introducidoCorrecto?
Poppins✅ Sí
poppins❌ Falta la mayuscula
Playfair Display✅ Sí (con espacio)
Playfairdisplay❌ Falta el espacio
🔗
Fuentes disponibles: Puedes usar cualquier fuente en Google Fonts (más de 1500 gratuitas). Copia el nombre exacto de la página de la fuente.

La URL de un servicio no se abre

Las URLs de los servicios deben ser completas y seguras. Aquí están las reglas:

URL correcta: Debe empezar con https://, ejemplo: https://flights.travelinfluencer.co
URL no segura: Las URLs que empiezan con http:// (sin la "s") no se cargan por motivos de seguridad.
💬
URLs especiales: Para WhatsApp, Email y Teléfono usa simplemente whatsapp, email o phone: nada de https, se gestionan automáticamente!

He activado un servicio pero no lo veo en la barra

La barra de navegación muestra como máximo 5 servicios activos. Si has activado más, solo los primeros 5 aparecerán en la barra.

📌
Límite: 5 servicios. Si tienes 6 o más servicios con el toggle activo, el sexto y siguientes no serán visibles. Desactiva los servicios menos importantes para dejar espacio a los que quieres mostrar.
🔢
Orden de prioridad: Los servicios se muestran en el orden en que aparecen en la lista. Los primeros 5 activos ganan. Los demás siguen disponibles pero ocultos de la barra.

He subido una imagen en el perfil pero no la veo en la app

Cuando subes una imagen desde tu perfil (logo o imagen de portada), el sistema genera un enlace URL para esa imagen. Debes copiar esa URL y pegarla en el campo correcto de la configuración.

📋
Cómo hacerlo: En tu perfil, después de subir la imagen, usa el botón correspondiente para copiar la URL de la imagen. Luego ve a la configuración y pégala en el campo logoUrl (para el logo) o infoHeaderImageUrl (para la imagen de portada).
⚠️
Importante: La imagen no se vincula automáticamente: debes copiar la URL manualmente. Sin la URL en el campo, la app seguirá mostrando la imagen predeterminada.

Quiero volver al subdominio después de usar un dominio personalizado

El paso de dominio personalizado a subdominio estándar es posible, pero conlleva la pérdida completa de los datos asociados a tu app.

🔴
¿Por qué? El dominio personalizado está integrado en la configuración interna (sesiones, certificados SSL). El downgrade requiere una reestructuración del entorno que hace que los datos existentes sean incompatibles.
⚠️
Antes de proceder: Guarda todos los ajustes y contenidos que necesites. Después del downgrade, la configuración de la app, los ajustes personalizados y los contenidos asociados al dominio se perderán definitivamente. La operación es irreversible.

El sitio o la app no son accesibles

Si no puedes acceder al sitio, a la app o a Horizon Studio, podría estar en curso una intervención de mantenimiento programado o extraordinario.

🔧
Mantenimiento programado: Los mantenimientos programados se comunican con antelación por email o mediante aviso en la plataforma. Si has recibido una notificación, espera el tiempo indicado e inténtalo de nuevo.
Mantenimiento extraordinario: En caso de emergencias técnicas o problemas de seguridad, el servicio puede ser temporalmente suspendido sin previo aviso. El equipo trabaja para restaurarlo lo antes posible.
Qué hacer: Comprueba tu conexión a internet. Si la conexión funciona, espera algunos minutos y recarga la página. Si el problema persiste durante más de 30 minutos, contacta con el soporte.

La app no funciona correctamente en modo incógnito/privado

Si estás usando el navegador en modo incógnito, InPrivate o navegación privada, muchas funciones de la app podrían no funcionar correctamente. Esto se debe a las restricciones que los navegadores aplican en este modo.

⚠️
Funciones limitadas: En navegación privada el navegador bloquea muchas APIs de almacenamiento. Esto significa que la descarga del modelo AI (HorizonAI) podría no funcionar, los datos de "Mis Viajes" (documentos e itinerarios) no se guardarán de forma permanente, y las preferencias y la configuración no se mantendrán.
💡
Por qué sucede: Los navegadores en modo privado limitan el acceso a algunas funciones de almacenamiento para proteger la privacidad. La app necesita estas tecnologías para funcionar correctamente.
Solución: Abre una ventana de navegación normal (no privada) en tu navegador y accede a la app desde ahí. Todas las funciones estarán disponibles y tus datos se guardarán correctamente.

Mi sitio no tiene navegación ni animaciones en la app

Si tu sitio se ve en la app pero la navegación parece limitada o las animaciones no funcionan, podría faltar el script de integración en la sección <head> de tu sitio.

📋
Qué hacer: Añade este script antes del cierre de la etiqueta </head> en tu sitio:
html
<script src="https://scripts.travelinfluencer.co/horizon-webview-helper.js" data-horizon-webview async></script>
Detalles: Este script habilita la navegación optimizada, las animaciones fluidas y otras funciones avanzadas cuando tu sitio se abre dentro de la app. Es ligero, asíncrono y no afecta al rendimiento del sitio. Consulta la sección Integración Sitio → Fase 3 para más detalles.

La app se cierra después de descargar la AI

Si la app se cierra de repente o se bloquea después de la descarga del modelo AI (HorizonAI), el problema se debe a recursos insuficientes en tu dispositivo.

⚠️
Por qué sucede: HorizonAI ejecuta el modelo AI localmente en el dispositivo. Esto requiere una cantidad significativa de RAM y potencia de cálculo. Si tu teléfono tiene poca memoria disponible o un procesador anticuado, el sistema no consigue gestionar el modelo y la app se cierra.
💡
Qué hacer: Prueba a cerrar todas las demás apps en segundo plano para liberar memoria, luego vuelve a abrir la app. Si el problema persiste, tu dispositivo podría no tener los recursos hardware mínimos necesarios para ejecutar la AI. En este caso, puedes desactivar la AI desde la configuración (establece showAI su false): todas las demás funciones de la app seguirán funcionando con normalidad.
🛡️
¡No puedes romper nada! Siempre tienes el botón Reset para volver a los valores predeterminados con un clic. Si algo no funciona como debería, usa Reset y empieza de nuevo: ¡está hecho para eso! Si el problema persiste también después del reset, contacta con el soporte.

Cancelación de Cuenta

Si deseas cerrar tu cuenta y eliminar todos tus datos, sigue atentamente este procedimiento. La operación es irreversible: lee bien cada paso antes de proceder.

Paso 1. Cancela tu suscripcion

Antes de poder cerrar la cuenta, debes cancelar tu suscripción activa. No es posible eliminar la cuenta si tienes un plan en vigor.

⚠️
Atención: La cancelación de la suscripción no elimina inmediatamente tu cuenta. Tu suscripción permanecerá activa hasta la fecha de vencimiento natural del período ya pagado.
💳
Suspensión o pago no válido: Si tu suscripción es suspendida por impago, tarjeta caducada o método de pago no válido, se aplica el mismo procedimiento: tras el vencimiento de la suscripción, tu cuenta entra automáticamente en el período de gracia de 30 días y posteriormente se cancela definitivamente. Recibirás emails de notificación antes de que ello ocurra.

Paso 2. Período de gracia (30 días)

Una vez vencida la suscripción, tu cuenta entra en un período de gracia de 30 días. Durante este período:

💡
Aún puedes reactivar: Si cambias de opinión, puedes reactivar tu suscripción en cualquier momento durante los 30 días y encontrar todo exactamente como lo habías dejado: configuración, datos y ajustes estarán intactos.
🔒
Tus datos están seguros: Durante el período de gracia, todos tus datos se conservan y protegen. Ninguna información se elimina en esta fase.

💡 Alternativa: Pasa al Plan Gratuito

Si no quieres perder tu cuenta pero ya no deseas una suscripción de pago, puedes hacer el downgrade al plan gratuito. Esto te permite:

  • ✅ Preservar tu cuenta y los datos del perfil
  • ✅ Mantener el acceso a la plataforma
  • ✅ Evitar la cancelación automática por inactividad o falta de suscripción
⚠️
Atención — Configuración de app perdida: El downgrade al plan gratuito conlleva la eliminación y recreación de la carpeta de configuración de la app. Todas las configuraciones personalizadas anteriores (layout, contenidos, ajustes, integraciones) se perderán definitivamente. Te recomendamos guardar tus configuraciones antes de hacer el downgrade.

Paso 3. Cancelación definitiva

Al finalizar los 30 días de gracia, todos tus datos se eliminarán automática y permanentemente. Esto incluye:

  • Configuración de la app y ajustes personalizados
  • Datos del perfil e información empresarial
  • Imágenes subidas (logo, portada)
  • Historial y estadísticas de uso
  • Cualquier otro dato asociado a tu cuenta
🔴
Irreversible: Esta operación es permanente y no reversible. Se aplica en todos los casos: cancelación voluntaria de la suscripción, suspensión por impago, tarjeta caducada o método de pago no válido. Una vez eliminados, los datos no podrán ser recuperados de ninguna manera. Si crees que podrías volver en el futuro, te recomendamos hacer el downgrade al plan gratuito para preservar tu cuenta (ten en cuenta que la configuración de la app se perderá).
💬
¿Tienes dudas? Si tienes preguntas sobre la cancelación o quieres asistencia, contacta con el soporte. Estamos aquí para ayudarte.