Miembros con isAccepted:false (status PENDING) esperando aprobación del admin del grupo.
Selecciona un grupo...
—
Miembros
—
Puntos medios
—
Puntuación máx.
Clasificación de miembros
Selecciona un grupo...
Dar marco a usuarioINVENTARIO
Añade directamente un marco al inventario del usuario seleccionado.
Estado de hoy
Cargando...
Preparar votación de pruebaRÁPIDO
Crea memes ficticios con fecha de ayer para activar el botón "Votar" en la app. Sin texto, sin configuración.
Simulador votación semanalSEMANA
Crea 3 memes de prueba de esta semana con votos, para que el botón de "Mejor Meme de la Semana" aparezca en la app (activa la ventana de voto en ajustes con modo tester o espera a lunes/martes).
Acciones de ronda
Borrar voto de usuario
Elimina el voto de un usuario para que pueda volver a votar.
Memes por fecha
Selecciona una fecha
Registros de votos
Selecciona una fecha
Temporada actual
Cargando...
Acciones
Cierra la temporada del mes anterior si no se ha cerrado. Archiva puntuaciones y resetea a 0.
Historial de temporadas
Haz clic en "Ver historial"
Ranking
Información del grupo
Selecciona un grupo
Ajustes editables
Ajustar puntos individuales
Transferir administración
Datos en bruto de Firestore
Selecciona qué datos ver...
Auditoría del grupo
Últimas 50 acciones de admin registradas sobre este grupo (adminLog).
Selecciona un grupo...
Zona peligrosa
Enviar notificación personalizadaDEV
Escribe una notificación que llegará al dispositivo del usuario seleccionado la próxima vez que abra la app (o en tiempo real si ya está abierta).
Enviar a todo el grupoGRUPO
Envía la misma notificación a todos los miembros del grupo activo (escribe una para cada uno en Firestore).
Historial de notificaciones enviadas
Sin notificaciones enviadas aún.
Simular ronda de votaciónSANDBOX
Crea memes ficticios en Firestore con roundDate = ayer para que la pantalla de votación de la app se active. Los memes se marcan con isTestMeme: true para poder borrarlos fácilmente.
Memes de ejemplo que se crearán
Haz clic en "Crear memes de prueba" para ver los ejemplos
Lo que el usuario tiene DE VERDAD (unlockedPackIds), con su origen. El historial de abajo solo recoge purchaseRecords, así que los packs de gacha y de promo no aparecen ahí.
Selecciona un usuario...
Historial de compras
Selecciona un usuario...
Últimos memes—
Selecciona un usuario...
Últimos mensajes de chat (máx. 50, todos los grupos)
Selecciona un usuario...
Marco (frame)adminGrantFrame
El marco es por grupo (inventario global, pero el groupId queda registrado en la auditoría).
Pack de la tiendaadminGrantPack
Regala (o retira) un pack concreto sin pasar por Google Play. Queda un registro en purchaseRecords (marcado ADMIN_GRANT) y en la auditoría.
Ajustar puntos (score)adminAdjustScore
Tokens de gachaadminAdjustGachaTokens
Global al usuario (no depende de grupo) — única vía posible de escritura, la regla de entitlements no permite escritura directa. El campo se rellena con el total actual: edítalo para subirlo, bajarlo, o ponlo a 0.
Notificación de prueba
Volcado JSON crudo
Selecciona una opción...
Packs de la tienda
Desactivar un pack solo lo oculta del catálogo de la tienda y de la ruleta.
Quien ya lo tenga comprado lo sigue viendo y usando. Para cortar la venta de verdad,
desactiva también el SKU en Play Console.
Cargando packs...
Snapshot diario
Cargando...
Cargando estadísticas...
Comparar con periodo anterior
Sin snapshots suficientes en adminStats para este rango — pulsa "Recalcular ahora" o espera al cálculo diario (06:30 Europe/Madrid).
Métricas adicionales
Cargando...
Mantenimiento manualCUIDADO
Estas tareas ya corren solas cada día (04:00 y 05:00 Europe/Madrid). Dispararlas a
mano solo hace falta para probar o forzar una limpieza fuera de horario. El barrido
de fantasmas respeta el modo simulación; la limpieza de grupos vacíos siempre borra
de verdad (no tiene modo simulación en el backend).
Contadores de temporada. Las columnas Daily y Memes de la tabla en vivo
ensenaban los totales DE POR VIDA del miembro, porque al cerrar temporada solo se
reseteaban los puntos. Ya hay contadores propios de temporada, pero empiezan a contar
desde el despliegue: esto reconstruye los de la temporada que ya esta corriendo a partir
de los memes del mes y de los ganadores diarios ya registrados. Idempotente.
Si el KPI de "activos ≤3 dias" no cuadra, usa esto para ver el dato crudo: recalcula el corte
de 3 días al instante (sin depender de si ya corrió el cron de hoy) y lista los
miembros con el lastActivityAt más reciente que exista, dentro o fuera
de la ventana — para saber si el campo se está escribiendo en absoluto.
Auditoría global
Cargando...
Anuncios in-app
Cómo llegan a la gente
Se muestran en una ventana flotante al abrir la app y quedan en el buzón del usuario.
El reparto va al documento de cada usuario, así que no cuesta lecturas: el
cliente ya lee su users/{uid} al arrancar.
Cargando...
Nuevo anuncio
⚠ Sin botón de cerrar. Si te equivocas al segmentar, dejas a esa gente fuera de la
app sin poder hacer nada. Pruébalo antes con tu propio UID en "solo estos UIDs".
Si algo sale mal, el botón Retirar de la lista lo quita de todos.
EDITANDO
Traducido desde · el texto pegado está en
Qué acepta
No se guarda solo: revísalo y dale a Guardar. La respuesta del prompt ya trae
dentro el idioma y los bloques, así que el selector de arriba solo hace falta si la
IA no lo dijo. Las vallas ``` y la charla alrededor se ignoran.
Bloques
Formato: **negrita** · *cursiva* · ~~tachado~~
Botón
A quién
Vacío = a todos. Si pones UIDs, se ignora todo lo demás — es el modo "pruébalo
solo conmigo".
Previsualización
Qué fidelidad tiene
1dp = 1px, con las fuentes reales de la app. 320 es el caso peor para el reparto
de líneas: si cabe ahí, cabe en todos. No es idéntico al píxel — Chrome y Android son
motores de texto distintos, y el ajuste de tamaño de fuente del sistema lo mueve más.