Spotted · QA de lanzamiento · 09.09.2026

Spotted — QA y casos de uso

Actualización del 9 de septiembre de 2026. La app incorpora cuentas personales y profesionales, múltiples bodas, creación en tres pasos, planes de pago único con un año por boda y archivo/borrado. Google está integrado. El cobro actual es por transferencia bancaria, con envío manual del IBAN por email y confirmación de la operadora. Los emails automáticos no están conectados.

Abrir los casos

Catálogo completo: 146 casos con acceso directo. Cada entrada muestra cómo probarla y el resultado esperado. Son demostraciones aisladas: no crean cuentas, cobran dinero ni envían pedidos reales. Recargar reinicia los datos. El flujo de invitado activo (G01) y la cámara directa (G10) usan la cámara del dispositivo: las fotos de prueba no salen de esa pestaña y se descartan al recargar. Los casos de errores usan imágenes de muestra.

UsuarioEntrada de pruebaApp real
Pareja nuevaSplash y accesoEntrar con Google
Wedding plannerPrimer ingreso y elección de usoEntrar como wedding planner
Crear bodaOnboardingCrear
InvitadosInvitaciónUsar el QR o link de la boda publicada
Fotos y galeríaGalería editorialRequiere la invitación y el reveal
Planes y cuposAccountAccount
Gestión de librosBandeja de pedidosPedidos, solo operadora

Las rutas reales mantienen los controles de acceso. Un link de demo no habilita una cuenta real ni sustituye una invitación. Reescanear el mismo QR en el mismo navegador conserva el invitado y su sesión; cambiar de navegador, borrar cookies o usar navegación privada puede crear otra identidad.

Qué quedó implementado

Revisión de esta actualización: pasaron 97 pruebas de servidor y lógica de cliente, incluidas pagos únicos, acceso anual por boda, borrado vacío y reutilización de cámara. Se comprobaron en navegador los filtros, menú de acciones, apertura de boda, reveal, revisión de fotos y QR; también el reintento de cámara y la captura simulada. Layout a 375 × 667 y 320 × 568: sin desborde horizontal, acción principal visible y visor cuadrado. La cámara física requiere verificación en un teléfono real.

Confirmación de foto: muestra las fotos restantes, incluyendo la captura pendiente; Retake libera esa captura y Add to wedding la cuenta una sola vez. Se verificó también la última foto del cupo. Las pruebas de acceso, bodas y captura forman parte de las 97 verificaciones de esta actualización.

Matriz de casos de uso

A = prueba automática de servidor o lógica de cliente. B = interacción en navegador (se indica si usa API simulada). V = comprobación visual/layout. C = código revisado; falta una prueba específica. P = integración o capacidad pendiente. Las pruebas de backend usan SQLite real y un almacenamiento de objetos de prueba; no equivalen a una boda real en producción.

