Trackly
Acortador de URLs con métricas de clics, IPs hasheadas por privacidad y UI en HTMX.
Stack
Qué hace
Trackly es un acortador de URLs ligero y enfocado en la privacidad. Pegas un enlace largo, obtienes un slug corto y cada vez que alguien lo visita el servicio registra métricas básicas: un hash de la IP, el navegador y el dominio de origen. Todo pensado para ser simple: sin cuenta, sin dashboard complejo, una sola página para acortar y una API REST clara para consultar el resto.
El backend es una API REST con NestJS y TypeORM sobre PostgreSQL. Al crear un link se valida que sea HTTPS y se bloquean hostnames locales y IPs privadas para evitar SSRF, y el slug se genera con nanoid con reintentos ante colisiones. Las métricas se guardan en una tabla separada relacionada al link, con la IP ofuscada mediante SHA-256 con salt y limpieza automática de registros mayores a 30 días (cron de GDPR) para cumplir con privacidad.
La UI está construida con HTMX y Tailwind, servida estáticamente por el propio servidor, y en la misma página incluye una referencia de la API interactiva para probar cada endpoint. Un rate limiter global (throttling) protege la creación de links y las consultas de estadísticas.
Funcionalidades
- Acortamiento de URLs — slug único de 6 caracteres con nanoid y reintentos automáticos ante colisiones
- Validación de seguridad — solo URLs HTTPS, con bloqueo de localhost e IPs privadas (protección SSRF)
- Registro de clics — IP hasheada con SHA-256 + salt, navegador detectado y dominio de referer
- Estadísticas por link — total de clics, visitantes únicos, top 5 navegadores, top 5 referrers y actividad de los últimos 7 días
- Privacidad por diseño — IPs ofuscadas y limpieza automática de datos mayores a 30 días vía cron diario
- Listado paginado — paginación con
page/limity búsqueda por URL o slug (ILIKE) - Redirección 302 — al visitar
/slugse registra la visita y se redirige al destino - UI con HTMX + Tailwind — página única para acortar, con card de resultado, botón copiar y contador de clics en vivo
- API docs interactiva — referencia de endpoints ejecutable dentro de la propia página
- Rate limiting — throttler global para limitar abuso de la API