Historias y En Vivo
Closegram admite Historias efímeras (foto y video, expiran después de 24 horas) y sesiones de transmisión En Vivo impulsadas por LiveKit (WebRTC). Historias y En Vivo ahora publican/ven/comentan/reaccionan de punta a punta.
Cada propiedad tiene su propio checkbox que indica si esa pieza específica está completamente implementada y funcional de punta a punta (frontend + backend) — actualiza esto tú mismo conforme avance el trabajo; esta página no lo sobrescribirá.
- Publicar una historia de 24 horas — foto o video (esta página antes decía que el video estaba bloqueado por el endpoint de subida; el
fileFilterde multer en/uploadya aceptaba mimetypesvideo/*—CreateStoryModal.tsxera lo único que todavía restringía a solo imágenes — corregido) - Ver las historias de otros usuarios / visor de historias
- Comentar en una historia
- Reaccionar a una historia con un emoji — una barra de reacción rápida (👍❤️😂😮😢) que usa la misma mutation genérica
likePostde las publicaciones normales - Elegir la audiencia de una historia (Todos / Seguidores / Amigos cercanos) —
StoryCreateInput.audiencese captura y se guarda con la historia (se agregó un valorclose_friendsal enum compartidoPostVisibility); corregido en esta sesión: ahora también se verifica de vuelta —getPost,getHomeStoriesygetUserStoriesla aplican, igual que ya hacíaPost.visibilitynormal — consulta la referencia técnica - Ver quién ha visto tu historia — corregido en esta sesión:
storyViewers/storyViewerCountllamaban a métodos inexistentes dePostManagery fallaban en tiempo de ejecución; ahora delegan al sistema existente de rastreo de espectadores del historial de reproducción (watch-history.manager.js#getPostViewers/#getPostViewersCount), solo para el dueño — consulta la referencia técnica - Ir en vivo / iniciar una transmisión en vivo —
GoLiveModal.tsxcrea la transmisión,LiveRoomPage.tsx(vista del dueño) se conecta a LiveKit como publicador (cámara + micrófono) una vez iniciada - Unirse a / ver una transmisión en vivo —
LiveRoomPage.tsx(vista de espectador) se conecta a LiveKit como suscriptor; aplicavisibility(pública / solo seguidores / amigos cercanos / privada) de la misma forma que una publicación normal - Chat / comentarios en vivo durante una transmisión — enviar, fijar/desfijar (dueño), eliminar (el propio autor del comentario, o el dueño)
- Reacciones en vivo — una barra de reacción de 6 emojis (👍❤️😂😮😢😡), con conteos en vivo por tipo de reacción
- Regalos con monedas en vivo — los espectadores envían regalos con precio en monedas desde un selector en la sala en vivo (
sendLiveGift,liveGiftCatalog,liveStreamGifts), respaldado por una nueva tablalive_stream_gift; las monedas se mueven del remitente al streamer a través del libro contable (sendTip, con verificación de saldo). Los precios de los regalos son controlados por el servidor. - Solicitudes para hablar en transmisiones en vivo — los espectadores levantan la mano (
requestLiveSpeaker), el dueño aprueba (respondToLiveSpeakerRequest), y los espectadores aprobados obtienen un token de publicación de LiveKit; la interfaz está enLiveSpeakerControlsen la sala en vivo (la reconexión de LiveKit al aprobar la publicación es el paso restante exclusivo de lo en vivo) - Promocionar una transmisión en vivo — un botón "Promocionar" en la sala en vivo (
promoteLiveStream) crea una publicación complementaria que enlaza de vuelta a la transmisión en vivo y la pasa por el flujo normal de promoción de publicaciones, ya que una transmisión en vivo no es en sí misma una publicación promocionable - Audiencia predeterminada de historias/en vivo, archivo automático y controles de ubicación —
/settings/story-liveahora persiste todos ellos medianteprivacySettings/updatePrivacySettings: un selector de audiencia predeterminada (defaultStoryAudience), además de los controlessaveStoryToArchiveyshareLocation - Ocultar tu historia de personas específicas
- Archivo de En Vivo — explora tus propias transmisiones en vivo pasadas y terminadas (Configuración → Archivo)
- Descubrimiento de En Vivo — una página dedicada
/liveque muestra quién está en vivo ahora, tendencias y transmisiones programadas, con un botón "Ir en vivo" - Actualizaciones en vivo en tiempo real — los comentarios, los conteos de reacciones, el conteo de espectadores, las solicitudes para hablar y la barra de quién está en vivo se actualizan en vivo mediante suscripciones
graphql-ws(liveStreamCommentAdded,liveStreamReactionsUpdated,liveStreamUpdated,liveStreamsChanged,liveSpeakerRequestsChanged,liveSpeakerStatusChanged) — sin necesidad de actualizar manualmente
Consulta la referencia técnica para ver los esquemas de GraphQL, rutas, enlaces al código fuente y el estado de conexión campo por campo.