IDActor / situaciónResultado esperado o recuperaciónEstado
P01Pareja nueva sin sesiónSolo splash de pareja; sin actividad ficticiaA
P02Pareja con sesión válida y bodaEntrar directo al dashboardA; OAuth real pendiente
P03Pareja con sesión válida sin bodaElegir uso y entrar al onboardingA; OAuth real pendiente
P04Google no disponibleAviso; no simular autenticaciónC; prueba adicional pendiente
P05Google cargando / doble clickBotón ocupado y deshabilitadoC; prueba adicional pendiente
P06Google cancelado / fallidoReintento y mensaje claroC; prueba adicional pendiente
P07Sesión ausente o expiradaRechazar operaciones de propietario sin identidad verificadaA; OAuth real pendiente
P08Nombre vacío o solo espaciosNo crear boda; pedir nombre de pareja o eventoC; prueba adicional pendiente
P09Fecha o reveal faltante / inválidoNo crear; pedir fecha válidaC; prueba adicional pendiente
P10Reveal anterior a la bodaError sin perder los camposC; prueba adicional pendiente
P11Cambiar estilo de cámaraGuardar selección y campos; foco permaneceC; prueba adicional pendiente
P12Elegir estilo con flechas/Home/EndCambiar radio y anunciar selecciónC; prueba adicional pendiente
P13Portada válidaPrevisualizar y reducir resoluciónC; prueba adicional pendiente
P14Tipo no soportado / más de 15 MBRechazo con indicación del formato o tamañoC; prueba adicional pendiente
P15Lectura/decodificación de imagen fallidaMantener formulario y permitir otra imagenC; prueba adicional pendiente
P16Crear boda correctamenteID nuevo, cero fotos, galería ocultaA
P17Crear otra bodaMantener fotos antiguas separadasA
P18Error guardando la nueva bodaNo confirmar ni sustituir la boda anteriorC; prueba adicional pendiente
P19Dashboard sin fotosCero contadores, review/reveal deshabilitadosA
P20Copiar invitación correctamenteConfirmación solo después de copiarC; prueba adicional pendiente
P21Portapapeles rechazado / ausenteMensaje y foco en link seleccionableC; prueba adicional pendiente
P22Generar QRQR generado por el servidor, sin enviar la invitación a un proveedor externoC; prueba adicional pendiente
P23Abrir foto para revisiónFoto de la boda actual; sin Keep ni PendingA
P24Eliminar fotoQuitar y actualizar contadorA
P25Deshacer eliminaciónRestaurar foto; aviso de éxitoA
P26Error al eliminar/restaurarRevertir contador; no anunciar éxitoC; prueba adicional pendiente
P27Eliminar última fotoVolver al dashboard vacíoA
P28Revelar antes de horaGalería abiertaA
P29Ocultar después del horarioMantener oculta hasta revelarla manualmenteC; prueba adicional pendiente
P30Recargar galería oculta manualmenteConservar decisión de la parejaC; prueba adicional pendiente
G01Escanear QR por primera vezGuest ID y sesión por bodaA
G02Cerrar y reescanear mismo QRReutilizar identidad, sesión por boda y progreso del servidor mientras se conserva la cookieA
G03Misma persona en otra bodaMismo guest ID, sesión distinta por bodaA
G04Otro navegador / datos borrados / incógnitoNueva identidad; no prometer recuperar anteriorA
G05Otro invitado con el mismo QRID independiente, boda y fotos compartidasA
G06QR de boda desconocidaNo mostrar datos de otra bodaA
G07Invitación incompleta o boda desconocidaMensaje del servidor, sin cargar la boda de otra personaA
G08Entrar antes de fechaVer espera, cámara cerradaA
G09Llegar el día de la bodaAcceder a categorías y cámaraC; prueba adicional pendiente
G10Abrir categoría con cupoCámara y número de tiros correctosC; prueba adicional pendiente
G11Categoría con 5 fotosAviso; elegir otra categoríaA
G12Rollo con 24 fotosAviso; no capturar másA
G13Progreso de otra personaNo descontar tiros del invitado actualA
G14Cámara iniciandoMensaje y disparador deshabilitadoC; prueba adicional pendiente
G15Cámara ausenteMensaje útil; volver a categoríasC; prueba adicional pendiente
G16Permiso de cámara denegadoAbrir ayuda de permisos por navegador; Retry camera mantiene sesión y contadorA; B simulado; dispositivo físico pendiente
G17Cámara ocupada / desconectadaError recuperable; no guardar foto inválidaC; dispositivo físico pendiente
G18Cambiar frente/trasera rápidamenteIgnorar respuestas anteriores y liberar stream al cambiar cámaraA; dispositivo físico pendiente
G19Flash disponible / no disponibleTorch cuando se soporte, efecto visual en otro casoC; dispositivo físico pendiente
G20Capturar / doble disparoUna captura, cámara liberada, confirmaciónC; dispositivo físico pendiente
G21RetakeDescartar captura temporal; no consumir tiroC; prueba adicional pendiente
G22Add to wedding exitoso / doble toqueUna foto asociada a guest/sesión/bodaA
G23Guardado falla por cuotaConservar captura; contador sin cambiosA
G24Link directo a captured sin capturaVolver a categorías sin imagen rotaC; prueba adicional pendiente
G25Salir durante solicitud de cámaraCerrar stream tardío; no dejar cámara activaA
G26Reveal durante captura/guardadoNo añadir foto después del cierreA
G27Reabrir antes del revealCountdown; servidor impide acceder tanto a listado como a archivos y ZIPA
G28Countdown llega a ceroPasar al reveal abiertoC; prueba adicional pendiente
G29Reveal manualmente ocultoExplicar revisión; sin countdown falso en ceroC; prueba adicional pendiente
G30Galería con cero fotosMensaje explícito; no visor rotoA
G31Filtrar las 9 categoríasSelección accesible y resultados correctosC; prueba adicional pendiente
G32Filtro sin resultadosMensaje y alternativa AllC; prueba adicional pendiente
G33Abrir foto y anterior/siguienteNavegación circular; botones con nombreC; prueba adicional pendiente
G34Visor con una sola fotoSin navegación inválida ni división por ceroC; prueba adicional pendiente
G35Flechas/Escape en visorNavegar/cerrar con tecladoC; prueba adicional pendiente
G36Swipe/pinch/zoomNavegar y ampliar sin cambiar foto durante pinchC; dispositivo físico pendiente
G37Mis fotos por categoríaSolo fotos de ese guest IDC; prueba adicional pendiente
G38Categoría personal vacíaMensaje de ausencia y navegación disponibleC; prueba adicional pendiente
S01Borrador local corruptoRecuperar formulario vacío; la boda y fotos subidas viven en servidorC; prueba adicional pendiente
S02Cookies o almacenamiento denegadosNo iniciar cámara sin sesión persistente; conservar captura si la cola local fallaC; prueba adicional pendiente
S03Generador UUID no disponibleFallback con bytes criptográficosC; prueba adicional pendiente
S04Dos envíos simultáneosReservar cupos de forma atómica; reintentos no duplican fotosA
S05Sin conexión / reconexiónCola interna IndexedDB y reintentos sin descarga; éxito solo tras confirmar servidorA
S06Fallo de servidor / carga lentaCarga, timeout y reintento; mantener campos y fotos pendientesC; prueba adicional pendiente
S07320×568 / 375×667 / 430×740Sin overflow horizontal ni CTA principal tapadoV, 51 comprobaciones
S08Teclado virtual / landscape / zoom 200 %CTA y campo activo accesibles sin superposiciónC; dispositivo físico pendiente
S09Lectores de pantallaLabels, estados y orden de foco clarosC; dispositivo físico pendiente
S10Movimiento reducidoSuprimir confetti/transiciones; conservar funcionalidadC; prueba adicional pendiente
S11Modificar hash, phase o IDServidor protege boda ajena, fotos ocultas, moderación y pedidosA
S12Foto rota / descarga fallidaMensaje y botón para reintentar imagen; originales en ZIP por partesC; prueba adicional pendiente
S13Exportar / borrar datos definitivamenteDescarga de originales disponible; borrado de bodas y objetos implementado; cuenta completa por soporteA; borrado de cuenta completo pendiente
C01Elegir solo digitalSolicitud asociada a boda y cuenta; precio confirmado antes de pagarA, V
C02Comprar digital + libro antes de la bodaUn paquete, libro reservado, selección y diseño posterioresA, V
C03Añadir libro despuésPedido de libro independiente; no volver a cobrar digitalA, V
C04Contacto incompletoValidar nombre y email; mantener el formularioA, C
C05Seleccionar fotosHasta 80; únicamente fotos disponibles de esa bodaA, V
C06Aún no hay fotosSolicitar libro y acordar selección despuésA, V
C07Enviar dos vecesMisma solicitud no crea dos pedidosA
C08Pago por transferenciaGuardar solicitud para recibir IBAN; no presentar un pago exitosoA
C09Checkout Stripe futuro (demo)Demostración de la integración opcional; desactivada para compras actualesC; integración P
C10Pago cancelado o fallo de redPedido guardado, pago pendiente; reintentarC; integración P
C11Callback del navegador manipuladoNo marca pagado; se exige notificación firmada de StripeA
C12Notificación de Stripe duplicada o firma falsaProcesamiento idempotente; rechazar firma inválidaA
C13Stripe indica reembolso o disputaBloquear paso a impresión hasta revisar pagoC; integración P
C14Nuevo pedido de libroAparece en bandeja privada con nombre, email, boda y estadoA, V
C15Persona no autorizada abre bandejaAcceso denegado por servidorA
C16Registrar transferencia recibidaOperadora verifica importe completo y referencia; libro exige cotización de envíoA
C17Imprimir sin pago o aprobaciónServidor rechaza el cambioA
C18Diseño aprobado y pago confirmadoPermitir etapa de impresión manualA
C19Marcar enviadoExigir tracking HTTPS; visible a la parejaA
C20Descargar fotos para imprimirSolo operadora autorizada; originales de ese pedido, ZIP por partesA
C22Transferencia de plan profesionalBandeja privada: email al cliente, importe y referencia; activar solo tras verificar recepciónA
C21Email o push a operadoraNo conectado; actualmente se consulta la bandeja de la appP
U01Alternar mosaico / hoja de contactosCambiar distribución, conservar selección accesibleB
U02Abrir foto de galeríaVisor, zoom y navegación en color; originales y ZIP solo para organizadorB; gestos físicos P
U03Eliminar foto con efecto de fuegoAnimar solo después de confirmar borrado; ofrecer UndoB con API simulada; backend A
U04Falla del borradoFoto conservada; sin animación de éxitoB con API simulada; backend A
U05Reducir movimientoSustituir fuego y transiciones por cambio breveC

