Skip to main content

Documentation Index

Fetch the complete documentation index at: https://wiki.vivla.com/llms.txt

Use this file to discover all available pages before exploring further.

Vision general

La app utiliza PostHog React Native SDK (v4.35.1) para product analytics, conectandose a la instancia EU (eu.i.posthog.com).
Session replay y autocapture estan deshabilitados. Todos los eventos se capturan de forma explicita mediante la API publica.

Arquitectura

Cliente singleton

Definido en src/core/analytics/client.posthog.ts. Inicializa y exporta la instancia unica de PostHog.

API publica

Expuesta desde src/core/analytics/index.ts. Todas las interacciones con analytics pasan por esta capa.

Eventos

Catalogo de eventos definido en src/core/analytics/events.ts.

Configuracion

Parametros de conexion en src/core/config/posthog.ts.

API publica

La API se exporta desde src/core/analytics/index.ts y expone los siguientes metodos:
MetodoDescripcion
capture(event, properties)Captura un evento con propiedades opcionales
screen(name, properties)Registra una vista de pantalla
identify(userId, properties)Identifica al usuario autenticado
reset()Resetea la sesion (al hacer logout)
set(properties)Establece propiedades del perfil del usuario
import { analytics, analyticsEvents } from '@core/analytics';

analytics.capture(analyticsEvents.booking.completed, {
  booking_type: 'exchange',
  booking_id: '123',
  property_id: 'abc',
});

Convencion de nombres

Todos los eventos de la app usan la convencion {category}_{action}:
{category}_{action}
Ejemplos:
  • app_opened — evento de ciclo de vida de la app
  • tab_viewed — navegacion entre tabs principales
  • booking_started — accion en el flujo de booking
  • home_nps_survey_opened — evento del NPS de home review
Las constantes se definen en src/core/analytics/events.ts y se referencian siempre via analyticsEvents.* — nunca se usan strings hardcodeados.

Eventos generales de la app

Estos eventos se disparan automaticamente a nivel global y no requieren integracion manual en cada pantalla.

Ciclo de vida

EventoTriggerPropiedades
app_openedApp se abre (cold start) o vuelve a primer planotrigger: 'cold_start' | 'foreground'
Implementacion: Hook useAppOpenedTracking en app/_layout.tsx. Usa AppState de React Native para detectar transiciones entre background/inactive y active.
EventoTriggerPropiedades
tab_viewedUsuario cambia de tab principaltab_name: 'Home' | 'Book' | 'Inbox' | 'Stays' | 'Profile'
Implementacion: screenListeners.focus en app/(tabs)/_layout.tsx.

Vistas de pantalla

EventoTriggerPropiedades
screen_viewedCada cambio de ruta en la appscreen_name: pathname
Implementacion: usePathname() de expo-router con useEffect en RootLayoutNav (app/_layout.tsx).

Cambio de propiedad

EventoTriggerPropiedades
property_switchedUsuario cambia la propiedad activa en el selector Homeproperty_id, property_type
Implementacion: En HomePropertySelector.tsx, se captura en ambos paths (iOS bottom sheet y Android modal).

Eventos de booking

Eventos relacionados con el flujo de reservas, intercambios y alquileres. Todos en la seccion analyticsEvents.booking.*.
EventoTriggerPropiedades
booking_tab_viewedCambio entre sub-tabs Book/Exchange/Rentsub_tab_name: 'Book' | 'Exchange' | 'Rent'

Seleccion de calendario

EventoTriggerPropiedades
calendar_date_selectedUsuario selecciona fecha en el calendariodate, selection_type: 'check_in' | 'check_out', property_id

Flujo de creacion de reserva

EventoTriggerPropiedades
booking_startedUsuario inicia creacion de reservabooking_type: 'book' | 'exchange' | 'rent', property_id, check_in, check_out
booking_completedReserva creada exitosamentebooking_type, booking_id, property_id, check_in, check_out

Filtros

EventoTriggerPropiedades
filter_appliedUsuario aplica filtros en Exchange/Rentfilter_type: 'city' | 'date', screen_type, values

