Reveni Labs · una de nuestras apps
Tu clienta arma su lista de regalos. Sus invitados compran de ella sin crear una cuenta.
Reveni - Lista de regalos es una app de lista de regalos para tiendas Shopify. La organizadora elige productos de la tienda, comparte un enlace, y quien quiere regalarle algo lo compra por el paso a caja normal de la tienda. Sin registro, sin app aparte, sin cuenta de invitado.
Está terminada y en revisión. Abajo: cómo se ve, cómo se comporta cuando un pedido se mueve, siete afirmaciones comprobables y los documentos completos.
La salida del programa
Esto es lo que ve su mejor clienta
Una lista de regalos no es un testimonio ni una métrica: es la salida del propio programa, y una demo es honesta. Datos de ejemplo de una tienda de prueba, con las filas como se ven un martes cualquiera.
Boda
Ana y Julián
Sábado 14 de marzo, en Lima
Gracias por venir. Si quieren regalarnos algo, aquí está lo que nos falta para la casa nueva. Y si no, con que vengan estamos completos.Ana, en el mensaje de la lista
Juego de sábanas de algodón lavado, queen
1 de 1
DisponibleCopas de vino sopladas a boca
1 de 2
Reservado en parteOlla de hierro esmaltado, 5 litros
1 de 1
Ya regaladoPara que cocinen juntos y discutan poco. Los queremos.Tía Rosa · dedicatoria publicada con su permiso
Se ven tres de las once filas. La dedicatoria aparece porque quien la escribió pidió publicarla y la organizadora la aprobó: sin las dos cosas, no.
Lo que de verdad se rompe
Cómo se mueve un contador
Una lista de regalos es fácil hasta que el pedido se mueve. Cinco cosas que le pasan a un pedido de verdad, lo que Shopify dice de cada una y lo que queda en la lista.
| Lo que le pasa al pedido | Qué dice Shopify | Qué queda en la lista |
|---|---|---|
| Se paga | financial_status: paid | La unidad cuenta como regalada. La organizadora recibe el aviso. |
| Se autoriza y todavía no se cobra | financial_status: authorized | Reservada, no regalada. Nadie más la vuelve a comprar, y si el cobro falla se suelta. |
| Se cancela | cancelledAt con fecha, y las cantidades intactas | La unidad vuelve a estar disponible. Shopify no baja las cantidades al cancelar: sin una regla propia, un pedido cancelado contaría como regalo para siempre. |
| Se reembolsa una línea | refunds[].refundLineItems[] | Baja la cantidad viva, y si llega a cero la unidad vuelve a la lista. |
| Se edita el pedido y se quita la línea | currentQuantity baja, quantity se queda | Se anota como retirada y la unidad vuelve a la lista. |
La fila resaltada es la razón de que esa decisión viva en una columna generada de la base de datos y no en una rama de código.
Dentro de la tienda
Y esto es lo que ve en la ficha de producto
El bloque se instala desde el editor del tema y hereda su tipografía. Tiene tres estados, según lo que la clienta ya tenga. Los conmutadores son un grupo de radios: se recorren con el tabulador y las flechas, sin una línea de JavaScript detrás.
Reglas de la casa
Las seis maneras en que puede estar una fila
Arriba salen las tres que se ven. Aquí están las seis, con lo que significa cada una.
| Estado | Qué significa |
|---|---|
| Disponible | Nadie la ha tomado. |
| Reservado en parte | Alguien pagó una de dos unidades. |
| Retenido 20 minutos | Hay un carrito abierto con ella. |
| Ya regalado | Cobrado, con dedicatoria si la escribieron. |
| Dedicatoria en revisión | Escrita y aún no aprobada por la organizadora. No se ve en público. |
| Lista cerrada | Pasó el evento. Ya no acepta compras. |
Los seis a la vez no le pasan nunca a una lista de verdad. Están juntos porque así se revisan de un tirón, no porque así se vean.
Nada depende de nuestro servidor
La lista y el bloque de la ficha viven dentro del tema. Si nuestro servidor se cae, la tienda sigue vendiendo.
Lo público y lo privado van por separado
El correo de avisos y la dirección de entrega van cifrados y nunca entran en la proyección pública. Son dos volcados distintos, no dos permisos sobre el mismo.
La organizadora tiene la última palabra
Una dedicatoria se publica si quien la escribe lo pide y ella la aprueba. Si no, se queda guardada.
Sin autopromoción en la tienda
No hay marca nuestra en el escaparate, ni enlace a nosotros, ni aviso de cortesía. Su tienda es suya.
Comprobable, no prometido
Siete afirmaciones y dónde mirar
Cada una se comprueba abriendo un fichero del repositorio de la app. Todas están citadas también en la política de privacidad.
La app no puede ver la ficha de cliente de nadie.
Los permisos están en
apps/registry/shopify.app.toml.read_customersno aparece, ni entre los obligatorios ni entre los opcionales.La consulta de pedidos no puede pedir el correo, el teléfono ni la dirección del comprador.
app/lib/attribution/order-query.test.tsbusca esos campos en la consulta y rompe la compilación si alguien añade uno.De quien hace un regalo no se guarda nombre real, correo ni teléfono.
Las únicas columnas que existen, en
apps/registry/db/schema.ts, songifter_display_name,gifter_messageygifter_consent_public. No hay dónde guardar lo demás.La dirección IP nunca se guarda en claro.
hashIp(), enapp/lib/search.server.ts, devuelvesha256(dominio || ip)recortado, y es lo único que se escribe. La huella depende de la tienda.Lo que alguien teclea en el buscador se guarda hasheado, no en texto.
Se hashea con el dominio de la tienda antes de registrarse, en el mismo fichero, y en los registros de servidor sale como
[redacted].Un pedido cancelado devuelve la unidad a la lista, siempre.
counts_ases una columna generada de Postgres, enapps/registry/db/schema.ts: sicancelled_atno es nulo, valenone. No es código que pueda olvidarse de correr.La app no instala cookies propias ni píxeles de seguimiento.
Lo único que deja en el navegador, en
storefront/registry-theme/rv-registry.js, es una entrada desessionStorageque caduca a la hora.
Lo que no hay
No tenemos cifras que enseñarte
Ni conversión, ni ticket medio, ni cuántas tiendas la usan. No es prudencia: la app está terminada y todavía no la ha usado nadie en una tienda con clientas de verdad. Cualquier número de aquí saldría de una tienda de prueba nuestra, y no diría nada de la suya. Lo que sí hay es la app entera, sus documentos y siete afirmaciones que se comprueban en el código.
Si prefieres esperar a que alguien más la use primero, es una decisión razonable.
Los documentos
La política de privacidad, en su propia voz
Los dos primeros capítulos, tal como están escritos. El documento completo está en su página, con índice y enlace permanente por capítulo.
Política de privacidad de Reveni - Lista de regalosCapítulos 1 y 2 · extracto
Está en español y evita el lenguaje de abogado a propósito. Los marcadores en amarillo son datos sin rellenar, y se dejan a la vista.
Leer el extracto
1. Quién responde por sus datos
Hay dos situaciones distintas y conviene no mezclarlas.
Cuando la app trata datos de las clientas de una tienda, el comerciante es el responsable del tratamiento (el titular del banco de datos) y nosotros somos el encargado: tratamos esos datos por cuenta suya y siguiendo sus instrucciones. Las condiciones de ese encargo están en el acuerdo de tratamiento de datos. Si usted creó una lista de regalos en una tienda y quiere ejercer sus derechos, puede dirigirse a esa tienda o a nosotros: en el capítulo 10 explicamos las dos vías.
Cuando tratamos los datos de la cuenta del comerciante (el dominio de su tienda, su correo de contacto, su plan y el uso que hace de la app), el responsable somos nosotros.
Shopify es una empresa independiente con su propia política de privacidad. Nosotros accedemos a los datos de una tienda solo con los permisos que el comerciante concede al instalar la app.
2. Qué datos tratamos
2.1 Lo que la organizadora escribe dentro de la app
Es la mayor parte de lo que guardamos, y todo lo teclea ella:
| Dato | Obligatorio |
|---|---|
| Título de la lista | Sí |
| Tipo de evento y fecha | Sí el tipo; la fecha se muestra solo si ella lo elige |
| Nombres de los homenajeados | No |
| Mensaje para los invitados | No |
| Correo electrónico para recibir avisos | No, pero sin él no hay avisos por correo |
| Dirección de entrega o sucursal de retiro | No, salvo que quiera que los regalos lleguen a un sitio concreto |
| Productos, cantidades y orden | Sí |
| Si la lista aparece o no en el buscador | Sí, y viene apagado por defecto |
Nunca pedimos a Shopify el nombre, el correo, el teléfono ni la dirección de la organizadora. Ella escribe su correo y su dirección dentro de la app. Lo explicamos con detalle en el capítulo 3.
También están los términos de servicio y el acuerdo de tratamiento de datos, con sus cuatro anexos.
Un cabo suelto, a la vista
Todavía no hay por dónde escribirnos
Pendiente
[CANAL DE CONTACTO]
No hay correo ni número porque todavía no hay nadie al otro lado que responda en un plazo que valga la pena prometer. Preferimos el hueco declarado a una dirección que tarde una semana. Cuando exista, aparece en esta caja y en el capítulo 14 de la política.
Lo que sí funciona hoy es lo que Shopify obliga a atender: las peticiones de acceso y borrado llegan por sus avisos de cumplimiento y se atienden en plazo, como explica el capítulo 9 de la política.