Workspace, onboarding y planes

IDActor / situaciónResultado esperado o recuperaciónEstado
W01Elegir uso personal o profesionalAmbas opciones funcionan para una sola personaA
W02Planner con varias bodasColección compacta con estados y filtrosA
W03Onboarding: datos básicosNombre de evento, fecha, ubicación opcional y slug automáticoA
W04Onboarding: personalizaciónChange photo sobre la imagen, estilo y nombre heredado del paso 1C
W05Crear desde el diseñoCreate wedding lleva directamente a Ready; cámara y galería activadas por defectoA
W06Boda creada como borradorQR privado; no recibe invitados antes de publicarA
W07Preview como invitadoVista privada sin cargar fotos ni consumir cuposA
W08Account sin plan compradoMuestra Free preview; planes con Choose plan y pago únicoA
W09Publicar dentro del cupoBoda activa y QR definitivoA
W10Paquete agotadoElegir otro paquete para publicar nuevas bodasA
W11Archivar bodaConserva fotos y cierra capturas; no devuelve el crédito usadoA
W12Restaurar boda archivadaRestaura dentro del año sin gastar otro créditoA
W13Borrar bodaConfirmación escrita, borrado de fotos y cierre del linkA
W14Error durante borradoInvitación cerrada; reintento seguro sin perder progresoA
W15Plan vencido en período de gracia30 días de galería read-only y descargas del organizador, sin crear ni subirA
W16Plan vencido después de la graciaArchivo por 60 días; sin acceso de invitadosA
W17Compatibilidad de un plan anterior con exceso de bodasConserva bodas activas y bloquea las nuevasA
W18Compatibilidad de cancelación de un plan anteriorMantiene acceso hasta la fecha pagadaA
W19Elegir un paquete de pago únicoChoose plan solicita el IBAN por email; un año por bodaA
W20Wedding de pago únicoHabilita solo la boda pagada, sin suscripciónA
W21Cambiar permisos de invitadosGuardado y protección de cámara y galería; originales y ZIP solo para organizadorA
W22Cámara pausada por el organizadorNo ofrece captura ni carga alternativa desde archivosA servidor
W23Borrado con libro en cursoBloquea pérdida de archivos necesarios para imprimirA
W24Fin de retenciónRevisión de retención; no hay borrado automático sin avisoA; emails pendientes
W25Solicitud pendiente de transferenciaSolicitar datos no cobra ni activa un planA
W26Cuenta ajena intenta gestionar otra bodaRechazo de configuración, preview, archivo y borradoA
W27Volver a la app con sesión PlannerAbre la colección de bodas, conserva cada evento separadoA
W28Boda vacía / filtros sin resultadosExplica el estado y permite crear o cambiar el filtroA
W29Planner esperando IBAN o verificaciónSolicitud persistente con referencia y email; sin activar acceso pagadoA
W30Transferencia del plan confirmadaMuestra Current plan y los paquetes; nuevas compras suman bodas sin suscripciónA

