Una aplicación del ecosistema TrueSource™, de Manifesto Marketing Group

Smart URL Generator

Cómo está construido Smart URL Generator

Última actualización:

Este documento resume las decisiones de arquitectura, seguridad y manejo de datos de Smart URL Generator, dirigido al equipo de TI de una organización que evalúa su uso. Incluye lo que la herramienta todavía no hace. No sustituye una auditoría de seguridad formal — para eso, contáctanos directamente.

Arquitectura y stack tecnológico

1. Vista general

Smart URL Generator son dos piezas que comparten base de datos:

  • Un panel (Next.js con App Router, TypeScript, Tailwind CSS) donde se crean los links, se descargan los códigos QR y se consulta la analítica. Es una sola aplicación responsiva: no hay app nativa aparte.
  • Un motor de redirección que atiende el dominio corto, resuelve el slug, registra la visita y manda a la persona a su destino.

Las dos viven en el mismo despliegue y se separan por el encabezado Host de la petición: si llega al dominio corto, entra al motor de redirección; si no, al panel.

2. Hosting y despliegue

La aplicación se aloja en Vercel, sobre funciones serverless con escalamiento automático — no hay un servidor fijo que administrar ni parchear manualmente. Todo el tráfico se sirve por HTTPS; Vercel fuerza TLS en todas las rutas.

Los despliegues salen de un repositorio Git privado, con publicación automática al integrar cambios.

Lo que hoy no hay: no existe una batería de pruebas automatizadas ni una etapa de verificación que bloquee un despliegue defectuoso. La revisión es humana. Es una diferencia real contra otras aplicaciones del ecosistema y se documenta a propósito.

3. Base de datos

Supabase (Postgres administrado) es la única base de datos operativa. Es un proveedor especializado en Postgres, no una base casera: hereda sus prácticas de disponibilidad, respaldo y cifrado en reposo.

El esquema son seis tablas: organizaciones, usuarios, membresías, links, eventos de clic y parámetros sugeridos.

Lo que hoy no hay: los cambios de esquema se aplican sobre el proyecto de Supabase, no como migraciones versionadas dentro del repositorio. El estado de la base no es reproducible desde el código.

4. Dominios

Los links cortos viven bajo trusrc.com, un dominio propiedad de Manifesto, no bajo un acortador público compartido. El panel vive en un subdominio de Vercel.

Esto tiene una consecuencia que conviene tener clara antes de mandar algo a imprenta: el dominio es de Manifesto, no de tu organización. Los links publicados dependen de que ese dominio siga apuntando a esta aplicación.

Seguridad y control de acceso

1. Aislamiento entre organizaciones, a nivel de base de datos

Cada cliente es una organización con sus links y sus eventos aislados del resto. El aislamiento se refuerza con Row Level Security (RLS) de Postgres, activo en las seis tablas — no solo con filtros en el código de la aplicación.

La diferencia importa: aunque una consulta del panel omitiera un filtro, la base de datos no devolvería filas de otra organización. La regla vive un nivel más abajo que el código que la consume.

Las funciones auxiliares que resuelven quién es el usuario y qué organización tiene activa viven en un esquema privado que no está expuesto por la API.

2. Autenticación y altas

La autenticación es de Supabase Auth, con correo y contraseña. Las contraseñas nunca las guarda ni las ve la aplicación: las administra el proveedor de autenticación con su propio hash.

No hay registro público. Las cuentas se crean por invitación desde el panel de administración: se manda un correo a la persona y ella define su propia contraseña. No existe una pantalla de alta abierta a internet, y esto no es una configuración que se pueda cambiar por accidente — no hay código que la implemente.

3. Roles

Hay exactamente dos niveles, a propósito:

  • Usuario normal: ve y administra los links de la organización que tiene activa.
  • Superusuario: acceso a todas las organizaciones. Está reservado a la dirección de Manifesto.

No hay permisos intermedios. Si tu organización necesita distinguir entre quien crea links y quien solo consulta números, hoy la herramienta no lo hace.

4. Pertenencia a varias organizaciones

Una persona puede pertenecer a más de una organización — el caso del equipo de Manifesto que lleva varias cuentas. Cambia entre ellas desde su menú de perfil, sin cerrar sesión, y las políticas de seguridad se aplican siempre contra la organización que tiene activa en ese momento.

5. Espacio de nombres compartido de slugs

Los slugs son únicos entre todas las organizaciones, porque todos viven bajo el mismo dominio: trusrc.com/verano26 solo puede apuntar a un lugar.

La consecuencia práctica es que un slug ocupado por otra cuenta no está disponible para la tuya. La herramienta lo valida al crear el link y avisa en el momento. Lo que no ocurre es que alguien vea el contenido del link ajeno: solo se entera de que ese nombre ya está tomado.

6. El motor de redirección corre con privilegios elevados

Registrar un clic implica escribir en la base de datos como alguien que no ha iniciado sesión. Ese escritor usa una credencial de servicio que omite las políticas de seguridad, porque de otro modo no podría insertar nada.

Está acotado a propósito: esa credencial solo vive en el servidor, nunca se envía al navegador, y la única operación que realiza en ese camino es leer el link por su slug e insertar el evento. Los eventos de clic son de solo lectura para cualquier usuario del panel.

