Un sistema que puedes razonar
La mayoría de las apps de mensajería te piden que confíes en ellas. Dicen que tus mensajes están cifrados, que tus datos están a salvo, que tu privacidad importa… y luego lo enrutan todo por sus servidores, donde tu contenido existe en una forma que no puedes verificar ni controlar.
MindTheClub adopta un enfoque distinto. En lugar de pedir confianza, construimos un sistema lo bastante simple de entender como para que puedas razonar tú mismo sobre lo que ocurre con tus datos. Creemos que la cualidad más importante de una herramienta de comunicación es la previsibilidad: cuando envías un mensaje, deberías saber exactamente adónde va, qué camino recorre y dónde termina. Sin sorpresas.
Así es como funciona.
MindTheClub es una app de mensajería peer-to-peer. Cuando envías un mensaje, viaja directamente de tu teléfono al teléfono del destinatario. No hay ningún servidor de MindTheClub en medio que almacene, lea, procese o retransmita tu contenido.
Esto es posible gracias a WebRTC, el mismo estándar abierto que impulsa las videollamadas en tu navegador. WebRTC establece un canal de datos directo y cifrado entre dos dispositivos. Tu mensaje entra en ese canal por un extremo y sale por el otro. Ese es todo el trayecto.
Cuando dos dispositivos están detrás de cortafuegos o en redes móviles que dificultan las conexiones directas, la conexión se retransmite a través de un servidor TURN alojado en la red global de Cloudflare. Incluso en ese caso, el relé se limita a pasar paquetes cifrados: no puede leer el contenido. Piensa en él como en un cartero que lleva un sobre sellado: conoce el destino, pero nunca ve lo que hay dentro.
Antes de que dos dispositivos puedan establecer una conexión directa, tienen que acordar cómo conectarse, intercambiando direcciones de red, claves de cifrado y parámetros de conexión. Esta negociación se llama señalización, y es el único paso que toca un servidor.
MindTheClub usa un Cloudflare Worker como relé de señalización ligero. Los datos de señalización son efímeros: solo sirven para establecer la conexión y no tienen valor después. No contienen ningún contenido de mensajes.
Una vez completada la señalización y abierto el canal WebRTC, el papel del servidor termina. Todo lo que sigue ocurre directamente entre los dos dispositivos.
Los teléfonos móviles ahorran batería de forma agresiva. Cuando un teléfono está inactivo, sus conexiones de red se suspenden. Entonces, ¿cómo envías un mensaje a alguien cuyo teléfono está dormido?
MindTheClub usa Firebase Cloud Messaging (FCM), la misma infraestructura de notificaciones push que utiliza prácticamente cualquier app de Android, para enviar una señal ligera de despertar. Esta señal no contiene contenido de mensajes; simplemente le dice al dispositivo del destinatario: «Alguien quiere enviarte algo. Despierta y conéctate».
El dispositivo del destinatario se despierta, establece una conexión WebRTC con el remitente y el mensaje real se transmite directamente, peer-to-peer, como siempre.
Una foto, un vídeo, una nota de voz… pueden ocupar megabytes, y las conexiones móviles pueden interrumpirse en cualquier momento. Enviar un archivo grande como un único bloque significaría empezar de cero si algo sale mal.
MindTheClub divide el contenido grande en bloques pequeños y los envía secuencialmente por el canal de datos WebRTC. El dispositivo receptor reensambla los bloques y verifica el resultado. Si la conexión se corta a mitad de la transferencia, solo hay que retransmitir los bloques que faltan, no el archivo entero.
Es el mismo principio que usa cualquier protocolo fiable de transferencia de archivos. No es novedoso, pero es esencial para una buena experiencia en redes móviles reales.
¿Qué pasa si tu destinatario está en un avión, tiene el teléfono apagado o va por un túnel? El mensaje no puede entregarse ahora mismo, pero debe entregarse tarde o temprano.
MindTheClub usa el WorkManager de Android para garantizar la entrega. Cuando un mensaje no puede enviarse de inmediato, se guarda localmente y se programa un reintento. WorkManager sobrevive a reinicios de la app, reinicios del dispositivo y la optimización de batería. Seguirá reintentándolo, con los tiempos de espera apropiados, hasta que el mensaje se entregue.
Combinado con las señales de despertar de FCM, esto crea una cadena de entrega fiable: tu mensaje queda guardado a salvo en tu dispositivo, se envía un aviso de despertar cuando el destinatario probablemente esté disponible, y la transferencia directa se completa en cuanto ambos dispositivos están en línea. En ningún momento el contenido del mensaje queda en un servidor esperando a ser recogido.
La mensajería de grupo en un sistema peer-to-peer plantea un reto singular. En una app tradicional, envías una copia al servidor y el servidor la distribuye a cada miembro del grupo. Sin servidor, el remitente tendría que conectarse con cada miembro uno a uno, lo cual escala mal y falla por completo si algunos miembros no están disponibles.
MindTheClub lo resuelve con un protocolo gossip. El remitente transmite el mensaje a los miembros del grupo que puede alcanzar. Esos miembros, a su vez, pueden retransmitir el mensaje a otros miembros a los que el remitente no llegó. Como un rumor que se extiende por una sala, el mensaje se propaga hasta que todos tienen una copia.
Si un miembro del grupo se conecta más tarde y descubre que le falta un mensaje, se lo pide a cualquier miembro que ya lo tenga, no solo al remitente original. Esto hace que la entrega en grupo sea resiliente: ningún dispositivo es un cuello de botella y el grupo no depende de que un miembro concreto esté en línea.
Cuando usas MindTheClub, el comportamiento del sistema es previsible:
No construimos MindTheClub así porque el peer-to-peer esté de moda. Lo construimos así porque produce un sistema cuyo comportamiento puedes predecir y verificar. Y creemos que esa es una base para la confianza mejor que cualquier política de privacidad.