Transferencias por email

El cliente solicita el plan o paquete y acepta las condiciones. La solicitud queda en la bandeja privada con email, importe y referencia. La operadora abre un borrador de email, agrega su IBAN y lo envía personalmente. No se ha enviado ningún email automático. Solo la operadora puede confirmar recepción; el servidor verifica el importe esperado y exige referencia. Una captura o confirmación del cliente no activa acceso. El mismo plan se renueva por un mes calendario desde el fin del período vigente; no se cobra automáticamente. Cambios de plan se acuerdan por email. Los libros requieren cotización y aprobación antes de impresión.

Las pruebas incluyen aislamiento, solicitudes concurrentes, aceptación de términos, importe incorrecto, confirmación repetida, compra de paquetes adicionales y solicitud cancelada. En navegador se recorrieron solicitud de Planner → pendiente y confirmación por operadora con importe incorrecto → corrección → pagado, usando datos simulados. El formulario de transferencia se revisó a 375 × 667, con contenido desplazable y acción de solicitar visible y × de cierre arriba a la derecha. Stripe queda desactivado para nuevas compras en el modo actual.

Precios, condiciones y controles de compra

Se publican precios compartidos por app y servidor, términos completos y privacidad. Se validan aceptación/versionado, inicio del servicio, coincidencia del precio de Stripe, reintento tras checkout vencido, plan seleccionado y cotización de envío. Se comprueba aislamiento de las condiciones descargables, doble compra digital y reembolsos parciales del bundle. Las pruebas de Stripe siguen usando respuestas controladas, no una cuenta conectada.

