Gestionado por nosotros, no comprado fuera
El seguimiento de errores funciona en una instancia de GlitchTip autoalojada en nuestra propia infraestructura de Scaleway: los informes de fallos no salen de nuestros servidores. Y no te contienen a ti: antes de que salga un informe, se eliminan la identidad del usuario, la IP, las cookies, las cabeceras, los tokens de autorización, el cuerpo de la petición y la query string. El cuerpo es la parte importante: de lo contrario, ahí estarían el contenido de las notas y las búsquedas. El trazado de rendimiento está desactivado por defecto. Las estadísticas de visitas de este sitio web no usan cookies (Plausible, UE) y en la app no hay ninguna.
Claves que solo pueden hacer una cosa
Las claves de acceso siguen el principio de mínimo privilegio: cada sistema recibe solo los permisos que realmente necesita. Ejemplo: el despliegue automático de este sitio web no tiene ninguna clave de CDN con alcance de toda la cuenta, solo un token que puede hacer exactamente una cosa: vaciar la caché de estas páginas. Las claves centrales están en el Secret Manager de Scaleway, no en sistemas de build externos.
La separación está en la base de datos, no en el código
En la mayoría de los servicios es el código de la aplicación lo que impide que veas datos ajenos. Basta entonces un «where user = …» olvidado en una sola consulta para que haya una fuga. En Memexa la separación está un nivel más abajo: PostgreSQL la impone mediante row-level security. Sin un contexto de usuario establecido, la base de datos no devuelve ninguna fila: no las equivocadas, sino ninguna. El contexto se establece por transacción y desaparece automáticamente al terminar, así que no puede pasar a la siguiente conexión del pool. Para que siga siendo así, con las pruebas se ejecuta una comprobación que salta en cuanto aparece una tabla nueva sin row-level security o sin clasificación explícita: la build falla en lugar de pasar en silencio.
Lo que puede hacer tu IA lo decides tú, y lo puedes retirar
Claude, ChatGPT y Cursor no reciben una llave maestra. El acceso funciona mediante OAuth: antes de autorizarlo ves qué app de IA lo pide y a dónde va el acceso, y lo confirmas tú. El clipper del navegador y el acceso completo de IA tienen permisos separados: el clipper puede guardar, no buscar en lo que tienes guardado. Puedes desconectar las apps de IA conectadas en cualquier momento en Memexa; además, una app de IA puede devolver su acceso por su cuenta. Y la comprobación de acceso no depende de un único punto central: cada interfaz verifica la sesión por sí misma, para que un error en un sitio no lo abra todo.
Borrar significa borrar: en este orden
Puedes borrar tu cuenta tú mismo, con confirmación por correo electrónico. Lo que ocurre entonces está invertido a propósito: primero se eliminan todos los archivos del almacenamiento de objetos, en todo el prefijo del usuario, es decir, incluidos los archivos huérfanos que ya no pertenecen a ninguna entrada. Solo después se eliminan los registros de la base de datos. Si falla el borrado de los archivos, se cancela todo el proceso y tu cuenta sigue existiendo, en lugar de que desaparezcan los datos de gestión y se queden los documentos. El proceso se puede repetir sin riesgo. Los contenidos concretos puedes borrarlos uno a uno en cualquier momento, sin tocar la cuenta.
Las líneas de por medio
Cada tramo está cifrado: TLS 1.2 o superior en el borde, las versiones anteriores están desactivadas; las conexiones a la base de datos también verifican el certificado y el nombre de host, no solo «cifradas de alguna manera». La base de datos está en una red privada sin dirección pública. Delante hay un WAF y protección DDoS, y el servidor de origen solo acepta peticiones desde la red de la CDN, así que no se puede llegar a él directamente. El contenedor de la aplicación se ejecuta sin privilegios de root, las dependencias se construyen a partir de un lockfile fijado, y el único binario externo que necesitamos está fijado a una versión y a una suma de comprobación.