← Toda la documentación

Instalación

Instala el tracker en cualquier plataforma, desde HTML plano hasta Next.js y SvelteKit.

Hay dos formas de instalar el tracker: una etiqueta de script o el paquete de npm. Ambas hacen exactamente lo mismo. Usa el script en sitios que editas como HTML, y npm en apps con bundler.

Etiqueta de script

<script src="https://collector.launchpulse.dev/lp.js"></script>
<script>LaunchPulse.init("lp_pub_yourkey");</script>

Esto define window.LaunchPulse y, después de init(), también define window.lp como atajo.

npm

npm i @basekick-labs/launchpulse
import { LaunchPulse } from "@basekick-labs/launchpulse";

if (typeof window !== "undefined") LaunchPulse.init("lp_pub_yourkey");

El paquete no tiene dependencias, pesa alrededor de 1,9 kB gzip y usa licencia MIT.

Seguro con SSR: en el servidor el export es undefined. Protege siempre con typeof window !== 'undefined', o llama a init() dentro de un hook que solo corra en el cliente. Todos los ejemplos de abajo lo hacen.

Sobre tu clave

Tu clave pública es lp_pub_ seguido de 22 caracteres base58. Está diseñada para viajar en el código del cliente: ponerla en tu HTML o en tu bundle es seguro y es lo esperado.

Existe además una clave secreta, lp_sec_ seguida de 43 caracteres, para ingesta desde el servidor. Se muestra una sola vez al crearla y nunca debe aparecer en código del navegador.

Dónde va el snippet

PlataformaDóndeInstalación
HTML plano<head>, o justo antes de </body>script
WordPressHeader del tema antes de </head>, o un plugin de scriptsscript
GhostConfiguración → Inyección de código → Site Headerscript
JoomlaMódulo HTML personalizado en una posición de cabecerascript
WebflowProject Settings → Custom Code → Head Codescript
Shopifytheme.liquid, antes de </head>script
Astro<head> del layout basescript
Next.jsComponente cliente en app/layout.tsxnpm
ReactComponente raíz, dentro de un useEffectnpm
Vuemain.ts después de createApp, o onMounted en App.vuenpm
SvelteKit+layout.svelte raíz, dentro de onMountnpm
Otra<head> del HTML, o npm en una app con bundlerscript

HTML plano

Pega la etiqueta en el <head> de cada página que quieras medir. Justo antes de </body> también funciona.

WordPress

Dos opciones:

  1. Header del tema — Apariencia → Editor de archivos de tema → header.php, pega antes de </head>. Ojo: una actualización del tema puede sobrescribirlo.
  2. Un plugin de scripts de header/footer — WPCode o similar. Sobrevive a las actualizaciones del tema, así que es la opción más segura.

Ghost

Panel de Ghost → Configuración → Inyección de códigoSite Header. Pega la etiqueta y guarda.

Joomla

Agrega un módulo HTML personalizado asignado a una posición de cabecera, con el editor en modo código. También puedes pegar la etiqueta dentro del <head> del index.php de tu plantilla.

Webflow

Project Settings → Custom CodeHead Code. Pega la etiqueta y vuelve a publicar el sitio: el código personalizado solo corre en el sitio publicado, no en el diseñador.

Shopify

Edita el theme.liquid de tu tema y pega la etiqueta justo antes de </head>. Con eso cubres todas las páginas de la tienda.

Astro

Agrégalo al <head> de tu layout base:

---
// src/layouts/Base.astro
---
<head>
  <script is:inline src="https://collector.launchpulse.dev/lp.js"></script>
  <script is:inline>LaunchPulse.init("lp_pub_yourkey");</script>
</head>

is:inline evita que Astro procese y empaquete las etiquetas.

Next.js (App Router)

Crea un componente cliente y móntalo en tu layout raíz.

// app/launchpulse.tsx
"use client";

import { useEffect } from "react";
import { LaunchPulse } from "@basekick-labs/launchpulse";

export function LaunchPulseTracker() {
  useEffect(() => {
    LaunchPulse.init("lp_pub_yourkey");
  }, []);

  return null;
}
// app/layout.tsx
import { LaunchPulseTracker } from "./launchpulse";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="es">
      <body>
        <LaunchPulseTracker />
        {children}
      </body>
    </html>
  );
}

En el Pages Router, monta el mismo componente en _app.tsx.

React

Llama a init() una sola vez en tu componente raíz:

// src/App.tsx
import { useEffect } from "react";
import { LaunchPulse } from "@basekick-labs/launchpulse";

export default function App() {
  useEffect(() => {
    LaunchPulse.init("lp_pub_yourkey");
  }, []);

  return <YourApp />;
}

El arreglo de dependencias vacío importa: init() debe correr una vez por carga de página.

Vue

En tu archivo de entrada, después de crear la app:

// src/main.ts
import { createApp } from "vue";
import { LaunchPulse } from "@basekick-labs/launchpulse";
import App from "./App.vue";

createApp(App).mount("#app");

if (typeof window !== "undefined") LaunchPulse.init("lp_pub_yourkey");

O dentro de App.vue:

<script setup lang="ts">
import { onMounted } from "vue";
import { LaunchPulse } from "@basekick-labs/launchpulse";

onMounted(() => {
  LaunchPulse.init("lp_pub_yourkey");
});
</script>

SvelteKit

Usa onMount en el layout raíz: solo corre en el navegador, así que el SSR queda a salvo.

<!-- src/routes/+layout.svelte -->
<script lang="ts">
  import { onMount } from "svelte";
  import { LaunchPulse } from "@basekick-labs/launchpulse";

  onMount(() => {
    LaunchPulse.init("lp_pub_yourkey");
  });
</script>

<slot />

Otras plataformas

Si tu plataforma te deja editar HTML, pon la etiqueta en el <head>. Si es una app JavaScript con bundler, usa el paquete de npm con la protección typeof window.

Collector self-hosted

El collector por defecto es https://collector.launchpulse.dev, por eso los snippets que genera la app omiten la opción collector. Solo necesitas definirla en un despliegue propio:

LaunchPulse.init("lp_pub_yourkey", { collector: "https://collector.example.com" });

Qué obtienes automáticamente

$pageview se dispara en init() y en la navegación de SPA. El tracker intercepta history.pushState e history.replaceState, más popstate, y deduplica por ruta y query string: así una SPA que llama a replaceState todo el tiempo no infla tu conteo de vistas.

$identify se emite cuando llamas a identify(). Llámalo antes de tu evento de primer valor para que el evento se pueda asociar a un usuario.

Verifica que funciona

Abre tu sitio y revisa la vista de depuración de tu proyecto: todos los eventos aparecen ahí en vivo. El recorrido completo está en Inicio rápido, paso 6.

Recuerda: mientras tu proyecto está en estado de configuración, no se guarda nada. Mira Salir en vivo.

SiguienteSalir en vivo

Hablemos

¿Dudas sobre LaunchPulse o quieres que te lo mostremos? Escríbenos y te responde una persona real.

O escríbenos a hello@launchpulse.dev