El resumen de compra se revisó a 375 × 667: contenido con scroll propio y botones de continuar/cerrar siempre visibles. El acceso a pago también queda fijo en Purchases. El catálogo conserva demostraciones de aprobación y cancelación sin cargos reales.

Evidencia de esta revisión

En esta revisión pasaron 97 pruebas automáticas. Cubren firma y sesión de Google, autorización, aislamiento entre bodas, invitado recurrente, fechas/zonas, fotos privadas, cupos concurrentes, subidas y reintentos, moderación/Undo, ZIP, pedidos, pagos firmados, trial, publicación, downgrade, archivo, permisos, borrado y recuperación. Se usa SQLite real con las migraciones del producto y un almacenamiento de objetos de prueba. Las pruebas de Google usan claves de prueba; las de Stripe usan eventos y respuestas controlados.

Se reprodujo y corrigió un bloqueo de entrada provocado por intentar abrir una boda anterior en proceso de borrado. El acceso de planner abre la cuenta o colección sin depender de esa boda. Las pruebas verifican primer ingreso, separación de invitación y cuenta, recuperación de marcadores vencidos, rechazo de invitaciones inválidas, acceso personal a su única boda y errores de conexión reintentables. El acceso /spotted/planner.html no crea cuentas ni cambia el tipo de usuario automáticamente.

En la revisión previa se abrieron las 143 entradas del catálogo y se midieron 51 combinaciones móviles. En esta actualización se verificaron cinco estilos de texto en 23 pantallas × 3 tamaños (69 combinaciones: 320×568, 375×667 y 430×740), sin estilos extra ni overflow horizontal. Se comprobaron además 8 estados de cámara, permisos, confirmación, galería y cola en esos tres tamaños: menú al pie, sin descargas ni selector de invitados. Categorías, formulario, cámara y ayuda se revisaron con texto al 200 %, sin overflow horizontal; las acciones de ayuda permanecieron visibles. No equivale a Safari o Android físicos.

Se recorrieron cámara simulada → permiso rechazado → ayuda → reintento → captura → confirmación; se verificaron Add to wedding y Retake, ausencia de Guardar copia y protección al abandonar la captura. Las pruebas de lógica verifican getUserMedia, recuperación tras rechazo y cierre de respuestas tardías. El flujo activo del catálogo ahora solicita cámara real; no se ha capturado en un teléfono físico durante esta revisión. La cola IndexedDB y la conversión de imágenes cuentan con comprobaciones anteriores; el selector de archivos se conserva únicamente para la portada del organizador.

