Email copiado — support@tuurt.com
Cargando experiencia
arquitectura · 09 de agosto de 2026 · 7 min

Un sistema de licencias para software de escritorio con Supabase Edge Functions y CloudFront

La URL que compilas dentro del binario es inmutable de por vida: el cliente la pega a mano y no la vuelve a tocar. Esa restricción decide toda la arquitectura.

Por Equipo Tuurt

Cuando distribuyes software de escritorio con licencia por cliente, hay una decisión que no puedes deshacer: la dirección que valida la licencia queda compilada en el binario.

El cliente la pega una vez en la configuración de su terminal y no la vuelve a tocar. Si algún día esa dirección deja de existir, todos los binarios que hay en el mundo dejan de funcionar a la vez.

Toda la arquitectura sale de ahí.

La decisión clave: no compilar contra el proveedor

La API vive en Supabase Edge Functions. Lo natural sería compilar la URL de Supabase directamente en el binario. Eso ata tu producto a que Supabase siga existiendo y siga manteniendo esa función, para siempre.

En su lugar pusimos CloudFront delante y compilamos contra nuestro propio dominio.

Migrar de proveedor pasa a ser cambiar el origen de una distribución de CloudFront. Ningún cliente se entera, y no hay que tocar un solo terminal instalado.

Es el mismo principio de la indirección de toda la vida, aplicado al único punto del sistema que no puedes cambiar después. El resto de la arquitectura es negociable; ese no.

Hay un beneficio secundario: el dominio personalizado de Supabase es un complemento de pago por proyecto. CloudFront delante sale más barato y desacopla mejor.

Fallar cerrado, no abierto

Los secretos —la clave que firma las respuestas y el token de administración— viven en la configuración del entorno, nunca en el repositorio.

La parte que merece atención es qué pasa cuando falta uno:

  • Sin la clave de firma, el endpoint de validación responde 503.
  • Sin el token de administración, el endpoint de gestión responde 401 a todo.

Deliberado. El modo de fallo por defecto de mucho código es degradar hacia «pasa cualquiera» o, peor, firmar con la cadena vacía. Un secreto ausente debe dejar el sistema cerrado, no abierto. Es un if de tres líneas al arrancar y es la diferencia entre un despliegue mal configurado y una brecha.

Gracia offline: el equilibrio incómodo

El software corre en máquinas de clientes con conexiones que se caen. Si la validación es estricta, un corte de red de diez minutos deja a un cliente legítimo sin su producto en mitad de la jornada.

Si es laxa, la licencia no sirve para nada.

Nuestro punto: 72 horas de gracia, anunciadas por el servidor y no fijadas en el cliente. Que el periodo lo decida el servidor importa — permite ajustarlo sin recompilar nada, y evita que un cliente lo alargue tocando su copia.

Las respuestas van firmadas con la clave compartida, que también está compilada en el binario. Sin firma, cualquiera podría montar un servidor falso en localhost y responder «válida» a todo.

El panel, y por qué es privado

La consola de administración es un sitio estático en un bucket privado, servido sólo a través de CloudFront. El acceso directo al bucket devuelve 403 — comprobado, no supuesto.

El token de administración se guarda en sessionStorage: se borra al cerrar la pestaña, no toca el disco y no viaja a ningún sitio salvo a la propia API.

Un detalle práctico: usamos el mecanismo de identidad de origen antiguo en vez del moderno porque la versión de la CLI instalada era de 2022 y no conocía el nuevo. El bucket queda igual de privado. Verificar el resultado importa más que usar la primitiva de moda — y verificarlo fue una petición al bucket que devolvió 403.

Lo que nos llevamos

El valor real de este diseño no es la elección de proveedor, es haber identificado cuál era la decisión irreversible antes de tomarla. Casi todo en una arquitectura se puede cambiar después. Lo que va compilado en binarios que están en máquinas ajenas, no.

Esa lista suele ser corta. Merece la pena escribirla explícitamente al empezar.


Del sistema de licencias de Cerberus, Tuurt Labs. ¿Necesitas una arquitectura así? Escríbenos a support@tuurt.com.

Supabase CloudFront AWS Arquitectura Licenciamiento
← Volver al blog