Gestion de reservas

EventoTriggerPropiedades
booking_cancelledReserva cancelada exitosamentebooking_id
booking_type_changedTipo de reserva modificadobooking_id, new_type

Eventos del Home NPS

El flujo del Home Annual Review (NPS) tiene su propio conjunto de 7 eventos con el prefijo home_nps_*. Estos eventos trackean el funnel completo desde la exposicion (card) hasta la finalizacion del survey y la visualizacion de resultados. Entry points: home card y deep link.

Documentacion completa de eventos NPS

Ver la referencia detallada de los 7 eventos del Home NPS, propiedades, flujos y guia de dashboard en PostHog.

Eventos del Version Gate

Eventos relacionados con el flujo de version gate (actualizaciones de la app). Seccion analyticsEvents.versionGate.*.
EventoTriggerPropiedades
version_update_dismissedUsuario toca “Maybe later” en el banner de actualización recomendada
Implementacion: En el hook useVersionCheck (src/shared/services/versionGate/useVersionCheck.ts), la función dismiss() captura el evento antes de ocultar el banner.
El evento solo se dispara para actualizaciones recomendadas. Las actualizaciones obligatorias no tienen opción de dismiss y por tanto no generan este evento.

Eventos del Financial Report

EventoTriggerPropiedades
financial_report_2025_card_renderingCard del reporte financiero visiblemode
financial_report_2025_card_clickUsuario toca el card
financial_report_2025_link_renderingLink del reporte visible en PropertyActionsmode
financial_report_2025_link_clickUsuario toca el link

Identificacion de usuarios

Identify

Se llama a analytics.identify() en los siguientes momentos:
  • Durante la inicializacion de autenticacion
  • Tras login exitoso
  • Tras registro exitoso
  • En cada token refresh
Propiedades enviadas: email, name. Archivo: src/modules/auth/store/authStore.ts

Reset

Se llama a analytics.reset() al hacer logout o eliminar cuenta.

Sincronizacion de perfil

El hook useAnalyticsProfileSync sincroniza automaticamente home_types (array de tipos de propiedad del usuario) con el perfil de PostHog. Archivo: src/shared/hooks/useAnalyticsProfileSync.ts

Feature flags

PostHog gestiona los feature flags de la aplicacion. Se evaluan del lado del cliente y permiten activar o desactivar funcionalidades de forma remota.
import { useFeatureFlag } from 'posthog-react-native';

const isEnabled = useFeatureFlag('home-review');
Flags activos:
FlagDescripcion
home-reviewHome annual review card en home screen
home-review-resultsCard de resultados del review
financial-report-2025Reporte financiero 2025

Configuracion del SDK

ParametroValor
Instanciaeu.i.posthog.com (EU)
Session replayDeshabilitado
AutocaptureDeshabilitado
SDKposthog-react-native v4.42.x
No incluyas la API key de PostHog en el codigo fuente directamente. La configuracion se gestiona a traves del archivo de configuracion en src/core/config/posthog.ts.

Archivos clave

ArchivoResponsabilidad
src/core/analytics/client.posthog.tsCliente singleton de PostHog
src/core/analytics/index.tsAPI publica de analytics
src/core/analytics/events.tsDefinicion de eventos (con constantes)
src/core/config/posthog.tsConfiguracion de conexion
src/shared/hooks/useAppOpenedTracking.tsTracking de apertura de app
src/shared/hooks/useAnalyticsProfileSync.tsSincronizacion de perfil

Guia para agregar nuevos eventos

  1. Definir la constante en src/core/analytics/events.ts dentro del grupo correspondiente
  2. Usar siempre analyticsEvents.grupo.evento — nunca strings hardcodeados
  3. Seguir la convencion {category}_{action}
  4. Capturar en el lugar correcto: preferir callbacks de exito para acciones async, useEffect para exposiciones
  5. Propiedades relevantes: incluir IDs de entidades, tipos/categorias, y contexto necesario para segmentacion