El feed es donde mejor se ve una publicación de Korat, y casi todo lo que hace Korat — grupos, páginas de negocio, historias, compartir — está construido sobre una única fila de publicación en vez de cuatro sistemas paralelos. Una publicación de grupo es una publicación normal con un id de comunidad. Una de página de negocio es una publicación normal con un id de negocio. Por eso reacciones, comentarios, menciones y notificaciones se comportan igual en todas partes, y por eso un arreglo en una vale para todas a la vez.
Cuatro maneras de escribir una publicación
Una publicación puede ser texto plano; texto sobre un fondo de color, para esa frase corta que se perdería como párrafo gris; o hasta cuatro imágenes en una cuadrícula estilo X que se adapta a cuántas adjuntaste. Puedes publicar como tú o como una página de negocio que gestiones, y puedes publicar dentro de un grupo en lugar de en el feed principal.
Cada publicación lleva su propia visibilidad — público o amigos — y se puede cambiar después de publicar, no queda congelada al pulsar enviar. La gente se equivoca de audiencia constantemente. La única excepción es una publicación hecha como página de negocio, que siempre es pública: una publicación de tienda que solo ven algunos clientes es una incidencia esperando a ocurrir.
Cualquier publicación, comentario e historia se puede denunciar, eligiendo el motivo de una lista fija. La denuncia pasa por una función que se ejecuta con *tus* permisos y no con los del servidor, así que una publicación que no puedes ver y una que no existe responden igual: el botón de denunciar nunca se convierte en una forma de averiguar si existe contenido que no te está permitido ver. El límite de frecuencia se aplica en la base de datos, no en la app. Puedes editar y borrar tus propias publicaciones. Los comentarios admiten menciones que resuelven a usuarios reales, así que una mención es un enlace a una persona y no una cadena que empieza por arroba, y la persona mencionada recibe una notificación.
Seis reacciones, una por persona
Hay seis reacciones — 👍 ❤️ 😄 😮 😢 😡 — y cada persona tiene exactamente una en una publicación dada. Pulsar la misma otra vez la quita; pulsar otra la mueve. No hay contador que puedas inflar pulsando repetido ni una contabilidad aparte de «me gusta más reacción» que cuadrar.
La razón de tener seis y no una es que un solo «me gusta» es ambiguo ante una mala noticia. La razón de no tener treinta es que una cola larga de reacciones raras vuelve ilegibles los recuentos. Seis bastan para distinguir acuerdo, empatía y enfado, que es la distinción que la gente necesita.
El feed está ordenado, y el orden está escrito
El feed principal no es estrictamente lo más nuevo primero. Lo ordena una función de ranking que vive en un archivo del código, data/Ranking.kt, y cada peso que usa está documentado en el documento de algoritmo del proyecto junto a los de sugerencias de amistad, Citas y búsqueda. Cuando un peso cambia, ese documento cambia con él.
Lo mencionamos porque «el algoritmo» suele ser la parte que ningún producto social describe. Un ranking es un conjunto de números que alguien eligió; escribirlos en un sitio es la diferencia entre un orden que puedes discutir y una caja negra. Las publicaciones de grupo se excluyen del feed principal en un único punto de esa tubería: pertenecen a su grupo y se quedan ahí.
Álbumes, y dónde acaban tus fotos
Las fotos se organizan en álbumes con su propia visibilidad — pública, amigos o privada — independiente de las publicaciones que las usaron. Cada álbum tiene portada y se puede renombrar o borrar, y existen tres álbumes por defecto desde el principio: fotos de perfil, portadas e imágenes de publicaciones. Subir una foto a una publicación no crea en silencio una segunda copia de tu fototeca en un sitio que no ves.
Un álbum privado es privado en el sentido de que la interfaz de Korat no se lo muestra a nadie más. No lo es en sentido criptográfico, y eso nos lleva a la parte honesta.
Los archivos subidos son legibles públicamente por URL. Korat no usa URLs firmadas ni buckets privados. Cualquiera que tenga la dirección directa de una imagen puede abrirla, sea cual sea la visibilidad de la publicación o del álbum: la visibilidad controla quién la ve *en la app*, no quién puede descargar el archivo.
Nada en Korat está cifrado de extremo a extremo, y no hay cifrado a nivel de aplicación en reposo. Trata una foto subida como algo que puede alcanzar cualquiera que consiga su dirección, y no subas nada cuyo resultado en ese caso sería grave. La página de seguridad enumera este límite junto a todos los demás.
Compartir, y el enlace que no dice nada
Cualquier cosa compartible puede ir a un chat como tarjeta, a tu propio feed, a una historia o a cualquier otra app del dispositivo mediante el menú de compartir de Android. También puede convertirse en un enlace en koratland.com — una URL con la forma koratland.com/s/<token>, donde el token son 14 caracteres aleatorios. Publicaciones, perfiles, negocios e historias se comparten así.
El token es opaco a propósito. Al abrirlo, el servidor lo resuelve con una función que devuelve solo dos cosas: qué tipo de objeto es y cuál. Nunca devuelve quién creó el enlace ni cuántas veces se ha abierto. El recuento de clics va al revés: una función aparte registra el clic, y deliberadamente no hay permiso de inserción en esa tabla para nadie, así que quien visita puede incrementar un contador sin poder escribir nada más. Un enlace que pegas en un grupo no cuenta nada sobre tu historial.
Historias que caducan, con una lista de espectadores que no
Una historia es una foto o texto sobre color, con una tipografía incrustada a elegir, colocación libre del texto en el lienzo y un color de texto que eliges. La visibilidad es pública o amigos, las mismas dos opciones que una publicación, y caduca sola. Puedes borrar la tuya antes.
Quien publica una historia recibe una lista de espectadores: las personas concretas que la abrieron, no un número. Un contador te dice que la vieron; una lista te dice quién, que es lo que querías saber y lo que además deja claro para todos que ver una historia no es anónimo. Las actividades del módulo de salud también se pueden compartir como historia, con un texto sobre el fondo que elijas.