Permisos: la web solicita acceso y explica cómo habilitarlo; no existe en esta implementación una apertura automática de los ajustes del teléfono. Referencias: API de cámara y requisitos de permisos, cambiar permisos en Chrome Android.

Se recorrieron interactivamente el onboarding completo, personalización, permisos, creación, publicación, archivo con liberación de cupo, confirmación de borrado, error y reintento, galería y eliminación/Undo. Las interacciones del catálogo son simuladas; los controles de servidor se verifican por separado. Abrir un caso no significa haber probado todos sus escenarios físicos o todos los caminos de una integración externa.

Pendientes para cobrar por una boda real

PendienteAcción concreta
Cobro manualEnviar IBAN y titular reales por email, verificar recepción en el banco y emitir confirmación/recibo o factura. Registrar importe y referencia en el panel. Reembolsos, cambios de plan y avisos de renovación se coordinan personalmente. Stripe queda para una integración posterior.
Google y celulares realesGoogle ya está integrado y tiene Client ID configurado. Falta una sesión federada real completa y pruebas en dos teléfonos: QR, reescaneo, cámaras, permisos, red interrumpida y reveal; descargas desde la cuenta organizadora.
Avisos y retenciónLa bandeja funciona; emails/push y avisos antes de eliminación no están conectados. No se promete un envío automático. La retención final requiere revisión y aviso previo; no hay cron de purga activado.
Datos legalesCompletar identidad fiscal, domicilio, país y teléfono comercial reales. Validar facturación e impuestos, mecanismos de reclamación aplicables y contrato de tratamiento de datos para planners. No se inventaron datos ni se certificó cumplimiento legal.
OperaciónDefinir cupo de almacenamiento comercial, respaldos y recuperación; probar volumen simultáneo esperado.
LibroFormato y precio definidos: 20 × 20 cm, tapa dura, 40 páginas; €129 o bundle €159. Confirmar proveedor, calidad de originales, disponibilidad/envío y plazo antes del cobro. Impresión y correo son manuales.
Accesibilidad físicaVoiceOver/TalkBack, teclado virtual, zoom 200 %, landscape y barras de Safari.

No se hicieron cobros, enviaron emails ni encargaron impresiones reales durante esta revisión. La actualización no se presenta como un lanzamiento comercial completamente validado.

Invitados: recuperación y permisos adicionales

IDActor / situaciónResultado esperado o recuperaciónEstado
G39Foto pendiente de una sesión anteriorConservar entrada interna pendiente sin descontar la sesión nueva; sin descargaA
G40Invitado solo con cámaraAbrir cámara real 1:1, capturar y agregar; sin selector de bibliotecaA servidor; B simulado
G41Galería desactivada por quien organizaMensaje claro; no mostrar fotos ni abrir el visorA
G42Invitado sin copias ni descargasOcultar descargas y rechazar originales y ZIP del invitado, también tras revealA
G43Boda read-only por fin de planMantener galería de lectura; sin fotos nuevas ni descargas de invitadosA
G44Sin biblioteca ni copia local descargableSolo visor y disparador; no cargar archivos ni guardar en galería del teléfonoA servidor; dispositivo físico pendiente
G45Reveal mientras se está subiendoNo publicar una foto tardía; explicar que no se agregó y mantener la entrada interna sin descargaA
G46Galería de más de 100 fotosCargar siguientes páginas sin repetir ni omitir fotos propiasA

Revisión de la interfaz compacta

QA móvil de esta actualización: 375 × 667 y 320 × 568. Se comprobó onboarding y su CTA fijo, portada sin recorte del enlace, Account con plan actual, formularios con cierre superior y confirmación de captura sin navegación inferior. En demo se verificaron creación → Ready, borrado con error → reintento correcto y formulario de libro → referencia y email preparado. No se enviaron emails ni se borraron bodas reales.