7. Validación del slug antes de tocar la base

Antes de cualquier consulta, el slug entrante se valida contra un patrón estricto: minúsculas, dígitos y guiones, entre 3 y 64 caracteres. Lo que no pase por ahí recibe un 404 sin llegar a la base de datos.

8. Las imágenes de los códigos QR son públicas

El PNG de cada código se guarda en un depósito de archivos de lectura pública: quien tenga la URL de la imagen puede descargarla sin iniciar sesión.

Es deliberado —esos códigos están hechos para imprimirse y repartirse— pero conviene decirlo: la imagen del QR no es información confidencial y no debe tratarse como tal. Los números del link sí están protegidos; su código, no.

Datos, almacenamiento y retención

1. Cifrado en tránsito y en reposo

Todo el tráfico va por HTTPS con TLS forzado. Los datos en reposo quedan cifrados por el proveedor de base de datos.

2. Qué se registra en cada visita

De cada clic o escaneo se guarda:

Dato De dónde sale
Fecha y hora Servidor
Origen: escaneo o clic directo Marca que lleva el QR en la URL
País y ciudad Encabezados de geolocalización de la red de Vercel
Navegador, sistema operativo y tipo de dispositivo User-Agent de la petición
Página de procedencia (referrer) Encabezado de la petición
Dirección IP Encabezados de la petición

La dirección IP se almacena. Es el único dato del conjunto que puede considerarse personal por sí solo, y por eso se declara aquí y en el aviso legal.

3. Cómo se obtiene la ubicación

País y ciudad los resuelve la red de Vercel en el borde, antes de que la petición llegue al código, y llegan como encabezados HTTP.

No se contrata ni se consulta ningún servicio externo de geolocalización, y la IP no se manda a ningún tercero para resolverla. La precisión es la de una geolocalización por IP: a nivel ciudad, y no siempre.

4. Lo que no se hace

  • No se instalan cookies en el navegador de quien abre un link. El registro ocurre del lado del servidor, en el instante de la redirección.
  • No se identifica a la persona. No hay nombre, correo ni identificador que persista entre visitas: dos clics de la misma persona son dos eventos independientes y la aplicación no sabe que fueron la misma.
  • No se comparten los datos con terceros con fines publicitarios.

5. Retención

Hoy no hay borrado automático. Los eventos de clic se conservan indefinidamente mientras exista el link.

Es una decisión pendiente, no una política afirmada. Si tu organización tiene un plazo de retención que cumplir, dilo antes de empezar y se acuerda por escrito.

Al eliminar un link se eliminan sus eventos de clic. El link deja de resolver: quien lo abra ve una página que dice que no existe.

Desactivar un link —en vez de eliminarlo— deja de redirigir pero conserva el historial de clics que ya juntó.

7. Portabilidad

Hoy no hay exportación por autoservicio. No existe un botón para descargar los eventos en CSV; está en la lista de lo que sigue.

Mientras tanto, la exportación se hace a petición y la entregamos nosotros. Tus datos son tuyos: la falta del botón es una limitación de la herramienta, no una condición del servicio.

Integraciones con terceros

1. Plataformas de publicidad

La herramienta no se conecta a Meta Ads ni a Google Ads: no pide permisos, no guarda tokens y no lee tus cuentas publicitarias.

Lo que sí hace es respetar lo que esas plataformas ponen en la URL. Meta y Google resuelven sus parámetros dinámicos sobre la URL del clic; el motor de redirección los reenvía al destino por encima de los parámetros guardados en el link, para no perder la atribución de ese clic en particular.

2. Analítica del destino

Los parámetros UTM viajan al destino en la redirección, así que la herramienta de analítica que ya use tu organización —Google Analytics u otra— los recibe como cualquier otro tráfico etiquetado. No hay que instalar nada en el sitio de destino.

3. Alcance

Fuera de la infraestructura que hospeda la aplicación —Vercel y Supabase— no hay proveedores externos en el camino de un clic.

Disponibilidad y continuidad

1. Infraestructura

Vercel y Supabase son proveedores administrados con escalamiento automático y respaldos propios. No hay servidores que Manifesto administre a mano.

2. El punto único de falla es el dominio

Un link impreso no se puede corregir. Si trusrc.com dejara de apuntar a esta aplicación, las piezas ya publicadas dejarían de funcionar y no habría forma de repararlas a distancia.

Es el riesgo más real de la herramienta y por eso se declara aquí en vez de dejarlo implícito. El dominio es propiedad de la dirección de Manifesto y su renovación es responsabilidad nuestra.

3. La redirección es temporal, no permanente

El motor responde con una redirección 302 (temporal), no 301. Eso hace que los navegadores no la guarden en caché de forma permanente: cada visita vuelve a pasar por el motor y por eso se puede contar.

Si la respuesta fuera 301, el navegador se saltaría el motor a partir del segundo clic y la analítica quedaría corta.

4. Dependencias de código abierto

Las dependencias se administran con el gestor de paquetes estándar del ecosistema y se actualizan periódicamente.

5. Contacto técnico

Para un cuestionario de proveedor, una revisión de seguridad o una pregunta que este documento no responda, escríbenos y te ponemos con quien construyó la herramienta.