Skip to content

Red Social — Diseño de la Capa Social

Filosofía: la actividad es el contenido

Bodibly no es Instagram con ejercicios. La capa social existe para motivar el entrenamiento, no para crear engagement loops.

Principios:

  • La actividad es el contenido. Una publicación lleva una foto, un entrenamiento, o ambos — nunca ninguno. No hay posts de texto solo.
  • Sin algoritmo. El feed es cronológico. No hay contenido sugerido, no hay posts patrocinados, no hay "por si te perdiste esto".
  • Datos privados por defecto. Los detalles del entrenamiento (series, pesos, repeticiones) no se comparten salvo que el autor lo decida explícitamente por publicación.
  • Interacción mínima. Kudos sí; comentarios no.

Privacidad: la cuenta decide, no la publicación

La audiencia del contenido la decide la privacidad de la cuenta — pública o privada — y no un ajuste por publicación. Es el modelo Instagram: un solo interruptor que el usuario entiende, en lugar de cuatro niveles por post que nadie recuerda haber elegido.

  • Cuenta pública: sus publicaciones las ve cualquier usuario autenticado.
  • Cuenta privada: solo sus seguidores aprobados.
  • El perfil básico (username, nombre, bio, contadores de seguidores) es visible siempre — una cuenta que nadie puede encontrar no puede recibir solicitudes de seguimiento.

Nota histórica. El MVP original llevaba visibilidad por publicación (everyone / followers / mutual / private). Se retiró al introducir cuentas privadas: dos sistemas de audiencia superpuestos eran imposibles de razonar para el usuario ("¿quién ve esto?" tenía cuatro respuestas por post multiplicadas por dos estados de cuenta). El caso "solo yo" que cubría private lo cubre hoy el archivo.

Follows, solicitudes y bloqueos

  • Seguir es unidireccional y asimétrico. Seguir a una cuenta pública es inmediato; a una privada, crea una solicitud que el dueño acepta o rechaza. Mientras está pendiente, el solicitante no ve nada.
  • Volverse privado no expulsa a nadie: los seguidores existentes se conservan. El dueño puede remover seguidores individualmente.
  • Bloquear corta el vínculo en ambas direcciones — deja de verte, dejas de verlo, los follows entre ambos se deshacen — y el bloqueado no es notificado.

Publicaciones

Una publicación consiste en:

  • Imagen y/o entrenamiento — al menos uno de los dos. La imagen pasa por un pipeline de procesamiento en el servidor: re-encode, corrección de orientación, reducción a tamaño de feed y eliminación de todos los metadatos (GPS incluido — la privacidad es parte del pipeline, no una opción).
  • Texto corto opcional (max 280 caracteres), sin título.
  • Resumen del entrenamiento (si referencia una sesión): duración, volumen, conteo de ejercicios y PRs. Se calcula al leer, así que refleja la sesión como está hoy.
  • Detalle del entrenamiento, opt-in. Con share_details, el autor comparte los ejercicios y sets de la sesión; sin él, los datos crudos siguen siendo privados. Es la única puerta por la que un entrenamiento deja de ser privado, y la abre el autor por publicación.
  • Rutina compartida: si la publicación comparte una rutina, otros usuarios pueden guardarla como propia (incluyendo copias de los ejercicios custom que use — la copia es de quien guarda, y los cambios del autor no la afectan).

Archivar saca una publicación del perfil sin borrarla: solo el autor la ve y puede restaurarla. Borrar es definitivo.

Las imágenes de publicaciones se sirven con URLs firmadas que expiran: un link filtrado fuera de la app muere solo, y volverse privado no requiere re-procesar nada — las URLs ya publicadas caducan por su cuenta.

Kudos

El reconocimiento de Bodibly — vocabulario del dominio fitness (como Strava), no "likes". Un kudo por usuario por publicación; se puede retirar. Dar un kudo requiere poder ver la publicación; retirarlo no requiere nada — deshacer lo propio nunca se bloquea.

Sin comentarios, deliberadamente. Los comentarios traen moderación de texto libre, hilos y notificaciones de otro orden de complejidad, sin ser necesarios para el core: motivar el entrenamiento.

Feed y descubrimiento

  • El feed es la lista cronológica de publicaciones de la gente que sigues. Sin posts propios, sin sugerencias intercaladas.
  • El descubrimiento es búsqueda explícita de personas por nombre o username. Las cuentas privadas aparecen en los resultados — si no, no podrían recibir solicitudes — pero su contenido sigue cerrado. No hay pipeline de recomendación ("atletas que quizá conozcas"), por diseño: es una máquina de engagement, y el descubrimiento explícito cubre el caso real (buscar al compañero de gimnasio).

Notificaciones

Un inbox agrupado: kudos por publicación ("A X, Y y 3 más les gustó tu publicación"), nuevos seguidores, solicitudes de seguimiento. Decisiones:

  • Ventana de 90 días. El inbox muestra los últimos 90 días y el contador de no-leídas hereda el mismo piso: una notificación vieja deja de sonar por sí sola.
  • Las solicitudes pendientes no caducan. Una solicitud de seguimiento es una acción por resolver, no historial: sigue visible hasta que el dueño la responda, tenga la edad que tenga.
  • Sin push notifications aún. El inbox es in-app; push es una iteración futura.

Moderación

La capa social es lo único que un usuario puede usar para dañar a otro, así que la moderación llegó con ella:

  • Reportes sobre publicaciones y cuentas alimentan la cola del panel de staff.
  • Sanciones cierran una feature concreta — publicar, dar kudos, seguir — temporal o permanentemente, mientras el resto de la cuenta sigue funcionando. Solo se bloquean verbos que crean: una cuenta sancionada sigue pudiendo editar, archivar, borrar y dejar de seguir.
  • Ban cierra la cuenta entera; es lo que "eliminar un usuario" significa en un sistema donde todo lo referencia.
  • Takedown de imágenes: el staff puede retirar una imagen del almacenamiento y del CDN. Lo que ningún takedown puede hacer: borrar la copia que un teléfono ya descargó.

Lo que no existe (y por qué)

  • Comentarios — ver arriba: complejidad de moderación sin aporte al core.
  • Feed algorítmico / recomendaciones — no está en los planes; el feed es cronológico y el descubrimiento es búsqueda explícita.
  • Lista de quién dio kudos — el autor ve el agregado agrupado, no un directorio de kudoers; evita convertir el kudo en presión social.
  • Mute usuario-a-usuario — la palabra "mute" está reservada para esta feature futura (silenciar a alguien para mí, del lado del viewer). No confundir con la sanción de publicar, que el panel etiqueta "Silenciar" pero es una acción de moderación.
  • Compartir fuera de la app — las URLs de imágenes expiran; una publicación no es una página web pública.

Los contratos técnicos — shapes, endpoints, paginación — viven en la referencia OpenAPI del servidor.