Documentación

Documentación de Linsei

Todo lo que puedes hacer con tu acortador, paso a paso: desde la instalación hasta la API, los complementos y la analítica.

1. Qué es Linsei

Linsei es un acortador de URLs autoalojado: lo instalas en tu propio servidor y desde un panel creas enlaces cortos, los personalizas y mides cada clic. No depende de ningún servicio externo y tus datos nunca salen de tu hosting.

Está pensado para ser ligero y fácil de instalar (PHP + MySQL o SQLite), y para crecer contigo: admite varios usuarios, idiomas, una API y complementos.

2. Requisitos

  • PHP 7.4 o superior con la extensión PDO.
  • MySQL/MariaDB (recomendado) o SQLite (sin configuración, ideal para empezar).
  • Un hosting con Apache (con mod_rewrite) o Nginx.
  • Acceso por FTP o gestor de archivos para subir los ficheros.
Si tu hosting no tiene base de datos MySQL, elige SQLite en el instalador: funciona sin configurar nada.

3. Instalación

La instalación es del estilo «sube y abre la web», sin consola ni comandos:

  1. Descarga linsei-1.0.0.zip y descomprímelo.
  2. Sube todos los archivos a tu servidor (por FTP), a la carpeta pública (por ejemplo public_html).
  3. Abre la dirección de tu web en el navegador. Aparecerá el instalador.
  4. Sigue los 3 pasos: comprobación de requisitos → datos de la base de datos → usuario administrador.
  5. Listo. El instalador crea el archivo config.php y las tablas automáticamente.
Por seguridad, asegúrate de que config.php queda con permisos de solo lectura una vez instalado.

4. Primer acceso

Entra en https://tudominio.com/admin con el usuario y contraseña que creaste. Verás el panel con un resumen de actividad: total de enlaces, clics, clics de hoy y enlaces activos, además de un gráfico de los últimos días.

Desde el botón «+ Nuevo enlace» creas tu primer enlace en segundos.

5. Crear enlaces

Al crear un enlace indicas la URL de destino (la larga) y, opcionalmente, cómo quieres que sea el enlace corto:

  • Código automático: si no escribes nada, Linsei genera un código corto aleatorio.
  • Slug personalizado: escribe el final que quieras, p. ej. tudominio.com/promo.
  • Prefijos: organiza por campañas usando prefijos, p. ej. tudominio.com/blog-mi-enlace o tudominio.com/landing-promocion.
  • Actualizar si ya existe: si usas un slug que ya tenías, puedes actualizar el destino de ese enlace en lugar de crear uno nuevo (no se duplica).
  • Prefijo de título: añade automáticamente un prefijo al título de la página de destino para organizar y analizar mejor.

6. Expiración y límites

Cada enlace puede tener reglas de caducidad:

  • Fecha de expiración: a partir de esa fecha el enlace deja de redirigir (responde 410).
  • Máximo de clics: el enlace se desactiva automáticamente tras alcanzar el número de visitas que fijes.

Ideal para promociones temporales o enlaces de un solo uso.

7. Estadísticas

Linsei registra cada clic y lo presenta de forma visual:

  • Clics totales y por período (día, semana, mes, año).
  • Datos del visitante: país, dispositivo y navegador.
  • Gráficos de evolución del tráfico.
  • Comparación de enlaces para ver cuáles rinden mejor.
  • Por gestor: número de enlaces creados, clics totales y ranking de los más visitados.

8. Usuarios y roles

Linsei es multiusuario. Hay dos roles de base:

RolPuede hacer
AdministradorControl total: ve todos los enlaces y estadísticas, gestiona usuarios y la configuración.
Gestor de URLsCrea y administra solo sus propios enlaces y ve las estadísticas de estos.

Cada gestor trabaja de forma aislada, lo que permite que varias personas o equipos compartan la misma instalación sin pisarse.

9. Exportar datos

Puedes exportar tus enlaces y estadísticas a CSV (compatible con Excel y Google Sheets) para informes o copias de seguridad, con filtros por fechas y por gestor.

10. Idiomas

El panel está disponible en español, inglés, francés y portugués. Cada usuario puede cambiar de idioma desde el selector; la preferencia se recuerda. Añadir un idioma nuevo es tan simple como copiar un archivo de app/lang/ y traducir sus textos.

11. API REST

Crea enlaces desde otros programas con la API. Cada usuario tiene su propio token (lo encuentras en tu perfil). Ejemplo para crear un enlace:

