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.
6. Qué pasa al eliminar un link
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.