Revisión de la app actual, propuesta de color, cuatro lenguajes de animación para el vaso y tres pantallas de espera sin personajes. Documento de trabajo para tomar decisiones, no para admirar.
Culto Café está en Calle Irunlarrea 8 bis, Pamplona, en la esquina de la zona de hospitales. El Hospital Universitario de Navarra queda unos 350 m al sur. Abriste el 24 de noviembre de 2021.
Eso no es un dato de contexto: es el brief. Tu cliente no es un oficinista con quince minutos libres. Es personal sanitario entre pacientes, gente saliendo de guardia y familiares que llevan horas esperando noticias.
⚠ Corrección: COWORK_CONTEXTO.md dice «Culto Café (Madrid)». Es Pamplona. Conviene arreglarlo para que el agente no trabaje con datos falsos.
Ninguna quiere jugar. Ninguna quiere explorar la carta. Las tres quieren lo mismo de siempre, ya, sin pensar.
Tres o cuatro minutos entre pacientes. Abre la app andando por un pasillo, con una mano. Si tarda más de 15 segundos, no vuelve.
6:00–8:00. Agotado, sensible a la luz de pantalla. Quiere algo grande y caliente sin decidir nada.
Lleva horas en una sala. Baja a por café por moverse. Puede estar viviendo el peor día de su vida.
Consecuencia de diseño: nada de celebrar de forma exuberante, nada de personajes simpáticos, nada de metáforas de latido o urgencia. Y ninguna app de café del mundo está diseñada para esta persona: ahí está tu hueco.
Revisado: Expo 55, Supabase, Stripe Connect, 4 Edge Functions, migraciones, RLS y errores de compilación.
| Área | Estado | Detalle |
|---|---|---|
| Pagos | Sólido | El precio se calcula en servidor, no lo envía el cliente. Idempotencia real: un doble toque no cobra dos veces. Webhook con firma verificada. |
| Secretos | Correcto | Claves privadas solo en Edge Functions. .env fuera del repositorio. Tokens en almacenamiento seguro del sistema. |
| Esquema base | Falta | No existe 001_initial_schema.sql. La base no es reconstruible y no se pueden auditar las políticas de orders ni profiles. |
| Privilegios | Por verificar | Si un usuario puede editar su propio campo role, se convierte en administrador. Hay que confirmarlo y blindarlo. |
| Reservas | Riesgo | Dos personas simultáneas pueden coger la misma mesa. Falta un índice único en base de datos. |
| Compilación | Errores | Recuperar contraseña está roto (resetPassword no existe). Y COPIA_APP_proyecto/ duplica la app entera dentro del repositorio. |
Tres problemas concretos, no de gusto:
#0A0A0A es negro puro. En OLED da bordes duros y en pantalla a media luz —un pasillo de hospital de noche— cansa la vista. Un negro con temperatura cálida descansa más.
Conviven #E0C9A3 (crema) y #D4AF37 (oro saturado). El segundo es un oro de bisutería y ensucia el conjunto. Sobra uno.
La paleta es genérica «premium oscuro». Podría ser una app de relojes. Ninguno de los tonos viene del producto que vendes.
Extraídas de materia real: crema de espresso, tueste, cerámica, leche. Todas mantienen el modo oscuro y superan contraste AA.
El naranja tostado es literalmente el color de la crema de un espresso bien extraído. Cálido, apetecible, y sin el brillo de bisutería del oro. El negro lleva marrón dentro, no es puro.
RecomendadaVerde salvia apagado sobre negro verdoso. El registro de las cafeterías de especialidad nórdicas: sereno, limpio, adulto. Es la más tranquila de las tres — encaja bien con el contexto hospitalario.
La más serenaTerracota viva sobre negro con violeta. La más contemporánea y la que más destaca en la tienda de aplicaciones. También la más arriesgada: llama la atención, y aquí llamar la atención tiene coste.
La más audazTu componente actual tarda 1500 ms en llenarse — «ceremonioso», dice el comentario del código. Para un sanitario con tres minutos eso es una eternidad. Aquí van cuatro alternativas; todas están animadas en bucle.
Barrido de calor (D) dentro del propio botón. Confirma sin retrasar. Es la firma de la marca.
Vertido (B) al abrir. Se ve el vaso llenarse una vez y se queda quieto. Nunca en bucle.
Aro de progreso (C) sincronizado con el tiempo real del pedido. Aquí sí puede respirar.
Con «reducir movimiento» activo, todo pasa a fundido de opacidad. Obligatorio, no opcional.
Cambio concreto en tu código: en DynamicCup.tsx, la duración de llenado pasa de 1500 a 450 ms, y las animaciones de tamaño (width/height, que hoy no usan el motor nativo) se sustituyen por scale con useNativeDriver: true. Eso solo ya sube la fluidez de forma notable en móviles modestos.
Retiro la criatura de espuma: tenías razón, en un entorno hospitalario un muñeco simpático es un riesgo. Tres formas de transmitir sin recurrir a ojos y sonrisa.
Naranja de crema de espresso sobre negro cálido. Un solo acento, cero oro de bisutería, y el color viene de tu producto. Si prefieres algo más sereno por el contexto hospitalario, Cerámica es la alternativa defendible.
Vertido de 600 ms en la ficha del producto, barrido de calor de 450 ms en el botón de añadir. Aro de progreso en la espera. Ninguna animación bloquea nunca una acción.
La opción 02: la crema del café girando bajo la información. Transmite sin personajes, es barata de producir y no se parece a nada del sector. Con «reducir movimiento», se congela.
Las tres decisiones son independientes: puedes aceptar el color y rechazar la espera, o al revés. Ninguna obliga a rehacer arquitectura — son tokens y componentes sobre lo que ya tienes.
1. Volcar el esquema a 001_initial_schema.sql
2. Blindar profiles.role contra auto-escalada
3. Índice único anti doble-reserva
4. Filtrar tables por cafetería
5. Arreglar recuperar contraseña y errores de compilación
6. Sacar COPIA_APP_proyecto/ del repositorio
1. Nueva paleta en src/constants/colors.ts
2. DynamicCup: 1500 → 450 ms y motor nativo
3. Pantalla de espera nueva
4. Modo noche automático por franja horaria
5. «Lo de siempre» en un toque desde el inicio
6. Pedido de equipo — varios cafés para una planta
El pedido de equipo es tu función más diferencial y no la tiene ninguna app de la competencia: una sola persona pide para toda una planta o turno, con pago dividido o único. En tu ubicación, eso no es una función más — es la razón por la que un servicio entero de enfermería instalaría la app.
Crema, Cerámica o Tueste. O una mezcla: dime qué te chirría y la ajusto.
Arco, Superficie o Retícula. Se pueden combinar: Superficie de día, Retícula de día con sol.
Mi consejo: seguridad primero. Los agujeros de la lista roja muerden en producción; el color no.