curl -X POST https://tudominio.com/api/links \ -H "Authorization: Bearer TU_TOKEN" \ -H "Content-Type: application/json" \ -d '{"url":"https://ejemplo.com/pagina-larga","slug":"promo"}'

La respuesta incluye el enlace corto resultante. Es lo que usa, por ejemplo, la extensión de Chrome.

12. Extensión de Chrome

Incluye una extensión (carpeta chrome-extension/) para acortar la página que estás viendo con un clic:

  1. Abre chrome://extensions y activa el «Modo desarrollador».
  2. Pulsa «Cargar descomprimida» y selecciona la carpeta chrome-extension.
  3. En las opciones de la extensión, pon la URL de tu Linsei y tu token de la API.
  4. Navega a cualquier página y pulsa el icono para obtener su enlace corto al instante.

13. Complementos

Linsei se amplía con complementos sin tocar el núcleo, mediante un sistema de hooks (acciones y filtros). Coloca tu plugin en la carpeta plugins/ y se cargará solo.

Ejemplo: reaccionar cada vez que se crea un enlace.

<?php if(!defined("PL_APP")){http_response_code(403);exit;} pl_add_action('link_created', function ($slug, $url) { // tu código: notificar a Slack, registrar, integrar... }); pl_add_action('dashboard_after', function () { echo '<div class="card">Hola desde mi plugin 👋</div>'; });

Hooks disponibles:

HookCuándo se disparaArgumentos
initEn cada petición, tras cargar los plugins
admin_menuAl pintar el menú lateral$user
dashboard_afterAl final del panel$isAdmin
help_afterAl final de la página de Ayuda
link_createdAl crear un enlace (panel o API)$slug, $url
link_clickedEn cada clic/redirección$link

Tienes un ejemplo completo en plugins/welcome-note/ y más ideas en la página de complementos.

14. Google Analytics y reCAPTCHA

Esta web de presentación está preparada para que añadas Google Analytics 4 y reCAPTCHA v3 sin tocar el código: solo edita el archivo assets/config.js.

window.LINSEI_CONFIG = { GA_ID: "G-XXXXXXXXXX", // tu ID de Google Analytics 4 RECAPTCHA_SITE_KEY: "6Lxxxxxxx", // clave de sitio de reCAPTCHA v3 FORM_ENDPOINT: "" // (opcional) URL que recibe el formulario };

Google Analytics

Pon tu ID de medición (G-XXXXXXXXXX) en GA_ID. Por respeto al usuario, Analytics solo se carga después de que el visitante acepte el aviso de cookies. Si dejas GA_ID vacío, no se carga nada.

reCAPTCHA v3 en el formulario

Pon tu clave de sitio en RECAPTCHA_SITE_KEY. reCAPTCHA v3 valida en segundo plano (sin molestar al usuario), pero necesita un servidor que verifique el token con Google. Por eso, para que se active, indica también un FORM_ENDPOINT: la URL de un pequeño script (por ejemplo contacto.php) que reciba el formulario, compruebe el token y te envíe el correo.

  • Si defines FORM_ENDPOINT y RECAPTCHA_SITE_KEY: el formulario se envía por POST con el token de reCAPTCHA para que tu servidor lo verifique.
  • Si dejas FORM_ENDPOINT vacío: el formulario funciona abriendo el correo del visitante (modo simple, sin servidor).

Incluimos un contacto.php de ejemplo (en la carpeta de la web) que verifica el token de reCAPTCHA y envía el correo. Permite dos formas de envío: la función mail() de PHP (sin configurar nada) o SMTP (recomendado, para que los correos no caigan en spam). Las credenciales SMTP y la clave secreta de reCAPTCHA van dentro de contacto.php, nunca en config.js (que es público).

Recuerda reflejar el uso de Analytics o reCAPTCHA en tu política de cookies si los activas.

15. Seguridad

  • Contraseñas cifradas con bcrypt y sesiones nativas de PHP.
  • Protección CSRF en todos los formularios.
  • Registro de actividad por usuario (logs de acceso).
  • Cada archivo del núcleo está protegido contra accesos directos.

16. Actualizar

Para actualizar a una nueva versión, sobrescribe los archivos con los nuevos (sin borrar config.php ni la carpeta data/). No hace falta reinstalar: Linsei aplica por sí mismo los pequeños cambios de base de datos que necesite. Tus enlaces y estadísticas se conservan.

17. Soporte

¿Te falta una función o has encontrado un fallo? Escríbenos desde la página de contacto. Tus sugerencias guían lo que construimos a continuación.