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.
| Usuario | Entrada de prueba | App real |
|---|---|---|
| Pareja nueva | Splash y acceso | Entrar con Google |
| Wedding planner | Primer ingreso y elección de uso | Entrar como wedding planner |
| Crear boda | Onboarding | Crear |
| Invitados | Invitación | Usar el QR o link de la boda publicada |
| Fotos y galería | Galería editorial | Requiere la invitación y el reveal |
| Planes y cupos | Account | Account |
| Gestión de libros | Bandeja de pedidos | Pedidos, 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
- Google con logo a color y portada a color; sin botones alternativos en el splash. Validación de firma, audiencia, emisor, vencimiento y nonce del navegador. Sesión persistente con cookie HttpOnly.
- Cuenta personal o profesional; ambas sirven para una persona. Dashboard simplificado: lista compacta de bodas, un título por pantalla, fotos como foco y QR persistente. Reveal desplegable, Request photobook hacia el formulario y Delete wedding en rojo; filtros con selección visible. Se mantiene el aislamiento de fotos, invitados y pedidos.
- Onboarding: datos básicos → estilo y portada → invitación lista. Sin contador repetido ni segundo campo de nombre; Change photo sobre la portada. Los permisos se modifican desde Settings. La boda empieza como borrador vacío. QR privado para preview y QR de invitados al publicar.
- Pago único: Wedding €49 / 1 boda; Planner €199 / 5; Studio €349 / 10; Agency €749 / 25. Cada boda permanece disponible hasta 12 meses después de su fecha al publicarla. Son los precios elegidos para el lanzamiento; libro €129 y digital + libro €159, más envío confirmado antes del cobro. No hay cobro dentro de la app: se solicita el IBAN por email y se registra la transferencia una vez verificada. Las compras y trials anteriores conservan sus condiciones.
- Cantidad comprada verificada en servidor, incluso con publicaciones simultáneas. Archivar o borrar no devuelve el crédito usado; restaurar la misma boda no consume otro. Las confirmaciones de pago duplicadas no suman créditos otra vez.
- Borrado confirmado por texto, con × arriba a la derecha y reintento de álbum vacío corregido: cierra el link y borra fotos/portada en lotes reintentables. Pedidos de libros abiertos bloquean el borrado de sus archivos. Los registros de compra se conservan.
- Período pagado, 30 días de gracia read-only y 60 días en archivo. Después queda revisión de retención; no se ejecuta eliminación automática porque los avisos por email aún no están conectados.
- Settings con nombre visible, ubicación, fecha, zona horaria, reveal, estilo y permisos de invitados. Los invitados solo pueden capturar con cámara y ver la galería cuando se habilita. No hay biblioteca, Guardar copia ni descargas de invitados; el servidor reserva originales y ZIP al organizador. Una web no puede impedir capturas de pantalla o toda copia de una imagen que ya se muestra.
- 24 fotos por invitado, 5 por categoría; cola IndexedDB y subidas idempotentes. Las fotos pendientes se conservan en la cola interna para reintentar el envío, sin ofrecer copias descargables.
- Galería editorial, mosaico/contactos, originales en color, fuego después de confirmar eliminación y Undo. Movimiento reducido y acciones persistentes sin saltos de animación.
- Tarjetas de 24 px y cámara de 28 px de radio, menos líneas divisorias, emojis y Google a color. Títulos de navegación con ancho flexible y salto de línea solo cuando hace falta; cinco estilos de texto compartidos en todas las pantallas: título 36 px, encabezado 24 px, cuerpo 16 px, acción 16 px medium y metadatos 14 px. Los tamaños usan rem y admiten ampliación.
- Visor 1:1 ampliado y controles de cámara fijos al pie. Spot/Spotted se oculta tanto en el visor como en la confirmación de foto, y sigue disponible en las demás pantallas de invitados; confirmación Add to wedding, Retake y protección al salir con una captura sin agregar. Permiso denegado abre ayuda con pasos por navegador y reintento; no se promete abrir ajustes nativos desde una web.
- Libro adicional o combo digital + libro: solicitud persistente, bandeja privada, pago verificado manualmente o vía webhook, aprobación antes de impresión y tracking. El aviso actual es la bandeja de la app.
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.
| ID | Actor / situación | Resultado esperado o recuperación | Estado |
|---|---|---|---|
| P01 | Pareja nueva sin sesión | Solo splash de pareja; sin actividad ficticia | A |
| P02 | Pareja con sesión válida y boda | Entrar directo al dashboard | A; OAuth real pendiente |
| P03 | Pareja con sesión válida sin boda | Elegir uso y entrar al onboarding | A; OAuth real pendiente |
| P04 | Google no disponible | Aviso; no simular autenticación | C; prueba adicional pendiente |
| P05 | Google cargando / doble click | Botón ocupado y deshabilitado | C; prueba adicional pendiente |
| P06 | Google cancelado / fallido | Reintento y mensaje claro | C; prueba adicional pendiente |
| P07 | Sesión ausente o expirada | Rechazar operaciones de propietario sin identidad verificada | A; OAuth real pendiente |
| P08 | Nombre vacío o solo espacios | No crear boda; pedir nombre de pareja o evento | C; prueba adicional pendiente |
| P09 | Fecha o reveal faltante / inválido | No crear; pedir fecha válida | C; prueba adicional pendiente |
| P10 | Reveal anterior a la boda | Error sin perder los campos | C; prueba adicional pendiente |
| P11 | Cambiar estilo de cámara | Guardar selección y campos; foco permanece | C; prueba adicional pendiente |
| P12 | Elegir estilo con flechas/Home/End | Cambiar radio y anunciar selección | C; prueba adicional pendiente |
| P13 | Portada válida | Previsualizar y reducir resolución | C; prueba adicional pendiente |
| P14 | Tipo no soportado / más de 15 MB | Rechazo con indicación del formato o tamaño | C; prueba adicional pendiente |
| P15 | Lectura/decodificación de imagen fallida | Mantener formulario y permitir otra imagen | C; prueba adicional pendiente |
| P16 | Crear boda correctamente | ID nuevo, cero fotos, galería oculta | A |
| P17 | Crear otra boda | Mantener fotos antiguas separadas | A |
| P18 | Error guardando la nueva boda | No confirmar ni sustituir la boda anterior | C; prueba adicional pendiente |
| P19 | Dashboard sin fotos | Cero contadores, review/reveal deshabilitados | A |
| P20 | Copiar invitación correctamente | Confirmación solo después de copiar | C; prueba adicional pendiente |
| P21 | Portapapeles rechazado / ausente | Mensaje y foco en link seleccionable | C; prueba adicional pendiente |
| P22 | Generar QR | QR generado por el servidor, sin enviar la invitación a un proveedor externo | C; prueba adicional pendiente |
| P23 | Abrir foto para revisión | Foto de la boda actual; sin Keep ni Pending | A |
| P24 | Eliminar foto | Quitar y actualizar contador | A |
| P25 | Deshacer eliminación | Restaurar foto; aviso de éxito | A |
| P26 | Error al eliminar/restaurar | Revertir contador; no anunciar éxito | C; prueba adicional pendiente |
| P27 | Eliminar última foto | Volver al dashboard vacío | A |
| P28 | Revelar antes de hora | Galería abierta | A |
| P29 | Ocultar después del horario | Mantener oculta hasta revelarla manualmente | C; prueba adicional pendiente |
| P30 | Recargar galería oculta manualmente | Conservar decisión de la pareja | C; prueba adicional pendiente |
| G01 | Escanear QR por primera vez | Guest ID y sesión por boda | A |
| G02 | Cerrar y reescanear mismo QR | Reutilizar identidad, sesión por boda y progreso del servidor mientras se conserva la cookie | A |
| G03 | Misma persona en otra boda | Mismo guest ID, sesión distinta por boda | A |
| G04 | Otro navegador / datos borrados / incógnito | Nueva identidad; no prometer recuperar anterior | A |
| G05 | Otro invitado con el mismo QR | ID independiente, boda y fotos compartidas | A |
| G06 | QR de boda desconocida | No mostrar datos de otra boda | A |
| G07 | Invitación incompleta o boda desconocida | Mensaje del servidor, sin cargar la boda de otra persona | A |
| G08 | Entrar antes de fecha | Ver espera, cámara cerrada | A |
| G09 | Llegar el día de la boda | Acceder a categorías y cámara | C; prueba adicional pendiente |
| G10 | Abrir categoría con cupo | Cámara y número de tiros correctos | C; prueba adicional pendiente |
| G11 | Categoría con 5 fotos | Aviso; elegir otra categoría | A |
| G12 | Rollo con 24 fotos | Aviso; no capturar más | A |
| G13 | Progreso de otra persona | No descontar tiros del invitado actual | A |
| G14 | Cámara iniciando | Mensaje y disparador deshabilitado | C; prueba adicional pendiente |
| G15 | Cámara ausente | Mensaje útil; volver a categorías | C; prueba adicional pendiente |
| G16 | Permiso de cámara denegado | Abrir ayuda de permisos por navegador; Retry camera mantiene sesión y contador | A; B simulado; dispositivo físico pendiente |
| G17 | Cámara ocupada / desconectada | Error recuperable; no guardar foto inválida | C; dispositivo físico pendiente |
| G18 | Cambiar frente/trasera rápidamente | Ignorar respuestas anteriores y liberar stream al cambiar cámara | A; dispositivo físico pendiente |
| G19 | Flash disponible / no disponible | Torch cuando se soporte, efecto visual en otro caso | C; dispositivo físico pendiente |
| G20 | Capturar / doble disparo | Una captura, cámara liberada, confirmación | C; dispositivo físico pendiente |
| G21 | Retake | Descartar captura temporal; no consumir tiro | C; prueba adicional pendiente |
| G22 | Add to wedding exitoso / doble toque | Una foto asociada a guest/sesión/boda | A |
| G23 | Guardado falla por cuota | Conservar captura; contador sin cambios | A |
| G24 | Link directo a captured sin captura | Volver a categorías sin imagen rota | C; prueba adicional pendiente |
| G25 | Salir durante solicitud de cámara | Cerrar stream tardío; no dejar cámara activa | A |
| G26 | Reveal durante captura/guardado | No añadir foto después del cierre | A |
| G27 | Reabrir antes del reveal | Countdown; servidor impide acceder tanto a listado como a archivos y ZIP | A |
| G28 | Countdown llega a cero | Pasar al reveal abierto | C; prueba adicional pendiente |
| G29 | Reveal manualmente oculto | Explicar revisión; sin countdown falso en cero | C; prueba adicional pendiente |
| G30 | Galería con cero fotos | Mensaje explícito; no visor roto | A |
| G31 | Filtrar las 9 categorías | Selección accesible y resultados correctos | C; prueba adicional pendiente |
| G32 | Filtro sin resultados | Mensaje y alternativa All | C; prueba adicional pendiente |
| G33 | Abrir foto y anterior/siguiente | Navegación circular; botones con nombre | C; prueba adicional pendiente |
| G34 | Visor con una sola foto | Sin navegación inválida ni división por cero | C; prueba adicional pendiente |
| G35 | Flechas/Escape en visor | Navegar/cerrar con teclado | C; prueba adicional pendiente |
| G36 | Swipe/pinch/zoom | Navegar y ampliar sin cambiar foto durante pinch | C; dispositivo físico pendiente |
| G37 | Mis fotos por categoría | Solo fotos de ese guest ID | C; prueba adicional pendiente |
| G38 | Categoría personal vacía | Mensaje de ausencia y navegación disponible | C; prueba adicional pendiente |
| S01 | Borrador local corrupto | Recuperar formulario vacío; la boda y fotos subidas viven en servidor | C; prueba adicional pendiente |
| S02 | Cookies o almacenamiento denegados | No iniciar cámara sin sesión persistente; conservar captura si la cola local falla | C; prueba adicional pendiente |
| S03 | Generador UUID no disponible | Fallback con bytes criptográficos | C; prueba adicional pendiente |
| S04 | Dos envíos simultáneos | Reservar cupos de forma atómica; reintentos no duplican fotos | A |
| S05 | Sin conexión / reconexión | Cola interna IndexedDB y reintentos sin descarga; éxito solo tras confirmar servidor | A |
| S06 | Fallo de servidor / carga lenta | Carga, timeout y reintento; mantener campos y fotos pendientes | C; prueba adicional pendiente |
| S07 | 320×568 / 375×667 / 430×740 | Sin overflow horizontal ni CTA principal tapado | V, 51 comprobaciones |
| S08 | Teclado virtual / landscape / zoom 200 % | CTA y campo activo accesibles sin superposición | C; dispositivo físico pendiente |
| S09 | Lectores de pantalla | Labels, estados y orden de foco claros | C; dispositivo físico pendiente |
| S10 | Movimiento reducido | Suprimir confetti/transiciones; conservar funcionalidad | C; prueba adicional pendiente |
| S11 | Modificar hash, phase o ID | Servidor protege boda ajena, fotos ocultas, moderación y pedidos | A |
| S12 | Foto rota / descarga fallida | Mensaje y botón para reintentar imagen; originales en ZIP por partes | C; prueba adicional pendiente |
| S13 | Exportar / borrar datos definitivamente | Descarga de originales disponible; borrado de bodas y objetos implementado; cuenta completa por soporte | A; borrado de cuenta completo pendiente |
| C01 | Elegir solo digital | Solicitud asociada a boda y cuenta; precio confirmado antes de pagar | A, V |
| C02 | Comprar digital + libro antes de la boda | Un paquete, libro reservado, selección y diseño posteriores | A, V |
| C03 | Añadir libro después | Pedido de libro independiente; no volver a cobrar digital | A, V |
| C04 | Contacto incompleto | Validar nombre y email; mantener el formulario | A, C |
| C05 | Seleccionar fotos | Hasta 80; únicamente fotos disponibles de esa boda | A, V |
| C06 | Aún no hay fotos | Solicitar libro y acordar selección después | A, V |
| C07 | Enviar dos veces | Misma solicitud no crea dos pedidos | A |
| C08 | Pago por transferencia | Guardar solicitud para recibir IBAN; no presentar un pago exitoso | A |
| C09 | Checkout Stripe futuro (demo) | Demostración de la integración opcional; desactivada para compras actuales | C; integración P |
| C10 | Pago cancelado o fallo de red | Pedido guardado, pago pendiente; reintentar | C; integración P |
| C11 | Callback del navegador manipulado | No marca pagado; se exige notificación firmada de Stripe | A |
| C12 | Notificación de Stripe duplicada o firma falsa | Procesamiento idempotente; rechazar firma inválida | A |
| C13 | Stripe indica reembolso o disputa | Bloquear paso a impresión hasta revisar pago | C; integración P |
| C14 | Nuevo pedido de libro | Aparece en bandeja privada con nombre, email, boda y estado | A, V |
| C15 | Persona no autorizada abre bandeja | Acceso denegado por servidor | A |
| C16 | Registrar transferencia recibida | Operadora verifica importe completo y referencia; libro exige cotización de envío | A |
| C17 | Imprimir sin pago o aprobación | Servidor rechaza el cambio | A |
| C18 | Diseño aprobado y pago confirmado | Permitir etapa de impresión manual | A |
| C19 | Marcar enviado | Exigir tracking HTTPS; visible a la pareja | A |
| C20 | Descargar fotos para imprimir | Solo operadora autorizada; originales de ese pedido, ZIP por partes | A |
| C22 | Transferencia de plan profesional | Bandeja privada: email al cliente, importe y referencia; activar solo tras verificar recepción | A |
| C21 | Email o push a operadora | No conectado; actualmente se consulta la bandeja de la app | P |
| U01 | Alternar mosaico / hoja de contactos | Cambiar distribución, conservar selección accesible | B |
| U02 | Abrir foto de galería | Visor, zoom y navegación en color; originales y ZIP solo para organizador | B; gestos físicos P |
| U03 | Eliminar foto con efecto de fuego | Animar solo después de confirmar borrado; ofrecer Undo | B con API simulada; backend A |
| U04 | Falla del borrado | Foto conservada; sin animación de éxito | B con API simulada; backend A |
| U05 | Reducir movimiento | Sustituir fuego y transiciones por cambio breve | C |
Workspace, onboarding y planes
| ID | Actor / situación | Resultado esperado o recuperación | Estado |
|---|---|---|---|
| W01 | Elegir uso personal o profesional | Ambas opciones funcionan para una sola persona | A |
| W02 | Planner con varias bodas | Colección compacta con estados y filtros | A |
| W03 | Onboarding: datos básicos | Nombre de evento, fecha, ubicación opcional y slug automático | A |
| W04 | Onboarding: personalización | Change photo sobre la imagen, estilo y nombre heredado del paso 1 | C |
| W05 | Crear desde el diseño | Create wedding lleva directamente a Ready; cámara y galería activadas por defecto | A |
| W06 | Boda creada como borrador | QR privado; no recibe invitados antes de publicar | A |
| W07 | Preview como invitado | Vista privada sin cargar fotos ni consumir cupos | A |
| W08 | Account sin plan comprado | Muestra Free preview; planes con Choose plan y pago único | A |
| W09 | Publicar dentro del cupo | Boda activa y QR definitivo | A |
| W10 | Paquete agotado | Elegir otro paquete para publicar nuevas bodas | A |
| W11 | Archivar boda | Conserva fotos y cierra capturas; no devuelve el crédito usado | A |
| W12 | Restaurar boda archivada | Restaura dentro del año sin gastar otro crédito | A |
| W13 | Borrar boda | Confirmación escrita, borrado de fotos y cierre del link | A |
| W14 | Error durante borrado | Invitación cerrada; reintento seguro sin perder progreso | A |
| W15 | Plan vencido en período de gracia | 30 días de galería read-only y descargas del organizador, sin crear ni subir | A |
| W16 | Plan vencido después de la gracia | Archivo por 60 días; sin acceso de invitados | A |
| W17 | Compatibilidad de un plan anterior con exceso de bodas | Conserva bodas activas y bloquea las nuevas | A |
| W18 | Compatibilidad de cancelación de un plan anterior | Mantiene acceso hasta la fecha pagada | A |
| W19 | Elegir un paquete de pago único | Choose plan solicita el IBAN por email; un año por boda | A |
| W20 | Wedding de pago único | Habilita solo la boda pagada, sin suscripción | A |
| W21 | Cambiar permisos de invitados | Guardado y protección de cámara y galería; originales y ZIP solo para organizador | A |
| W22 | Cámara pausada por el organizador | No ofrece captura ni carga alternativa desde archivos | A servidor |
| W23 | Borrado con libro en curso | Bloquea pérdida de archivos necesarios para imprimir | A |
| W24 | Fin de retención | Revisión de retención; no hay borrado automático sin aviso | A; emails pendientes |
| W25 | Solicitud pendiente de transferencia | Solicitar datos no cobra ni activa un plan | A |
| W26 | Cuenta ajena intenta gestionar otra boda | Rechazo de configuración, preview, archivo y borrado | A |
| W27 | Volver a la app con sesión Planner | Abre la colección de bodas, conserva cada evento separado | A |
| W28 | Boda vacía / filtros sin resultados | Explica el estado y permite crear o cambiar el filtro | A |
| W29 | Planner esperando IBAN o verificación | Solicitud persistente con referencia y email; sin activar acceso pagado | A |
| W30 | Transferencia del plan confirmada | Muestra Current plan y los paquetes; nuevas compras suman bodas sin suscripción | A |
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
| Pendiente | Acción concreta |
|---|---|
| Cobro manual | Enviar 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 reales | Google 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ón | La 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 legales | Completar 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ón | Definir cupo de almacenamiento comercial, respaldos y recuperación; probar volumen simultáneo esperado. |
| Libro | Formato 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ísica | VoiceOver/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
| ID | Actor / situación | Resultado esperado o recuperación | Estado |
|---|---|---|---|
| G39 | Foto pendiente de una sesión anterior | Conservar entrada interna pendiente sin descontar la sesión nueva; sin descarga | A |
| G40 | Invitado solo con cámara | Abrir cámara real 1:1, capturar y agregar; sin selector de biblioteca | A servidor; B simulado |
| G41 | Galería desactivada por quien organiza | Mensaje claro; no mostrar fotos ni abrir el visor | A |
| G42 | Invitado sin copias ni descargas | Ocultar descargas y rechazar originales y ZIP del invitado, también tras reveal | A |
| G43 | Boda read-only por fin de plan | Mantener galería de lectura; sin fotos nuevas ni descargas de invitados | A |
| G44 | Sin biblioteca ni copia local descargable | Solo visor y disparador; no cargar archivos ni guardar en galería del teléfono | A servidor; dispositivo físico pendiente |
| G45 | Reveal mientras se está subiendo | No publicar una foto tardía; explicar que no se agregó y mantener la entrada interna sin descarga | A |
| G46 | Galería de más de 100 fotos | Cargar siguientes páginas sin repetir ni omitir fotos propias | A |
Revisión de la interfaz compacta
- Account muestra el plan actual, unifica Choose plan y concentra Sign out en rojo al final. Se quitaron los contenedores de cupos activos, Pay by bank transfer y More than 25 weddings.
- La navegación de Spotted tiene fondo blanco sobre el splash. El botón de Google conserva las dimensiones de su componente oficial y se ajusta al ancho disponible.
- Los avisos de éxito llevan ✓ y los errores ×; los envíos todavía pendientes no se anuncian como subidas completadas.
- La cámara conserva y reutiliza su conexión entre captura, confirmación y retoma. Los permisos iniciales y su persistencia dependen del navegador. No se introdujo un selector de archivos.
- Request photobook abre el formulario; el pedido guardado permite abrir un email con la referencia. El envío del email requiere la acción del usuario.
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.