Temas
Novedades
Versiones
Qué trae cada versión de Colega Menus, de la más nueva a la primera. Hoy estás en la v1.125.0.
v1.125.025 de octubre de 2026Actual
WhatsApp: recibo digital y tarjeta de cliente con teléfono confirmado
Agregado
- Recibo digital por WhatsApp (
colega_recibo_digital): cuando una venta queda pagada completa (caja, comandera, terminal, Mercado Pago o repartidor) y el cliente dio su WhatsApp, le llega su recibo con sucursal, folio, fecha y hora, productos, subtotal, "IVA incluido", total, cómo pagó y el botón Ticket digital. Se prende o apaga en Avisos que se envían (grupo Pedidos). Las ventas de mesa no lo llevan por ahora (serían uno por ronda). - Tarjeta de cliente con teléfono confirmado: si la marca tiene WhatsApp conectado, al sacar (o volver a abrir) la tarjeta desde el menú llega un código de 6 números y la tarjeta se entrega al confirmarlo; el cliente queda además dentro de Mis pedidos. Sin WhatsApp conectado, sale sin código, como antes. En la caja y el panel no cambia.
Corregido
- La plantilla Ya casi tienes tu recompensa no se podía crear: Meta no acepta un texto que termine en una variable. Ahora termina con "¡Te esperamos!". Una prueba revisa que ninguna plantilla empiece ni termine con una variable.
Detalles técnicos
Notas
- Sin migración. Los números ya conectados reciben Recibo digital y la plantilla corregida al tocar Revisar plantillas en Panel → WhatsApp.
- El recibo se forma en el mismo paso que ya corre después de cada cobro (el de Fidelidad), solo de ventas de las últimas 3 horas, una vez por pedido.
- Pruebas en
tests/whatsapp-sucursal.test.ts.
v1.124.025 de octubre de 2026
Etapa 74: Stripe como pasarela de la Tienda en línea
Agregado
- Conectar Stripe en Panel → Tienda → Cobros en línea, igual que Mercado Pago: para todo el restaurante o solo una sucursal, lo hace quien tiene permiso de Pagos (Admin, Co-admin, Franquiciatario en su sucursal). Es Stripe Connect con la cuenta propia del restaurante (la que ya tenga o una nueva): cargos directos, el dinero, la comisión de Stripe y las disputas son del restaurante y Colega no cobra nada (regla 13). Cada alcance cobra con una sola cuenta: conectar Stripe reemplaza a Mercado Pago ahí (y al revés).
- El cliente paga en Stripe Checkout (en español): tarjeta, Apple Pay y Google Pay y Link, que guarda su tarjeta y sus datos para la próxima en cualquier tienda con Stripe (con código de verificación). Sin OXXO ni transferencias (tardan en confirmarse). Un reintento usa la misma sesión mientras siga abierta.
- Tarjetas guardadas en la cuenta del restaurante: si el cliente entró con su WhatsApp en Mis pedidos y el pedido es de ese mismo número, Stripe le muestra sus tarjetas guardadas y le ofrece guardar la nueva; su dirección de entrega queda también en su cliente de Stripe. Con un teléfono escrito a mano no se usa, para que nadie vea ni cobre tarjetas ajenas.
- Confirmación, expiración a la hora, "Mejor pago al recoger", aceptar automáticamente, Fidelidad, WhatsApp, reembolsos totales o parciales y cancelación con reembolso funcionan igual que con Mercado Pago. En Ventas el método se llama Stripe ("Tarjeta en línea (Stripe)" en el ticket); en la factura es forma de pago 31 (intermediario de pagos).
- Si el restaurante quita el acceso desde su Stripe, la cuenta queda desconectada y el pago en línea se apaga donde ya no hay cuenta.
Detalles técnicos
Notas
- Variables nuevas (Preview y Production):
STRIPE_CONNECT_CLIENT_ID(ca_…, Stripe → Connect → Configuración de OAuth) ySTRIPE_CONNECT_WEBHOOK_SECRET. En Stripe: activar OAuth para cuentas estándar, dar de alta las direcciones de regresohttps://menus.colegastudio.com/api/stripe/connect/callback(y la del Preview de la rama) y un webhook de eventos de cuentas conectadas a/api/stripe/connect-webhookconcheckout.session.completed,checkout.session.async_payment_succeededyaccount.application.deauthorized. Sin ellas, el botón de Stripe no aparece y todo sigue como antes. - Migración
0114_stage74_stripe_tienda: valorstripeenpayment_method,payment_accounts.access_token_encpuede ir vacío (Stripe no guarda permiso: se cobra con la llave de la plataforma en nombre deacct_…) y tablapayment_customers(cliente de Stripe de cada comensal por cuenta conectada). Probada en la rama de Neon de pruebas. src/server/payments/online.tsahora recibe las dos pasarelas (PaymentApis);paymentApis()reemplaza amercadoPagoApi().- Pruebas:
tests/stripe-tienda.test.ts(conectar y reemplazar, Checkout, reintento, confirmar una vez, tarjetas solo con WhatsApp verificado, avisos de otra cuenta, duplicados, reembolsos y acceso quitado).tests/mercadopago.test.tssigue pasando.
v1.123.024 de octubre de 2026
WhatsApp: elige qué avisos se envían, y métricas
Agregado
- Avisos que se envían (Panel → WhatsApp): un interruptor por aviso, agrupados en Pedidos, Reservaciones y lista de espera, Tarjeta de cliente y Para tu equipo. Vale para toda la marca (número de la marca y de cada sucursal); de fábrica todos encendidos. Lo cambian el Admin y los Co-admins. El código de acceso de Mis pedidos siempre sale. Si apagas un aviso de reservación, a quien dejó correo le llega por correo.
- Avisos de WhatsApp enviados en Métricas del super admin: el total de avisos que han salido por el WhatsApp de los restaurantes, Restaurantes con WhatsApp, Sucursales que avisan por WhatsApp (con su número o con el de su marca), Sucursales con número propio, y los enviados y no entregados este mes. Los avisos de prueba no cuentan.
- Soporte: WhatsApp del restaurante con la referencia de las 18 plantillas (nombre en Meta, a quién, cuándo sale, cuándo no y su texto), el número por sucursal y cómo elegir los avisos; Reservaciones, Fidelidad, Repartidores y Comunicación (equipo) al día. Esta documentación de la Etapa 73 no había llegado a la versión 1.121.0.
Detalles técnicos
Notas
- Migración
0113_whatsapp_avisos_apagados:restaurants.whatsapp_off(avisos apagados; vacío = todos salen). Se revisa al formar cada aviso, en el mismo lugar que el número de la sucursal o la marca. - Pruebas en
tests/whatsapp-sucursal.test.ts.
v1.122.024 de octubre de 2026
Corte de caja ciego
Migración 0112 (cash_shifts.count_attempts): correr npm run db:migrate:production antes del Merge.
Cambiado
- Caja → Cerrar caja (corte ciego): mientras el turno está abierto la caja ya no ve cuánto efectivo debe haber (ni los cobros por método, ni las propinas, ni el esperado). Solo el fondo, cuántos pedidos y cancelados, sus salidas de caja y el efectivo de repartidores. El servidor tampoco se lo manda (
openShiftView,src/lib/cash-count.ts). - Se cuenta el cajón escribiendo el total o con Contar por billetes y monedas ($1,000 a $20 y monedas de $20 a 50¢; la caja suma).
- Al tocar Cerrar caja: si cuadra, se cierra. Si no, solo dice No cuadra (sin decir por cuánto ni si sobra o falta): Volver a contar (3 intentos) o Revisión del encargado. Después de 3 conteos que no cuadran, la caja ya no responde si cuadra: solo cierra un encargado.
- Revisión del encargado: con el PIN de un gerente o encargado (o sin PIN si es quien está en turno) se ve el corte con lo que debe haber, lo contado y la diferencia; puede corregir lo contado y cierra con diferencia con nota obligatoria.
- Corte del turno desglosado: Efectivo, Tarjeta, Transferencia, Mercado Pago y Otro siempre, en $0 si no hubo (más terminal o plataformas si hubo), propinas, Total cobrado; efectivo de la caja (fondo, cobros en efectivo, propinas en efectivo, devoluciones, salidas), esperado, contado, diferencia, conteos que no cuadraron, quién autorizó y la nota. El ticket impreso del corte también lista todas las formas de cobro.
- Ventas → Cortes muestra los conteos que no cuadraron.
- Modo práctica y sus lecciones del corte, con el mismo corte ciego. Soporte → Caja (POS) actualizado.
v1.121.124 de octubre de 2026
Soporte: precio correcto de las facturas
Corregido
- Soporte → Plan y pagos y Admin → Cuentas decían que cada factura cuesta $2 (Complete) y $1.20 (Escala). El precio vigente desde el 20-oct-2026 es $3 + IVA en Complete y $2 + IVA en Escala (como ya decía Soporte → Facturación y como se cobra).
v1.121.024 de octubre de 2026
Etapa 73: WhatsApp de la marca o de cada sucursal, y más avisos
Agregado
- Número de WhatsApp por sucursal (Panel → WhatsApp): además del número de la marca, cada sucursal puede conectar su propio WhatsApp Business (mismo registro insertado de Meta, en coexistencia). Sus avisos salen de su número; la sucursal sin número propio sigue avisando con el de la marca. Se puede tener solo números de sucursal (las que no tienen número no avisan). Con una sola sucursal la página se ve como antes.
- Cada número tiene sus propias plantillas (se crean solas al conectarlo; si comparte la cuenta de WhatsApp con la marca, se adoptan las que ya existen) y su resumen de 30 días.
- Plantillas nuevas para lo que el sistema ya hacía y no avisaba por WhatsApp:
- Solicitud de reserva recibida (
colega_reserva_recibida): al pedir una reserva que el restaurante debe confirmar. Con WhatsApp ya no se manda el correo de "recibimos tu solicitud". - Ya estás en la lista de espera (
colega_lista_espera), con el botón a su lugar (al apuntarse con el QR o cuando el anfitrión lo anota). - Tarjeta de cliente (
colega_tarjeta_cliente): al sacar la tarjeta de Fidelidad (web, caja o panel), con su saldo y el botón a la tarjeta. La importación de clientes no la manda. - Ya casi, Subiste de nivel y Tu saldo vence en 7 días (
colega_tarjeta_casi,colega_tarjeta_nivel,colega_tarjeta_vence) y Regalo de cumpleaños (colega_tarjeta_cumple, de promoción: solo a quien aceptó promociones). Salen por WhatsApp solo si el cliente no tiene la tarjeta en su wallet y el aviso automático está encendido en Fidelidad (con wallet siguen llegando gratis al pase). - Entrega asignada (
colega_repartidor_entrega): al repartidor cuando la cocina o la caja le asignan un pedido, con el botón a su app. Si se lo quitan antes de que salga, no se manda.
- Solicitud de reserva recibida (
- La lista de plantillas del panel ya nombra las de reservaciones y lista de espera (antes salía la clave).
Por dentro
- Migración
0111_stage73_whatsapp_sucursal:whatsapp_connections.branch_id(una activa por marca y una por sucursal),whatsapp_messages.branch_id,loyalty_card_idydedupe_key(avisos que se repiten por periodo o persona; índice único conkind). - La bandeja elige el número al enviar: el de la sucursal del aviso o, si no tiene, el de la marca. Quitar el número de una sucursal no da de baja la suscripción si otro número usa la misma cuenta de WhatsApp.
- La sucursal llega del navegador y se revisa en el servidor: debe ser del restaurante de la sesión y de quien conecta; el número de la marca es solo de quien tiene toda la marca (regla 1). Panel → WhatsApp pasa a alcance mixto.
- Los restaurantes que ya estaban conectados reciben las plantillas nuevas al tocar Revisar plantillas.
- Pruebas:
tests/whatsapp-sucursal.test.ts(número de la marca y de la sucursal, aislamiento, desconectar con cuenta compartida, repartidor, tarjeta y avisos de Fidelidad, lista de espera).
v1.120.124 de octubre de 2026
Capacitación: pasos que no avanzaban
Corregido
- En la lección Conoce la pantalla (y en Pedidos del día), tocar Pedidos no pasaba al siguiente paso: el guía no reconocía el buscador de Pedidos porque su texto vive dentro del campo. Ahora también lee los letreros de los campos.
- La tarjeta del guía y el tablero del turno de prueba se ven encima del menú ☰ y de las ventanas, y el aviso "Eso es «…»" se borra al tocar el botón correcto.
v1.120.024 de octubre de 2026
Etapa 72 (entrega 2): lecciones, rutas por puesto y turno de prueba en hora pico
Agregado
- Practicar en la pantalla de bloqueo de la caja: con tu nombre y tu PIN entras a la práctica y tu avance queda a tu nombre. Al salir termina tu turno.
- Capacitación dentro de la práctica: tu ruta por puesto (Cajero, Mesero, Cocina, Anfitrión o Encargado; se puede cambiar) con 25 lecciones de 2 a 5 minutos que usan el menú y las mesas de tu sucursal. Solo salen las que aplican a tu sucursal.
- Lecciones guiadas: una tarjeta dice qué hacer, el botón se marca en naranja y el paso avanza solo cuando lo haces; si tocas otra cosa te dice qué era. Cada lección termina con un reto que se califica solo (pistas y errores restan) o una pregunta.
- Turno de prueba en hora pico: las tareas llegan de dos en dos (o cada 45 s aunque no termines), con pedidos en línea, mesas que piden la cuenta, cupones, cancelaciones, agotados, salidas de caja y el corte al final. Con 80 % o más quedas Capacitado. La cocina tiene su propio turno con la comandera.
- Personal → Capacitación en el panel: quién está capacitado, su avance, su último turno de prueba y Asignar una ruta con fecha y "Debe capacitarse". A esa persona la caja se lo recuerda al entrar, sin impedirle cobrar (C6).
Por dentro
- Migración
0110_stage72_capacitacion:training_progress,training_certificationsytraining_assignments. - El servidor de la práctica guarda un registro de cada acción; con él se califican las lecciones y el turno de prueba. Un "alumno robot" (
tests/pos-practice-lessons.test.ts) hace el turno de prueba completo con las acciones de la caja.
v1.119.024 de octubre de 2026
Etapa 72 (entrega 1): práctica de la caja y la comandera
Agregado
- Modo práctica en
menus.colegastudio.com/pos/practica(en una caja vinculada): la caja y la comandera de verdad, con el menú, las mesas, el plano y los ajustes de la sucursal, pero nada sale del navegador: ni pedidos, ni cobros, ni turnos, ni impresiones. Una franja naranja lo recuerda arriba, con el PIN de encargado de práctica (2580) para practicar autorizaciones. - Se practica todo lo del día a día: abrir caja, tomar pedidos con opciones y "Sin…", cobrar en efectivo, tarjeta o dos métodos con propina, enviar sin cobrar, pedidos en espera, cupón (prueba
PRACTICA10) y descuento con encargado, cancelar y reembolsar, salidas de caja, abrir cajón, corte que cuadra o no, mesas (abrir, rondas, comensales, cambiar, juntar, dividir y cobrar), agotados, pausar la Tienda y la comandera (aceptar, Listo, En ruta, Entregado, repartidor). - "¿Qué es esto?": al encenderlo, tocar cualquier botón de la caja o la comandera explica qué es, qué hace, qué pasa en el sistema y quién puede usarlo (más de 70 fichas).
- "Qué pasó en el sistema": cada acción muestra a dónde llegó (comandera, comanda, Ventas, corte, inventario, cliente, ticket digital, mesas, Tienda, Finanzas). La última aparece unos segundos abajo y todas quedan en el panel.
- Impresiones en pantalla: el ticket, la comanda, la comanda CANCELADO, la cuenta de la mesa y el CORTE DE CAJA salen como papel en la pantalla.
- Simular: llega un pedido de la Tienda en línea, una mesa llama al mesero o pide la cuenta.
- Empezar de cero borra toda la práctica; Salir regresa a la caja como estaba.
Por dentro
- La caja y la comandera toman sus acciones de un contexto (
src/app/pos/pos-actions.tsx), igual que Inventarios; la práctica pone las suyas (src/lib/pos-practice/server.ts) con las mismas firmas y los mismos mensajes, revisadas por TypeScript contra las reales. No cambia nada de la caja real.
v1.118.124 de octubre de 2026
Publicar aunque Google Fonts no responda
Arreglado
- La imagen para compartir en redes (Open Graph) usa las fuentes Inter del proyecto si Google Fonts no responde al publicar. Antes, sin ninguna fuente, se caía todo el build de Producción (v1.117.0 y v1.118.0 no se pudieron publicar).
v1.118.024 de octubre de 2026
"Lo que puedes lograr" en WhatsApp, Asistente y Plataformas
Agregado
- Tarjetas de "Lo que puedes lograr" en tres funciones más:
- WhatsApp: mientras no está conectado.
- Asistente para comensales: si está apagado o todavía no tiene preguntas.
- Plataformas de delivery (Uber Eats, Rappi y DiDi Food): si ninguna está encendida en la sucursal.
- Ya son 20 funciones con sus tarjetas. Finanzas sigue sin ellas a propósito (la lista de gastos queda vacía cada mes nuevo).
Corregido
- Transferir a otra sucursal vuelve a estar disponible: desde la v1.113.0 solo vivía en la tarjeta del tablero y se había quitado. Ahora está en la caja, menú ☰ → Pedidos (la lista), en el detalle del pedido, junto a Cobrar y Cancelar.
Documentación
- Soporte al día con los cambios recientes: tablero de la comandera para la cocina (abrir y cerrar tarjetas, Ver en grande, cobrar y cancelar desde Pedidos), elegir paso a paso en la caja y en la Tienda, modificadores fuera del menú digital, opciones de precio contra modificadores y "Lo que puedes lograr".
v1.117.024 de octubre de 2026
Etapa 48: cobro con terminal (Mercado Pago Point)
Agregado
- Cajas e impresoras → Terminales: conecta las Mercado Pago Point Smart de cada sucursal con la cuenta de Mercado Pago que ya cobra la Tienda en línea (o la propia de la sucursal). Explica cómo se conecta y cómo funciona, con los pasos y su estado; al agregarla la pasa a modo PDV; se nombra, se liga a una caja y se quita (con opción de regresarla a modo normal) (T1–T5).
- Método "Terminal" al cobrar en Caja (pedido nuevo y Pedidos) y en Mesas, también al dividir la cuenta en partes iguales o por productos: el monto exacto, con la propina si va en la tarjeta, llega solo a la terminal (T6, T7).
- El cobro se registra solo cuando Mercado Pago lo aprueba (aviso firmado o consulta de la caja, una sola vez). Rechazado, cancelado en la terminal o vencido a los 15 minutos: no se registra nada y la caja deja reintentar o cobrar de otra forma. Se puede seguir trabajando mientras el cliente paga; una terminal atiende un cobro a la vez (T8–T12).
- Cobro sin aplicar (el pedido se canceló o ya estaba pagado cuando pasó la tarjeta): queda "Por reembolsar" en Terminales y quien maneja Ventas lo reembolsa (T13).
- Reembolsar en terminal desde el pedido en la caja, total o parcial, con motivo y siempre con un encargado (en turno o con su PIN) (T17).
- Corte de caja: "Tarjeta en terminal" aparte de "Tarjeta manual" en pantalla y en el ticket del corte; con un cobro esperando en la terminal no se cierra la caja (T16).
- Terminal simulada (solo fuera de Producción) para probar todo en Preview: Tomar, Aprobar, Rechazar, Cancelar en terminal y Dejar vencer desde el panel.
- En terminal: Pedidos y Mesas marcan el pedido o la mesa con un cobro esperando en la terminal (T8). Ventas filtra por método Terminal.
- Tarea cada 5 minutos (
/api/cron/terminals) que revisa los cobros que siguen esperando (T18). - Soporte: artículo nuevo Terminales Mercado Pago Point y Caja actualizada.
Detalles técnicos
Notas
- Migración
0109_stage48_terminales: tablaspayment_terminalsyterminal_charges,order_payments.terminal_charge_idyorder_refunds.staff_id. - La aplicación de Mercado Pago debe tener activos el producto Point y los avisos del tema "order" (por verificar con una terminal real).
- Fuera de esta etapa: Clip y terminales de bancos, repartidor con terminal y meses sin intereses.
v1.116.024 de octubre de 2026
Páginas vacías que venden: lo que puedes lograr
Agregado
- "Lo que puedes lograr" en las páginas vacías o sin configurar del panel: cinco tarjetas (tres arriba y dos anchas abajo) con título, descripción e ilustración de lo que logra cada función. Las ilustraciones están hechas de piezas de interfaz (teléfono, tarjetitas con cifras, renglones, hoja, gráfica y etiquetas) con la paleta de colores del panel.
- 17 funciones con sus tarjetas: Pedidos y punto de venta, Menú, Tienda en línea, Repartidores, Mesas, Reservaciones, Inventarios, CEDIS, Ventas, Clientes, Cupones, Fidelidad, Reseñas y opiniones, Tienda de artículos, Finanzas, Personal y Facturación.
- Dónde salen: Pedidos, Tienda en línea, Ventas, Clientes y Cupones sin Ventas activo; menú sin categorías; sin clientes, cupones, mesas, repartidores, reseñas, artículos, personas o emisores de facturación (no cuando una búsqueda no encuentra nada); CEDIS sin ligar; y debajo de la invitación de Escala en Inventarios, CEDIS y Reservaciones.
- En el kit:
EmptyStaterecibeshowcase="<módulo>"y pinta las tarjetas (src/components/panel/module-showcase.tsx); la cuadrícula se acomoda al ancho de su contenedor.
v1.115.024 de octubre de 2026
Etapa 65 (entrega 2): artículos en la caja
Agregado
- Menú | Artículos en la caja de una sucursal con la Tienda de artículos: cambia la cuadrícula (con las categorías de la tienda), el pedido es el mismo. Comida y artículos en un solo ticket, un solo cobro.
- Escanear para vender: el lector USB o Bluetooth agrega el artículo al ticket desde Menú o Artículos (las tarjetas de fidelidad se siguen leyendo igual); con la cámara, Escanear en Artículos. Funciona sin internet con la copia de la caja.
- Tallas y colores en la caja: cada una con su precio de la sucursal y cuántas quedan.
- Existencias que bajan solas al vender (también en Complete) y regresan si se cancela el pedido (un artículo no es merma).
- No vender artículos sin existencia (P6): interruptor por sucursal en Tienda de artículos → Existencias, apagado de fábrica.
- Corte de caja: "De eso, artículos de la tienda: $X (N piezas)" en pantalla y en el ticket del corte.
- Comandera: los artículos se ven con una bolsa (se empacan); retomar un pedido en espera recuerda la talla.
Cambiado
- Los artículos no salen en las comandas de cocina (impresora de red, diálogo de impresión y sin internet) (P11).
- Cupones y recompensas de Fidelidad cubren solo la comida; el descuento manual de la caja, todo el pedido (P8).
- Fidelidad (P7): los artículos no suman si al configurar la tienda se eligió "No, solo la comida" o si el artículo dice "No suma".
Detalles técnicos
Notas
- Migración
0108_stage65_caja_articulos:order_items.retail_variant_id(el renglón es de la Tienda;product_ides el artículo) ybranches.retail_require_stock. - Las ventas, finanzas, cupones de artículos, factura por artículo y venta en línea de la Tienda son la entrega 3; las devoluciones y cambios de talla vienen en el siguiente PR.
v1.114.024 de octubre de 2026
Menú sin modificadores, Tienda paso a paso y guía de opciones
Cambiado
- Menú digital: el detalle del platillo ya no muestra los modificadores (salsas, extras, "¿algo que quitar?"); el cliente se los pide a quien lo atiende. Se siguen viendo las opciones de precio con su precio (CH $35 · M $42 · GR $49).
- Tienda en línea y pedido desde la mesa paso a paso, como en la caja: barra de pasos con los colores del restaurante (verde = listo), una pregunta a la vez que avanza sola al completarse, flechas para ir y volver, y Resumen con lo elegido ("Cambiar") y la nota para la cocina. "Agregar" dice "Faltan N pasos" y lleva al primero que falta.
- La caja y la Tienda usan la misma lógica de pasos (
src/lib/use-product-steps.ts). - Leyendas del panel: "Varias opciones" explica que son tamaños o presentaciones con su precio, que el cliente las ve en el menú y que cada una descuenta su receta (Recetas → Ligar platillos); las plantillas solo llenan nombres y precio. Modificadores (en el producto y en Menú → Modificadores) explica que no se ven en el menú digital, que se eligen en la caja y en la Tienda y que descuentan con su receta.
Documentación
- Nueva guía
docs/OPCIONES-Y-MODIFICADORES.md(cuándo usar cada uno, ejemplo de cafetería) y su resumen en el vocabulario deCLAUDE.md.
v1.113.023 de octubre de 2026
Comandera en tablero pensada para el cocinero
Cambiado
- Tarjetas del tablero para la cocina: lo protagonista es lo que hay que preparar. Producto en grande (cantidad, nombre y opción de precio) y cada modificador en su propio renglón ("+ Red Buffalo"), lo que va "Sin" en rojo y la nota del producto resaltada. Arriba, solo el número del día, la mesa o el identificador, los minutos y, en chico, canal, modalidad y cliente.
- Tarjetas que se abren y se cierran (flecha a la derecha): cerrada queda una línea con lo que lleva ("1 Paquete Personal · 2 Refresco"). "Nuevos" y "En preparación" abren abiertas; "Listos" y "Terminados", cerradas. Cada columna tiene un botón para cerrar o abrir todas.
- Ver en grande: el botón de cada tarjeta abre el pedido casi a pantalla completa, con letra grande para leerlo de lejos (por comensal si se tomó así) y el botón de lo que sigue (Aceptar, Listo, Entregado).
- Sin dinero ni administración en el tablero: total, "Por cobrar", Cobrar, Cancelar, Transferir y el ticket salen del tablero. Un pedido listo que falta cobrar dice "Por cobrar: se cobra en caja".
- Cobrar en POS → Pedidos (Lista): el detalle de un pedido ahora tiene "Cobrar · $X" (con propina, y al cobrar todo uno listo se marca entregado), junto a reimprimir, facturar y cancelar o reembolsar.
Detalles técnicos
Notas
- Aplica al tablero de la caja, de la pantalla de Comandera y del panel (Pedidos). En el panel, cancelar o reembolsar sigue en Ventas.
v1.112.023 de octubre de 2026
Caja: elegir modificadores paso a paso
Cambiado
- Agregar un producto con opciones en la caja ahora es paso a paso. Arriba, la barra de pasos (una por opción de precio, cada grupo de modificadores, "Quitar ingredientes" y "Resumen"): los listos en verde con palomita, los que faltan con punto ámbar y el actual en naranja; debajo, la barra de avance ("3 de 4 listos").
- Cada paso muestra solo sus opciones, en botones grandes de 2 o 3 columnas. Al completar un paso (llegó a su máximo, por ejemplo "Elige 1") salta solo al siguiente; las flechas ‹ › y tocar un paso de la barra llevan a cualquiera.
- Resumen: lo elegido en cada paso (tocar "Cambiar" regresa a ese paso) y la Nota del producto, que es solo para ese producto (la nota del pedido sigue en el carrito).
- La cantidad y Agregar siempre están abajo. Si falta algo, el botón dice "Faltan 2 pasos" y lleva al primero que falta.
- Editar un producto del carrito abre en el Resumen.
v1.111.023 de octubre de 2026
Etapa 65 (entrega 1): Tienda de artículos
Agregado
- Tienda de artículos, complemento de $299 al mes por sucursal en Complete y en Escala (P2). Se activa por sucursal en Suscripción → Plan de cada sucursal (Activar tienda / Quitar tienda); se suma a la misma suscripción como una partida más. En la prueba gratis se activa sin costo; al quitarla sigue activa hasta el fin del mes pagado (P3).
- Catálogo (
/app/retail, de toda la marca): categorías propias (no las del menú), artículos con foto, precio con IVA, descripción, IVA y clave del SAT, y tallas, colores o sabores: cada variante con sus códigos de barras, su código interno para etiquetas y, si quieres, su propio precio (P4). Escanear un código abre su artículo o crea uno nuevo con ese código. Precio por sucursal opcional. Archivar y recuperar (regla 7). - Existencias (
/app/retail/stock, de la sucursal): piezas, mínimo, valor y estado de cada variante; Entrada de mercancía escaneando (cada escaneo suma una pieza) con costo por pieza; ajuste por conteo y mínimo. Funciona también en Complete, solo para los artículos (P5). - Configura tu tienda: asistente de 4 pasos al entrar la primera vez: si los artículos suman en fidelidad (P7), categorías sugeridas, primer artículo y prueba del lector.
- Etiquetas de artículos (
/app/retail/labels) con la misma hoja de etiquetas de Inventarios. - Super admin: en cada sucursal de la Cuenta, prender o apagar la Tienda y darla de cortesía hasta una fecha.
- Distribuidores (P10): de lo que se cobra por la Tienda, la mitad es del distribuidor y la mitad de Colega Studio; la regalía de $59 ya no se calcula sobre esa partida. En Pagos del distribuidor, "Incluye Tienda de artículos".
- Módulo Tienda de artículos en "Elige tus herramientas" y Más herramientas (con la etiqueta "Complemento $299"), sección de permisos Tienda de artículos (también en roles personalizados) y su tema en Soporte.
Cambiado
- La compra de mercancía de la Tienda no se registra como gasto en Finanzas: sube el valor del inventario (P13).
- Los artículos no aparecen en Menú → Insumos.
- La foto de un solo elemento ya no dice "Hasta 3".
Detalles técnicos
Notas
- Migración
0107_stage65_tienda_articulos: tablasretail_settings,retail_categories,retail_products,retail_variants(cada variante es un insumo en piezas) yretail_branch_prices; columnasbranches.retail_enabledyretail_until,client_accounts.billed_retail_quantityydistributor_transfers.retail_cents. - Variable nueva
STRIPE_PRICE_ID_RETAIL(la imprimenpm run stripe:setup). Sin ella, en Producción no se puede activar la Tienda (no se regala). - Siguientes entregas: la venta en la caja (Menú | Artículos en el mismo ticket), y después ventas y finanzas de la tienda, cupones de artículos, fidelidad, factura por artículo y venta en línea.
v1.110.023 de octubre de 2026
Etapa 71: Soporte y documentación
Agregado
- Soporte (
menus.colegastudio.com/soporte): la documentación completa de Colega Menus, organizada por módulo (Empieza aquí, Menú, Operación, Ventas y clientes, Administración, Inventarios y CEDIS, Colega Cards y socios). Cada tema explica dónde está, cómo funciona, el paso a paso, cada ajuste con su valor de fábrica, casos de uso, quién puede usarlo, en qué plan viene y preguntas frecuentes. - Ayudas gráficas: diagramas de pasos (por ejemplo, el camino de un pedido), "Dónde está" con enlace directo a la pantalla del panel, avisos de Consejo, Importante, Escala y Ejemplo, tablas y las ilustraciones 3D de cada módulo.
- Buscador en Soporte: busca en todos los temas, sin importar acentos, y lleva directo a la sección.
- Versiones (
/soporte/versiones): qué trae cada versión, de la más nueva a la primera; lo técnico (migraciones, notas) va plegado en "Detalles técnicos". - Panel: "Soporte y documentación" en Ayuda del menú lateral. En la página de ventas, "Soporte" en el pie.
- Super admin: Soporte en Sistema, con la documentación del equipo de Colega Studio (cuentas, socios, Colega Cards, enlaces, Academia, comunicación y ajustes globales) en
/admin/soporte, y la versión del sistema al final del menú lateral (lleva a Versiones).
Detalles técnicos
Notas
- Sin migración. Los temas viven en
src/content/soporte/(guía endocs/GUIA-SOPORTE.md); la versión es la primera de este CHANGELOG. - Regla nueva: todo cambio visible actualiza su tema de Soporte en el mismo PR.
tests/soporte.test.tsfalla si una página del panel, del super admin o de las apps (caja, CEDIS, repartidor, checador, menú público, Colega Cards, anfitriones, distribuidores) no tiene quién la explique, si un módulo no tiene tema o si un enlace entre temas no lleva a ningún lado. - En un dominio de marca,
/soportemanda amenus.colegastudio.com/soporte.
v1.109.023 de octubre de 2026
Repetir un grupo de modificadores en el producto (combos)
Agregado
- El mismo grupo de modificadores se puede agregar varias veces a un producto (combo de 3 hamburguesas: "Sabor" y "Queso" para cada una). En el producto, "Agregar un grupo…" ya muestra también los que están, marcados "otra vez"; la nueva vez llega con el nombre "Sabor (2)" para cambiarlo ("Hamburguesa 2: Sabor") (R1). Cada vez tiene sus propias reglas (obligatorio, cuántas, incluidas…); las opciones se editan una sola vez en el grupo.
- Cada elección sabe de qué vez es: en el menú, la Tienda, la mesa con QR y la caja cada vez es su propia pregunta; el servidor revisa las reglas de cada una (regla 14).
- Comanda, ticket, Comandera, pedido y repartidor muestran el nombre de la vez cuando el grupo se repite: "Hamburguesa 2: Sabor · Mango habanero" (R2). Los grupos que no se repiten se ven como siempre.
- Retomar un carrito en espera y "Repetir pedido" conservan a qué vez iba cada opción.
- Plantilla del catálogo: un grupo puede repetirse en un producto si cada vez tiene su nombre.
Detalles técnicos
Notas
- Migración
0106_modificador_repetido: quita la regla de "un grupo una vez por producto" y agregaorder_item_modifiers.link_idyshow_group. - Los grupos que ya se duplicaron a mano ("Hamburguesa 1: Sabor", "Hamburguesa 2: Sabor") se quedan como están (R3).
- Carritos y pedidos de antes (IDs de opción sueltos) siguen valiendo: cada opción va a la primera vez con lugar.
- "Ligado a" apunta a la primera vez del otro grupo.
- Pruebas:
tests/modificador-repetido.test.ts.
v1.108.023 de octubre de 2026
Etapa 50 (parte A): plataformas de delivery en el POS
Agregado
- Uber Eats, Rappi y DiDi Food como canales del POS: se encienden por sucursal en Plataformas de delivery (nuevo, en el menú del panel). Al capturar el pedido se elige la plataforma y se escribe su código (el que dice el repartidor); no se puede capturar dos veces el mismo código.
- Precio de la plataforma: cada plataforma puede llevar un aumento de precio (por ejemplo +20 %, redondeado a pesos) para registrar lo que pagó el cliente. Sin envío, teléfono, cupones ni descuentos: eso lo maneja la plataforma.
- Pagado con "Plataforma": el pedido llega a la comandera ya pagado; se ve en el corte, pero no entra al efectivo esperado. No crea Cliente.
- Comandera: franja y etiqueta con el color y el nombre de la plataforma y su código en grande; filtro Todos · Propios · Uber Eats · Rappi · DiDi Food cuando hay pedidos de plataformas. Sin "Asignar repartidor" en esos pedidos (lo lleva la plataforma).
- Comisión estimada por pedido con los ajustes de la sucursal (% de comisión, cargo fijo e IVA), guardada al enviarlo.
- Ventas: filtro de canal con POS · Tienda en línea · Todas las plataformas · Uber Eats · Rappi · DiDi Food y cada canal del POS; tabla Plataformas de delivery con pedidos, venta, comisión, lo que te depositan y el % que se queda cada plataforma. El CSV trae el código y la comisión.
- Finanzas: las comisiones estimadas entran al estado de resultados como su propio renglón ("Comisiones de plataformas (estimadas)").
- Pedidos de antes capturados como "Otro: Rappi" (o Uber, DiDi): un aviso en Plataformas de delivery los pasa a su canal con un toque.
docs/SOCIOS-PLATAFORMAS.md: lo necesario para pedir acceso de socio integrador a las tres plataformas (partes B y C).
Detalles técnicos
Notas
- Migración
0105_stage50_plataformas_delivery(canales y métodoplatform,delivery_platform_settings,orders.external_codeyorders.platform_commission_cents). - La comisión no incluye promociones pagadas por el restaurante ni retenciones de ISR e IVA: llegan con la liquidación (Parte D).
v1.107.023 de octubre de 2026
Tiempo real
Agregado
- Las pantallas de la operación se actualizan al momento, sin esperar la siguiente consulta: comandera (caja y panel), pantalla de cocina y lista de pedidos del POS, campana de pedidos del panel, Mesas del POS (llamar al mesero, pedir la cuenta, cuentas abiertas), reservaciones y lista de espera del POS, pausa de la Tienda en la caja, vista del repartidor, y del lado del comensal la página de su pedido y su lugar en la fila. En la prueba, el aviso llegó en menos de medio segundo.
- Sin migrar de base de datos ni contratar otro servicio: Neon avisa con
LISTEN/NOTIFYde Postgres y Vercel mantiene abierta la conexión con cada pantalla (Server-Sent Events).
Detalles técnicos
Cómo funciona
- Una función de la base (
live_notify) avisa por el canallivecada vez que se guarda un cambio enorders,order_payments,order_transfers,table_tabs,table_tab_tables,dining_tables,reservations,reservation_tables,waitlist_entriesystore_settings. El aviso sale solo al guardarse (con el COMMIT) y no lleva datos, solo a quién le importa:b:<sucursal>,o:<pedido>,w:<lugar en la fila>yd:<repartidor>. src/server/live.ts: una sola conexión por instancia escucha el canal y reparte cada aviso. Cada pantalla abierta recibedata: 1y vuelve a pedir lo suyo con sus acciones de siempre, así que los permisos no cambian (la regla de aislamiento sigue en el servidor)./api/live?for=pos|panel|rider(el equipo; quién es sale de las cookies: la caja escucha su sucursal, el panel las sucursales a las que la persona tiene acceso y el repartidor sus pedidos) y/api/m/{slug}/live?order=…|wait=…(el comensal, solo con el código de su pedido o de su lugar en la fila).useLive(src/lib/use-live.ts): las pantallas de una misma página comparten una conexión. Al reconectarse (cada 4.5 minutos, o al volver la red) se ponen al día.- La consulta periódica se queda como respaldo, más espaciada: comandera, pantalla de cocina y Mesas cada 30 s (antes 4–8 s), página del pedido cada 30 s (antes 5 s), campana, lista de pedidos del POS, reservaciones, fila y repartidor cada 60 s. Esto también baja mucho las consultas a Neon.
Notas
- Migración
0104_live_notify(función y triggers, se puede repetir sin problema). Ya está aplicada en la base de pruebas. Esta versión no se publica con el PR desde el celular: primero vanpm run db:migrate:productiondesde la Terminal. - La escucha usa la conexión directa de Neon (sin
-pooler), porque el pooler trabaja por transacción y no entrega avisos. - El menú público sigue revisando su huella cada 15 s: es la única pantalla con miles de visitantes anónimos, y sus cambios no son urgentes.
- Pruebas:
tests/tiempo-real.test.ts(qué avisa cada cambio, y que lo que no se guarda no avisa).
v1.106.023 de octubre de 2026
Etapa 70 (entrega 2): cobrar por comensal y nombres
Agregado
- Dividir por comensal (P5): en Cobrar → Dividir de una mesa tomada por comensal, nueva pestaña "Por comensal" (sale primero). Cada comensal con lo que pidió y su monto, y un botón Cobrar que cobra todo lo suyo de un toque (con sus pagos y su propina; por dentro usa "Por productos"). Lo de la mesa lo paga uno ("Lo paga uno") o, cuando ya pagaron todos los comensales, se reparte entre ellos en partes iguales.
- Cuenta de la mesa por comensal: la cuenta impresa (y el ticket de la mesa) sale agrupada por comensal, cada uno con su subtotal, y al final "Para la mesa".
- Nombre del comensal (P3): en la caja, tocar otra vez el comensal elegido abre "Nombre del comensal" (opcional, se puede quitar). Se ve en la barra y en el pedido, se guarda en la cuenta de la mesa con la ronda y sale en la comanda ("COMENSAL 2 · ANA"), en la cuenta y al dividir. Las siguientes rondas de esa mesa ya traen los nombres.
Detalles técnicos
Notas
- Sin migración (usa
table_tabs.seat_namesde la v1.105.0). - Las ventas sin internet no suben nombres de comensal (el comensal de cada platillo sí).
- Pruebas:
tests/etapa-70-cobro.test.ts(nombres en la cuenta, borrar un nombre, cobrar lo de un comensal y aislamiento entre Cuentas) y la cuenta por comensal entests/etapa-70.test.ts.
v1.105.023 de octubre de 2026
Etapa 70 (entrega 1): pedido por comensal en la mesa
Agregado
- Tomar pedidos por comensal (Panel → Mesas → Ajustes, por sucursal, apagado de fábrica) (P1).
- En la caja, al tomar la orden de una mesa: barra de comensales
1 · 2 · 3 · … · Mesa · +arriba del pedido. Lo que se agrega va al comensal elegido; "Siguiente comensal" pasa al que sigue y "Igual que el anterior" copia lo del comensal anterior. El pedido se ve agrupado por comensal y cada platillo se puede mover a otro. "Mesa" es para lo compartido (P2). Con+se agrega un comensal y, al enviar, sube el número de comensales de la mesa (P6). - Comanda impresa rediseñada: una sola comanda por ronda para toda la mesa ("MESA 5 · 4 COMENSALES"), con un encabezado negro grande por comensal ("COMENSAL 2 · ANA", "PARA LA MESA") y al final el resumen "PREPARA" con el total de cada producto (P4). Cada estación recibe solo lo suyo, igual separado. Vale para Star, Epson, Colega Print y Bluetooth.
- Resumen Prepara se apaga por impresora (Cajas e impresoras → impresora de comandas).
- Comandera en pantalla: los pedidos de mesa se ven en bloques por comensal con la línea "Prepara".
- Las ventas sin internet guardan y suben el comensal de cada platillo.
Detalles técnicos
Notas
- Migración
0103_stage70_comensales:table_settings.seat_ordering,order_items.seat,table_tabs.seat_namesyprinters.prep_summary. Probada en la rama de Neon de pruebas. - Sin el ajuste encendido (o con pedidos sin comensal) todo se ve e imprime como antes.
- Entrega 2 pendiente: "Dividir por comensal" al cobrar, ticket de la cuenta por comensal y nombres de comensal (P3, P5).
- Pruebas:
tests/etapa-70.test.ts(orden de comensales, resumen Prepara y comanda por comensal).
v1.104.123 de octubre de 2026
Checador: una sucursal a la vez y guía de uso
Cambiado
- Cajas e impresoras → Checador: en vez de todas las sucursales una debajo de otra, un selector Sucursal arriba (si hay más de una) y solo se ajusta esa.
- Nueva guía "¿Cómo funciona el checador?" (abierta mientras ninguna caja cheque): para qué sirve, dar PIN, elegir la caja ("Cobra y checa" o "Solo checador"), cómo se checa en la caja, encender el celular, mandar a cada persona su enlace (Personal → la persona → Accesos → Checador → "Mandar enlace", por WhatsApp; una vez por persona) y escanear el QR cada día; y dónde ver la asistencia. Aclara que no hay un enlace general para checar.
- "Esta sucursal no tiene cajas vinculadas" ahora manda a la pestaña Dispositivos (ya no a Personal → Accesos y roles).
v1.104.023 de octubre de 2026
Etapa 67 (entrega 2): mudanza desde otro sistema
Agregado
- "¿Con qué sistema cobras hoy?" en "Elige tus herramientas" (paso Cómo vendes): Ninguno, Soft Restaurant, Wansoft, Parrot, El Cheff, Fudo, Loyverse u Otro (con su nombre) (P5). Es opcional.
- Importar productos o insumos del archivo de otro sistema con IA: en Menús → Importar se puede subir, además de la plantilla, el Excel (.xlsx) o CSV que exporta el sistema anterior. La IA ve solo una muestra (sin correos ni teléfonos), dice qué entendió ("Leímos tu archivo de Soft Restaurant…") y propone el mapa de columnas; el archivo se convierte a la plantilla y pasa por la misma revisión, vista previa, guardado todo o nada y "deshacer" de siempre. Kilos y litros se convierten a gramos y mililitros. Tope de 20 lecturas al día por sucursal y costo registrado (regla 10).
- "Tu mudanza desde Soft Restaurant" en Primeros pasos: pasar menú e insumos, clientes (con saldos de lealtad) e historial de ventas; cada paso se marca solo al importar.
- Aviso al equipo (P6): al elegir un sistema, GoHighLevel recibe el evento
migration_interestcon la etiquetamigracion-<sistema>para ofrecer la llamada gratis y la mudanza.
Detalles técnicos
Notas
- Migración
0102_stage67_sistema_anterior:restaurant_setup.previous_systemyprevious_system_other. Probada en la rama de Neon de pruebas. - El importador ya acepta un archivo de solo insumos (antes pedía al menos un producto).
- En GoHighLevel hay que agregar al workflow la rama del evento
migration_interestpara que la etiqueta dispare el seguimiento. - Pruebas:
tests/foreign-catalog.test.ts(montos, unidades, CSV, muestra sin datos personales y que el importador de siempre acepte el resultado).
v1.103.022 de octubre de 2026
Caja: pantalla completa, menú ☰ y pantalla de Comandera
Agregado
- Pantalla de bloqueo: arriba, "Punto de venta | Comandera" para elegir qué abre la caja; se recuerda en el dispositivo (cookie
cm-pos-screen, así el servidor arma la pantalla correcta sin parpadeo). - Pantalla de Comandera (
src/app/pos/kitchen-screen.tsx), solo pedidos:- Lista: a la izquierda los pedidos de hoy (buscar; En curso, Listos, Terminados, Todos; línea del color del canal; minutos en verde, ámbar o rojo). En medio el pedido (número, estado, folio, de quién, quién lo tomó, total y por cobrar, detalles, notas y tiempo corriendo). A la derecha lo que lleva (con modificadores, "Sin…" en rojo y notas) y las acciones: Aceptar / Listo / En ruta / Entregado, Recibo, Actividad (historial) y Cancelar o reembolsar.
- Tablero: la comandera en columnas de siempre.
- Suena con cada pedido nuevo ("Activar sonido"). En tablet vertical y celular se acomoda en dos columnas o una a la vez.
- Menú ☰ en la caja y en la comandera (
src/app/pos/pos-menu.tsx): restaurante, sucursal y quién está; Comandera, Mesas, En espera, Inventario, abrir la otra pantalla; Agotados, Tienda e Impresora; Bloquear. Un punto ámbar si la Tienda está pausada.
Cambiado
- Punto de venta a pantalla completa: se quitó la barra de arriba. Junto al buscador quedan solo Nuevo pedido, Pedidos y Caja y el ☰; en las otras secciones, su título con la misma barra.
- PIN con teclado en pantalla: en tablets y celulares ya no se abre el teclado del sistema (
inputMode="none"); el teclado físico sigue funcionando.
Quitado
- "¿Por qué no veo…?" en la caja (y
hidden-settings.tsx).
v1.101.022 de octubre de 2026
Etapa 67 (entrega 3): Google en Nueva sucursal y "Traer datos de Google"
Agregado
- Nueva sucursal se puede buscar en Google Maps: el nombre se propone desde Google y, al crearla, la sucursal queda con su dirección, teléfono, sitio web, horario y el lugar de Google ligado ("Cómo llegar" y reseñas). Es opcional; si Google falla, la sucursal se crea igual.
- "Traer datos de Google" en Editar sucursal: compara lo que tiene la sucursal con lo que Google sabe del lugar de su dirección (dirección, teléfono, sitio web y horario). Lo vacío viene marcado y lo distinto se elige. No guarda solo: llena el formulario y se guarda como siempre; si se cierra sin guardar, se descarta.
Detalles técnicos
Notas
- Sin migración (la fecha de la última sincronización con Google que mencionaba la propuesta no hizo falta).
- Usa la misma consulta de la entrega 1 (
fetchPlaceProfile, con caché de 10 minutos) y el guardado de siempre (updateBranchProfile).
v1.100.022 de octubre de 2026
Etapa 69 (entrega 2): Franquicia, la marca contra la sucursal
Agregado
- "Solicitar cambio" de cualquier elemento: producto, su precio en la sucursal, grupo u opción de modificador, receta o insumo. Está en la leyenda de las cuatro pestañas de Menú, con lo de esa pestaña para elegir, y en cada producto ("Su precio en mi sucursal" o "El producto").
- Mis solicitudes: la sucursal ve en
/app/menus/requestslo que pidió y en qué quedó (abierta, hecha o rechazada) con la respuesta de la marca. - Solicitudes de la marca: dice sobre qué es cada una (producto, precio, opción, receta, insumo) con un enlace que abre el elemento listo para cambiarlo; al rechazar se puede escribir una respuesta para la sucursal.
- Barra "Listas maestras" para la marca en las cuatro pestañas de Menú (con dos o más sucursales), con las solicitudes abiertas.
Cambiado
- La leyenda de la sucursal ("Esto es de la marca…") y el aviso para pasar al menú maestro salen ahora en las cuatro pestañas de Menú, no solo en Productos.
- Con el menú maestro, recetas e insumos solo los edita la marca: un Rol personalizado de sucursal con "Insumos y recetas" queda en ver.
- "Ver como" ya no puede mandar solicitudes (es solo lectura).
Detalles técnicos
Notas
- Migración
0101_stage69_solicitudes:menu_change_requestsguarda qué tipo de cosa es (target_type,target_id,target_name) y la respuesta de la marca (response). Las solicitudes de antes quedan como de su producto. - KRISPIS tiene que pasar al menú maestro (Menús → "Arma el menú de tu marca") para que esto aplique a sus sucursales.
v1.99.122 de octubre de 2026
Mi plan del distribuidor: se activa al regresar del pago
Cambiado
- Mi plan: al regresar de la página de pago de Stripe la suscripción se confirma con Stripe en ese momento (sin esperar el aviso del webhook) y aparece "¡Listo! Tu suscripción está activa" con la fecha en que termina el mes gratis.
- Inicio del distribuidor: mientras no tenga suscripción ni licencia vigente aparece "Activa tu cuenta de distribuidor" con el botón "Activar mi suscripción"; desaparece al suscribirse. Con pago atrasado, aviso para actualizar la tarjeta. La tarjeta de números muestra "Mi plan" y el siguiente cobro en lugar de la licencia.
- Los avisos de licencia por vencer o vencida ofrecen pasarse a la suscripción.
v1.99.022 de octubre de 2026
Etapa 69 (entrega 1): Menú y lo que lleva
Agregado
- Menú con cuatro pestañas en el orden de la cadena: Productos · Modificadores · Recetas · Insumos. Insumos y recetas se mudaron de Inventario a Menú (
/app/menus/recipes,/app/menus/items); los enlaces viejos (/app/inventory/items) llevan a la nueva página. - "Cómo se arma tu menú": franja arriba de las cuatro pestañas con cuántos insumos, recetas, grupos de modificadores y productos hay, y lo que falta ("N productos no dicen qué llevan", "N insumos por revisar"). Se puede esconder.
- "Qué lleva" en cada producto: el árbol de lo guardado (su receta, lo que también lleva, cada opción de precio y modificador, hasta el insumo; los preparados se abren debajo), con "Se puede quitar" y "Por revisar". "Editar receta" y cada insumo abren su ventana directo.
- Cada opción de modificador dice qué lleva (su receta × veces o sus ingredientes) o "sin receta".
- "Dónde se usa" al abrir un insumo o una receta: productos, opciones y recetas que lo llevan (subiendo por los preparados) y en cuántas sucursales se vende. Si el cambio se nota en más de un producto o sucursal, se pregunta antes de guardar.
- Candado al archivar: un insumo o una receta que todavía usan productos, opciones o recetas activas no se archiva.
Cambiado
- Plan Complete: también crea insumos y recetas como estructura (cantidades opcionales, sin compras, precios ni costos) y dice qué recetas "también lleva" cada producto. Descontar inventario y costear sigue siendo de Escala.
- Guardar un insumo sin ver precios ya no borra el precio de sus presentaciones.
Detalles técnicos
Notas
- Sin migración.
v1.98.022 de octubre de 2026
Etapa 67 (entrega 1): "Encuentra tu negocio" con Google Maps
Agregado
- El registro empieza buscando el restaurante en Google Maps (idea de Fudo,
docs/PROPUESTA-ETAPA-67.md). Al elegirlo, el formulario llega lleno: "KRISPIS (Centro Histórico)" se separa en restaurante y sucursal (si no trae sucursal, se propone la colonia). - "Esto encontramos en Google": dirección, teléfono, sitio web, horario, botón de reseñas, giro y cómo vende, para revisarlo antes de crear el restaurante. Casilla "Este teléfono también es mi WhatsApp" (apagada de entrada, P4).
- Al crear el restaurante, la primera sucursal queda con esos datos (con el mismo guardado de "Editar sucursal": valida, ubica estado y municipio y decide el distribuidor), con el lugar de Google ligado ("Cómo llegar" y reseñas) y su horario por día (P2, P3).
- "Elige tus herramientas" ya llega contestado con el giro y cómo vende que sugiere Google (el dueño confirma); con eso salen los módulos recomendados (D).
- "Mi negocio no aparece en Google" lleva al formulario de siempre. Sin las llaves de Google, el registro es el de antes.
Detalles técnicos
Notas
- Una consulta a Places API (New) por negocio elegido (~US$0.02), con la llave del servidor; se guarda 10 minutos en memoria para no pagarla dos veces. El lugar se vuelve a consultar en el servidor al crear el restaurante (nunca se usan datos del navegador).
- Sin migración. Pruebas:
tests/place-profile.test.ts(nombre, horario de Google a lunes–domingo, teléfono, giro y cómo vende).
v1.97.022 de octubre de 2026
Distribuidores sin exclusividad territorial
Cambiado
- Ya no hay territorios exclusivos. Una Cuenta nueva es de un distribuidor solo si llega con su enlace
/r/{código}o escribe su código al registrarse; si no, es de Colega Studio. La dirección de la primera sucursal ya no asigna a nadie (se sigue guardando su estado y municipio). - Gana el primer enlace o código que usó la Cuenta y el sistema nunca la cambia solo; solo Admin la puede mover.
- Las Cuentas que ya estaban asignadas por territorio se quedan con su distribuidor.
Quitado
- La sección Territorio del panel del distribuidor (su enlace y QR siguen en Inicio), las solicitudes de territorio y la edición de territorios en Admin → Distribuidores. Los territorios y solicitudes guardados quedan como historia.
Detalles técnicos
Notas
- Sin migración.
v1.96.022 de octubre de 2026
Etapa 64: suscripción mensual del distribuidor
Agregado
- Panel del distribuidor → Mi plan: el distribuidor activa su cuenta con una suscripción de $5,999 al mes (IVA incluido) cobrada con Stripe, con 30 días gratis desde que registra su tarjeta (una sola vez). Queda activo en automático. Desde ahí abre el portal de Stripe para cambiar su tarjeta, ver recibos o cancelar.
- La licencia anual pagada por fuera se mantiene: un distribuidor está al corriente con cualquiera de las dos. Quien tiene licencia ve la suscripción desde 30 días antes de que se le venza y empieza a pagar al vencer, sin mes gratis extra.
- Pago atrasado: a los 7 días sin pagar queda suspendido (no recibe Cuentas nuevas, sigue recibiendo los pagos de las que tiene) y se reactiva solo al pagar; una suspensión del equipo se respeta. Cancelada: suspendido al terminar el mes pagado y fin de contrato a los 60 días.
- Factura de la suscripción a pedido: en Mi plan, "Quiero factura" con RFC, razón social, régimen y C.P.; Colega Studio factura cada pago cobrado (el mes gratis no se factura).
- Admin → Distribuidores muestra el estado de la suscripción y si pidió factura.
Cambiado
- El distribuidor ya no participa de las compras de Colega Cards de sus Cuentas (se quitó el % de tarjetas). Solo participa de la venta de los planes, con su regalía configurable de siempre. Lo ya transferido queda en su historial.
Detalles técnicos
Notas
- Migración
0100_stage64_distribuidor_suscripcion(suscripción y datos fiscales endistributors;colega_invoicesacepta facturas para un distribuidor). - Nueva variable
STRIPE_DISTRIBUTOR_PRICE_ID(Preview y Production); el precio lo creanpm run stripe:setup.
v1.95.022 de octubre de 2026
Etapa 68 (entrega 1): Colega Print
Agregado
- Colega Print, la app Android que imprime en cualquier térmica ESC/POS (Bluetooth, USB o de red). Se instala en una tablet o celular Android del local y recibe sola las comandas y los tickets de la bandeja de impresión, aunque la caja sea un iPad.
- Panel → Cajas e impresoras → Agregar impresora → Colega Print (app Android), la opción de fábrica. Al crearla aparece un QR (y la dirección para pegar) que se escanea con la app. Estaciones, cajón, papel y "Imprimir prueba" igual que Star y Epson.
/api/print/colega/{clave}: POST pregunta si hay algo (con el estado de la impresora, el resultado del último trabajo o la prueba que pide la app) y GET entrega el siguiente trabajo ya en ESC/POS: formato Estándar (GS v 0 con corte) o Compatible (ESC * sin corte, Datecs DPP-250), con el cajón al final.- Estado nuevo de impresora: "La tablet no encuentra la impresora" (la app no la alcanza; el trabajo se queda en la bandeja hasta que vuelva).
Detalles técnicos
Notas
- Migración
0099: la marcacolegaenprinters. - La app vive en su propio repositorio (
~/Developer/colega-print). Para el piloto, "Descargar Colega Print" baja el APK demenus.colegastudio.com/colega-print.apk(enpublic/); cuando esté en Google Play (com.colegastudio.print) el botón apuntará a la tienda.
v1.94.222 de octubre de 2026
Importar menú con IA: fotos del iPhone
Corregido
- Un usuario no podía subir fotos de su menú desde el iPhone ("No pudimos subir el archivo", con buena conexión). El servidor nunca rechazó la subida: fallaba en el celular al preparar la foto.
- Las fotos se leen como en el resto de la app (
decodePhoto): HEIC del iPhone aceptado y convertido, y respeta el giro de la foto. - Si el navegador no puede reducir una foto (p. ej. una muy grande en iPhone), se sube como está si es JPG, PNG o WebP, en vez de fallar.
- Las fotos se leen como en el resto de la app (
- Si algo falla, abajo del aviso sale en qué paso (preparar, subir o empezar) y el error del navegador, y se manda a Sentry; con una captura se sabe la causa.
v1.94.121 de octubre de 2026
Impresoras Bluetooth: formato Compatible (Datecs)
Agregado
- Caja → Impresora → Formato del ticket: Estándar o Compatible. Compatible manda la imagen con el comando antiguo (ESC , columnas de 24 puntos) y sin corte, para impresoras que imprimen letras y símbolos raros en lugar del ticket, como la Datecs DPP-250* (no entiende GS v 0). Sirve con Bluetooth desde Chrome y con RawBT.
Detalles técnicos
Notas
- La Datecs DPP-250 además debe tener el interruptor 4 (debajo de la batería) en OFF ("Protocol mode: Disabled"); en ON solo acepta su propia app.
v1.94.021 de octubre de 2026
Etapa 63 (entrega 2): impresoras Bluetooth desde la caja web
Agregado
- Caja → Impresora → "Cómo imprime esta caja": impresora de red, Impresora Bluetooth (desde Chrome), Impresora Bluetooth con la app RawBT (Android) o la ventana de impresión de la tablet. Se guarda en ese dispositivo.
- Bluetooth desde Chrome (como Plick, Android y computadora; iPad no): conectar desde la caja, Reconectar con un toque, papel de 58 u 80 mm, velocidad (Rápida, Normal, Lenta: si salen símbolos raros o se corta, se baja) e Imprimir prueba. Si ningún canal acepta, se reconecta y reintenta solo en "Lenta". Diagnóstico arma un reporte (canales de la impresora y qué contestó cada uno) para copiarlo a soporte.
- RawBT para las Bluetooth "clásicas" que Chrome no ve (y también USB o red): la caja le manda el ticket a la app RawBT y sale sin la ventana de impresión.
- Con cualquiera de las dos, al imprimir un pedido la caja pregunta Ticket, Comanda o los dos y los manda juntos. Con Bluetooth y "Siempre", el ticket sale solo al cobrar.
Detalles técnicos
Notas
- Sin migración. Falta probar con la impresora del cliente; el diagnóstico dice qué está pasando si no imprime.
v1.93.321 de octubre de 2026
Fidelidad: dar a mano solo con autorización y todas las sucursales con ubicación
Cambiado
- Dar o quitar a mano en Fidelidad lo hacen solo Admin, Co-admin, Franquiciatario o Gerente. Un rol personalizado con Fidelidad ve tarjetas y saldos, pero ya no ve "Dar o quitar a mano" ni puede hacerlo.
- En la caja, "Dar a mano" lo autoriza alguien del panel con su PIN propio (Admin, Co-admin, Franquiciatario o Gerente con acceso a esa sucursal). Un Colaborador con "Puede autorizar" ya no basta. Si quien está en turno entró con su PIN del panel, no se le pide otro.
Corregido
- Aviso de cercanía en todas las sucursales. La ubicación de una sucursal solo se guardaba al prender el domicilio de la Tienda, así que muchas no tenían aviso en la wallet. Ahora se guarda al guardar su dirección en Sucursales, y las que no la tienen se ubican solas con su dirección al abrir Fidelidad → Campañas.
- Cuando cambia la ubicación de una sucursal, los pases de Apple Wallet de sus clientes se ponen al día (antes se quedaban con las ubicaciones viejas).
v1.93.221 de octubre de 2026
Caja: el lector lee la tarjeta de cliente
Arreglado
- Tarjeta de cliente con lector: la caja tiene un campo "Escanea o escribe el código de la tarjeta" donde lee el lector (Bluetooth o USB en modo teclado) y donde también se puede teclear; junto sigue el botón de la cámara. Busca sola aunque el lector no mande Enter.
- El código se entiende aunque el lector y la tablet tengan el teclado en idiomas distintos (el enlace llega con "-" en vez de "/").
- Un teléfono sin 0 ni 1 (como 55 9876 5432) ya no se confunde con un código de tarjeta: la caja encuentra la tarjeta por teléfono.
- El recuadro Tarjeta de cliente solo aparece si la fidelidad está activa en la sucursal.
v1.93.121 de octubre de 2026
Ventanas sin scroll hacia los lados
Corregido
- Ninguna ventana emergente se hace más ancha que la pantalla. Antes, una tabla o un renglón ancho dentro de la ventana la estiraba y había que moverse de lado. Ahora todo se acomoda al ancho de la ventana; solo una tabla muy ancha en el celular se desliza dentro de su propio marco.
- La ficha del miembro de Fidelidad y la del cliente son más anchas en computadora, para que su historial (movimiento, sucursal, quién, fecha y cantidad) se vea completo.
- Apple Wallet: una línea en los registros por cada paso de la actualización (registro del iPhone, aviso, consulta de cambios y descarga del pase), para encontrar por qué un ajuste a mano no llegó a la tarjeta del cliente.
v1.93.021 de octubre de 2026
Caja → Pedidos: cancelar o reembolsar y el historial de cada pedido
Agregado
- Detalle del pedido en Caja → Pedidos:
- Cancelar pedido (sin cobrar) o Cancelar y reembolsar (cobrado), con motivo y el PIN de un encargado cuando la caja lo pide. Es el mismo cancelar de la Comandera.
- Historial: quién lo metió, quién lo mandó a cocina (si estaba en espera), cada cambio de estado, cada cobro (monto y forma), quién lo facturó o canceló la factura, cada reimpresión del ticket y quién lo canceló con su motivo. Se arma con lo que ya se guardaba (
src/server/orders/history.ts, sin migración).
- Un pedido cancelado se queda en la lista con su etiqueta roja "Cancelado", también en el título de su detalle. Ya no muestra "Por cobrar".
Cambiado
- Un pedido entregado ya se puede cancelar (= reembolso completo): el efectivo cuenta como devolución en el corte, el inventario regresa como merma y su factura se cancela. No aplica al de una cuenta de mesa, que se cobró con toda la cuenta.
v1.92.021 de octubre de 2026
Etapa 66 (entrega 1): eliminar y recuperar restaurantes
Agregado
- Eliminar un restaurante (marca) con todas sus sucursales, desde Ajustes de la marca → Eliminar este restaurante (Admin y Co-admins de la Cuenta) y desde super admin → ficha de la Cuenta (
docs/PROPUESTA-ETAPA-66.md). El asistente muestra sus sucursales, qué deja de funcionar, cómo cambia el pago mensual y se confirma escribiendo el nombre exacto. - No se puede eliminar el único restaurante de la Cuenta (se explica cómo cancelar la suscripción) ni uno con turno de caja abierto, cuenta de mesa abierta, pedidos en curso, ventas sin internet sin subir o pedidos al CEDIS en curso. Las reservaciones futuras solo dan aviso.
- Eliminar = archivar (regla 7): se archiva solo el restaurante; el cobro baja en sus sucursales activas (
resyncAndNotify) y todo lo de la marca se guarda. Bitácorarestaurant.archive/restaurant.restore(regla 8) y Actividad. - Recuperar durante 30 días: en Sucursales → Eliminados (Admin y Co-admins) y en super admin. El restaurante vuelve con sus sucursales tal como estaban (activas o pausadas).
- Recuperar sucursales archivadas: antes decía "escríbenos" pero no había cómo hacerlo; ahora hay botón en el panel y en super admin (30 días).
Detalles técnicos
Notas
- Sin migraciones. La Entrega 2 (mudar sucursales a otro restaurante de la Cuenta) queda pendiente.
v1.90.521 de octubre de 2026
Caja: imprimir con la tablet (ticket, comanda o los dos)
Cambiado
- Sin conexión directa a impresoras Bluetooth. La prueba con un cliente falló aunque su impresora sí imprime con otra app: el navegador solo habla con Bluetooth LE y muchas térmicas son clásicas. Se quitó la conexión desde la caja (
src/app/pos/bluetooth/,src/lib/escpos.ts); la Bluetooth se usa con la ventana de impresión de la tablet. - Al imprimir un pedido sin impresora en la nube, la caja pregunta ¿Ticket, Comanda o Ticket y comanda? y lo abre en una ventana aparte con el diálogo de impresión del dispositivo, donde se elige la impresora. La cuenta de una mesa abre directo el ticket.
/pos/imprimirimprime también la comanda completa del pedido (what=kitchen|both, una hoja por documento).- Ajustes de impresión de la caja: nueva opción "Ninguna: imprimir con esta tablet" en "Impresora de tickets de esta caja" (se guarda en el dispositivo), aunque la sucursal tenga impresoras de red.
- Panel → Agregar impresora → "Bluetooth (con la tablet)": la guía ahora explica emparejarla en la tablet, instalar en Android un servicio de impresión para térmicas (por ejemplo RawBT) y elegir "Ninguna: imprimir con esta tablet".
v1.90.421 de octubre de 2026
Impresora Bluetooth: en Android se vuelve a elegir sola
Corregido
- Tras recargar la caja en Android salía "La impresora Bluetooth se desconectó" (detalle
getDevices): Chrome en Android no recuerda la impresora entre recargas. Ahora, al imprimir con un toque (prueba, cobrar, reimprimir), si no la tiene se abre la lista para elegirla y se imprime de una vez; la conexión se hace antes de pedir el ticket al servidor para no perder el toque. - La impresora elegida en la visita se usa aunque el navegador le cambie el id.
- Con la impresora ya conectada salía
NotSupportedError: GATT operation failed for unknown reason: la impresora rechazaba el canal o el modo de escritura elegido. Ahora la primera escritura prueba cada canal con escritura (los de datos conocidos primero) y cada modo (sin y con respuesta) hasta que uno acepte, y lo recuerda en la visita. Si ninguno acepta, el aviso lista lo que se probó.
v1.90.321 de octubre de 2026
Impresora Bluetooth: más compatible en tablets Android
Corregido
- En la prueba con un cliente (tablet Android, impresora que sí imprime con otra app) salía "La impresora Bluetooth se desconectó". Tres ajustes en
src/app/pos/bluetooth/printer.ts:- Conexión con reintentos: Android suele fallar el primer intento (GATT 133); ahora se intenta 3 veces.
- Pedazos de 20 bytes en Android: Chrome en Android no amplía el MTU y más de 20 bytes por escritura falla o se corta. En computadora siguen de 128.
- El canal de datos correcto: se prefiere el canal de impresión conocido de cada servicio (2AF1, FF02, FFF2, FFE1, AE01, ISSC, Nordic…) en vez del primero con escritura, que a veces es de ajustes. Tres servicios más en la lista (FEE7, AE00, AE3A).
- Los avisos de error de Bluetooth muestran abajo el error del navegador, para diagnosticar desde una foto.
v1.90.221 de octubre de 2026
Listas desplegables: la flecha ya no se pega al borde
Corregido
- En todas las listas desplegables (
<select>) del panel, la caja, el menú y la tienda, la flecha quedaba pegada al borde derecho (sobre todo en Safari/iPhone). Ahora es una flecha propia a 12 px del borde, con espacio para que el texto no la tape. Un solo ajuste englobals.css.
v1.90.121 de octubre de 2026
Dispositivos activados pasa a Cajas e impresoras
Cambiado
- Dispositivos activados (las cajas vinculadas, con "Desactivar" y "Agregar dispositivo") se mudó de Personal → Accesos y roles a Cajas e impresoras → Dispositivos, junto a impresoras y ajustes de la caja. El permiso sigue siendo el mismo (sección "Cajas e impresoras").
- "Ver dispositivos" del aviso de configurar la caja lleva a la pestaña nueva; "Agregar personal" al aprobar una caja lleva a Personal → Personas.
v1.90.021 de octubre de 2026
Caja: Pedidos y Comandera separados; ticket en PDF; guía Bluetooth
Agregado
- Caja → Pedidos (nueva pestaña): todos los pedidos de hoy en una tabla, con búsqueda (número, folio, cliente o mesa) y filtros por estado (Todos, En curso, Listos, Entregados, Cancelados). Tocar un pedido abre su detalle (reimprimir, facturar…). Se actualiza cada 15 s.
- La pestaña de siempre ahora se llama Comandera. Cada pedido lleva una línea de color a la izquierda según su canal (Mostrador, Teléfono, WhatsApp, En línea, Otro), con una leyenda arriba de los canales que hay.
- Ajustes de la caja: interruptor "Pedidos (lista de todos los de hoy)" para mostrar u ocultar la pestaña nueva (marca, sucursal o caja), también en la vista previa y en "Lo que esta caja tiene oculto".
- Cajas e impresoras → Agregar impresora: opción "Bluetooth (desde la caja)" con la guía paso a paso para conectarla desde la caja y sus límites (Android o computadora con Chrome/Edge, no iPhone/iPad).
Corregido
- Ticket digital → Descargar PDF no hacía nada en muchos celulares (el navegador del lector de QR no abre el diálogo de imprimir). Ahora el servidor arma el PDF del ticket (
/api/m/{slug}/store/orders/{folio}/pdf, igual al impreso) y se descarga directo.
v1.89.121 de octubre de 2026
Actividad: "agregó un gasto" ya queda registrado
Corregido
- Al agregar un gasto (o un gasto fijo) en Finanzas, el gasto sí se guardaba, pero su renglón en Actividad fallaba y no quedaba. La bitácora tomaba el id del gasto como si fuera la sucursal. Ahora usa la sucursal del gasto (
branchIdva antes queiden lo que devuelve la acción). Error visto en producción el 21-oct.
v1.89.021 de octubre de 2026
Etapa 63 (entrega 1): impresora Bluetooth en la caja
Agregado
- Caja → Impresión → Impresora Bluetooth de esta caja: "Conectar impresora Bluetooth" (elige papel de 58 u 80 mm), "Imprimir prueba" y "Quitar". La impresora se recuerda en ese dispositivo.
- Con una impresora Bluetooth conectada, los tickets de venta y la cuenta de la mesa salen ahí directo, sin el diálogo de imprimir. Respeta "siempre / preguntar / nunca" de la caja.
- El ticket se dibuja en el dispositivo como imagen (ESC/POS de trama): sale igual que en las impresoras de red, con acentos, ñ y QR, y funciona con casi cualquier térmica.
- Si falla, la caja avisa con "Reintentar". Si la impresora se desconectó, con "Reconectar".
Detalles técnicos
Notas
- Funciona en Chrome o Edge en Android y en computadora con impresoras Bluetooth LE. En iPhone/iPad (Safari) el navegador no lo permite: ahí sigue el ticket en pantalla o el diálogo de imprimir. La sección lo explica.
- Imprime mientras la caja esté abierta en ese dispositivo.
- Siguen para la entrega 2:
- corte de caja;
- comandas (opción apagada de fábrica);
- impresoras Bluetooth clásicas en computadora;
- imprimir por Bluetooth en las ventas sin internet;
- modelos probados en la Guía de equipo.
- No se ha probado todavía con una impresora real; ver
docs/PROPUESTA-ETAPA-63.md.
v1.88.121 de octubre de 2026
Super admin: extender la cortesía reactiva la Cuenta
Corregido
- Al extender la fecha de fin de cortesía de una Cuenta que había quedado "Pendiente de pago" (terminó su prueba), la Cuenta seguía bloqueada: no podía vincular cajas y su menú no se veía. Ahora, con una fecha futura y sin suscripción en Stripe, vuelve sola a Cortesía.
- Para las Cuentas que ya están así: en Admin → la Cuenta → Editar datos → Guardar.
v1.88.020 de octubre de 2026
Facturación: la factura global se puede apagar
Cambiado
- Facturación → Factura global (público en general): nueva opción "Apagada: la emito por mi cuenta". Colega Menus deja de timbrar la global de los tickets sin facturar de ese restaurante. Las facturas a clientes siguen igual.
- Con la opción apagada se muestra el aviso: la obligación de emitirla y de declarar todos los ingresos sigue siendo del restaurante ante el SAT (con su contador o con otro sistema).
- Solo el Admin y el Co-admin la cambian, como las otras periodicidades.
Detalles técnicos
Notas
- Migración 0098 (amplía la regla de
invoicing_settings.global_periodicityconoff). Se corre en producción antes del Merge.
v1.87.020 de octubre de 2026
Fidelidad: sellador en el celular del equipo
Agregado
- Sellador (
/pos/sellar) para negocios que solo usan Fidelidad, sin caja ni tienda: el celular de la sucursal se vincula igual que una caja (código que se aprueba en Cajas e impresoras → Vincular) y cada persona entra con su PIN de Personal. Escanea la tarjeta del cliente en su wallet (o la busca por su WhatsApp), elige los sellos de la visita (1 a 10) y toca Sellar; la tarjeta se actualiza sola en Apple y Google Wallet. Ahí mismo canjea recompensas en el mostrador y saca tarjetas nuevas. - Cada sello queda a nombre de quien lo dio. Para evitar abusos: solo sellan celulares aprobados, la misma tarjeta no se vuelve a sellar antes de un minuto (doble toque) y se respeta el tope de visitas por día del programa. Solo para programas de sellos.
- Instrucciones en Fidelidad (programas de sellos): los cinco pasos para dejar el sellador listo, con el QR para abrirlo en el celular y el porqué un QR fijo no es seguro.
v1.86.120 de octubre de 2026
Personal: hacer Co-admin a alguien que ya está en el Equipo
Cambiado
- Accesos y roles → Editar acceso: el Admin y los Co-admins ahora ven la opción Co-admin también para alguien que ya está (Franquiciatario, Gerente o Rol personalizado). Al guardar deja su acceso por sucursal y pasa a ver toda la Cuenta; si su invitación seguía pendiente, queda como de Co-admin.
- No se permite si esa persona es dueña de otra Cuenta (igual que al invitar). Quitar a un Co-admin o pasarle el rol de Admin sigue siendo solo del Admin.
v1.86.020 de octubre de 2026
Fidelidad: pestaña "Invitar clientes" con enlace y QR de toda la marca
Cambiado
- "Invitar clientes" tiene su propia pestaña junto a Miembros (antes estaba arriba de la lista de miembros y la empujaba).
- Hasta arriba, el enlace y el QR de toda la marca (…/{marca}/tarjeta): una sola tarjeta que suma en cualquier sucursal. Copiar enlace, compartir, descargar el QR (PNG) e imprimir el cartel. Con una sola sucursal se usa la de esa sucursal; si la marca aún no tiene su nombre corto, un aviso lleva a Tienda para elegirlo.
- Debajo, cada sucursal en tabla (sucursal con su color, enlace y acciones: copiar, compartir y su propio cartel).
- El cartel imprimible (
/app/tarjeta-imprimir) ahora sirve para toda la marca (?marca=1) o para cualquier sucursal que la persona alcance (?sucursal=…), no solo la elegida arriba.
v1.85.220 de octubre de 2026
Barra superior como el mockup de la Etapa 61
Cambiado
- El selector de restaurante y sucursal ocupa una sola línea ("KRISPIS · Centro Histórico", o "Toda la marca" en lavanda), del alto de un botón, como en el mockup aprobado.
- La búsqueda se ve como barra junto al selector en computadora ("Buscar pantallas y acciones" con ⌘K, o Ctrl K en Windows); en celular sigue siendo la lupa.
v1.85.120 de octubre de 2026
Página de ventas: tarjeta de fidelidad y Personal
Agregado
- Sección "Tarjeta de fidelidad" en el inicio (
#fidelidad, después de la Tienda en línea): un iPhone con Apple Wallet abierto en el pase real de KRISPIS (logo y PDF417 del pase,public/fidelidad/) donde el saldo sube con cada compra y llega el aviso "Tu saldo ahora es…" (quieto con "reducir movimiento"), cómo se conecta con el punto de venta (suma sola al quedar pagado, canje escaneando el QR) y con la base de clientes (ficha, grupos, campañas y avisos automáticos), la comparación contra una app de lealtad aparte y lo que trae (sellos, puntos o monedero, cumpleaños, doble sello por horario, importar el programa anterior, cartel con QR). Incluida en Complete y Escala. - Personal en el catálogo (
/funcionesy la tabla de/precios): expediente, horarios y turnos, vacaciones y permisos, checador y asistencia; la categoría pasa a "Personal y administración". Clientes suma la tarjeta de fidelidad, avisos y campañas por wallet e importar el programa anterior. - Tabla de herramientas sueltas: Loopy Loyalty (tarjeta en wallet, ~$450) y 7shifts (horarios y checador, ~$720), con el título que cuenta las filas.
Cambiado
- Menú superior: Fidelidad en lugar de "Ahorra" (con 7 enlaces no cabía a 1024 px). Planes, etapas de "Crece contigo" y preguntas frecuentes mencionan la tarjeta y Personal; "¿Los precios incluyen IVA?" aclara que las facturas se cobran más IVA.
v1.85.020 de octubre de 2026
Etapa 61 (tablas): todas las listas como tabla estilo Stripe
Cambiado
- Todas las listas de registros son tablas como las de Stripe (pedido del dueño, con la tabla del mockup aprobado): un renglón por registro y una idea por columna, encabezado gris chico, montos a la derecha, folios y códigos en letra de máquina, estados en píldora de color y acciones que aparecen al pasar el mouse (con el dedo siempre se ven). Al tocar el renglón se abre su detalle.
- Etiquetas de color para agrupar: la sucursal siempre del mismo color en todo el panel (Clientes, Ventas, Cupones, Fidelidad, Opiniones, Gastos, Facturas, Actividad, Tarjetas, CEDIS…), la categoría de insumo con su color fijo, y canal, modalidad, rol, plan y tipo con su color.
- Pantallas convertidas: Clientes (con su historial), Ventas → Pedidos y Cortes de caja (el corte abre su detalle), Cupones, Fidelidad (miembros, movimientos, recompensas), Opiniones, Gastos y gastos fijos, Historial, Tienda → historial, plantillas de WhatsApp; Insumos, recetas, existencias y kárdex, proveedores, compras y órdenes de compra, conteos, mermas, producción, reportes, catálogo y estado de cuenta del CEDIS, surtido y repartos; Equipo (ahora en lista de fábrica), roles, repartidores, impresoras, mesas, reservaciones y fechas bloqueadas; solicitudes de cambio, precios, modificadores (vista lista), etiquetas y reseñas de platos; Actividad, facturas, emisores, planes por sucursal, tarjetas y paquetes, referidos; super admin (Cuentas, bitácora, enlaces, titulares, anfitriones y pagos, distribuidores, super admins…), paneles del anfitrión, distribuidor y Colega Cards; en la caja, efectivo de repartidores, propinas del corte, ventas sin internet e impresoras.
- Se quedan como tarjetas a propósito: tableros (comandera, pedidos del CEDIS, feedback), cuadrículas visuales (menús, fotos, plano), formularios y lo que se toca rápido en la caja.
Detalles técnicos
Para el equipo
- Kit de tabla en
src/components/ui/table.tsx:TableFrame,TableHead/TableCellconnumeric,optionalyvariant(strong,muted,mono),RowLink/RowButton,TableActions(alwayspara la acción principal),CellNote,TableExpandedRow,TableToolbar. ColorTag,BranchTagycolorForKeyensrc/components/ui/color-tag.tsx;CategoryTag(insumos);ChannelTag/FulfillmentTag(pedidos).StatusPillcorta textos largos.design-system/MASTER.md: reglas de tablas y "estados vs. grupos". Sin migración.
v1.84.420 de octubre de 2026
Facturación: nuevo precio por factura
Cambiado
- Precio por factura emitida: $3.00 + IVA en Complete y $2.00 + IVA en Escala ($3.48 y $2.32 con IVA). Antes era $2 y $1.20 con IVA.
- Las facturas que ya se emitieron se cobran al precio con el que se emitieron. Las nuevas, desde esta versión, al precio nuevo. Lo mismo para las facturas del CEDIS (precio de Escala).
- Los textos (Facturación, Herramientas, el asistente de inicio, Precios y la página de ventas) dicen ahora "+ IVA".
v1.84.320 de octubre de 2026
Fidelidad: el cliente que ya tiene tarjeta la abre desde la página
Cambiado
- En la página para sacar la tarjeta (
…/tarjeta, el QR del cartel), si el WhatsApp ya tiene tarjeta (por ejemplo, un cliente importado de otro sistema) se abre la suya con su saldo, en lugar de decir "Este teléfono ya tiene tarjeta". No recibe otro bono de bienvenida ni se le cambia el nombre. - Temporal (decisión del dueño): hoy basta saber el teléfono para abrir una tarjeta que ya existe. Cuando el WhatsApp del restaurante esté conectado, se pedirá un código por WhatsApp antes de abrirla.
v1.84.220 de octubre de 2026
Clientes: Eliminados (recuperar o eliminar definitivamente)
Agregado
- Clientes → Eliminados: los clientes eliminados se ven ahí durante 30 días con cuántos días les quedan. Se recuperan (vuelven con su tarjeta, saldo e historial) o, el Admin o un Co-admin, los eliminan definitivamente (uno, los de la lista o todos; pide escribir ELIMINAR). Al borrarlos se van sus datos, su tarjeta de Fidelidad, su saldo, sus movimientos y mensajes; sus pedidos se quedan en Ventas sin nombre ni teléfono.
- Después de eliminarlos definitivamente se pueden volver a importar. Si la importación encuentra clientes en Eliminados, lo dice y explica cómo recuperarlos o borrarlos.
Cambiado
- En la selección de Clientes, "Archivar" ahora es "Eliminar" (manda a Eliminados).
Corregido
- El borrado automático a los 30 días fallaba con clientes que tenían reservaciones, lugar en la lista de espera, facturas o mensajes de Fidelidad: ahora se sueltan antes de borrar (una sola función para la papelera y el borrado automático).
v1.84.120 de octubre de 2026
Importar clientes: empatar las sucursales del archivo
Agregado
- Sucursales de tu archivo: al elegir la columna "Sucursal de origen", el sistema lista cada nombre distinto que trae (con cuántos clientes) y el dueño elige a qué sucursal de Colega Menus corresponde ("CH" → Centro Histórico) o "Sin sucursal". Las que se parecen ya vienen elegidas. Solo se aceptan sucursales del restaurante.
- Volver a subir el archivo completa la sucursal de los clientes y tarjetas que se importaron sin ella (no cambia la que ya tenían y no duplica saldo).
Cambiado
- Subir el mismo archivo otra vez es más rápido: las tarjetas que ya recibieron su saldo importado se saltan sin consultarlas una por una.
v1.84.020 de octubre de 2026
Clientes: elegir varios y hacer algo con todos a la vez
Agregado
- Clientes → casillas en cada cliente y en el encabezado (los de esta lista). Si hay más páginas, "Seleccionar todos los que coinciden con la búsqueda y los filtros" (hasta 5,000).
- Barra de acciones abajo, con lo seleccionado:
- Inscribir en Fidelidad: les crea su tarjeta. A quien ya tiene no se le duplica.
- Etiquetas: agrega o quita VIP, Alergia, Cumpleaños… a todos.
- Promociones: marcar que aceptan o no. Para marcar "aceptan" hay que confirmar que dieron su permiso.
- Cambiar sucursal de registro: el Equipo solo mueve a los de sus sucursales.
- Archivar: se recuperan durante 30 días.
- Todo se vuelve a revisar en el servidor con la sesión: solo se tocan clientes de la Cuenta (y, del Equipo, los de sus sucursales); cada acción pide su permiso.
v1.83.020 de octubre de 2026
Etapa 59 (entrega 3): Checador y asistencia
Nuevo
- Qué cajas checan (Cajas e impresoras → Checador): cada caja "No checa", "Cobra y checa" o es "Solo checador" (tablet en la entrada). Puede haber varias por sucursal.
- Checar con PIN en la caja: persona → PIN → listo. La entrada se registra sola; después pregunta "Salgo a descanso", "Regreso" o "Salida". Con PIN temporal, primero elige el suyo. Sin internet se guarda en la caja y se sube sola con su hora real.
- "Solo checador": reloj grande, quién va a checar y un QR que cambia cada 30 segundos.
- Checar desde el celular (opción 1 de P3): el empleado activa su celular una vez con un enlace (Personal → expediente → Accesos), escanea el QR del checador, se toma su ubicación y pone su PIN. Si no hay ubicación o está fuera del radio de la sucursal (150 m de fábrica), se registra "Por revisar" para que el gerente la apruebe o la rechace. Una foto del QR deja de servir al minuto.
- Lector de huella ZKTeco (opción 2 de P3, nuevo): el lector se conecta solo a Colega Menus (ADMS) con su número de serie; desde el expediente se le manda registrar la huella de cada persona (con su consentimiento firmado) y se le borra al darla de baja. La huella nunca sale del lector y nunca es obligatoria. Instrucciones paso a paso en la misma página. Probado contra la documentación del protocolo; falta probarlo con un lector real.
- "Puede usar la caja": quien solo checa (cocina, limpieza) tiene PIN pero no aparece al entrar a cobrar.
- Personal → Asistencia:
- Día: quién vino, entrada, salida, horas trabajadas e incidencias contra su horario (retardo con minutos, salió antes, falta, no checó la salida, hora extra, sin turno). Las vacaciones y permisos aprobados no cuentan como falta.
- Correcciones con motivo: agregar una checada que se le olvidó, corregir la hora o anular. La original siempre se queda en el registro.
- Periodo: días, horas trabajadas y programadas, extra, retardos, faltas y pendientes por persona, y descargar el registro de jornada (CSV con la hora original, la corregida, el motivo y de dónde vino cada checada).
- Ajustes del checador por sucursal: checar desde el celular, radio en metros y minutos de tolerancia.
- La baja también desactiva su celular de checar y lo borra de los lectores.
v1.82.020 de octubre de 2026
Etapa 59 (entrega 2): Horarios y vacaciones
Nuevo
- Horario fijo en el expediente (pestaña Horario): la semana normal de cada persona, día por día, con los turnos de la sucursal o a mano y "Copiar el lunes a los demás días". Con esto la semana se llena sola (P16).
- Personal → Horarios: la semana de la sucursal con personas en renglones (por puesto) y días en columnas.
- Tocar una celda: los turnos de la sucursal como botones ("Matutino 8–16") u otro horario; quitar el turno o "Que sea su horario fijo".
- Arrastrar un turno a otro día u otra persona lo mueve; con Alt, lo copia.
- Copiar semana pasada, Volver al horario fijo, Publicar (lo que cambia después queda marcado "Nuevo") e Imprimir la semana en una hoja.
- Al pie de cada día: cuántas personas por puesto y cuántas horas.
- Avisos de ley (no bloquean): más horas que el tope del año de la reforma (48 h en 2026, 46 en 2027… 40 en 2030), sin día de descanso o menos de 10 h entre turnos.
- Turnos que cruzan la medianoche cuentan al día en que empiezan; quien trabaja ese día en otra sucursal se ve "En Norte".
- Festivos de ley marcados en el encabezado.
- En el celular, un día a la vez.
- Turnos de la sucursal: nombre, horas, descanso y color; la sucursal nace con Matutino y Vespertino de ejemplo.
- Personal → Vacaciones: el mes con personas en renglones y días en columnas, barras de color por tipo (vacaciones, permisos, incapacidad, cambio de descanso). Arrastrar sobre los días (o tocar el primero y el último) registra la ausencia; avisa cuando faltan a la vez dos del mismo puesto; las solicitudes por aprobar arriba con Aprobar o Rechazar.
- Saldo de vacaciones por ley (vacaciones dignas: 12, 14, 16, 18, 20 días y luego +2 cada 5 años), con los días que ya traía, los tomados y lo que le queda. Cada ausencia cuenta solo los días que la persona iba a trabajar, sin festivos.
- Las ausencias aprobadas aparecen solas en la semana de Horarios (y marcan en rojo si se le dejó turno ese día).
- La incapacidad es dato de salud: su tipo y su folio solo los ve quien tiene "Ver sueldos"; los demás ven "Ausencia".
- Módulo Horarios y vacaciones en Herramientas (se puede ocultar); Personas y Accesos y roles siempre se ven.
v1.81.020 de octubre de 2026
Etapa 59 (entrega 1): Personal
Nuevo
- Personal (antes Equipo): toda la gente del restaurante en una lista, con qué accesos tiene cada quien (caja, panel, repartidor), filtros por sucursal y "Por completar" / "Dados de baja".
- Agregar persona, una sola vez (P13): nombre, celular, puesto y sucursales, y abajo tres interruptores: PIN para la caja, Panel (correo y rol) y Repartidor. Por dentro crea el expediente, el Colaborador, la invitación y el repartidor, todos ligados. Ya no se captura a nadie dos veces.
- PIN temporal: el PIN que pone quien da de alta (el panel sugiere uno) es temporal. La primera vez que la persona entra a la caja, a la tablet del CEDIS o a su celular de repartidor, el sistema le pide elegir su propio PIN (dos veces); no acepta el mismo ni uno fácil (1234, 1111…). El panel lo avisa al dar de alta y al restablecer. Con PIN temporal todavía no autoriza nada en la caja.
- Un solo PIN por persona (P14): quien cobra y reparte entra al celular de repartidor con su mismo PIN de la caja.
- Expediente: Resumen (antigüedad, accesos, lo que falta), Datos (básicos, expediente con CURP, RFC, NSS, contrato, IMSS, patrón, contacto de emergencia; banco y CLABE cifrada con "Ver sueldos"), Accesos, Documentos y Notas.
- Varias sucursales por persona: su PIN funciona en todas las de su expediente.
- Documentos privados (INE, comprobante, contrato, tarjeta de salud…) con fecha de vencimiento, en un almacén privado de Vercel Blob que solo se lee desde el servidor (
PRIVATE_BLOB_READ_WRITE_TOKEN; sin él la pantalla lo avisa). - Notas del expediente que no se editan ni se borran; las confidenciales solo las ve quien tiene "Ver sueldos".
- Dar de baja: quita de golpe el PIN, el panel y el acceso de repartidor, con motivo y "¿lo recontratarías?". El expediente se conserva. Recontratar deja la baja anterior en sus notas.
- Lo que ya existía aparece solo (P10): Colaboradores, repartidores y miembros del Equipo se vuelven personas de Personal al abrir la página, sin juntarlas por nombre.
- Permisos nuevos Personal (
people) y Ver sueldos (people_pay), también en los roles personalizados. El Gerente edita Personal de sus sucursales, sin sueldos.
Cambiado
- Equipo se llama Personal y tiene dos pestañas: Personas y Accesos y roles (roles del panel, roles personalizados, Mi PIN y cajas vinculadas). La lista vieja de Colaboradores salió: se administran desde cada persona.
- La propina y el mesero de una mesa usan la misma regla de quién trabaja en la sucursal que la caja.
v1.80.120 de octubre de 2026
Importar clientes: hasta 50,000 por archivo
Cambiado
- Importar clientes acepta hasta 50,000 contactos por archivo (antes 5,000). Se mandan al servidor en partes de 1,500, una tras otra, con barra de avance ("Importando 4,500 de 18,900…"). Si una parte falla, lo importado se queda y el aviso dice cuántos entraron; volver a subir el mismo archivo termina sin duplicar clientes, tarjetas ni saldo.
v1.80.020 de octubre de 2026
Importar clientes: equivalencia con el programa de lealtad anterior
Agregado
- Migrar el programa de recompensas de cualquier negocio: al inscribir a los importados, el dueño dice en qué medía la recompensa su programa anterior (puntos, pesos, sellos o visitas) y cuánto vale en el programa de hoy ("100 puntos de antes = $3.00 en su monedero", "10 visitas = 10 sellos"). Si es la misma unidad se propone 1 a 1; si es distinta, la equivalencia es obligatoria (no se adivina). La vista previa muestra con cuánto queda cada cliente.
- "Calcular con IA": el dueño describe en sus palabras cómo funcionaba su programa ("1 punto por cada $10 y 100 puntos = $10", "10 visitas = 1 café") y la IA propone la equivalencia con una explicación (cuenta en la IA de la sucursal).
- Columnas con nombres genéricos: Recompensa disponible (lo que puede usar hoy) y Recompensa acumulada (en toda su historia), más Total gastado (pesos): si no hay acumulado, se calcula con lo gastado y las reglas del programa de hoy (el % del monedero o 1 punto por cada tanto).
Detalles técnicos
Notas
- Sin migración. Pruebas en
tests/importar-clientes-fidelidad.test.ts(columnas "Total gastado" y "Total disponible", conversión a monedero y a puntos, acumulado desde lo gastado, importación con equivalencia).
v1.79.020 de octubre de 2026
Fidelidad: invitar clientes, importar tu base con su saldo y escáner de la caja
Agregado
- Invita a tus clientes (Fidelidad → Miembros): el enlace de la tarjeta de cada sucursal para copiar o compartir (redes, WhatsApp, Google Business), las tres formas de inscribirse (cartel con QR, en la caja con su WhatsApp, enlace) y cómo se identifica el cliente (su WhatsApp).
- Cartel con QR para imprimir (
/app/tarjeta-imprimir): tamaño carta para la caja o la entrada, con el nombre del programa, la promesa ("Junta 10 sellos y llévate…") y los pasos, más cuatro tarjetitas para las mesas. - Importar clientes con más datos: además de nombre y WhatsApp, cumpleaños, sucursal de origen, saldo disponible, total acumulado, visitas y notas. Las columnas se detectan por su encabezado y el botón "Acomodar con IA" las propone viendo solo una muestra (cuenta en la IA de la sucursal). Plantilla nueva con todas las columnas.
- Inscribirlos en Fidelidad con su saldo (quien administra el programa): cada importado queda con su tarjeta, su saldo disponible (sellos, puntos o pesos del monedero), su total acumulado, sus visitas y su sucursal de origen, sin bono de bienvenida. En su historial sale "Saldo importado" ("Saldo de tu tarjeta anterior" para el cliente). Subir el archivo dos veces no duplica clientes, tarjetas ni saldo; a quien ya tenía tarjeta se le suma su saldo de antes una sola vez. Lo que ya tenía el cliente no se pisa (solo se completa).
Corregido
- Escáner de la caja: no leía las tarjetas con PDF417 ni Aztec; ahora sí. Si el lector del navegador no lee nada en 3 segundos (pasa en algunas tablets con ciertos QR), se suma el lector propio (ZXing) y se alternan. Si se escanea con la cámara un código que no es de tarjeta (el QR del menú, un producto), avisa en vez de quedarse callado.
- En Fidelidad la cámara ya no muestra el recuadro de códigos de barras: se lee en toda la imagen (QR y tarjetas). En Inventarios se queda como guía.
Detalles técnicos
Notas
- Migración
0096_importar_clientes: el movimientoimport(saldo traído de otro sistema). - Pruebas:
tests/importar-clientes-fidelidad.test.ts(cumpleaños, montos, columnas tipo KRISPIS, inscripción con saldo, sin duplicar, tarjeta existente y permisos).
v1.78.020 de octubre de 2026
Etapa 55 (entrega 3): campañas por wallet, avisos automáticos y aviso de cercanía
Agregado
- Fidelidad → Campañas y avisos (pestaña nueva). Campañas por wallet (P8): un mensaje de hasta 150 caracteres (con
{nombre}) a un grupo de clientes (todos, cumplen este mes, nuevos, frecuentes, con recompensa, en riesgo, dormidos), de toda la marca o de una sucursal (solo a los clientes con actividad en ella; una sucursal nunca escribe a toda la marca, P10). Sale ahora o programada (día y hora de la sucursal). Antes de enviar dice a cuántos les llega y por qué no a los demás. Vista previa de cómo se ve en la pantalla de bloqueo. - Solo llega a quien tiene la tarjeta en su wallet y aceptó promociones, con el tope de una campaña al día y tres a la semana por cliente. Resultados de cada campaña: a cuántos llegó, cuántos vinieron y cuántos canjearon en los 7 días siguientes, y por qué no se mandó a los demás (sin wallet, sin permiso, por el tope).
- Datos de cada cliente en el mensaje: al teclear "/" sale la lista (o con los botones de abajo) para insertar nombre, saldo acumulado, siguiente recompensa, lo que le falta, nivel y cumpleaños; se llenan con los datos de cada cliente al mandar, en campañas y avisos. Acepta mayúsculas, espacios y acentos (
{Nombre},{ cumpleanos }); si algo parece variable pero no existe, el panel avisa antes de enviar. La vista previa los muestra con datos de ejemplo. - "Escribir con IA": el restaurante cuenta su idea y la IA propone tres textos (cuenta en la IA de la sucursal, con su tope y su costo registrado).
- Avisos automáticos (se encienden y su texto se edita; los cambia quien administra el programa): bienvenida al guardar la tarjeta en su wallet, cumpleaños con su regalo, "te falta poco" cuando una compra lo deja a una visita de su recompensa, saldo por vencer (7 días antes), "te extrañamos" a los 30 días sin venir (es promoción: con permiso y tope; apagado de fábrica) y subió de nivel. Cada uno sale una sola vez por periodo.
{nombre},{recompensa},{faltan}y{nivel}se llenan con los datos del cliente. - Aviso de cercanía por sucursal (P9): texto propio de hasta 100 caracteres que muestra Apple Wallet cuando el iPhone decide que el cliente está cerca (no es un aviso garantizado; Google usa su propio texto). Lo escribe quien edita Fidelidad en esa sucursal.
- Cómo llega a la wallet: en Apple, el mensaje va atrás del pase y sale en la pantalla de bloqueo al bajar el pase nuevo; en Google, como mensaje con aviso (Google permite 3 avisos por tarjeta al día) y después se queda en la tarjeta.
- Tarea cada 15 minutos (
/api/cron/loyalty): manda las campañas programadas, de 10 a 12 h los avisos del día ("saldo por vencer" y "te extrañamos") y termina de avisar a las wallets lo pendiente.
Detalles técnicos
Notas
- Migración
0095_fidelidad_campanas:loyalty_campaigns,loyalty_messages(cada envío o por qué no; topes, resultados y que un aviso no se repita),loyalty_nearby_messages,loyalty_programs.automationsy enloyalty_cardsel último mensaje (wallet_message,wallet_message_at,google_message_at). vercel.json: el cron nuevo cada 15 minutos (usaCRON_SECRET, igual que la tarea diaria).- WhatsApp como canal de campañas queda para cuando Meta apruebe la conexión de los restaurantes.
- Pruebas:
tests/fidelidad-campanas.test.ts(alcance, permiso de promociones, tope, programadas y canceladas, permisos de sucursal, avisos una sola vez, "te falta poco", nivel, "te extrañamos", mensaje y cercanía en el pase de Apple) y entests/google-wallet.test.tsel mensaje con aviso de Google.
v1.77.320 de octubre de 2026
Editar producto: secciones plegables, aviso de cambios sin guardar y error al guardar
Corregido
- "No encontramos ese elemento. Recarga la página." al guardar un producto: el formulario cargaba etiquetas, sucursales, recetas o productos de "Acompaña con" que ya estaban archivados, y el servidor los rechazaba. Ahora solo carga lo que sigue vivo, así que se puede guardar.
Cambiado
- Secciones plegables (Fotos, Datos, Recetas, Etiquetas, Modificadores, Acompaña con, Visible en): se abre una a la vez y las cerradas muestran un resumen ("2 fotos", "Picante, Recomendado"…). Al editar abre Datos; al crear, Fotos.
- Barra de guardar siempre a la vista abajo de la pantalla: dice "Tienes cambios sin guardar" y, si algo falla al guardar, el error sale ahí con el nombre de la sección. Esa sección se abre sola y lleva al campo.
- Aviso al salir sin guardar también al ir a otra página del panel (menú lateral, "Volver al menú", Cancelar) y con el botón de regresar del navegador o del celular, no solo al cerrar la pestaña.
- Ajustes de un modificador en el producto:
- Se abren con "Ajustar aquí" (o "Con ajustes · Editar" si ya tiene) y empiezan cerrados.
- Guardar ajustes los deja y cierra el panel; Cancelar regresa a como estaban.
- "Quitar ajustes" queda aparte, en rojo, solo si hay ajustes.
v1.77.220 de octubre de 2026
Vincular caja: dice por qué no entra
Corregido
- Si la Cuenta no está activa (terminó la prueba o falta el pago) o el restaurante no está activo, el panel ya no aprueba una caja nueva: dice por qué y qué hacer. Antes la aprobaba, pero la tablet la rechazaba en silencio y volvía a pedir código una y otra vez.
- Si justo después de aprobarla la tablet vuelve a pedir código, ahora muestra el motivo en rojo:
- el navegador no guardó el acceso (navegación privada o cookies bloqueadas);
- la Cuenta, el restaurante o la sucursal no están activos;
- la caja se desactivó;
- la pantalla salió de una copia guardada del modo sin internet.
v1.77.120 de octubre de 2026
Vincular caja: ya no se queda en "El código venció"
Corregido
- Al aprobar una caja nueva desde el panel, la tablet mostraba "¡Listo!" y luego "El código venció", aunque la caja sí quedaba vinculada (al recargar ya pedía quién la usa).
- Causa: la tablet pregunta cada 2.5 segundos si ya la aprobaron. Si una pregunta tardaba, salía otra antes de que llegara la primera. La primera recibía el acceso y la segunda encontraba el código ya usado y respondía "venció" encima.
- Arreglo: ahora hace una pregunta a la vez y, al aprobarse, la página se recarga completa para entrar a la caja.
v1.77.020 de octubre de 2026
Fidelidad: tarjeta de sellos con espacios, sello propio y regalos por nivel
Agregado
- Sellos para llenar la tarjeta (Fidelidad → Programa → Cómo se gana, de 4 a 12): son los espacios que se dibujan en la tarjeta, en su página y en Apple y Google Wallet. Cada recompensa va en un espacio (ej.: 5 = bebida, 10 = combo) y su espacio vacío muestra un regalo.
- Vueltas de la tarjeta: las recompensas de en medio se canjean sin descontar sellos y una sola vez por vuelta; la de la tarjeta llena descuenta sus sellos y empieza otra tarjeta (los sellos de más pasan a la siguiente: "+2 sellos para tu siguiente tarjeta"). Para publicar se necesita la recompensa de la tarjeta llena, y ninguna recompensa puede costar más sellos que la tarjeta.
- El sello de la tarjeta: el restaurante elige uno de 18 íconos (palomita, café, estrella, pizza, torta, helado…) o sube su propio sello (PNG o WebP, de preferencia cuadrado y con fondo transparente). Se usa igual en la página, la vista previa del panel y las wallets.
- Niveles en sellos = sellos de regalo: con un programa de sellos, cada nivel da "Sellos de regalo" la primera vez que el cliente llega (una sola vez por nivel; en el historial sale como "Regalo de nivel").
Corregido
- En sellos, el "% extra" de los niveles no sumaba nada (el 1 % de 1 sello se redondea a 0). Ya no se pide en sellos y no se aplica.
Detalles técnicos
Notas
- Migración
0094_sellos_tarjeta:loyalty_programs.stamp_card_sizey el movimientotier. Los programas de sellos que ya existen siguen como antes (sin tamaño) hasta que se guarden; el editor propone el tamaño de su recompensa más cara. - Íconos de sello en
src/lib/stamp-icons.ts(trazos de Lucide, ISC) para dibujarlos igual en el navegador y en las imágenes de las wallets. - Pruebas:
tests/fidelidad-sellos.test.ts(vueltas, canje una vez por vuelta, tarjeta llena, regalo de nivel, validaciones e imagen del sello).
v1.76.020 de octubre de 2026
Etapa 55 (entrega 2, parte 2): la tarjeta de cliente en Google Wallet
Agregado
- "Agregar a Google Wallet" en la tarjeta del cliente (
…/tarjeta/{código}), en Android y computadoras que no son de Apple (en iPhone, iPad y Mac sigue Apple Wallet), cuando las llaves de Google están puestas (P4). Es una tarjeta de lealtad con el nombre del programa, el color de fondo del diseño, el logo del restaurante, el saldo (sellos, puntos o monedero en pesos), el nombre del cliente, el código que eligió el restaurante (QR, código de barras, PDF417 o Aztec; la caja lo lee igual), la siguiente recompensa, el nivel, cómo funciona, las recompensas, las reglas y el enlace a la tarjeta en línea. En sellos (hasta 12), los sellos se dibujan en la imagen de la tarjeta. - Se actualiza sola: cada cambio de saldo (compra pagada, canje, cancelación, ajuste a mano, cumpleaños, vencimiento) o del programa (nombre, diseño, recompensas) reemplaza la tarjeta en Google, y Google avisa al cliente del saldo nuevo (hasta 3 avisos al día por tarjeta, regla de Google).
- Aviso de cercanía (P9): la tarjeta lleva hasta 10 sucursales que participan; Google la muestra cuando el cliente está cerca.
Cambiado
- Los avisos de Apple Wallet y la actualización de Google Wallet salen juntos de la misma sincronización (
src/server/loyalty/wallets.ts). Si Google no responde, la tarjeta queda pendiente y se reintenta en la siguiente. - El diseñador de la tarjeta dice "Este diseño también se usa en Apple Wallet y Google Wallet".
Detalles técnicos
Notas
- Migración
0093_google_wallet:loyalty_cards.google_wallet_at(cuándo se creó su pase de Google; solo esas tarjetas se actualizan en Google). - Variables
GOOGLE_WALLET_ISSUER_IDyGOOGLE_WALLET_SERVICE_ACCOUNT(ya en Vercel, Production y Preview). Sin ellas no aparece el botón. - El logo (660 px) y la franja de sellos se generan en PNG y se guardan en Vercel Blob (
wallet/google/…), porque Google las descarga de una URL pública. - El emisor está en modo demostración: solo las cuentas de prueba de la Pay & Wallet Console pueden guardar la tarjeta hasta que Google apruebe el acceso de publicación.
- Pruebas:
tests/google-wallet.test.ts(llaves, firma del enlace, clase y objeto, botón, actualización solo de las tarjetas guardadas y reintento si Google falla).
v1.75.020 de octubre de 2026
Etapa 62 (Parte B): cómo se ve el catálogo del POS
Agregado
- Panel → Cajas e impresoras → Caja → Vista del catálogo: cinco ajustes, en los mismos tres niveles de siempre (marca con candado, sucursal y caja):
- Estilo: foto grande, foto chica o solo nombre.
- Tamaño: chico, mediano o grande.
- Color: neutro, por categoría o por producto.
- Mostrar precio.
- Categorías: arriba o en una columna a la izquierda (en tablets y computadoras; en celular siempre van arriba).
- Vista previa en vivo junto a los ajustes, con productos reales de la sucursal. Cambia con cada opción y se puede tocar una categoría para probar.
- Color en el POS en cada categoría (en su ventana del editor del menú) y en cada producto (en su ficha), con la paleta fija de las etiquetas. Un producto sin color usa el de su categoría.
- La caja y la vista previa usan el mismo componente, así que se ven igual.
Cambiado
- "Fotos en los botones de productos" pasa a ser el estilo Solo nombre. Si estaba apagado, la caja se sigue viendo sin fotos hasta que se elija otro estilo.
Detalles técnicos
Notas
- Migración 0092 (
categories.coloryproducts.color, columnas opcionales). UsaADD COLUMN IF NOT EXISTS, así que se puede repetir sin problema. Ya está aplicada en la base de pruebas. Esta versión no se publica con el PR desde el celular: primero vanpm run db:migrate:productiondesde la Terminal.
v1.74.020 de octubre de 2026
Etapa 62 (Parte C): filtros por área y color en las mesas del POS
Agregado
- POS → Mesas, en "Cuadros" y en la lista por área del celular: filtros por área (Salón, Terraza…) y por color, con el nombre de la leyenda ("Rojo · Mesas de Juan"). Se combinan con "Mis mesas" y cada caja recuerda los que eligió.
- Con filtros puestos se ve "Mostrando 6 de 24 mesas · Quitar filtros". Los avisos de "Llamar al mesero" y "Pedir la cuenta" de mesas ocultas siguen sonando y se cuentan aparte (P7).
- En el plano grande no se filtra: ahí siempre se ve el salón completo.
Detalles técnicos
Notas
- Propuesta:
docs/PROPUESTA-ETAPA-62.md(aprobada el 20-oct-2026). Siguen la Parte B (vista del catálogo) y la Parte A (caja personal desde el panel).
v1.73.020 de octubre de 2026
Etapa 61: diseño compacto en todo el sistema
Cambiado
- Panel más compacto, estilo Stripe (pedido de los clientes: en pantallas chicas el título y los avisos ocupaban media pantalla). Con mouse, botones y campos de 32 px y renglones de tabla de 40 px; en pantallas táctiles crecen solos a 44–48 px. Mockup aprobado:
docs/mockups/etapa-61-pedir-cedis.html. - Encabezado de página en una línea: título de 24 px, la etiqueta de a quién le afecta ("Solo Centro Histórico", "Toda la marca · 9 sucursales"; la frase completa al pasar el mouse) y las acciones a la derecha. La barra rosa de alcance de arriba de cada página se quitó.
- Barra superior de 52 px y menú lateral de 240 px con renglones de 32 px (plegado: 64 px).
- Pestañas subrayadas, filtros rápidos con conteo, franjas de cifras (una caja con divisiones en lugar de una tarjeta por número), estados en píldora (fondo tenue, borde y texto del mismo color) y tablas compactas con montos a la derecha, en todos los paneles: restaurante, super admin, anfitrión, distribuidor y Colega Cards.
- Sin tarjeta dentro de tarjeta; avisos (
Notice) más chicos; menos relleno en tarjetas (16–20 px). - Caja, tablet del CEDIS y repartidor: mismo estilo (estados, títulos, tablas del corte), pero lo que se toca sigue grande (teclados, Cobrar, productos, mesas).
- Menú público, Tienda en línea y página de ventas: sin cambios visibles (identidad del restaurante y botones de 44 px).
Detalles técnicos
Para el equipo (componentes primero)
- El diseño vive en los componentes: tokens de densidad en
src/app/globals.css(--control-h,--row-h,--topbar-h,--control-radius; clasesh-control,size-control,h-row,rounded-control…) ydata-density="touch"en los layouts de/pos,/cedis,/repartidor,/my la página de ventas. - Kit de página
src/components/ui/page.tsx:PageHeader(antes enadmin-shell),PageTabs,tabClass,FilterChips,chipClass,StatStrip+Stat,Section,EmptyState,Count. NuevosStatusPill(ui/status-pill.tsx) yNativeSelect(ui/native-select.tsx).ScopeBarpasa aScopeChip. design-system/MASTER.md: sección "Componentes primero"; la regla de 44 px pasa a "32 px con mouse, 44 px con el dedo, lo deciden los tokens".tests/design-tokens.test.ts: falla si una pantalla vuelve a escribir altos fijos (h-11,size-12…).
v1.72.020 de octubre de 2026
Fidelidad: las compras con cupón o descuento pueden no sumar
Agregado
- Regla del programa (Puntos y Monedero, en Fidelidad → Programa → Cómo se gana): "Las compras con cupón o descuento no suman". Con ella encendida, un pedido con cupón (caja o Tienda en línea) o descuento manual de la caja no gana puntos ni monedero; sin promoción suma como siempre. Un canje de Fidelidad no cuenta como promoción: suma lo que el cliente pagó. En Sellos no aplica (cada visita es un sello).
- El cliente lo ve en las reglas de la página para sacar su tarjeta ("Las compras con cupón o descuento no suman") y atrás de su pase de Apple Wallet.
- En la caja, con la tarjeta del cliente a la vista y un cupón o descuento aplicado, aparece "Con cupón o descuento, esta compra no suma".
Detalles técnicos
Notas
- Migración
0091_fidelidad_sin_promos:loyalty_programs.no_earn_with_discount(apagada de fábrica; los programas que ya existen siguen igual). Probada en la rama de Neon de pruebas. - Pruebas:
tests/fidelidad-promos.test.ts(cupón, descuento manual, canje, sin la regla y sellos).
v1.71.019 de octubre de 2026
Etapa 55 (entrega 2, parte 1): la tarjeta de cliente en Apple Wallet
Agregado
- "Agregar a Apple Wallet" en la tarjeta del cliente (
…/tarjeta/{código}), solo en iPhone, iPad o Mac y cuando las llaves de Apple están puestas (P4). El pase es una tarjeta de tienda con los colores del diseño del programa, el logo del restaurante (ícono y logo), el saldo arriba, el nombre del cliente, la siguiente recompensa (o "¡Ya puedes canjear…!"), el nivel, el QR con el enlace de la tarjeta (la caja lo lee igual que el de la página) y, atrás, cómo funciona, las recompensas, las reglas y el enlace a la tarjeta en línea. En sellos (hasta 12), los sellos se dibujan llenos y vacíos en la franja. - Se actualiza sola (servicio web de Apple): el iPhone se registra al guardarla; cada vez que cambia el saldo (compra pagada, canje, cancelación, ajuste a mano, cumpleaños, vencimiento) o el programa (nombre, diseño, recompensas, pausa) se le avisa por APNs y baja el pase nuevo. El cambio de saldo sale en la pantalla de bloqueo ("Tu saldo ahora es …").
- Aviso de cercanía (P9): el pase lleva hasta 10 sucursales que participan (primero la de su inscripción) con "Estás cerca de {sucursal}. Muestra tu tarjeta al pagar."; lo muestra el iPhone cuando él lo decide.
- La tarea diaria avisa en Sentry 30 días antes de que venza el certificado de Apple Wallet (vence cada año).
- Tipo de código de la tarjeta en el diseñador (Parte C): QR (de fábrica; también abre la tarjeta desde el celular), código de barras (Code 128, para lectores láser de una línea; lleva solo el código de la tarjeta), PDF417 o Aztec. Se ve en la tarjeta web, en la vista previa del panel y en Apple Wallet (con QR de respaldo en el Apple Watch, que no muestra códigos de barras). La caja reconoce los cuatro.
- En el pase, la etiqueta de arriba dice SALDO (antes repetía "SELLOS · 10 sellos").
Detalles técnicos
Notas
- Variables (Production y Preview):
APPLE_TEAM_ID,APPLE_PASS_TYPE_ID,APPLE_PASS_CERTyAPPLE_PASS_KEY(PEM en base64). Más el certificado público WWDR G4 de Apple ensrc/assets/apple/AppleWWDRCAG4.cer. Sin todo esto, el botón no aparece y nada más cambia. - Rutas:
GET /api/wallet/apple/pass/{código}(el .pkpass) y el servicio web de Apple en/api/wallet/apple/v1/…(registrar y dar de baja iPhones, qué cambió, el pase más reciente con 304, y su bitácora). Cada llamada exige el token del pase (HMAC del código con el secreto del servidor; no se guarda). - Migración
0090_stage55_fidelidad(junto con la entrega 1): tablaapple_wallet_registrationsyloyalty_cards.wallet_updated_at/wallet_pushed_at. Probada en la rama de Neon de pruebas. - Dependencias:
passkit-generator3.6.1 (firma el pase) ysharp(ya venía con Next; ahora explícita) para las imágenes PNG. - Pruebas:
tests/apple-wallet.test.ts(campos, franja de sellos, firma con certificados de prueba, token, registro, cambios y 304). tests/fidelidad-codigos.test.ts: cada tipo de código se dibuja y se vuelve a leer con zxing (el motor del lector de la caja). El escritor de zxing-wasm ya venía en el proyecto; su.wasmse incluye en las rutas de la tarjeta y del panel.- Falta probarlo en un iPhone real con el certificado de producción, y Google Wallet (espera el Issuer ID).
v1.70.019 de octubre de 2026
Etapa 55 (entrega 1): Fidelidad y recompensas
Agregado
- Programa de fidelidad del restaurante (Panel → Ventas y clientes → Fidelidad → Programa y recompensas; P1): uno por marca, de tres tipos (P2): sellos por visita, puntos por monto ("1 punto por cada $10") o monedero (un % de cada compra regresa en pesos). Reglas: compra mínima, veces que gana por día (de fábrica 1 en sellos), dónde suma (caja, Tienda en línea, pedido desde la mesa), sucursales que participan, bono de bienvenida, bono de cumpleaños (con días antes y después, una vez al año), promociones por horario (doble o triple ciertos días y horas), niveles por visitas al año con % extra, vencimiento por meses sin venir y reglas que ve el cliente. Se crea pausado con una recompensa de ejemplo; se publica cuando hay al menos una recompensa. Ya con tarjetas emitidas no se cambia el tipo. Lo cambian el Admin y los Co-admins; los demás lo ven.
- Catálogo de recompensas (sellos y puntos): producto gratis hasta un tope (el más caro del pedido), pesos o % de descuento; se pausan o eliminan (se recuperan 30 días).
- Diseño de la tarjeta con vista previa en vivo (fondo, texto y acento) y aviso cuando el contraste no se lee (Parte C, primera parte).
- Tarjeta de cliente en el menú público (P3, P4):
…/{sucursal}/tarjetao…/{marca}/tarjetaexplica el programa y la saca sin descargar nada (nombre, WhatsApp, cumpleaños opcional que solo se captura una vez, promociones aparte y aviso de privacidad). La tarjeta (…/tarjeta/{código}) muestra su QR, saldo, recompensas disponibles, lo que le falta, nivel e historial; el teléfono la recuerda. Sin código de verificación: si el teléfono ya tiene tarjeta no se vuelve a entregar (se recupera en caja), con límite de 5 tarjetas por conexión por hora. - Suma sola al quedar pagado (P6): caja, mesas, Tienda en línea, Mercado Pago, repartidor y ventas sin internet al subirse. Cancelar o reembolsar completo revierte lo ganado; cancelar devuelve lo canjeado. Una compra pagada el mismo día antes de inscribirse también cuenta.
- En la caja: al escribir el teléfono o escanear el QR de la tarjeta (lector 2D o cámara) aparece su saldo, nivel y cumpleaños; se canjea una recompensa o pesos del monedero (entra al pedido como su descuento, uno por pedido, recalculado en el servidor), se inscribe al cliente (le aparece el QR para guardar su tarjeta) y se da a mano con encargado y motivo. Sin internet no se canjea (P7).
- Miembros (Panel → Fidelidad): números de 30 días (miembros, activos, visitas, canjes y saldo por canjear), búsqueda, grupos (cumplen este mes, nuevos, frecuentes, con recompensa, en riesgo, dormidos, aceptan promociones), ficha con historial, dar o quitar a mano con motivo y sucursal, e inscribir desde el panel. La sucursal (Franquiciatario, Gerente) solo ve y ajusta a los clientes de sus sucursales (P10).
- Sección de permisos Fidelidad (también en roles personalizados), módulo Fidelidad y recompensas en el catálogo y en las recomendaciones (prioridad "Que regresen", cafeterías), Actividad del panel y tarea diaria (cumpleaños y vencimientos) en el cron existente.
Detalles técnicos
Notas
- Migración
0090_stage55_fidelidad: tablasloyalty_programs,loyalty_rewards,loyalty_cardsyloyalty_movements(cada cambio de saldo es un movimiento inmutable; el saldo es su resumen y nunca baja de cero),customers.birth_month/birth_day,orders.loyalty_checked_at(los pedidos de antes quedan revisados) y el descuentorewardenorders.discount_source. Probada en la rama de Neon de pruebas. - Pruebas: reglas, ganar al pagar, no duplicar, revertir, canje con saldo y uno por pedido, tope diario, cumpleaños y vencimiento, ajustes por sucursal y aislamiento entre Cuentas (
tests/fidelidad.test.ts). - Siguiente entrega: Apple Wallet y Google Wallet (cuentas en trámite), campañas por wallet y WhatsApp, automatizaciones, aviso de cercanía, compensación entre sucursales y el asistente con IA que propone el programa. Canje en la Tienda en línea y sumar ventas sin internet escaneando la tarjeta, después.
v1.69.519 de octubre de 2026
Modificadores: buscador, vista en lista y hasta 200 grupos
Cambiado
- Modificadores:
- Buscador de grupo u opción, sin importar acentos ("jalapeno" encuentra "Jalapeño"). Si la búsqueda coincide con una opción, el grupo aparece ya abierto con sus interruptores.
- Vista en lista (la de fábrica): una fila por grupo con su regla, productos y opciones. Se abre con un toque para apagar o prender opciones, y muestra cuántas están apagadas. El botón de cuadritos regresa a las tarjetas, y cada navegador recuerda la última vista.
- El tope sube de 60 a 200 grupos por sucursal (o por marca con menú maestro). El 60 era un número de seguridad de la Etapa 14, sin razón técnica.
v1.69.419 de octubre de 2026
Modificadores: cada opción en su tarjeta y se reacomodan arrastrando
Cambiado
- Modificadores → opciones del grupo: cada opción va en su propia tarjeta con borde, con su receta, ingredientes y "Ya marcada" dentro. Así se ve dónde termina una y empieza la otra.
- Las flechas de subir y bajar se cambiaron por una agarradera (⋮⋮) para arrastrar la opción a su lugar, igual que en las variantes. Funciona con el mouse y con el dedo en celular.
v1.69.319 de octubre de 2026
La comandera ya no se llena con lo entregado
Corregido
- Comandera y POS → Pedidos: en un día de más de 200 pedidos en una sucursal, lo entregado en la mañana llenaba la lista y los pedidos nuevos de la tarde ya no aparecían (ni sonaban). Ahora los pedidos abiertos siempre llegan todos, y de lo entregado o cancelado hoy se muestran los últimos 100.
- El número de la columna Terminados hoy sigue contando todo lo de hoy, aunque solo se vean los últimos 100.
Detalles técnicos
Técnico
listBoardhace dos consultas: los activos sin tope práctico (2000, con aviso a Sentry si se llega) y lo terminado hoy, del más reciente al más antiguo, con tope de 100 (BOARD_DONE_LIMIT).loadBoarddevuelve ademáshiddenDone(lo que no cupo) para el conteo. Sin migración: usan los índices que ya existen.
v1.69.219 de octubre de 2026
Tres índices para la caja, el inventario y Ventas
Cambiado
- POS → Mesas (se revisa cada 5 segundos), las reservaciones y las ventas sin internet encuentran las cuentas de mesa abiertas sin recorrer todas las que la sucursal ha cerrado.
- Inventario (plan Escala): después de cada pedido, los renglones que faltan por descontar se encuentran directo, sin revisar todos los renglones vendidos del restaurante.
- Ventas: la lista de cupones del filtro sale de un índice propio.
Detalles técnicos
Técnico
- Migración
0089_stage_indices_escala: tres índices parciales (table_tabs_open_branch_idx,order_items_stock_pending_idx,orders_coupon_code_idx). Solo crea índices; no cambia datos. Probada en la rama de pruebas de Neon: el planificador usa los tres.
v1.69.119 de octubre de 2026
Equipo: vista en lista, filtros y Co-admins que agregan Co-admins
Cambiado
- Equipo: nueva barra con buscador (nombre, correo o teléfono), botón para ver en tarjetas o en lista (cada navegador recuerda la última) y Filtros por rol y por sucursal (el de sucursal solo aparece con más de una).
- El filtro por sucursal muestra a quien la puede administrar: el Admin y los Co-admins siempre, y el resto si tiene todo el restaurante o esa sucursal.
- La lista es compacta: una fila por persona con sus botones como íconos; en celular los botones bajan a su propio renglón.
- Co-admins: un Co-admin ya puede agregar otros Co-admins. Quitarlos o pasarles el rol de Admin sigue siendo solo del Admin.
v1.69.019 de octubre de 2026
Etapa 56 (entrega 4c): se acabó un ingrediente, se apaga solo lo que lo lleva
Agregado
- "Se acabó" un insumo o ingrediente (P30): en Agotados de la caja y ahora también en el panel (Menús), además de platillos y opciones. Se apaga solo lo mínimo en esa sucursal: la opción de modificador que lo lleva ("+ queso" en todos los productos), la opción de precio con su receta ("Quesadilla de queso") o el producto si lo lleva su receta principal o una receta de su combo. Un grupo obligatorio que se queda sin opciones apaga ese producto. Nunca se apaga el menú.
- Antes de confirmar se ve qué se apaga (P31): "Se deja de ofrecer: + queso (en 14 productos), De queso · Quesadilla". Vuelve a la medianoche o hasta reactivarlo; queda quién lo hizo.
- "Sin X" solo: si se acaba algo que se puede quitar (la cebolla), el platillo se sigue vendiendo sin eso. La caja y la Tienda lo muestran marcado ("Sin cebolla (se acabó)") y el servidor lo quita aunque no lo pidan.
- "Se acabó" una receta (P47, plan Escala): "se acabó el aderezo de chipotle" apaga lo que la usa, con la misma regla.
- Ingredientes en el plan Complete (P33): en el producto, Ingredientes (qué lleva, sin cantidades, con "Se puede quitar") y en cada opción de modificador sus ingredientes. Sirven para agotar en cascada y para "Sin X"; no descuentan inventario. Al pasar a Escala solo se agregan las cantidades (la unidad de un ingrediente nuevo aún se puede cambiar).
- Importar con la plantilla en Complete: hojas 1 a 3 con solo los nombres (sin cantidades, precios ni presentaciones) y la hoja 5 como los ingredientes del producto (un combo junta los de sus recetas).
Cambiado
- Agotar solo al llegar a 0 (Escala, P32): ya no apaga el producto completo. Marca el insumo agotado en esa sucursal y apaga en cascada lo mínimo; vuelve solo al reponerse (lo que agotó una persona, no).
Corregido
- Una prueba del agotado dependía de la fecha (fallaba desde el 19 de octubre).
Detalles técnicos
Técnico
- Migración 0088:
branch_sold_outaceptaitemyrecipe;recipe_lines.quantitypuede ir vacía (ingrediente sin cantidad). - La cascada se calcula al leer lo agotado (
loadSoldOut→src/server/content/sold-out-cascade.ts), fuera del caché del menú, así que lo que se agrega después al menú también la respeta. Una receta con ingredientes sin cantidad no descuenta ni cambia el costo capturado a mano. - Ingredientes en
src/server/content/ingredients.ts; "Agotados" compartido entre caja y panel ensrc/components/content/sold-out-manager.tsx.
v1.68.219 de octubre de 2026
Dominios: "Activando enlace" mientras sale el candado
Corregido
- Un dominio nuevo ya no dice "Activo" en cuanto Vercel ve el DNS: primero se prueba que abra con candado (HTTPS). Mientras Vercel lo genera (de 1 a 5 minutos) la tarjeta dice Activando enlace, con una cuenta regresiva de 5 minutos en el botón ("Activando… 4:32"); la página revisa sola cada 20 segundos y el botón Abrir aparece en cuanto el enlace está listo. Antes, al abrirlo luego luego, el navegador cerraba la conexión.
- Mientras se activa no cuenta para los enlaces ni para la redirección de menudigital. Un dominio que ya estaba activo no se apaga si una prueba del candado falla por la red.
v1.68.119 de octubre de 2026
Animaciones 3D en el registro, pantallas vacías, logros y errores
Cambiado
- Animación 3D Colega Menus (un producto de plastilina que se mueve, sin fondo) en 24 lugares más. El movimiento es claro desde el primer segundo: el bucle arranca en el momento de más movimiento.
- Registro, paso 2 "¿Cómo vendes?": caja registradora, libreta del mesero, campana de mostrador, celular con mensajes, carrito, moto de reparto y kiosco.
- Registro, paso 3 "¿Qué quieres mejorar?": cronómetro, cajas con insumos, tableta con comandas, tarjeta de sellos, cochinito y pines de ubicación.
- Registro, paso 4: trofeo junto al título.
- Pantallas vacías:
- Clientes: tarjetero.
- Ventas → Pedidos: riel de comandas.
- Gastos: ticket con monedas.
- Insumos: caja de verduras.
- Opiniones: globo con estrellas.
- Reservaciones: mesa reservada (solo en la vista de un día).
- Logros:
- "¡Tu menú está listo!": menú con confeti.
- Al volver de pagar el plan: nueva ventana "¡Despegamos!" con un cohete, en lugar del aviso que se borraba solo.
- Errores:
- Página no encontrada: plato vacío con signo de interrogación.
- "Algo salió mal": olla que se desborda.
Detalles técnicos
Notas
- Archivos en
public/animaciones/(WebP animado con transparencia, 200 px, unos 150–390 KB cada uno, y su imagen fija). Solo se cargan donde aparecen. EmptyState(inventario) yErrorScreenaceptanart.
v1.68.019 de octubre de 2026
Etapa 58 (entrega 3): el panel en el dominio de la marca
Agregado
- Dominio de Equipo (antes "Caja"):
equipo.krispis.mxabre el panel (con la comandera) además de la caja, la tablet del CEDIS y el repartidor. La raíz lleva al panel. - Inicio de sesión con la marca: en ese dominio el login sale con el logo y el nombre del restaurante, sin "Crea una cuenta". Cada persona entra una vez ahí.
- En el dominio de Equipo solo se trabaja en esa marca: quien no es de ella regresa a
menus.colegastudio.com. No salen los banners de Colega. - Suscripción, WhatsApp, Mercado Pago, Refiere y gana y Colega Cards abren en
menus.colegastudio.com(dados de alta con Stripe, Meta y Mercado Pago a nombre de Colega).
Detalles técnicos
Seguridad
- Los correos de recuperar contraseña, verificar correo e invitaciones nunca llevan el dominio de la marca: si alguien se queda con ese dominio no puede usar esos enlaces para entrar a una cuenta.
- Riesgos de perder el dominio y recomendaciones P6–P8 en
docs/PROPUESTA-ETAPA-58.md.
Técnico
brandRoute(src/lib/domains.ts) decide qué hace el proxy con cada ruta de un dominio de marca; con pruebas.- Better Auth acepta el origen del dominio de Equipo activo (
trustedOriginsdinámico).requireTenantfija el restaurante del dominio. Sin migración.
v1.67.018 de octubre de 2026
Etapa 56 (entrega 4b): recetas en productos y modificadores
Agregado
- Productos hechos de recetas (P41): en el producto, sección Recetas: la receta principal y También lleva (otras recetas × cuántas veces). Un combo = hamburguesa + papas + refresco con las recetas que ya existen, sin repetirlas. Descuenta del inventario y calcula el costo.
- Grupos de modificadores desde recetas (P42, P45): cada opción puede usar una receta (× cuántas veces) con su nombre visible y su precio extra; "+ Desde una receta" crea la opción con el nombre de la receta. Se ve cuánto consume y su margen.
- "Se puede quitar" (P43): en la receta se marcan los insumos que el cliente puede quitar. La caja y la Tienda muestran solas "Sin cebolla"; ese insumo no se descuenta, y sale en la comandera, el ticket, la impresora y el detalle del pedido.
- Ya marcada: una opción puede venir elegida al abrir el producto (se puede cambiar).
- Incluidas (por producto): las N elecciones más baratas de un grupo no cobran extra ("2 salsas incluidas, la tercera cobra"). El servidor lo recalcula al confirmar.
- Costo y margen con extras (P46): en el producto, el costo y el margen en rango (lo mínimo y lo máximo que se puede pedir con sus modificadores).
- Copiar a otros productos: los modificadores de un producto (con sus ajustes) se copian a otros de un jalón.
- Importar insumos y recetas desde la plantilla (hojas 1, 2, 3 y 5): proveedores, insumos con presentación, precio y código de barras, recetas y preparados con sus ingredientes ("Se puede quitar" incluido) y lo que lleva cada producto. Reusa los insumos y recetas que ya tienen ese nombre. Solo con plan Escala; se deshace con la importación.
Detalles técnicos
Técnico
- Migración 0087:
product_components,recipe_lines.removable,modifier_options.recipe_timesypreselected,product_modifier_groups.free_countyorder_items.removed. - Reglas compartidas en
src/lib/modifier-rules.ts(chargedPrices,pickedPrices,preselectedPicks); quitables ensrc/server/content/removables.ts.
v1.66.218 de octubre de 2026
Registro: animaciones 3D por tipo de negocio
Cambiado
- Elige tus herramientas, paso 1 ("¿Qué tipo de negocio tienes?"): cada tipo tiene ahora su animación 3D Colega Menus, un solo producto de plastilina que se mueve, sin fondo, en lugar del ícono:
- Taquería: taco al pastor.
- Pizzería: rebanada que se estira.
- Desayunos: hot cakes con miel.
- Comida rápida: hamburguesa.
- Servicio a mesa: plato con cubiertos.
- Cafetería: capuchino con croissant.
- Bar: tarro de cerveza.
- Dark kitchen: bolsa de entrega.
- Cadena: tres tiendas.
- Otro: campana de servicio.
- Con "reducir movimiento" se muestra la imagen fija.
Detalles técnicos
Notas
- Archivos en
public/giros/(WebP animado con transparencia, 200 px, unos 2 MB en total; imagen fija de 3–6 KB). Hechos con Magnific (Nano Banana 2 + Kling 2.5 + quitafondo) siguiendo~/Developer/colega-escala-art;webp.shaceptaSIZE.
v1.66.118 de octubre de 2026
Filtros plegables en todas las listas y reportes
Cambiado
- Barra de filtros igual en todo el panel (
FilterBar):- A la vista solo queda lo principal: la búsqueda o el periodo, y la acción principal (p. ej. "Agregar gasto").
- Los demás filtros se abren con Filtros, que dice cuántos hay activos y trae Limpiar filtros.
- Lo secundario (descargar CSV, importar, etiquetas, configurar, ver archivados, registrar merma) va en el menú ⋯.
- Pantallas con la barra nueva: Clientes, Ventas, Opiniones, Estado de resultados, Gastos, Propinas, Insumos y Existencias (Inventario y CEDIS), y la Bitácora del super admin.
- En celular, si no cabe, la acción principal baja a otra línea en lugar de encimarse.
v1.66.018 de octubre de 2026
Etapa 58 (entrega 1): dominios propios de la marca
Agregado
- Ajustes de la marca → Dominios (plan Escala, solo Admin y Co-admins): conecta hasta 5 subdominios de la marca (
menu.krispis.mx,pos.krispis.mx). Cada uno es de Menú y tienda (y elige si la raíz abre el menú o la tienda) o de Caja. El sistema lo da de alta en Vercel, muestra el registro CNAME (y el TXT si Vercel lo pide) con botones de copiar y "Copiar instrucciones" para quien maneja el DNS, y lo revisa al abrir la página, con "Revisar ahora" y una vez al día en el cron. Estados: Esperando DNS, Activo, Con problema. Quitar = archivar 30 días (se puede recuperar) y deja de servirse en Vercel. Cada cambio queda en la Actividad. - Menú, tienda, mesa, reservaciones, lista de espera, ticket, reseñas y factura en el dominio de la marca, con las mismas rutas de siempre sin
/m(menu.krispis.mx/{slug}/pedir). En ese dominio solo existen las sucursales de esa marca (y su tienda de la franquicia); lo demás da "no existe", también en la API del menú. La raíz abre la caja (dominio de caja), la tienda de la franquicia, la única sucursal o una lista para elegir sucursal con la identidad de la marca. - Los enlaces de siempre mandan al dominio de la marca (D4):
menudigital.colegastudio.com/{slug}/…redirige al dominio activo de esa marca. Así los QR ya impresos, los avisos de WhatsApp y las tarjetas NFC llegan al dominio nuevo sin rehacer nada. Si el dominio deja de apuntar a nosotros queda "Con problema" y se deja de redirigir; si la marca pierde Escala, su dominio manda de vuelta a menudigital (nunca da error). - Los QR nuevos de las mesas, el enlace de cada sucursal en Sucursales, Tienda y Colega Cards, y los enlaces de las reservaciones salen con el dominio de la marca.
- Caja, CEDIS y repartidor abren en el dominio de la marca (
pos.krispis.mxabre la caja). Cada caja se vincula una vez en el dominio nuevo. La app instalable con el nombre y logo de la marca queda para la entrega 2. - En el dominio de la marca no aparece "Hecho con Colega Menus" (P2).
- El panel, el inicio de sesión, super admin, anfitriones y distribuidores nunca se sirven en un dominio de marca: mandan a
menus.colegastudio.com(P4).
Detalles técnicos
Técnico
- Tabla
custom_domains(migración 0086). src/proxy.ts: cualquier host que no sea de Colega es de una marca; se busca en la base (caché de 1 minuto por instancia) y se pasa la marca en la cabecerax-cm-brand, que el proxy siempre borra de lo que manda el navegador. La API del menú (/api/m/*) también pasa por el proxy.lookupPublicBranchylookupFranchiserechazan una sucursal de otra marca cuando hayx-cm-brand.- API de Vercel en
src/server/domains/vercel.tsconVERCEL_API_TOKEN,VERCEL_PROJECT_IDyVERCEL_TEAM_ID(solo Production). Sin token fuera de Producción se simula: el dominio queda activo al revisarlo. - Probar en un Preview:
?probar_dominio=menu.prueba.mxhace que ese despliegue se comporte como ese dominio (cookie;?probar_dominio=la quita). No funciona en Producción.
v1.65.118 de octubre de 2026
Menú maestro: arreglos de la conversión
Corregido
- La conversión al menú de la marca ya no se detiene si un producto seguía ligado a un grupo de modificadores archivado (la liga se queda como estaba).
npm run menus:masterusa los mismos nombres de columna que la app. En producción pasaron los 96 restaurantes de una sucursal; KRISPIS (varias sucursales) usará el asistente.
v1.65.018 de octubre de 2026
Etapa 56 (entrega 4a): menú maestro
Agregado
- Menú maestro (D5, P21–P29): la marca tiene un solo menú. El Admin lo arma una vez y cada cambio se ve al momento en todas las sucursales. Las sucursales no tienen copia: leen el menú de la marca y solo se guardan sus diferencias.
- Visible en: cada producto se ve en todas las sucursales (también las nuevas) o solo en las que elijas.
- Por sucursal (pestaña del producto): precio y "en línea" distintos para una sucursal, también por opción de precio. En Modificadores, el precio de cada opción por sucursal. Vacío = el de la marca.
- Precios por sucursal (Menús): "subir todos +8 %" o un monto, redondeado al peso, con vista previa; Volver al menú de la marca quita todas las diferencias de una sucursal y se deshace durante 30 días.
- Ver como sucursal en el editor del menú: precios de esa sucursal (con un punto los suyos), lo que no se ve ahí y lo agotado hoy.
- Lo que ve la sucursal (Franquiciatario, Gerente y roles de sucursal, P22 y P29): el menú de la marca en solo lectura con sus precios, la leyenda "¿Necesitas precios distintos? Solicítalos al Admin de la marca" y el botón Solicitar cambio (P28), que le llega al Admin por correo y a su bandeja (Menús → Solicitudes).
- Agotado hoy por sucursal (P25): en la caja (botón Agotados: platillos, opciones de precio y modificadores; hasta la medianoche o hasta reactivar), en el panel (vista de la sucursal y "Ver como") y solo en esa sucursal. En la caja se ve en gris con "Agotado"; en el menú y la Tienda dice "Agotado" y la opción agotada se esconde. Si se acaba una salsa, solo se apaga esa salsa, nunca el producto ni el menú. El agotado automático del inventario (insumo en 0) también agota solo en esa sucursal.
- Arma el menú de tu marca (P26), para restaurantes con varias sucursales: eliges la sucursal base, ves qué se junta, lo que solo tiene cada sucursal, los precios distintos y lo que no se juntó (con "No juntar"), y confirmas. Cada sucursal sigue viendo exactamente el mismo menú y los mismos precios. Lo repetido se archiva (30 días) y las ventas, reseñas de platos, estaciones de impresión y agotados pasan al producto de la marca. Los restaurantes de una sola sucursal pasan solos (
npm run menus:master), y los restaurantes nuevos nacen con el menú maestro. - Reglas de cada grupo en el producto (P44): el mismo grupo con otro nombre, mínimo, máximo, máximo de distintas, repetir (2 × ranch) y ligado a otro grupo ("12 piezas" cuenta como 2 → hasta 2 salsas). Lo respetan la caja, la Tienda, el pedido desde la mesa, el menú y el servidor. Sin el tope de 6 grupos (hasta 20). Lo repetido se ve como "2 × Ranch" en comandas, tickets y el tablero.
- Importar el catálogo con la plantilla de Excel (P49, Menús → Importar): descarga la plantilla educativa, llénala y súbela; antes de guardar ves qué se va a crear y qué falta (fila por fila). Se guarda todo o nada y se deshace en 30 días. En esta entrega llegan las hojas del menú (productos, modificadores, reglas por producto y precios por sucursal).
- Costo por sucursal (P37): con el menú de la marca, cada sucursal costea sus platillos con lo que ella paga (CEDIS o compras propias) y cada venta guarda ese costo. Una sucursal con CEDIS sigue sin ver el costo de la marca.
Cambiado
- Con el menú maestro, la sección Menús es "Ver" para Franquiciatario, Gerente y roles de sucursal (más Agotar hoy y Solicitar cambio); edita la marca (Admin, Co-admin y roles personalizados de la marca).
- Las páginas de Menús, productos y modificadores dicen "Aplica a toda la marca" con el menú maestro.
- Ajustes de la marca: "Menú de la marca" ya no es "Próximamente" (con varias sucursales lleva al asistente).
Detalles técnicos
Notas
- Migración 0085 (compatible con el código anterior): menús y grupos sin sucursal,
product_branches,branch_menu_overrides,branch_sold_out,menu_change_requests,branch_product_costs, reglas enproduct_modifier_groups,modifier_options.link_unitsyrestaurants.master_menu_at. - Orden para publicar: migración de producción → publicar el código →
npm run menus:master -- --production(pasa a los restaurantes de una sucursal; usa--drypara ver cuáles).
v1.64.218 de octubre de 2026
Clientes: búsqueda y lista primero
Cambiado
- Clientes: al entrar se ven solo la búsqueda y la lista. Los filtros y el orden se abren con el botón Filtros, que muestra cuántos hay activos, y se pueden limpiar con un toque. Importar contactos y Descargar CSV quedan en el menú ⋯ (Admin y Co-admins). En celular, el botón Filtros es solo el ícono y la búsqueda dice "Nombre o teléfono", para que quepa.
v1.64.118 de octubre de 2026
Facturación: vista previa del diseño
Agregado
- "Ver cómo se verá" en el diseño de las facturas de cada emisor (restaurante o sucursal, Colega Studio y distribuidores): abre una factura PDF de muestra con el logo, el color y el RFC del emisor, y conceptos de ejemplo. Facturapi la arma sin timbrarla ni mandarla al SAT, así que no cuesta ni cuenta como factura. Usa el diseño ya guardado.
v1.64.018 de octubre de 2026
Etapa 56 (entrega 3): a quién le afecta cada cambio
Agregado
- Barra de alcance arriba de cada página del panel (P17): una línea que no se cierra y dice a quién le afecta lo que cambias ahí:
- Naranja (ubicación): "Estás en KRISPIS · Cuautlancingo. Lo que cambies aquí solo afecta a esta sucursal" (Menús, productos, modificadores, Tienda, mesas, ventas, finanzas, inventario…).
- Lavanda (capas): "Aplica a toda la marca KRISPIS: 5 sucursales, también las que abras después" (Etiquetas, Personalización, idiomas, Clientes, Equipo, insumos y recetas…) o "cada cosa elige sus sucursales" (Cupones, Banners, Repartidores, Facturación, Cajas e impresoras).
- Gris: tu cuenta (cobro, Refiere y gana) o solo para ti (Mi perfil).
- El selector de arriba dice "Toda la marca" en las páginas que valen para todas las sucursales (P18), en lugar del nombre de una sucursal.
- "Guardado solo en Cuautlancingo" o "En las 5 sucursales de KRISPIS" al guardar en Menús, productos, categorías, modificadores, etiquetas, personalización, idiomas, traducciones, Tienda y domicilio (P19). En la caja configurable dice si quedó en la marca, la sucursal o una caja.
- Confirmación solo en cambios de marca que se notan mucho y con más de una sucursal (P19): guardar el logo y los colores, y cambiar el idioma del menú ("Esto cambia el menú de las 5 sucursales de KRISPIS"). Al borrar una etiqueta se avisa que se quita en todas.
- Ajustes de la marca (P20, en Negocio y en el selector de restaurante): una página con todo lo que afecta a todas las sucursales, por grupos (Identidad, Menú, Caja, Clientes, Escala, Equipo), sin mover las herramientas de su módulo. El Franquiciatario la ve con "Solo lectura · lo cambia el Admin de la marca" donde no le toca; el Gerente no la ve. El "Menú de la marca" aparece como próximamente (entrega 4).
- Cada cupón dice "Todas las sucursales" cuando llega a todas.
Diseño
- Color nuevo con significado: lavanda = toda la marca (
scope-brand, contraste 7:1), endesign-system/MASTER.md. - El alcance de cada página vive en un solo mapa (
src/lib/panel-scope.ts); una prueba falla si se agrega una página sin alcance.
v1.63.018 de octubre de 2026
Etapa 57 (entrega 2): Mi perfil
Agregado
- Mi perfil (
/app/perfily/admin/perfil, desde el menú de tu cuenta, arriba a la derecha):- Foto: se sube y se encuadra en un círculo. Acepta fotos HEIC del iPhone y se guarda en 480 px. Se puede quitar.
- Nombre y teléfono (puede quedar vacío). El correo se muestra; para cambiarlo, hay que escribirnos.
- Cambiar contraseña: pide la actual y al cambiarla cierra la sesión en los otros dispositivos (Better Auth).
- Tu foto sale en el menú de tu cuenta y en la lista del Equipo. Sin foto, se ven tus iniciales.
- El menú de tu cuenta queda con Mi perfil, Refiere y gana (Admin y Co-admins) y Cerrar sesión. Más herramientas sigue en el menú, en Ayuda.
Detalles técnicos
Notas
- Las fotos se suben directo a Vercel Blob, en
users/{usuario}/, con un máximo de 1 MB. El servidor solo acepta una foto de la carpeta de quien está en la sesión. - Si el cambio lo hace un super admin, queda en la bitácora.
- Pruebas en
tests/mi-perfil.test.ts.
v1.62.018 de octubre de 2026
Etapa 57 (entrega 1): menú lateral
Cambiado
- Menú lateral en el panel de restaurante y en el de super admin (
docs/PROPUESTA-ETAPA-57.md): los módulos se abren y muestran sus herramientas, con sus números de pendientes, como ya se veía en celular. En computadora está fijo a la izquierda y se pliega a solo íconos (las herramientas salen al lado al pasar el mouse o tocar); cada persona elige y se recuerda. En celular y tablet es el mismo menú con ☰, con el restaurante y la sucursal arriba. - Barra superior de una sola fila: logo, restaurante y sucursal, búsqueda, avisos de pedidos, prueba gratis, primeros pasos y tu cuenta. Se quitan las pestañas de módulos y la fila de herramientas; la Ayuda pasa al menú.
- Banners de Colega (Super admin → Banners): ahora en un carrusel hasta abajo del menú, que cambia solo cada 6 s (se detiene al pasar el mouse o con "reducir movimiento"). Ya no salen arriba de las páginas.
- Los botones + Agregar módulo y + Agregar herramienta quedan en el menú, como renglones, solo si hay algo que agregar.
Corregido
- Tu cuenta (la inicial arriba a la derecha) no abría su menú: fallaba al abrirse. Ya muestra tu nombre, Refiere y gana, Más herramientas y Cerrar sesión.
v1.61.118 de octubre de 2026
Banners: eliges el encuadre de la foto
Cambiado
- Banners (Panel → Menús → Banners y Admin → Banners): al subir la imagen se abre el recortador con la proporción del banner (1200 × 630): arrastras la foto y acercas para elegir qué parte se ve. Cualquier foto sirve desde 800 px de ancho, también las HEIC del iPhone. Sin moverla queda centrada, como antes.
- El recortador de fotos acepta otras proporciones además del cuadrado (las fotos de productos siguen igual).
Corregido
- Una subida de imagen rechazada ("No pudimos subir la imagen") ahora deja el motivo en los registros del servidor para poder encontrarlo y corregirlo.
v1.61.018 de octubre de 2026
Etapa 56 (entrega 2): POS configurable
Agregado
- "Así se ve tu caja" en Panel → Cajas e impresoras → Caja (P12), con vista previa de la caja mientras eliges. Se configura en tres niveles que heredan (P13): la plantilla de la marca (Admin y Co-admin; la usan todas las sucursales, también las nuevas), cada sucursal y cada caja. En cada ajuste se ve si se cambió en ese nivel y se puede volver al de la marca/sucursal.
- Candados de la marca (P15): el Admin fija un ajuste ("Fijar para todas") y las sucursales y cajas lo ven bloqueado con "Lo fija el Admin de la marca".
- Qué se configura:
- Pestañas: Mesas, En espera, Inventario, Reservaciones y lista de espera, botón de la Tienda (Nuevo pedido, Pedidos y Caja siempre se ven).
- Al tomar el pedido: canales y modalidades que se ofrecen y los de fábrica, nombre del cliente (no se pide, opcional u obligatorio), teléfono (no se pide u opcional), identificador del pedido (ahora aquí, con todo lo de la v1.60.0), notas por producto, cupones y descuentos, fotos en los botones.
- Al cobrar: formas de pago que se ofrecen (efectivo, tarjeta, transferencia, otro) y si se pregunta propina.
- Seguridad: minutos sin uso para bloquear la caja (de fábrica 15) y pedir encargado para cualquier cancelación (P16: solo se agregan PIN, nunca se quitan los de hoy).
- Por caja solo lo de cada dispositivo: canal y modalidad de fábrica y fotos (la impresora y el ticket siguen en su botón Impresora).
- "¿Por qué no veo…?" en la caja: lista lo que sus ajustes ocultan y quién lo cambia.
Detalles técnicos
Seguridad
- Ocultar no es un permiso (C3): el servidor vuelve a revisar en cada pedido y cobro de la caja el canal, la modalidad, el nombre obligatorio, cupones y descuentos, formas de pago, propina y la cancelación con encargado; lo que la caja no pide (teléfono, notas) se quita. La plantilla de la marca solo la cambian Admin y Co-admin; sucursal y caja se validan contra la sesión (regla 1), con pruebas de aislamiento.
Notas
- Migración 0084 (
pos_settingscon nivelbrand/branch/device,device_idylocked_keys). Los ajustes viajan en la copia sin internet de la caja (van en su página). - No incluye PIN para reimprimir ni reembolsos en la caja (la caja no reembolsa; reimprimir con PIN pediría otro diálogo): se dejan para cuando se pidan.
v1.60.017 de octubre de 2026
Etapa 56 (entrega 1): identificador del pedido y la Tienda desde la caja
Agregado
- Identificador del pedido (localizador que vibra, ficha, cono; P1–P5): se prende por sucursal en Panel → Cajas e impresoras → Caja (apagado de fábrica, opcional u obligatorio), con su nombre ("Localizador", "Ficha"…), número con rango (1–40) o texto corto, y en qué pedidos (de fábrica mostrador, para llevar o comer aquí sin mesa; nunca domicilio ni mesa). La caja lo pide en el carrito y, si es obligatorio, no envía ni cobra sin él; el servidor lo vuelve a revisar. No se valida que no se repita (P2).
- Sale en la comandera (grande, en contraste) y en la caja, en la comanda y el ticket impresos, en el ticket digital ("Tu Localizador 12"), en el detalle del pedido y en la comanda sin internet. Al marcar Listo: "Llama al Localizador 12".
- Cambiar el localizador de un pedido abierto tocando su etiqueta (caja y panel); queda en el historial del pedido.
- La Tienda desde la caja (P6–P11): botón con su estado en la barra ("Tienda abierta", "En pausa · vuelve 14:30", "Cerrada por hoy", "Fuera de horario") y franja ámbar mientras dura la pausa. Pausar 15/30 min, 1 hora, resto del día o cerrar por hoy, todo o solo domicilio, con motivo obligatorio (Mucha demanda, Falta de producto, Falla en cocina o equipo, Falta personal, Cierre anticipado u Otro). Es de emergencia: cualquier Colaborador lo hace con su propio PIN. Apagar la Tienda para siempre sigue solo en el panel.
- Historial de la Tienda (Panel → Tienda en línea): pausas, cierres, reanudaciones y encendido/apagado con motivo, quién y si fue desde la caja. También en Actividad y en el corte de caja ("La Tienda se pausó 2 veces en este turno (45 min)").
- Correo al dueño cuando la Tienda se pausa una hora o más o se cierra por hoy (se puede apagar en el historial).
- El cliente en
/pedirve la hora a la que se vuelve a recibir ("Volvemos a recibir a las 14:30") o "Hoy ya no recibimos pedidos en línea", nunca el motivo. Con "solo domicilio" se sigue pidiendo para recoger y las mesas no se detienen. - Sin internet la caja no puede pausar y lo dice; tras 5 minutos sin red avisa que la Tienda sigue recibiendo pedidos (P11).
Cambiado
- La pausa del panel usa el mismo control que la caja: pide motivo y agrega 15 min, "Cerrar por hoy" y "Solo domicilio".
Detalles técnicos
Notas
- Migración 0083 (
orders.service_tag,orders.service_tag_label, tablapos_settings, tablastore_status_eventsy columnas de pausa enstore_settings). - Propuesta y decisiones:
docs/PROPUESTA-ETAPA-56.md(entregas 2 a 4 pendientes: POS configurable, señales de alcance y menú maestro).
v1.59.217 de octubre de 2026
El + de la barra solo aparece si hay algo que agregar
Cambiado
- Barra del panel: el botón + de módulos y el de herramientas se ocultan cuando ya no hay nada que agregar (antes abrían un menú que solo decía "Ya tienes todas las herramientas de este módulo"). Todo sigue en Más herramientas.
v1.59.117 de octubre de 2026
CEDIS sin corrimiento a la izquierda
Corregido
- Panel → CEDIS: la página se corría a la izquierda y dejaba un espacio blanco a la derecha. La leyenda invisible del botón + de herramientas se salía por la orilla derecha y ensanchaba la página, y al entrar se centraba la herramienta activa moviendo toda la página. La leyenda abre hacia la izquierda y ahora solo se desliza la fila de herramientas.
v1.59.017 de octubre de 2026
Ilustraciones 3D de todas las categorías y sin fondo en iPhone
Agregado
- Página de ventas: ilustración 3D en movimiento (Magnific: imagen + Kling 2.5 + quitafondo) para Caja y cocina, Tienda en línea y reparto, Menú digital, Ventas y finanzas, Clientes y Equipo (
public/funciones/). Las 8 categorías ya tienen su diorama; se quita el pedestal provisional.
Corregido
- Ilustraciones con fondo en iPhone: el video HEVC con transparencia salía con el fondo claro en Safari del iPhone. Las ilustraciones (página de ventas y Escala en el panel) pasan a WebP animado con transparencia (
LoopArt), que se ve igual en todos los navegadores; con "reducir movimiento" se muestra la imagen fija. Se quitan los videos.movy.webm.
Detalles técnicos
Notas
- Receta y scripts en
~/Developer/colega-escala-art/(make-loop.sh,webp.sh): bucle de ida y vuelta, o directo cuando el video empieza y termina en la misma imagen; 400 px, 15–100 KB la mayoría y hasta 380 KB.
v1.58.017 de octubre de 2026
Etapa 54 (C): la caja sigue cobrando sin internet
Agregado
- Caja instalable que abre sin internet: la caja se agrega a la pantalla de inicio de la tablet (Chrome: "Instalar app"; iPad: "Agregar a inicio") y guarda su página y sus archivos para abrir aunque se haya ido la red. Con internet siempre se usa la versión nueva.
- Copia de la caja en el dispositivo: menú con precios y modificadores, personal (sin PIN), mesas y plano, cuentas abiertas, caja abierta y ajustes de impresión. Se renueva sola cada vez que hay internet. Sin costos ni datos de pago.
- Vender sin internet (nivel 2, P9): aviso fijo "Sin internet · las ventas se guardan en esta caja"; pedidos de mostrador, para llevar y mesa cobrados en efectivo, tarjeta (terminal externa), transferencia u otro, con propina. Cada venta lleva folio temporal (
S-014) y la misma llave que usa la caja para no duplicar. Las mesas suman rondas y se cobran completas o en partes (con comensales). - Si se corta el internet a la mitad de un cobro, la venta se guarda en la caja con la misma llave: si el cobro sí había llegado, al subirla no se duplica.
- Sincronización sola: al volver la red sube las ventas en orden, con su hora real, y reintenta lo que falle; entran a Ventas, propinas, corte e inventario como "Entregado" (no imprimen comandas viejas). Lo subido se ve en la caja: "S-014 → #23".
- Regla 14 con excepción aprobada (P10): el servidor vuelve a calcular; si el precio cambió mientras tanto, se respeta lo cobrado y el pedido queda marcado "Precio distinto al sincronizar" con las dos cifras. Productos apagados o borrados se aceptan y se marcan.
- Límite de 24 horas sin hablar con el servidor (P11): después, la caja pide conectarse para seguir vendiendo.
- Qué no se puede sin internet (la caja lo dice al intentarlo): Tienda en línea, WhatsApp y plataformas, Mercado Pago en línea, facturar, cupones y descuentos, clientes nuevos, domicilio, pedidos en espera, cambiar de persona con PIN (sigue quien estaba; no se bloquea sola), autorizar con PIN de otro, juntar/pasar/dividir por productos, transferir, abrir o cerrar la caja.
- Ventas pendientes de subir: aviso en la caja; la caja reporta cuántas trae al conectarse y se ven en Equipo → Cajas y en Ventas. El corte no cierra mientras alguna caja tenga ventas sin subir (una caja desactivada no cuenta; al desactivarla se avisa que se perderían).
- Ventas sin internet aparte: en Ventas (tarjeta con total, cuántas con precio distinto y con productos apagados; filtro "Solo ventas sin internet"; marca en la lista y detalle con folio, caja, hora de subida y las dos cifras; columnas en el CSV) y en el corte ("Ventas sin internet del turno").
- Comandas sin internet por la red del local (P12): Epson con su dirección en la red (Panel → Cajas e impresoras) imprime comandas por estación y el ticket (con cajón en efectivo) desde Android o computadora con Chrome. En iPad, o si la impresora no responde, la comanda se ve en pantalla y se imprime con el diálogo (AirPrint).
- Diagnóstico en la caja: conexión, última conexión y horas que le quedan, copia guardada, app instalada, ventas por subir y errores (un encargado puede descartar una), prueba de la impresora local y la lista de lo que no se puede sin internet.
- Al desvincular la caja se borra la copia, la página guardada y la app; si traía ventas sin subir, se conservan y se avisa (se suben al vincularla a la misma sucursal).
Detalles técnicos
Notas
- Migración
0082_stage54_sin_internet: columnasoffline_*enordersypos_devices,local_addressenprintersy tablapos_offline_syncs(llave de los cobros de mesa). Probada en la rama de Neon de pruebas. - La app instalable es un service worker propio (
public/pos-sw.js), sin Serwist: la compilación de Vercel no cambia (no hace falta Webpack). - Pruebas: corte de internet a mitad del cobro, ventas duplicadas, precios cambiados y productos apagados al sincronizar, cobros de mesa, corte bloqueado y aislamiento entre Cuentas (
tests/sin-internet.test.ts). - Falta probar la impresión local con una Epson real y la caja instalada en una tablet Android y un iPad reales (piloto KRISPIS).
v1.57.017 de octubre de 2026
Etapa 54 (A y B): impresión en la nube y equipo de la caja
Agregado
- Impresoras en la nube (Star CloudPRNT y Epson Server Direct Print): la impresora pregunta sola a Colega Menus qué imprimir; no necesita computadora ni drivers y funciona con iPad y Android. Se agregan en Panel → Cajas e impresoras (Admin, Co-admin, Franquiciatario y Gerente de esa sucursal) con nombre, marca, qué imprime (tickets, comandas o ambas) y ancho de papel (58 u 80 mm); la app da la dirección para pegar en la impresora (se muestra una sola vez; en la base solo su huella) con los pasos de cada marca. Se ve si está conectada, si tiene poco papel, sin papel o la tapa abierta, y lo que no salió en 24 horas. Imprimir prueba, dirección nueva, apagar y eliminar (se recupera en 30 días).
- Comandas en papel por estación: cada impresora de comandas imprime las categorías que se le asignan (Cocina, Barra); una sin categorías imprime lo que no tiene estación. Salen al entrar el pedido a cocina por cualquier camino (POS, Tienda en línea al aceptarse, mesas, programados al llegar a su hora y transferencias), con número del día y modalidad en grande, quién lo tomó, modificadores y notas. Las rondas de una mesa imprimen solo lo nuevo; un pedido cancelado imprime "CANCELADO" si ya había salido (y si no, ya no sale). Una comanda que no se imprimió en 15 minutos (configurable) ya no sale.
- Ticket de venta con folio, productos, descuento, propina, forma de pago, cambio y QR del ticket digital (para pedir factura). En la caja, menú Impresora: impresora de tickets de esa caja y si al cobrar el ticket se imprime siempre, se pregunta (aviso con "Imprimir ticket" que no detiene la fila; de fábrica) o nunca (lo cambia un encargado). Reimprimir ticket desde el pedido (sale "Copia"). Imprimir cuenta de una mesa antes de cobrar.
- Cajón de dinero: se abre solo al cobrar en efectivo y al cerrar la caja; "Abrir cajón" sin venta pide encargado (en turno o su PIN) y motivo, y se cuenta en el corte ("El cajón se abrió sin venta N veces").
- Ticket del corte de caja al cerrarla (fondo, cobros por método, esperado, contado, diferencia y aperturas del cajón sin venta).
- Respaldo para cualquier impresora (genérica de 58 mm, láser, AirPrint): sin impresora en la nube, "Imprimir" abre el diálogo del navegador con el ticket del tamaño correcto.
- Equipo de la caja (Panel → Cajas e impresoras y en la caja): qué impresora, cajón, lector 2D, tablet y terminal comprar, por qué y cómo se conecta, con prueba del lector y la lista "Tu caja está lista" que se palomea sola. Aviso claro: las impresoras genéricas no imprimen solas desde la nube.
Detalles técnicos
Notas
- Migración
0081_stage54_impresion(tablasprinters,printer_categoriesyprint_jobs; columnasprinter_idyreceipt_modeenpos_devices). - El ticket se dibuja como imagen en el servidor (letras Inter incluidas en el proyecto) para que Star y Epson impriman igual, con acentos y QR. Falta probar con una Star y una Epson reales antes de abrirlo a todos (piloto KRISPIS).
- La Parte C (modo sin internet) va en la siguiente entrega.
v1.56.117 de octubre de 2026
Tabla comparativa de precios visible en celular
Corregido
/precios: la tabla comparativa de Complete y Escala no aparecía en celular. Esperaba a que se viera el 15 % de su alto para mostrarse y, como mide varias pantallas, nunca llegaba. Ahora se muestra siempre, sin animación de entrada.
v1.56.017 de octubre de 2026
Página de ventas: todo en uno, funciones y precios
Agregado
- Portada todo en uno (
/): nuevo mensaje ("Todo tu restaurante en un sistema. Que crece contigo."), tabla de herramientas sueltas vs Colega Menus (#reemplaza: punto de venta, menú QR, repartidores, contabilidad, IA, reservaciones, inventario y comisiones de apps; total por separado vs Complete $499 y Escala $799), sección Crece contigo (#crece: etapas Hoy / Cuando creces / Cuando te expandes y las 8 categorías con su ilustración) y los dos planes con calculadora (#precio). /funciones: todas las funciones por categoría (Caja y cocina, Salón, Tienda y reparto, Menú, Inventario y CEDIS, Números e IA, Clientes, Equipo) con su plan (Complete y Escala, Escala o Próximamente) y el buscador "¿Qué necesita tu restaurante hoy?", que usa las mismas reglas del cuestionario del panel (Para empezar, Te conviene, Cuando crezcas) y sugiere plan y total por sucursales./precios: planes Complete y Escala, calculadora por sucursal y plan, lo que se cobra aparte (facturación, Colega Cards, más IA), tabla comparativa función por función (generada del mismo catálogo), Refiere y gana, Anfitriones, Distribuidores y preguntas de precios.- Catálogo único de funciones de la página (
src/components/landing/catalog.ts) y marco común de las páginas de ventas (landing-shell.tsx).
Cambiado
- Menú superior con Funciones, Ahorra, Demo, Tienda en línea, IA y Precios (enlaces absolutos, sirven desde cualquier página). Pie con Funciones, Precios y Anfitriones. Preguntas frecuentes con los dos planes.
Quitado
- Sección de precio de un solo plan (
pricing.tsx).
Detalles técnicos
Notas
- Ilustraciones 3D: Salón e Inventario usan los dioramas de Escala; las demás categorías llevan un pedestal animado provisional hasta generar sus dioramas en Magnific.
- Precios de la competencia: referencias públicas a octubre de 2026 (dólar a $18), explicadas en la nota de la tabla.
v1.55.017 de octubre de 2026
Etapa 52 (entrega 1): elige tus herramientas, barra superior y cuadrícula
Agregado
- Cuestionario "Elige tus herramientas" (
/app/setup): después de crear el restaurante, el Admin contesta en 1 o 2 minutos su giro, cómo vende (varias) y qué quiere mejorar (hasta 2), y recibe su panel armado en Esenciales, Recomendadas (máximo 3, las más fuertes, para no abrumar) y Para más adelante, cada herramienta con qué resuelve y por qué se recomienda. "Usar esta configuración" o "Personalizar" (las dependencias se activan o quitan juntas y se avisa). Cada paso se guarda: si lo deja a medias, el panel ofrece continuar donde se quedó. Opciones con íconos animados (una vez al aparecer, al pasar el dedo y al elegir; quietos con "reducir movimiento"). - Catálogo de módulos (
src/lib/modules.ts) y reglas de recomendación deterministas (src/lib/module-recommendations.ts): disponibilidad comercial (plan Escala, integraciones encendidas), dependencias (Mesas → POS y comandera; Reservaciones → Mesas; CEDIS → Inventario), roles y video de Academia por módulo. No se recomienda lo que no se puede usar; kiosco y plataformas de delivery se explican como "aún no". - Barra por negocio y por persona: solo se ven las herramientas activadas (más Menú digital y Mi negocio, siempre); cada persona puede ocultar las que no usa sin afectar a su equipo. Los restaurantes de antes siguen viendo todo hasta que elijan.
- Herramientas (
/app/tools, botón Más herramientas siempre visible al final de la barra, fuera de los grupos que se pliegan): En tu panel (abrir, ocultar o mostrar en mi barra, apagar), Más herramientas (beneficio, requisitos, pasos, plan, costo adicional si lo hay —Facturación: $2 por factura en Complete y $1.20 en Escala— y lo que necesita antes de activarse), Descartadas ("No me interesa") y Próximamente. Volver a contestar el cuestionario cuando quiera. - Medición de uso (Parte A): visitas y guardados por sección, día, sucursal y rol (
section_usage_daily), sumados después de responder enrequireSection,requireBranchSectionyrunTenantAction. Eventos del producto (product_events) del cuestionario y de las herramientas. Sin quién ni contenido; ni el soporte "viendo como" ni las Cuentas internas cuentan; se borran solos a los 13 meses.
- Barra superior nueva (panel de restaurante y super admin), aprobada en prototipo: blanca, en dos filas (módulos arriba, herramientas abajo), con el logo del restaurante, botones + para agregar módulo o herramienta (activan ahí mismo o vuelven a mostrar lo oculto), búsqueda de pantallas y acciones (⌘K / Ctrl+K), menú de Ayuda (Academia, Feedback), Primeros pasos como cohete junto a la cuenta y menú de la cuenta (Refiere y gana, Herramientas, Cerrar sesión). En celular y tablet, los módulos en un menú y las herramientas en una fila que se desliza. Se quita la barra lateral.
- Cuadrícula del panel (
docs/CUADRICULA-PANEL.md, clases ensrc/lib/layout.ts): el contenido usa todo el ancho y se acomoda en columnas según la pantalla. Catálogos de tarjetas en 1 a 4 columnas (Herramientas, Academia, Cupones, Repartidores, Etiquetas, Modificadores, Equipo, Reseñas de platos, Sucursales, Feedback), ajustes en 2 columnas (Tienda en línea), galería de 12 columnas (Suscripción y pagos, Feedback) y sin anchos angostos en listas, tableros y editores. Super admin: Métricas, Anfitriones, Distribuidores, Solicitudes, Asistente y Super admins en tarjetas; Seguimiento y Feedback con sus 5 columnas desde laptop; Academia y Ajustes en columnas; formularios de alta centrados. - Celular: menú hamburguesa a la izquierda con el restaurante y la sucursal y, en una columna, los módulos con sus herramientas; a la derecha, búsqueda, avisos, prueba gratis, primeros pasos y cuenta.
- Prueba gratis en la barra: un regalo con un anillo de los días que quedan (ámbar los últimos 3) junto al cohete; al tocarlo, hasta cuándo, la videollamada gratuita y "Activar mi plan". Ya no ocupa espacio arriba del contenido.
Quitado
- Garantía de 30 días: ya no aplica (hay 14 días de prueba gratis). Se quita de Suscripción y pagos, "Publica tu menú", el recorrido, Primeros pasos, el correo de activación, la página de ventas (precios y preguntas frecuentes) y del super admin (métrica, ficha de la Cuenta y el ajuste del formulario).
warranty_start_atqueda solo como fecha del primer pago.
Detalles técnicos
Notas
- Migración
0080_stage52_adopcion(tablasrestaurant_setup,restaurant_modules,panel_preferences,product_events,section_usage_dailyyclient_accounts.is_internal). Si otra rama ya usó ese número, se renumera al juntar. - Ocultar o apagar una herramienta solo la quita de la barra: los permisos (Etapa 46) se siguen revisando en cada página y acción, y sus páginas abren igual por enlace.
- Pendiente (entregas 2 y 3): checklist por módulos, inicio para negocio nuevo, Admin → Uso con las métricas y la señal
inactive, casilla "Cuenta interna" en Admin y tutoriales contextuales.
v1.54.017 de octubre de 2026
Precios de franquicia (CEDIS e inventarios)
Cambiado
- Dos mundos de costo que no se mezclan. El precio de compra a proveedores es de la marca: lo ven el Admin, los Co-admins y la gente del CEDIS (Responsable, Cobranza). Una sucursal con CEDIS solo ve el precio de lista del CEDIS: nunca su costo ni su margen (ni en Insumos y recetas, ni al escanear, ni en reportes, avisos o estimados de órdenes de compra).
- Catálogo del CEDIS con precio de lista por presentación ("Se pide por" Bidón 20 L → precio por bidón, con su equivalente por L). Lo que se ofrece debe llevar precio; sin precio, la sucursal no lo ve. Se quitan los modos "al costo" y "costo + %": queda el margen sugerido (Ajustes del CEDIS) para el botón "Llenar vacíos con costo + %". Quien ve costos ve en cada renglón su costo, el rango de lo que cuestan sus presentaciones y el margen.
- Compras de emergencia de la sucursal: su costo es solo de esa sucursal; ya no cambia el precio de la marca ni el de las presentaciones (y no se prellenan con precios de la marca).
- Costo de los platillos por sucursal: cada sucursal costea con lo que ella paga (su costo promedio: lo que le cobró el CEDIS y lo que compró por fuera; si aún no tiene, el precio de lista de su CEDIS). Un preparado que recibe del CEDIS cuesta lo que le cobran. Se recostea al recibir del CEDIS, al comprar y al cambiar el catálogo.
- Insumo: con presentaciones, el costo por kg/L/pieza sale de ellas (fijo con una; rango con varias, con la más barata) y la primera es la principal ("Hacer principal"); se ve también a cuánto lo costean las recetas (la última compra). El "Precio por L" a mano queda solo para insumos sin presentaciones.
Agregado
- Margen del CEDIS en Estado de cuenta: por mes, lo cobrado a las sucursales (lo que llegó bien × precio de lista) contra lo que le costó (lo que salió × su costo al surtir), por insumo y por sucursal.
Detalles técnicos
Notas
- Sin migración. Los restaurantes sin CEDIS siguen igual.
v1.53.117 de octubre de 2026
Dirección del CEDIS con Google
Cambiado
- Al crear un CEDIS y en Ajustes del CEDIS, la dirección sugiere lugares reales de Google mientras se escribe (igual que en Sucursales). Se guarda el lugar elegido (
google_place_id) y su ubicación; si se escribe a mano, se ubica por la dirección.
Detalles técnicos
Notas
- Migración
0079_stage53_cedis_lugar(tres columnas enstock_locations).
v1.53.017 de octubre de 2026
Etapa 53: inventarios, recetas y CEDIS (plan Escala)
Agregado
- Insumos y recetas (de la marca): insumos con unidad base (g, ml, pieza), rendimiento, presentaciones de compra ("Caja 12 × 1 L"), códigos de barras y código interno con QR; proveedores; recetas y preparados (subrecetas) ligadas a productos, variantes (con factor) y opciones de modificadores. El costo de la receta llena el costo del producto (Finanzas) y avisa cuando un insumo sube. Ligar por nombre y borrador de receta con IA.
- Inventario por sucursal Escala: existencias con kárdex (cada entrada y salida con quién y por qué), costo promedio, mínimo e ideal, baja sola con cada venta (al aceptar el pedido; cancelar lo regresa o lo manda a merma si ya estaba listo) y agotado automático de platillos. Se permite quedar en negativo y se avisa.
- Compras a mano, escaneando con la cámara o un lector Bluetooth (un código desconocido abre "Nuevo insumo" prellenado), con el XML del CFDI (proveedor por RFC, conceptos reconocidos y recordados) o con la foto del ticket leída por IA. Cada compra de sucursal crea su gasto en Finanzas. Órdenes de compra sugeridas por nivel ideal, enviadas por WhatsApp con su página pública (
/oc/{token}). - Conteos (completo, por categoría o ciego, con escáner) y mermas con motivo; una diferencia grande espera a quien puede autorizar. Producción de preparados con lote, caducidad y etiquetas con QR (
/etiquetas: 50 × 25, 62 × 29, 62 continuo, 4 × 6" y hoja carta). - Reportes: teórico contra real, mermas por motivo y valor del inventario. Resumen con primeros pasos y alertas.
- CEDIS (varios por Cuenta, cada uno con sus sucursales Escala ligadas): catálogo y precio para sucursales (costo, costo + % o lista), pedidos de las sucursales con aprobación, lista de surtido, remisión con folio y página pública con QR (
/remision/{token}: pedido, remisión y acuse, para imprimir), entrega con repartidor, acuse en la sucursal (faltantes y dañados con aviso), estado de cuenta por sucursal con pagos y notas, y facturas del CEDIS a sus sucursales (por remisión o semanal, PPD con complementos de pago, notas de crédito y cancelación) solo cuando el RFC del CEDIS es distinto al de la sucursal. - Pedido de práctica: recorre todo el proceso sin mover existencias ni el estado de cuenta.
- Roles del CEDIS: Responsable de CEDIS y Cobranza del CEDIS (panel) y Almacenista y Producción (PIN en la tablet); repartidores ligados al CEDIS. Secciones nuevas en permisos y Roles personalizados: Inventario, Insumos y recetas, Operación, Catálogo y Cobranza del CEDIS.
- Tablet del CEDIS (
/cedis): se vincula con código como una caja (desde Ajustes del CEDIS → Tablets; en el mismo navegador cierra la sesión del panel) y ahí entran Almacenistas y Producción con su PIN: surtir, entradas, existencias, conteos y mermas, producción, etiquetas y prueba del lector. - Inventario en el POS (
/pos/inventario, sucursales Escala): pedir y recibir del CEDIS (escaneando el QR de la remisión), conteos y mermas, compra de emergencia y existencias, sin montos. - Repartidor: las remisiones del CEDIS que le asignan, con "Ya salí" y "Entregado" (quién recibió).
- Ver el panel como… (Admin): Responsable o Cobranza del CEDIS, Franquiciatario o Gerente, en solo lectura y con aviso para salir.
- Menú lateral con los grupos Inventario y CEDIS (cada opción explica qué es), selector de CEDIS y etiqueta "Nivel: Sucursal / CEDIS / Marca" en cada página.
- Guía de equipo: qué lector de códigos e impresora de etiquetas comprar (especificaciones y precios de referencia), cómo conectarlos, "Probar lector" e "Imprimir etiqueta de prueba".
- Academia: secciones Inventario, Insumos y recetas, Conteos y CEDIS.
Detalles técnicos
Notas
- Migración
0078_stage53_inventarios(tablas de inventario y CEDIS, rolescedis_managerycedis_billing, columnas nuevas en productos, Colaboradores, cajas, gastos y renglones de pedido; reserva los slugscedis,almacen,ocyremision). Si otra rama ya usó ese número, se renumera al juntar. - La factura semanal de los CEDIS corre los lunes en la revisión diaria; sin
FACTURAPI_USER_KEYno se factura nada (igual que la Etapa 47). - Dependencia nueva
barcode-detector(lector de la cámara en navegadores sin BarcodeDetector); su.wasmva enpublic/vendor/. - Pendiente de una etapa siguiente: la foto de entrega desde el celular del repartidor.
v1.52.017 de octubre de 2026
Etapa 47: facturación electrónica (CFDI 4.0)
Agregado
- Emisores (datos fiscales con CSD) de Colega Studio (Admin → Facturación), de cada distribuidor (
/distribuidor/facturacion) y de cada Cuenta (Finanzas → Facturación), cada uno como organización de Facturapi. Alta en pasos: datos (o leer la Constancia con IA), CSD (el.keyy su contraseña van directo a Facturapi y no se guardan), Carta Manifiesto (en Producción) y factura de prueba. Logo y color de cada emisor en el PDF y el correo de sus facturas (de fábrica, los del menú). - Con qué factura cada sucursal: datos del restaurante, los suyos o no factura, con serie y C.P. de expedición, y "Lista para facturar". El Admin decide por sucursal si su Franquiciatario sube sus propios datos.
- Facturar pedidos: el comensal desde su ticket (o en
/{slug}/facturacon folio y total), en el POS (pedido o toda la cuenta de mesa, "¿Requiere factura?" al cerrarla) y en Ventas. Datos fiscales del cliente guardados para la próxima vez. PDF y XML en pantalla y por correo. Un pedido nunca queda en dos facturas. - Factura global automática por sucursal (mensual de fábrica), cancelaciones con motivo (también al cancelar un pedido facturado), notas de crédito por reembolsos, ticket de la global facturado después al cliente (se sustituye la global), resumen del mes y ZIP para el contador.
- Cobro por factura: $2 en Complete y $1.20 en Escala (IVA incluido; la global mensual y las de prueba no cuentan), a mes vencido en la suscripción de Stripe; en Cuentas de distribuidor se queda completo con Colega Studio.
- Factura de Colega Menus (Cobro): la Cuenta que la pide recibe sola, con cada pago, la factura de su suscripción, Más IA, facturas emitidas y tarjetas (una por RFC); el plan de las Cuentas de distribuidor lo factura el distribuidor.
- Sección Facturación en los permisos (también para Roles personalizados; la plantilla Contador la incluye en "Ver").
Detalles técnicos
Notas
- Se publica apagada: sin
FACTURAPI_USER_KEYen Production no aparece Facturación (panel ni distribuidor), Cobro sigue con el formulario de factura anterior y la revisión diaria no emite globales. Se enciende al poner la llave. - Migraciones
0072a0077(stage47_*). - Variable nueva
FACTURAPI_USER_KEY(llave de usuario de Facturapi; en Preview la cuenta trabaja en modo prueba). - Stripe: el webhook necesita el evento
invoice.created. - Claves del SAT de fábrica por validar con el contador: 90101501 / E48 (restaurante), 01010101 / ACT (global), 81112106 (suscripción) y 01010101 (tarjetas); formas de pago 01, 03, 04 y 31 (Mercado Pago).
v1.51.016 de octubre de 2026
Etapa 49: planes Complete y Escala
Agregado
- Plan por sucursal: Complete ($499) o Escala ($799 = $499 + $300), IVA incluido. En Suscripción el Admin ve el plan de cada sucursal y la sube o la baja con confirmación. Subir es al momento (Stripe prorratea); bajar deja Escala hasta que termina el mes pagado, sin devolución, y volver a subirla ese mes no la cobra otra vez. En prueba gratis o cortesía todas las sucursales tienen Escala.
- Stripe: partida aparte "plan Escala" ($300 por sucursal,
STRIPE_PRICE_ID_ESCALA, la creanpm run stripe:setup). Sin ese precio no se puede subir a Escala (para no regalarla). - Solo sucursales Escala en las funciones conjuntas y de Escala, revisado en el servidor: reservaciones y lista de espera (sin Escala llegan apagadas; las reservas ya hechas se siguen atendiendo), tienda de la franquicia (solo lista y asigna a domicilio sucursales Escala; sin ninguna, el enlace de marca muestra todas las sucursales con su Tienda) y pedidos entre sucursales.
- Panel: aviso "Disponible en Escala" en Reservaciones y "Sucursales que participan" en la tienda de la marca.
- Admin → Cuenta: plan y Escala de cortesía hasta una fecha por sucursal, con bitácora.
- 30 días de Escala de cortesía al publicar (PL19) para las sucursales Complete que ya usaban reservaciones o lista de espera, pedidos entre sucursales o domicilio con tienda de la marca, con aviso "Escala hasta el …" en el menú lateral (también sale cuando una sucursal baja a Complete o tiene cortesía del equipo).
- Grupo Escala en el menú del panel con Inventarios y CEDIS (mini página de lo que resuelven; con Escala, "Incluido en tu plan" y que llega pronto), mini página de la Tienda de la franquicia cuando ninguna sucursal tiene Escala, insignia Complete / Escala en Sucursales, y el POS de una sucursal Complete ya no muestra Reservas ni Fila (salvo que quede alguna por atender).
- Ilustraciones 3D en movimiento del CEDIS, Inventarios y Reservaciones, sin fondo (Magnific: imagen + Kling 2.5 + quitafondo; bucle ida y vuelta de 10 s en
public/escala/: VP9 con transparencia de 77–122 KB y HEVC con transparencia de 226–260 KB para Safari/iPhone), con imagen fija si el sistema pide menos movimiento. - Correo 7 días antes de que una sucursal Complete deje Escala (cortesía o el mes pagado al bajar), una vez por fecha, en la revisión diaria.
Cambiado
- Distribuidores: la regalía sigue siendo por sucursal en los dos planes (el extra de Escala no la cambia).
- Refiere y gana: el saldo es lo que paga una sucursal del plan del recomendado ($499, o $799 si paga Escala).
- El correo de "cambió tu pago" y las métricas de Admin cuentan las sucursales Escala.
Detalles técnicos
Notas
- Migraciones
0069_stage49_planes(branches.plan,branches.pro_until,client_accounts.billed_pro_quantity)0070_stage49_cortesia_escala(los 30 días de PL19; se aplica una sola vez, al migrar Producción) y0071_stage49_aviso_escala(branches.pro_until_warned). Si otra rama ya usó esos números, se renumeran al juntar. - Precio de Escala creado en Stripe (prueba y real, 16-oct-2026) y
STRIPE_PRICE_ID_ESCALApuesto en Vercel (Preview: el de prueba; Production: el real).
v1.50.116 de octubre de 2026
Tienda de Colega Cards en colegastudio.com
Agregado
- La página de Colega Cards de colegastudio.com tiene su propia tienda y crea el pedido con la misma API de la tienda (
/api/card-shop/orders). Se permite solo desde los sitios de Colega Studio (CORS para colegastudio.com, sus previews y localhost); precios, existencias y envío se siguen calculando aquí.
v1.50.016 de octubre de 2026
Etapa 46: roles y permisos del equipo
Agregado
- Roles del panel: Admin (quien creó la Cuenta), Co-admin (igual que el Admin), Franquiciatario (todo lo de sus sucursales, incluidas Finanzas, su Mercado Pago y sus Gerentes; nada de otras sucursales ni de lo que vale para todo el restaurante) y Gerente (la operación de sus sucursales: pedidos, caja, mesas, menú, tarjetas y Colaboradores; sin costos, estado de resultados ni ajustes). El personal del POS con nombre y PIN ahora se llama Colaborador.
- Permisos por sección: cada acción del servidor declara la sección del panel a la que pertenece y se rechaza si el rol no la alcanza; el menú lateral y cada página muestran solo lo permitido, y quien entra con un enlace directo regresa a Menús.
- Modo "solo ver": en Etiquetas, Apariencia, Banners e Idiomas (Franquiciatario y Gerente) y en Sucursales, Tienda y Cupones (Gerente), la página se ve con el aviso "Solo puedes ver esta sección" y los controles apagados.
- Equipo con rol y teléfono: al invitar se elige el rol y se pide el teléfono (10 dígitos). El Franquiciatario invita Gerentes solo de sus sucursales; nadie puede dar un rol igual o mayor al suyo ni acceso fuera de sus sucursales (R11). Se puede cambiar el rol de alguien desde "Editar acceso". El correo de invitación dice el rol.
- Colaboradores del Gerente: el Gerente da de alta a los Colaboradores del POS de sus sucursales y ve sus cajas; los de "todas las sucursales" solo los cambia el Admin.
- Actividad del Franquiciatario: ve los cambios de sus sucursales.
- Roles personalizados (Equipo → Roles personalizados): se les pone nombre y, por sección, Ver o Ver y editar (Menús, Sucursal, Pedidos, Mesas y reservaciones, Tienda, Repartidores, Ventas, Gastos, Finanzas, Asesor, Clientes, Cupones, Opiniones, Tarjetas, Asistente). El Admin y los Co-admins arman los de la marca (sirven en todas las sucursales); el Franquiciatario, los de su sucursal. Nadie da más de lo que tiene, y Equipo, cajas, Colaboradores, Mercado Pago, WhatsApp, Actividad, el cobro y lo de todo el restaurante nunca se dan. Plantilla rápida Contador (Ventas, Gastos y Finanzas en Ver). Se asignan al invitar o en "Editar acceso"; cambiar el rol vale desde el siguiente clic, y se archiva solo si nadie lo tiene.
- Mi PIN para la caja (Equipo): el Admin, los Co-admins, el Franquiciatario y los Gerentes ponen su propio PIN y aparecen en la caja con su nombre, solo en las sucursales a las que tienen acceso hoy (si les quitan la sucursal o los quitan del Equipo, dejan de aparecer y su turno abierto deja de valer). Siempre autorizan: cancelar pedidos cobrados, descuentos, diferencias del corte, salidas de caja y juntar cuentas con pagos. Nadie más cambia ese PIN.
- Colaboradores: "Encargado" ahora se llama Puede autorizar, y cada Colaborador puede tener puesto (Cajero, Mesero, Cocina, Barra, Anfitrión u Otro), que se ve en Equipo y en la caja al elegir quién entra. Los avisos de la caja ya dicen "PIN de quien autoriza".
- Revisar los roles de quienes ya estaban: el Admin ve un aviso en el menú lateral y en Equipo con las personas que pasaron solas a Gerente, una etiqueta "Revisa su rol" en cada una y el botón "Dejarlos como Gerentes"; cambiarles el rol en "Editar acceso" también cuenta como revisado.
- Pasar el rol de Admin (Equipo → "Hacer Admin" en un Co-admin): el Co-admin queda como Admin y quien lo pasa, como Co-admin. Solo lo hace el Admin.
- Teléfono de todos los del panel: quien entra sin teléfono lo captura una vez en una ventana al entrar.
- Más páginas en "solo ver" para los roles personalizados: Menús, un menú, productos, Modificadores, Mesas, Repartidores, Gastos, Costos e Historial con los controles apagados; Pedidos y Opiniones con el aviso (los filtros siguen funcionando). Crear productos, copiar, importar y subir fotos piden "Ver y editar" en Menús.
Cambiado
- Los miembros del equipo que ya existían pasan a Gerente con las mismas sucursales. Como Gerentes dejan de ver costos, estado de resultados, historial y el Asesor (R19), y solo ven Sucursales, Tienda y Cupones; si alguno debe verlos, conviértelo en Franquiciatario desde Equipo.
- Cupones: el Gerente solo los ve; el Franquiciatario crea los de su sucursal (R18).
Corregido
- Al cambiar de restaurante desde la tarjeta del menú lateral, la tarjeta y el menú se quedaban con el restaurante anterior hasta recargar la página.
Detalles técnicos
Notas
- Migraciones
0065_stage46_roles(team_members.role, enumteam_role)0066_stage46_roles_personalizados(custom_roles,team_members.custom_role_id, valorcustom)0067_stage46_pin_del_panel(pos_staff.user_id,pos_staff.position) y0068_stage46_revisar_roles(team_members.role_reviewed_at).
v1.49.016 de octubre de 2026
Etapa 45 (cierre): reservas sobre el plano y mesas juntas para grupos
Agregado
- Juntar mesas para grupos grandes: si un grupo no cabe en una sola mesa, la reserva aparta 2 o 3 mesas que están juntas en el plano (misma área, sin barras), las que dejan menos lugares vacíos. Funciona en línea, por teléfono y al confirmar una solicitud. Se apaga en Reservaciones → Ajustes ("Juntar mesas para grupos grandes", encendido de fábrica). Antes, ese grupo llegaba como solicitud sin mesa.
- Sentar a un grupo con mesas juntas: en el POS, al sentar la reserva en su mesa, las otras mesas apartadas quedan unidas a la misma cuenta (como "Juntar mesas" de la Parte C).
- Agenda sobre el plano (Reservaciones → Agenda → Plano): se elige la hora y cada mesa dice si está Reservada (morado), Sentada (azul) o si alguien Llega pronto (ámbar, en la siguiente media hora), con la hora y el nombre; las mesas juntas para un grupo se ven unidas con una línea. Al tocar una mesa se ven sus reservas del día.
Detalles técnicos
Notas
- Migración
0064_stage45_juntar_mesas_reservas(reservation_settings.combine_tables). - Con esto se cierra la Etapa 45 por ahora; los anticipos (Parte F) quedan para después.
v1.48.016 de octubre de 2026
Etapa 45 (parte G): Números de las mesas
Agregado
- Ventas → Mesas (mismos filtros de fechas y sucursal que Ventas): mesas atendidas y comensales, tiempo promedio en la mesa, espera de la comida (de que se pide la ronda a que la cocina la marca lista), ticket por persona, rotación (veces que se ocupa cada mesa al día), la hora más llena y el % de "no llegó".
- Ocupación por día y hora: mapa de calor con el % de mesas ocupadas en promedio, en la hora de la sucursal; y a qué hora llegan (mesas abiertas por hora).
- Tiempo por tamaño de grupo (1–2, 3–4, 5–6, 7 o más): cuánto se queda cada grupo y cuánto gasta por persona.
- Por mesa: veces que se ocupó, veces al día, tiempo y ventas de cada mesa, y las mesas que no se usaron.
- Reservas y sin reserva: mesas atendidas con reserva contra las que llegaron sin reserva, y cómo terminaron las reservas (llegaron, no llegaron, canceladas, por venir; cuántas en línea). Lista de espera: se apuntaron (con el QR), se sentaron, se fueron y la espera promedio.
- El Asesor lee los números de las mesas de los últimos 28 días y da consejos de rotación, horarios, mesas poco usadas y "no llegó".
Detalles técnicos
Notas
- Sin migración. Cuenta las cuentas de mesa cerradas con al menos una ronda cobrable; una cuenta abierta más de 12 horas (olvidada) no cuenta en los tiempos.
v1.47.016 de octubre de 2026
Etapa 44 (cierre): anfitriones del distribuidor, Colega Cards y reporte de regalías
Agregado
- Anfitriones del distribuidor (D17, D18): pestaña Anfitriones en el panel del distribuidor.
- Su enlace
/anfitriones/d/{código}para sumar anfitriones: quien se registra con él queda como anfitrión de ese distribuidor (lo ve en su registro y en su panel de anfitrión). - El dueño del distribuidor aprueba, rechaza, suspende o reactiva a sus anfitriones (con los mismos correos que manda Colega Studio).
- Ve sus referidos y comisiones (por pagar, en espera y pagado) y les paga por SPEI: ve sus datos y su CLABE (queda en la bitácora) y registra la referencia; las comisiones quedan pagadas y el anfitrión recibe su correo.
- Las comisiones son las mismas de Colega Studio ($199 los primeros 12 meses y $99 después) y solo nacen de las Cuentas de su distribuidor: si la Cuenta cae en otro territorio o termina el contrato (D21), deja de ganar por ella.
- Una Cuenta que llega con el enlace o código de un anfitrión del distribuidor queda referida a ese distribuidor (si no gana un territorio).
- Su enlace
- D13: la comisión de un anfitrión de Colega Studio por una Cuenta que es de un distribuidor la sigue pagando Colega Studio, y se descuenta de la transferencia al distribuidor de esa factura. Aparece como "Anfitrión" en el desglose de pagos (panel del distribuidor, CSV y Admin).
- Colega Cards (D8): cuando un restaurante de un distribuidor compra tarjetas desde su panel, Stripe le transfiere en automático el % de Colega Cards del distribuidor, calculado sobre los productos (sin envío); la comisión de Stripe la absorbe Colega Studio. Se revierte si hay reembolso.
- Admin → Distribuidores → Reporte de regalías: por mes y distribuidor, lo pagado, la regalía, lo que se queda Colega Studio de Colega Cards, las comisiones de anfitriones descontadas, la comisión de Stripe y lo transferido, con descarga en CSV.
Cambiado
- Admin → Anfitriones muestra de qué distribuidor es cada anfitrión. Sus solicitudes no cuentan como pendientes para el equipo, y sus pagos no aparecen en Admin → Anfitriones → Pagos (los hace su distribuidor).
Detalles técnicos
Notas
- Migración
0063_stage44_anfitriones_distribuidor:ambassadors.distributor_id,ambassador_commissions.charged_distributor_idydistributor_transfers.ambassador_cents. - Con esto se completa la Etapa 44. Para cobrar de verdad con distribuidores falta, en Stripe: que el webhook de producción escuche
charge.refundedy terminar en modo real el alta de la plataforma en Stripe Connect.
v1.46.016 de octubre de 2026
Etapa 44 (partes D y E): panel del distribuidor y "Tu asesor"
Agregado
- Panel del distribuidor en
menus.colegastudio.com/distribuidor. El distribuidor entra con su correo en/loginy llega directo a su panel. Pestañas:- Inicio: días que le quedan a su licencia (aviso al acercarse el vencimiento y si vence o se suspende), Cuentas que pagan, en prueba y con pago atrasado, sucursales pagadas, lo recibido en el mes, su enlace
/r/{código}con QR y el estado de su cuenta de Stripe (dar de alta, terminar el alta o abrir su panel de Stripe). - Cuentas: sus restaurantes, sucursales, estado de pago, fin de prueba y contacto del dueño (teléfono, WhatsApp y correo). Solo ve su información; no entra a su panel. Puede dar prueba o cortesía a las Cuentas que aún no pagan, hasta el tope de días que pone Colega Studio.
- Pagos: cada pago con su desglose (pagado, saldo a favor, regalía, comisión de Stripe y lo recibido), totales por mes y descarga en CSV.
- Territorio: sus estados y municipios, su enlace y QR, y Solicitar territorio: elige estados o municipios; lo que ya tiene otro distribuidor aparece como "No disponible" (sin decir de quién). Ve el estado de cada solicitud (Enviada → Cotizada → Pagada y activa, o Rechazada) y puede cancelarla mientras no esté pagada.
- Equipo: el dueño invita y quita a su equipo; el equipo ve todo pero no invita ni administra Stripe.
- Inicio: días que le quedan a su licencia (aviso al acercarse el vencimiento y si vence o se suspende), Cuentas que pagan, en prueba y con pago atrasado, sucursales pagadas, lo recibido en el mes, su enlace
- Admin → Distribuidores:
- Acceso al panel: invitar al dueño del distribuidor (o a alguien de su equipo) por correo; crea su contraseña con el enlace.
- Ver como distribuidor (D20): el super admin entra a su panel en solo lectura por una hora, con aviso arriba y registro en la bitácora.
- Solicitudes de territorio: bandeja con las de todos los distribuidores: Cotizar (precio y nota), Rechazar con motivo o Activar ya pagada (vuelve a revisar que nadie más tenga esos lugares). Cada paso le avisa al distribuidor por correo, y cada solicitud nueva llega a la campana del equipo.
- "Tu asesor" en el panel del restaurante (Facturación y Academia): nombre del distribuidor que lo atiende, su contacto, WhatsApp y correo; en Facturación, el aviso de que sus facturas (CFDI) se las da su asesor.
Detalles técnicos
Notas
- Migración
0062_stage44_panel_distribuidor: tablasdistributor_membersydistributor_territory_requests; "Ver como distribuidor" ensessions; invitación de tipodistributor_member; quien actúa comodistributoren la bitácora. - Aislamiento (regla 1): todo el panel filtra por el distribuidor de la sesión, nunca por uno enviado desde el navegador. Hay pruebas que intentan ver o tocar Cuentas, pagos, solicitudes y equipo de otro distribuidor o de Colega Studio.
- Pendiente para la última parte de la etapa: anfitriones del distribuidor y reparto de Colega Cards.
v1.45.216 de octubre de 2026
Arreglo: fotos e imágenes desde Safari, en JPEG en vez de PNG pesado
Corregido
- Fotos e imágenes subidas desde Safari (iPhone, iPad o Mac): Safari no sabe crear WebP y entregaba PNG sin avisar, que se subía con nombre
.webp. Una foto de producto de 1200 px pesaba ≈2.6 MB en vez de ≈0.4 MB (contra el límite de 3 MB, así que algunas no subían) y el menú cargaba más lento. Ahora, si el navegador no crea WebP, la imagen sale en JPEG, con su extensión y tipo correctos. Los logos salen en PNG para conservar el fondo transparente. - Aplica en todos los lugares que suben imágenes: fotos de productos (una por una y Subir fotos), logo del restaurante, banners, comprobantes de gastos, captura de Feedback y sugerencias, logo de Colega Cards y portadas de videos de la Academia.
- La subida a Vercel Blob acepta
.webp,.jpgy.png(y el logo de Colega Cards,.webpo.png). Siempre dentro de la carpeta del restaurante de la sesión; nada más cambia.
Detalles técnicos
Notas
- En Chrome, Firefox y Edge todo sigue en WebP, igual que antes. Las fotos que ya se subieron desde Safari se quedan como están (se ven bien, solo pesan más).
v1.45.115 de octubre de 2026
Arreglo: Subir fotos con IA fallaba en Safari (error 413)
Corregido
- Panel → Menús → Subir fotos: al relacionar fotos con IA desde Safari (iPhone, iPad o Mac) la página fallaba con "Body exceeded 1 MB limit" (413). Safari no sabe crear imágenes WebP y entrega PNG sin avisar, unas 5 veces más pesado: 10 miniaturas sumaban ≈5 MB y Next.js rechaza envíos de más de 1 MB a una acción del servidor. Ahora, si el navegador no crea WebP, la miniatura va en JPEG (el servidor acepta WebP y JPEG; PNG y otros formatos se siguen rechazando).
- Los lotes para la IA se arman por peso además de cantidad (máximo 700 000 caracteres por envío, bien abajo de 1 MB), y una miniatura que pesa de más se vuelve a comprimir. El servidor rechaza un lote que no cabría.
Detalles técnicos
Notas
- No se subió
serverActions.bodySizeLimit: las miniaturas solo sirven para que la IA las vea, no se guardan, y con estos cambios cada envío pesa ≈200–600 KB. Las fotos del menú ya iban directo del navegador a Vercel Blob (regla 12) y no cambian.
v1.45.015 de octubre de 2026
Etapa 44 (parte B): a quién pertenece cada Cuenta
Agregado
- Admin → Distribuidores → detalle → Territorio: estados completos o municipios de México (lista de los 32 estados; el municipio se escribe como aparece en Google Maps). Dos distribuidores no pueden compartir lugar: un estado completo choca con cualquier municipio de otro en ese estado. Quitar un lugar lo archiva; al terminar el contrato sus lugares quedan libres. Todo queda en la bitácora.
- Estado y municipio de cada sucursal: al guardar su dirección, el servidor los saca con Google Maps (el lugar elegido en las sugerencias o la dirección escrita) y los guarda en la sucursal. Solo se consulta a Google cuando cambia la dirección.
- La dirección de la primera sucursal es obligatoria (Panel → Sucursales → Editar sucursal).
- A quién pertenece una Cuenta nueva: se decide una sola vez, al guardar la dirección de su primera sucursal: 1) el distribuidor activo de ese territorio, si la Cuenta se creó después de que el territorio se activó (D15); 2) si no cae en ninguno, el distribuidor de su enlace
/r/{código}o del código que escribió al registrarse; 3) si no, Colega Studio. Gana el territorio aunque haya llegado con el enlace de otro distribuidor o de un anfitrión (D13); el anfitrión conserva su referido y su comisión. Ya decidida, el sistema nunca la reasigna solo; solo el equipo desde Admin → Cuenta. - Si una Cuenta llega a pagar sin que se haya decidido (sin dirección o Google no la ubicó), se decide en ese momento con lo que haya.
- Enlace y código del distribuidor:
/r/{código}y el campo "Código de quien te recomendó" del registro aceptan el código de un distribuidor activo y muestran "Te atiende: Distribuidor X". - Correo al distribuidor cuando entra una Cuenta nueva a su cartera (por territorio, enlace o código), con el contacto del dueño.
- Admin → Cuenta muestra cuando una Cuenta llegó con el enlace o código de un distribuidor y aún no se decide.
Detalles técnicos
Notas
- Migración
0061_stage44_atribucion: tabladistributor_territories;branches.stateybranches.municipality;client_accounts.distributor_decided_at,referred_distributor_idyreferred_distributor_source. Las Cuentas que ya existen quedan como decididas (se quedan con quien las tiene, D15). - Un distribuidor dado de alta "por activar" puede tener territorio, pero empieza a contar el día que se activa. Uno suspendido ya no recibe Cuentas nuevas (van a Colega Studio).
v1.44.015 de octubre de 2026
Etapa 45 (partes D y E): Reservaciones y lista de espera con QR
Agregado
- Panel → Reservaciones (dueño, copropietarios y gerentes de la sucursal): Agenda del día o la semana con "Por confirmar", Nueva reserva (teléfono, WhatsApp o en persona, con mesa a elegir o automática), Confirmar, Rechazar o Cancelar con motivo (le llega al comensal) y "No llegó". Ajustes: encender reservas en línea (apagadas de fábrica; piden el horario por día), cómo se confirman (al momento, salvo grupos grandes, o a mano), máximo de personas en línea, anticipación, aviso mínimo, última reserva, límite para cambiar o cancelar, % de mesas para reservas en línea, cupo por cada 15 minutos, duración típica por tamaño de grupo, política y fechas bloqueadas. Compartir: enlace para reservar con "Copiar" y la guía para ponerlo en el Perfil de Google (nivel 0), y el QR de la lista de espera para imprimir.
- Página pública para reservar
…/{slug}/reservar(y…/{marca}/reservarpara elegir sucursal): personas, día y solo las horas con lugar (por mesas: la más chica donde quepan, sin chocar con otras reservas ni con mesas ocupadas), nombre, WhatsApp (verificado si entró con su código), correo opcional, ocasión, petición y la política. Límites contra bromas por teléfono y por conexión. Botón "Reservar mesa" en el menú cuando están encendidas. - Página de la reserva
…/{slug}/reserva/{código}: estado, "Ahí estaré", cambiar hora o personas (si hay lugar) y cancelar hasta el límite. - Avisos: confirmación, recordatorio (el día anterior, o la mañana del mismo día) y cancelación por el WhatsApp del restaurante; por correo si no tiene WhatsApp o el comensal dejó su correo.
- POS → Mesas: la mesa se ve "Reservada" (morado) 30 minutos antes y "Retrasada" a los 15 minutos; tocarla ofrece "Sentar a {nombre}" con sus comensales (la cuenta queda ligada a la reserva). Panel Reservas de hoy (sentar en la mesa que elijan, No llegó, Cancelar, Nueva reserva) y "Por confirmar" que suena.
- Lista de espera (POS): anotar con tiempo estimado, Avisar ("tu mesa está lista" por WhatsApp), Sentar y "Se fue". QR de la entrada
…/{slug}/espera: el comensal se apunta solo y ve su lugar y el tiempo estimado, que se actualizan solos; puede salirse de la fila. - Clientes: etiquetas fijas (VIP, alergia, cumpleaños, vegetariano, con niños, accesibilidad). En cada reserva se ve "VIP · Alergia · 3ª visita" y cuántas veces no llegó.
- La campana del panel también muestra las reservas por confirmar (urgente a los 15 minutos sin atender).
Detalles técnicos
Notas
- Migración
0060_stage45_reservaciones(reservation_settings,reservation_blackouts,reservations,reservation_tables,waitlist_entries;customers.tags; avisos de WhatsApp ligados a reservas y a la fila). - Plantillas nuevas de WhatsApp que Meta debe aprobar:
colega_reserva_confirmada,colega_reserva_recordatorio,colega_reserva_canceladaycolega_mesa_lista(en Panel → WhatsApp → "Revisar plantillas"). Mientras no estén aprobadas, los avisos salen por correo. - Los recordatorios salen con la revisión diaria (cron).
- Pendiente para después: agenda sobre el plano, juntar mesas para un grupo reservado, anticipos (Parte F) y números de mesas (Parte G).
v1.43.015 de octubre de 2026
Etapa 45 (parte C): Cambiar, juntar, separar y dividir
Agregado
- Cambiar de mesa (POS → Mesas → la cuenta): pasa toda la cuenta a una mesa libre (rondas, pagos parciales, comensales y mesero). El QR de la mesa vieja deja de sumar y el de la nueva empieza. Lo puede hacer cualquiera del POS.
- Juntar mesas para un grupo grande: se eligen mesas libres y quedan unidas a la cuenta; en el plano se ven unidas con una línea y dicen "con Mesa 4", y cualquiera de sus QR suma a la misma cuenta.
- Juntar cuentas de dos mesas que ya estaban comiendo: rondas, pagos, propinas y comensales pasan a una sola cuenta y la otra mesa queda unida. Si alguna ya tiene pagos, lo aprueba un encargado (el que está en turno o con su PIN).
- Separar: las mesas unidas vuelven a quedar libres y la cuenta se queda con la mesa principal.
- Dividir la cuenta: en partes iguales (entre N personas, con − y +; al cobrar una parte, lo que falta se divide entre los que quedan) o por productos (se toca + en lo que paga cada persona; lo ya cobrado no se puede volver a cobrar). Cada parte se cobra con sus propios pagos y su propina. El monto de "por productos" lo calcula el servidor con el descuento de cada ronda.
- Historial de la cuenta: "15:58 · Ana · Cambió de Mesa 4 a Mesa 9", juntó, separó, cambió de mesero, cobró…
- Al cobrar la cuenta completa, las mesas unidas también quedan libres.
Detalles técnicos
Notas
- Migración
0059_stage45_juntar_dividir(table_tab_tables: mesas unidas a una cuenta, una sola cuenta abierta por mesa;table_tab_events: historial). - Siguiente: Parte D (reservaciones).
v1.42.015 de octubre de 2026
Etapa 45 (parte B): Mesas en vivo
Agregado
- Estados de mesa en el plano del POS (y en los cuadros): Libre, Ocupada (azul), Pidió (naranja: ronda en cocina), Comiendo (verde), Por cobrar (rojo: pidió la cuenta o ya pagó una parte) y Bloqueada (gris), siempre con ícono y texto además del color. Interruptor "Colorear por: Estado / Mesa" para ver los colores de cada mesa (secciones) y su leyenda.
- Comensales obligatorios y sin teclado: al tocar una mesa libre sale un panel de números grandes del 1 al 12 (y "Más de 12" con − y +); un toque elige y abre la mesa. Resalta los que caben; si se sientan más, solo avisa. Si la abrió un pedido del QR, la mesa dice "¿Cuántos?" y el número se pide antes de cobrar: no se cobra sin él. Se corrige tocando el número en la cuenta.
- Tiempos en cada mesa: cuánto llevan sentados y cuánto espera su ronda en cocina, en amarillo y rojo según Panel → Mesas → Ajustes (de fábrica: comida 15 y 25 min, mesa 90 y 120 min), que cada sucursal cambia con − y +.
- "Llamar al mesero" y "Pedir la cuenta" en la página del QR de la mesa: la mesa parpadea en el plano, suena en el POS y sale el aviso ("Mesa 4 pide la cuenta"). Un aviso cada 2 minutos por mesa. Se atiende con "Atendido"; la cuenta pedida sigue en rojo hasta cobrarla.
- Mesero de la mesa: quien la abre (o toma la primera ronda); se cambia con un toque y recibe la propina de entrada. Filtro "Mis mesas".
- Bloquear mesa (fuera de servicio) desde el POS: no se abre ni acepta rondas del QR.
- Resumen arriba: mesas ocupadas, comensales sentados, mesas esperando comida y avisos sin atender. El POS revisa las mesas cada 5 segundos mientras Mesas está en pantalla (el plano solo se vuelve a bajar si cambió).
- Ventas → Comensales en mesa: comensales, ticket por persona y mesas atendidas del periodo.
Cambiado
- En las rondas de mesa, "Listo" en la comandera ya es "Entregado": el mesero no marca nada y la ronda sale de la comandera (la espera se mide del pedido al "Listo"). Los pedidos para recoger y a domicilio siguen igual. Las rondas de mesa ya no mandan el aviso "tu pedido está listo" por WhatsApp.
Detalles técnicos
Notas
- Migración
0058_stage45_mesas_en_vivo(table_tabs.guest_countyserver_staff_id;dining_tables.blocked_aty los avisos del QR; tablatable_settings). - Partes siguientes: C (cambiar, juntar, separar y dividir la cuenta) y D (reservaciones).
v1.41.014 de octubre de 2026
Etapa 45 (parte A): Plano del salón
Agregado
- Panel → Mesas → Plano (dueño, copropietarios y gerentes de la sucursal): el salón dibujado como es, junto a la Lista y QR de siempre.
- Asistente de primera vez en 3 pasos: áreas con un toque ("Salón", "Terraza", "Barra", "Planta alta", "Jardín" u otra), cuántas mesas de cada forma por área con − y +, y "Listo": quedan acomodadas en filas y numeradas. Las mesas de la Lista se cuentan solas.
- 5 formas (redonda, cuadrada, rectangular, booth y barra) dibujadas con tantas sillas como comensales caben; al tocar − o + las sillas cambian al momento (y la mesa crece si ya no caben).
- Elementos del salón: entrada, salida, baños, caja, cocina, barra de servicio, ventana, pared, planta, columna, escalera, pantalla, zona y texto. Se arrastran desde la paleta o se tocan y aparecen al centro.
- Barra flotante junto a la mesa: Lugares (− +), Nombre (y mover a otra área), Color, Girar 45°, Duplicar (siguiente número libre), "En fila" (copias numeradas hacia un lado) y Eliminar (archiva; no con la cuenta abierta).
- Cuadrícula con imán, líneas guía al alinearse con otras mesas, agarraderas grandes para el tamaño, seleccionar varias (botón en tablet o recuadro con el mouse) para mover, dar color, alinear y repartir parejo.
- Colores de la paleta fija de 12 con leyenda opcional ("Morado = sección de Ana") que se ve abajo del plano y en el POS.
- Se guarda solo con cada cambio (todo o nada) y siempre se puede Deshacer / Rehacer. Aviso de mesas encimadas, Vista del POS, Imprimir plano (una hoja por área con números, lugares y leyenda) y atajos de teclado (Supr, Ctrl+D, Ctrl+Z, flechas).
- Varias áreas o pisos con pestañas; un área se puede apagar por temporada.
- En celular el plano se ve como lista por área (para dibujar se usa tablet o computadora).
- POS → Mesas muestra el plano en solo lectura con pestañas de área (y cuántas mesas abiertas tiene cada una) y la leyenda de colores. Todo lo de antes sigue igual: tocar para abrir, cobrar, minutos y total. Interruptor Plano / Cuadros; en celular, lista por área.
Cambiado
- Las mesas que ya existían quedan en el área "Salón" con 4 lugares, acomodadas en filas. Las que se agregan desde la Lista van a la primera área, debajo de las demás.
Detalles técnicos
Notas
- Migración
0057_stage45_plano_salon(dining_areas,floor_elements,dining_color_legendsy columnas nuevas endining_tables, todas con llaves compuestas restaurante + sucursal). - Los estados en vivo de las mesas, comensales y "Ajustes de mesas" son la Parte B.
v1.40.014 de octubre de 2026
Etapa 44 (partes A y C): Distribuidores
Agregado
- Admin → Distribuidores: alta de distribuidores (nombre comercial, contacto, datos fiscales y código en el mismo espacio que anfitriones y Refiere y gana), regalía por sucursal ($59 por defecto), % de Colega Cards y tope de cortesía. Estados: Por activar → Activo → Suspendido → Contrato terminado. Toda acción queda en la bitácora.
- Licencia anual: se cobra fuera de la app; en Admin se registra el pago (monto, fecha, referencia) y su vigencia (un año más de fábrica). Sin licencia vigente no se puede activar. El detalle y la lista muestran los días que le quedan.
- Cuenta de Stripe del distribuidor (Stripe Connect, Express): "Crear enlace de alta" da un enlace propio que sirve 7 días (
/distribuidores/stripe/continuar, firmado) y, cada vez que se abre, crea en ese momento el enlace de Stripe (de un solo uso), así que no se gasta si WhatsApp, un correo o el navegador lo abren antes. Stripe le pide sus datos y su banco (Colega Studio nunca los ve) y "Revisar estado" confirma cuando ya puede recibir. Página de regreso/distribuidores/stripe. - Reparto automático de cada pago de sus Cuentas: la suscripción se sigue cobrando en el Stripe de Colega Studio; al confirmarse el pago se calcula con la comisión real de Stripe y se le transfiere lo que queda después de la regalía ($59 por sucursal, proporcional en prorrateos) y la comisión. Con saldo a favor, Colega Studio cobra primero su parte; un pago en $0 queda como "nada que transferir". Una sola transferencia por pago (llave de idempotencia, ligada a su cargo).
- Desglose de pagos en el detalle del distribuidor: pagado, saldo a favor, regalía, comisión de Stripe, transferido y estado (con el motivo si sigue pendiente), con botón para reintentar.
- Reembolsos: el webhook
charge.refundedrevierte la parte proporcional que se le había transferido. - Admin → Cuenta → Distribuidor: asignar la Cuenta a un distribuidor activo o regresarla a Colega Studio.
- Revisión diaria: avisos de licencia 30, 15 y 7 días antes y el día que vence (correo al distribuidor y campana del equipo); a los 15 días de vencida se suspende (ya no recibe Cuentas nuevas, sigue cobrando las suyas) y a los 60 se termina el contrato. También reintenta las transferencias pendientes.
- Fin de contrato: sus Cuentas pasan a Colega Studio y desde el siguiente pago todo se queda en tu Stripe; los pagos anteriores se le siguen liquidando.
Detalles técnicos
Notas
- Migración
0056_stage44_distribuidores(tablasdistributors,distributor_license_payments,distributor_transfers; columnas de distribuidor enclient_accounts; categoría de avisodistributor). - Antes de usarlo en producción: el webhook de Stripe debe escuchar también
charge.refunded, y el alta de la plataforma en Stripe Connect (modelo Marketplace) debe estar terminada en modo real. - Pendiente para las siguientes partes: atribución por enlace, código y territorio (B), panel del distribuidor con solicitudes de territorio y "Ver como distribuidor" (D), "Tu asesor" en el panel del restaurante (E), anfitriones del distribuidor y reparto de Colega Cards.
v1.39.014 de octubre de 2026
Ventas: pedidos entre sucursales
Agregado
- Ventas → "Pedidos entre sucursales" (aparece cuando hubo transferencias en el periodo): cuántos pedidos mandó la sucursal a otras (ya no suman en sus ventas) y cuántos recibió de otras (sí suman), con su monto y por cada sucursal. Respeta los filtros de periodo y sucursal; sin pedidos de prueba ni cancelados. Cierra el pendiente F10 de la Etapa 43. Sin migración.
v1.38.014 de octubre de 2026
Etapa 43 (parte B): Tienda de la franquicia
Agregado
- Enlace de marca (Tienda en línea → Tienda de la franquicia, visible con 2 o más sucursales): el dueño o un copropietario elige una sola vez
menudigital.colegastudio.com/{marca}/pedir. No se puede cambiar y queda reservado para siempre, igual que los slugs de sucursal./{marca}también lleva ahí. - Tienda de la franquicia: el cliente elige Recoger o A domicilio.
- Recoger: lista de sucursales con Tienda, su dirección, si está abierta (o si se puede programar) y "Cómo llegar"; con "Ver las más cercanas" se ordenan por distancia (con permiso de ubicación del celular). "Pedir aquí" abre la Tienda de esa sucursal.
- A domicilio: escribe su dirección y el servidor le asigna la sucursal más cercana que llega y recibe pedidos; si esa no recibe, la siguiente; si ninguna recibe ahora, la que se pueda programar. Muestra el envío y la distancia, y la Tienda de esa sucursal empieza "A domicilio" con la dirección ya puesta. Fuera de zona: "Aún no llegamos a tu dirección" con la opción de recoger.
- En la Tienda de cada sucursal, "Cambiar de sucursal" regresa a la tienda de la franquicia. Cada sucursal sigue con su menú, precios, disponibilidad, horario y zonas.
Cambiado
- Los límites sin WhatsApp (2 pedidos abiertos por teléfono y 5 por hora por conexión) se cuentan en todo el restaurante, no por sucursal.
Detalles técnicos
Notas
- El carrito no pasa de una sucursal a otra (cada sucursal tiene sus propios productos y precios).
- Migración
0055_stage43_tienda_franquicia(restaurants.store_slugcon su candado en la base).
v1.37.014 de octubre de 2026
Etapa 43 (parte D): Pedidos programados
Agregado
- Pedidos programados en la Tienda en línea. Con la sucursal abierta el cliente elige "Lo antes posible" o "Programar"; cerrada o en pausa, puede armar su carrito y programarlo para cuando abra. Elige el día (Hoy, Mañana…) y la hora, cada 15 minutos dentro del horario de la sucursal (desde la apertura más el tiempo de preparación hasta el cierre menos "último pedido antes de cerrar"). El servidor solo acepta esas horas y revisa precios y el menú activo a esa hora.
- Ajustes por sucursal en Tienda en línea → Pedidos programados (apagado de fábrica): encenderlos, programar hasta (solo hoy, hoy y mañana… hasta 7 días), enviar a la comandera X minutos antes (30 de fábrica) y "Programados solo con pago en línea".
- El programado queda confirmado al hacerlo, sin número del día. "Programados (n)" arriba de la comandera (panel y POS) los lista por día y hora con "Enviar a comandera ahora" y cancelar. A su hora menos la anticipación llega solo como Nuevo con su número y la etiqueta "PROGRAMADO 2:00 p. m.", y suena (con "Aceptar automáticamente", llega En preparación).
- El ticket del cliente dice "Pedido programado" con el día y la hora. El aviso "recibimos tu pedido" por WhatsApp sale al programarlo.
- Cuenta en las Ventas del día en que llega a la comandera. Hasta 2 programados pendientes por teléfono en el restaurante. Se pueden transferir a otra sucursal (siguen programados allá).
- Migración
0054_stage43_pedidos_programados(estadoscheduled,orders.scheduled_foryreleased_at, y cuatro ajustes enstore_settings).
v1.36.014 de octubre de 2026
Etapa 43 (parte C): Pedidos entre sucursales
Agregado
- Transferir un pedido a otra sucursal del mismo restaurante desde la comandera del panel o del POS (botón ⇄ en la tarjeta). Pide sucursal y motivo, y lo aprueba un encargado: en el POS con su PIN (o su propio turno); en el panel, el dueño, copropietario o gerente que lo pide. Solo pedidos para recoger o a domicilio, Nuevos, En preparación o Listos, sin cobros en caja (el pago en línea sí se permite y se avisa en qué cuenta de Mercado Pago quedó).
- "Transferencias por aceptar" arriba de la comandera de la sucursal que recibe, con sonido: productos, motivo, total y minutos que quedan. Aceptar lo pasa a esa sucursal con un número del día nuevo (si era Nuevo entra a En preparación) y sin repartidor; Rechazar pide motivo y lo regresa. Sin respuesta en 15 minutos regresa solo.
- Mientras espera respuesta, el pedido sigue en la sucursal original con "Esperando a …" y nadie lo puede mover, cobrar, cancelar ni asignar repartidor; se puede retirar la transferencia. Ya aceptado, la sucursal original lo ve en "Terminados" como "Transferido a …", solo lectura, y deja de contar en sus Ventas; cuenta en las de la sucursal que lo recibió.
- El ticket digital del cliente (y su página en vivo) se muda a la página de la nueva sucursal, con su nombre, dirección y cómo llegar.
- Todo queda en el historial del pedido; lo que se hace desde el panel, también en Actividad.
- Migración
0053_stage43_transferencias(tablaorder_transfers).
Detalles técnicos
Pendiente
- Aviso por WhatsApp al cliente cuando cambia de sucursal (plantilla nueva de Meta) y la línea de "transferidos" en Ventas.
v1.35.014 de octubre de 2026
Etapa 43 (parte E): Ningún pedido se cancela solo
Cambiado
- Ningún pedido se cancela solo. Antes, un pedido de la Tienda o de una mesa que nadie aceptaba en X minutos se cancelaba con "No se aceptó a tiempo" y se perdía la venta; si estaba pagado en línea, además no se reembolsaba. Ahora se queda como Nuevo hasta que alguien lo acepte o lo cancele a mano. Sigue sonando hasta aceptarlo y la campana del panel avisa a los 2 minutos. Se quitó el ajuste "Cancelar si nadie acepta" (la columna queda como historia).
- En la comandera, un pedido Nuevo con 2 minutos o más sin aceptar se marca en rojo.
- Sigue cancelándose solo el pedido con pago en línea que nunca se pagó (una hora en "Esperando pago").
Agregado
- "Aceptar pedidos automáticamente" en Tienda en línea, por sucursal (apagado de fábrica): los pedidos de la Tienda y de las mesas entran directo a "En preparación" con el tiempo de preparación de la Tienda, y suenan al llegar. Con pago en línea se acepta al aprobarse el pago. Queda en el historial como "Aceptado automáticamente".
- Migración
0052_stage43_aceptar_automaticamente(store_settings.auto_accept).
v1.34.014 de octubre de 2026
Etapa 43 (parte A): Repartidores de toda la franquicia
Agregado
- "Toda la franquicia" al dar de alta o editar un repartidor (Equipo → Repartidores): reparte en todas las sucursales del restaurante, también en las que se abran después, y se le puede asignar desde la comandera o el POS de cualquiera de ellas. Solo el dueño y los copropietarios pueden elegirla; un gerente ve a esos repartidores pero no los edita. Plan completo de la Etapa 43 (tienda de la franquicia, transferencias entre sucursales, pedidos programados y quitar la cancelación automática) en
docs/PROPUESTA-ETAPA-43.md. - Migración
0051_stage43_repartidores_franquicia(una columna nueva,riders.all_branches).
v1.33.213 de octubre de 2026
Imágenes del admin
Corregido
- Las imágenes que sube el super admin (fotos de la tienda de Colega Cards, banners globales, portadas de Academia y recursos de anfitriones) y los logos de Colega Cards se veían rotas en las vistas que usan el optimizador de imágenes: solo estaba permitida la carpeta de los restaurantes. Las fotos sí se subían bien; ahora también se muestran. Sin migración.
v1.33.113 de octubre de 2026
Activación de tarjeta más clara
Cambiado
- Sin sesión, la activación de una tarjeta empieza por la acción: "Entra o crea tu cuenta de Colega Cards", tres pasos (1 Entra o crea tu cuenta → 2 Elige qué abre → 3 ¡Lista!) y los botones "Crear mi cuenta" y "Ya tengo cuenta" hasta arriba. Lo que puede abrir la tarjeta (reseñas de Google, enlace o satisfacción) queda abajo como información, sin recuadros que parezcan botones. Antes las opciones iban primero y parecía que había que elegir una; algunos no veían que debían entrar.
v1.33.013 de octubre de 2026
Activar tarjetas con tu restaurante
Cambiado
- Activar una tarjeta nueva con una cuenta de Colega Menus: la pantalla de activación (go.colegastudio.com/{código}) ofrece primero "Mi restaurante": eliges restaurante y sucursal y qué abre la tarjeta (Menú, Mesa o Satisfacción), ahí mismo y sin salir al panel. "Otro negocio" sigue disponible (reseñas de Google, enlace o el sistema de satisfacción de $199). Una tarjeta nueva de Colega Cards también se puede ligar al restaurante.
- Sin pedir dos veces lo que ya sabemos: al crear el negocio de Colega Cards con una cuenta que ya existe, solo se pide el nombre del negocio. Tu nombre y tu WhatsApp salen de la cuenta; si no hay WhatsApp, aparece como opcional.
- Sin sesión, "¿Tienes restaurante con Colega Menus?" lleva a entrar con tu cuenta y regresa a la tarjeta (antes abría el panel del restaurante sin más indicaciones).
- "Vincula tu tarjeta" del panel (
/app/link-card) usa las mismas tres opciones: Menú, Mesa o Satisfacción.
v1.32.313 de octubre de 2026
Registro sin verificación anti-robots
Cambiado
- Ningún registro pide ya la verificación de Cloudflare ("No pudimos confirmar que no eres un robot"): crear cuenta de restaurante (
/signup), de anfitrión (/anfitriones/registro) y de Colega Cards. Fallaba en lectores de QR, navegadores dentro de otras apps y algunos celulares. Los registros los siguen cuidando el límite de 3 por minuto por IP y la confirmación del correo. Las reseñas de platos del menú público conservan su verificación.
v1.32.213 de octubre de 2026
Alta de Colega Cards sin verificación anti-robots
Corregido
- "No pudimos confirmar que no eres un robot" al crear la cuenta de Colega Cards (go.colegastudio.com/signup), sobre todo al abrirla desde un lector de QR o el navegador de otra app. El alta de Colega Cards ya no pide la verificación de Cloudflare, igual que la activación de tarjetas desde v1.9.1; la cuidan el límite de registros por IP y la confirmación del correo. El registro de restaurantes (Colega Menus) y de anfitriones la conservan.
v1.32.113 de octubre de 2026
POS para tablet y celular
Corregido
- El POS se veía diminuto en tablets, con una franja blanca abajo. Con muchas categorías, la fila de categorías estiraba la columna de productos más allá de la pantalla y Chrome alejaba toda la página para que cupiera. Ahora la fila se desliza dentro de su espacio y nada del POS puede ser más ancho que la pantalla, así que ocupa todo el alto y el ancho.
Cambiado
- POS cómodo para el dedo: pestañas, categorías, buscador y botones más altos (48 px o más); "Cobrar y enviar" más grande; nombres y precios de producto más grandes en tablet. La cuadrícula se acomoda sola al ancho (2 columnas en celular, 4 o más en tablet).
- En celular el encabezado ocupa dos renglones: las pestañas muestran el ícono arriba y el texto abajo, y "Bloquear" queda como ícono.
v1.32.013 de octubre de 2026
Etapa 42: Historial de tu sistema anterior
Agregado
- Finanzas → Historial (dueño y gerentes de sus sucursales): importar las ventas y los gastos de antes de Colega Menus para que el Asesor de negocios tenga contexto desde el primer día. Se guardan aparte: no cuentan en Ventas, cortes, Clientes ni en el estado de resultados.
- Importar archivo (Excel .xlsx o CSV, de cualquier punto de venta o Excel propio): el archivo se lee en el navegador y nunca se sube. La IA ve solo una muestra (unos 40 renglones, sin correos ni teléfonos) y propone el mapa: qué tipo de reporte es (por ticket, por producto o por día; o de gastos), el renglón de encabezados, la columna de fecha y su formato, el total, los tickets, la sucursal, el estado y qué valores son cancelados, si trae IVA y el sistema de origen. El dueño revisa y corrige en pantalla con un resumen para confirmar (periodo, ventas, tickets y los últimos 12 meses); las sumas las hace el sistema, no la IA. Se guardan solo totales por día (ventas) o por mes y categoría (gastos).
- Sin IA (no configurada, sin saldo o si falla) el sistema propone un mapa por los nombres de las columnas y clasifica los gastos por palabras clave; el dueño siempre lo revisa.
- Gastos: la IA sugiere la categoría de cada concepto (las mismas de Finanzas → Gastos) y el dueño la cambia si hace falta.
- Varias sucursales en un archivo: cada valor de la columna de sucursal se liga a una sucursal (o "No importar").
- Capturar por mes: ventas, tickets y gastos de los últimos 12 meses para quien no puede exportar. Si un mes tiene datos de un archivo, mandan los del archivo.
- Sin contar dos veces: solo se guardan fechas de los últimos 3 años y anteriores a la primera venta en Colega Menus; si ya hay historial de esas fechas, se pide confirmar el reemplazo. Cada importación se puede deshacer y recuperar durante 30 días (la revisión diaria la borra después, si la purga está encendida).
- Asesor de negocios: lee los últimos 24 meses (historial + sistema), la venta promedio por día de la semana y compara contra el mismo mes del año pasado. Diagnóstico inicial: con historial ya se puede pedir un análisis aunque aún no haya ventas en Colega Menus. Cuando no hay análisis, invita a importar el historial.
- La lectura con IA cuenta en la IA general de la sucursal, se registra su costo y tiene un tope de 15 lecturas al día por sucursal.
Detalles técnicos
Migración
0050_stage42_historial: tablashistory_imports,history_salesyhistory_expenses. Solo agrega.
v1.31.213 de octubre de 2026
Términos de los programas de recomendación
Agregado
- Los términos y condiciones del Programa de Anfitriones y de Refiere y gana (publicados en colegastudio.com/terminos-y-condiciones) quedan ligados desde la app: el registro de anfitriones pide aceptar las reglas y los términos, y hay enlace en las reglas de
/anfitriones, en el panel del anfitrión y en Panel → Refiere y gana. Usa la dirección de términos de Ajustes globales si está configurada. Sin migración.
v1.31.113 de octubre de 2026
Menú lateral más compacto y títulos en Mona Sans
Cambiado
- Restaurante y sucursal en una sola fila: el nombre del restaurante y, debajo, la sucursal con su ícono. Un toque abre una sola lista con tus restaurantes y las sucursales del restaurante activo, con "Nuevo restaurante" y "Nueva sucursal" (dueño o copropietario) y su explicación.
- Prueba gratis plegable: plegada solo muestra "Prueba gratis · 30 días" con su barra (14 días, o 30 si lo recomendó otro restaurante). Al abrirla se ven la fecha de fin, el texto, la videollamada gratis y "Activar mi plan". Los últimos 3 días aparece abierta y en color de aviso.
- Con esto las secciones del menú lateral (Operación, Finanzas, Tu menú…) vuelven a tener espacio en pantallas bajas y en el menú del celular.
- Títulos en Mona Sans, la tipografía de colegastudio.com: títulos de páginas, tarjetas, ventanas y paneles laterales en el panel del restaurante, el admin, el acceso, Colega Cards (go.colegastudio.com) y Anfitriones. Los textos siguen en Inter. El menú público y la tienda de cada restaurante conservan su propia tipografía.
v1.31.013 de octubre de 2026
Etapa 41: Refiere y gana
Agregado
- Panel → Refiere y gana (dueño y copropietarios): cada Cuenta tiene su código (se crea solo a partir del nombre y se puede cambiar mientras nadie lo use), su enlace
/r/{código}, QR y botón para compartir por WhatsApp; cuántos restaurantes recomendó, meses gratis ganados y cuánto se ha ahorrado; la lista de sus recomendados (en prueba, ya pagó o aún no paga). Desde ahí también se llega al Programa de Anfitriones. - El recomendado prueba 30 días gratis (en lugar de 14). "Crear cuenta" lo anuncia ("Te recomendó…") cuando llega por el enlace de un restaurante, y el campo ahora se llama "Código de quien te recomendó".
- Quien recomienda gana un mes gratis cuando el recomendado paga su primer mes: $499 (un mes de una sucursal) de saldo a favor en Stripe, que se descuenta solo de su siguiente cobro, sin límite. Se gana una sola vez por recomendado, dentro del webhook (nunca con prorrateos ni cobros en $0). Si quien recomienda aún no tiene cliente de Stripe, el saldo se crea al iniciar su pago. Correos: "se registró con tu código" y "¡Ganaste un mes gratis!".
- Admin → Cuenta → Recomendación: quién la recomendó (anfitrión o restaurante), su código y a quiénes recomendó con el estado de cada mes.
- Los códigos de anfitrión y de restaurante comparten espacio: nunca se repiten.
Detalles técnicos
Migración
0049_stage41_refiere_y_gana: tablaaccount_referralsy columnaclient_accounts.referral_code. Solo agrega.
v1.30.013 de octubre de 2026
Etapa 40: Programa de Anfitriones
Agregado
- Página pública
/anfitriones: qué es el programa, cómo funciona, calculadora de ganancias (restaurantes al mes, sucursales promedio y meses: muestra lo que ganaría al mes 12, en el primer año y al mes 24 con las reglas reales), para quién es, reglas del programa y preguntas frecuentes. Misma identidad que la página de ventas. - Registro de anfitriones en dos pasos: crear la cuenta (
/anfitriones/registro, correo y contraseña; no se envía a GoHighLevel ni a Meta) y, con el correo confirmado, elegir su código (3 a 10 mayúsculas y números, se revisa en vivo que esté libre) y aceptar las reglas. Un dueño de restaurante también puede ser anfitrión con su misma cuenta (menú "Recomienda y gana" de su panel), pero no puede referir su propio restaurante. - Enlace del anfitrión
/r/{código}: recuerda el código 60 días y lleva a la página de ventas. Crear cuenta trae el campo "Código de anfitrión (opcional)", lleno solo si llegó por un enlace; un código que no existe se avisa antes de crear la cuenta. Al crear su restaurante, la Cuenta queda ligada al anfitrión para siempre y el anfitrión recibe un correo. - Comisiones automáticas: con cada cobro de la mensualidad en Stripe (alta y renovaciones; nunca prorrateos ni cobros en $0), una comisión por sucursal cobrada: $199 los primeros 12 meses pagados de cada sucursal y $99 después, mientras el restaurante pague. Se forman en la misma transacción del webhook, una sola vez por factura y sucursal, y se pueden pagar 30 días después. Un anfitrión suspendido deja de generar comisiones. Primer pago del referido → correo al anfitrión.
- Panel del anfitrión (
/anfitrion): Inicio (enlace, código, QR descargable, compartir por WhatsApp y sus números), Referidos (nombre del negocio, estado y lo ganado; nunca sus ventas), Ganancias (este mes, en espera, por cobrar, pagado, pagos y cada comisión), Recursos y Mis datos (RFC, régimen, banco y CLABE cifrada, validada con su dígito de control). - Admin → Anfitriones: solicitudes y anfitriones con sus números; detalle con aprobar, rechazar (con nota), suspender, reactivar y cambiar código; referidos, comisiones (cancelar con motivo) y pagos. Pagos: lo disponible por anfitrión, preparar pago, descargar CSV para el banco (con la CLABE completa, queda en la bitácora), marcar pagado con la referencia del SPEI (correo al anfitrión) o cancelar. Recursos: subir videos (MP4), PDF e imágenes a Vercel Blob o agregar enlaces, con orden y visibilidad. Notificación en la campana por cada solicitud nueva.
- Admin → Cuenta: tarjeta "Anfitrión" para asignarlo o quitarlo a mano mientras la Cuenta no tenga comisiones (queda en la bitácora).
Detalles técnicos
Migración
0048_stage40_anfitriones: tablasambassadors,ambassador_referrals,ambassador_commissions,ambassador_payoutsyambassador_resources; columnausers.referral_code; categoríaambassadoren las notificaciones del equipo. Solo agrega; no cambia datos existentes.
v1.29.113 de octubre de 2026
Video "Conecta tu caja"
Agregado
- Video "Conecta tu caja" (27 s, vertical, con capturas reales de KRISPIS): cómo convertir una tablet o un celular en caja con el código y su QR, aprobarlo desde el celular y entrar con nombre y PIN. Aparece como ventana de Conoce tu panel al entrar a Agregar dispositivo (misma regla del 80% o "No volver a mostrar"), en su botón "¿Cómo funciona?" y en Academia.
- Nueva sección de Academia
devices(Admin → Academia la muestra como "Conecta tu caja"). Sin migración.
v1.29.013 de octubre de 2026
Etapa 39: vincular cajas sin contraseñas
Cambiado
- Agregar una caja ya no pide entrar al panel en la tablet. El dispositivo abre
/posy muestra un código de 6 caracteres con su QR (vence en 10 minutos). El dueño, un copropietario o un gerente lo aprueba desde su celular (escaneando el QR o en Equipo → Agregar dispositivo), elige sucursal y nombre, y la tablet se abre sola en "¿Quién va a usar la caja?". Las cajas ya activadas siguen igual. - Seguridad: el secreto queda solo en la cookie del dispositivo (en la base, huellas sha256 del secreto y del código); el código no da acceso si alguien lo copia, se usa una sola vez y tiene límites (30 códigos por hora por red, 10 códigos equivocados en 15 minutos por usuario). Un super admin "viendo como" no puede aprobar. Si se aprueba desde el mismo navegador, se cierra ahí la sesión del panel. Queda en Actividad.
- Pedidos → Punto de venta: si este navegador ya es caja de la sucursal, abre el POS; si no, abre una guía con los pasos, un QR que abre
/posen la tablet, "Ya tengo el código" y "Usar este equipo como caja". - Al aprobar, el siguiente paso: agregar al personal con nombre y PIN si la sucursal aún no tiene.
Detalles técnicos
Migración
0047_stage39_vincular_pos: tablaspos_pairings(solicitudes de vinculación) ypos_pairing_failures(límite de intentos).
v1.28.013 de octubre de 2026
Etapa 38: Propinas por persona
Agregado
- Propina al cobrar en el POS: en el cobro de un pedido nuevo, en la comandera y en la cuenta de una mesa: sin propina, 10%, 15%, 20% u otra cantidad, con cómo la dejó (efectivo, tarjeta, transferencia u otro) y para quién (de entrada, quien tomó el pedido o abrió la mesa; se puede cambiar o dejar sin asignar). En efectivo, el cambio se calcula con la propina incluida.
- La propina no es venta: no cambia el total del pedido ni cuenta en Ventas ni en el estado de resultados. En la cuenta de una mesa se registra una sola vez aunque el cobro cubra varias rondas.
- Corte de caja: la propina en efectivo entra al efectivo esperado, y el resumen del turno muestra cuánto recibió cada persona (y cuánto en efectivo, para entregárselo).
- Finanzas → Propinas (dueño y gerentes de sus sucursales): por persona y periodo, con efectivo, tarjeta y otros, número de cobros y total; aparte, las que dejan los clientes en la Tienda en línea.
Detalles técnicos
Base de datos
- Migración
0046_stage38_propinas: tablatips(pedido, cuenta de mesa, método, monto, quién la recibe, quién la cobró y turno de caja).
v1.27.013 de octubre de 2026
Etapa 36: Colega Cards para negocios en autoservicio
Agregado
- Tarjeta nueva = elección: al escanear una tarjeta lista se elige qué abre: reseñas de Google o enlace personalizado (gratis), o el sistema de satisfacción ($199/mes). Se activa con una cuenta de Colega Cards, y la pantalla dice dónde entrar para cambiarla o agregar más tarjetas. Los restaurantes con Colega Menus siguen pudiendo vincularla a su menú.
- Cuenta de Colega Cards en
go.colegastudio.com/signupy/signin(correo y contraseña, con confirmación del correo con el logo de Colega Cards). Estos registros no se envían a GoHighLevel ni a Meta como prospectos de Colega Menus. Quien entra pormenus.colegastudio.com/loginsin restaurante llega a su panel de Colega Cards. - Panel del negocio (
go.colegastudio.com/panel): Inicio (estado del sistema y tarjetas), Tarjetas (cambiar qué abre cada una, agregar por código, probar el formulario sin que cuente), Satisfacción (WhatsApp de aviso, preguntas, logo, colores, su negocio en Google y la suscripción con Stripe) y Opiniones (números de 30 días y bandeja para atender las de 1 a 3 estrellas). - Formulario de satisfacción propio de cada negocio, con su logo y sus colores: 1–3 estrellas → preguntas, comentario y contacto (aviso por correo al dueño); 4–5 → invitación a su reseña de Google. Reemplaza armar formularios en GoHighLevel.
- Cortesía: en Admin → Cuentas › Colega Cards (también en la nueva pestaña Negocios de Colega Cards) el equipo da días sin pago a un negocio. Por defecto no hay prueba gratis. Si se suscribe durante la cortesía, el primer cobro es al terminarla.
- Un negocio que el equipo dio de alta con un correo pasa a la cuenta que se cree con ese mismo correo (ya confirmado).
Cambiado
- Las tarjetas que genera un pedido de la tienda son de Enlace libre (un solo inventario): el cliente elige al activarla.
- Se quitan el reclamo de tarjetas sin cuenta y el alta de Colega Cards de la Etapa 22 (los negocios que ya existían siguen funcionando igual).
Detalles técnicos
Pendiente
- Avisos por WhatsApp desde el número de Colega Studio cuando Meta apruebe la aplicación (mientras, los avisos llegan por correo).
Base de datos
- Migración
0045_stage36_colega_cards_negocios: tablacard_opinions;card_subscriptionscon dueño, colores, lugar de Google, cortesía y configuración propia;users.signup_product; las tarjetas gratis también pueden ser de un negocio.
v1.26.213 de octubre de 2026
WhatsApp: Próximamente
Cambiado
- La sección WhatsApp ya se ve en el menú lateral de los dueños con la etiqueta Próximamente mientras Meta aprueba la conexión. La página explica lo que hará conectar el WhatsApp Business del restaurante (avisos del pedido, alertas de opiniones negativas, Mis pedidos con código por WhatsApp y el mismo número con sus chats), qué se necesitará para conectarlo y que Meta cobra cada aviso. Al abrir la conexión (
WHATSAPP_SIGNUP_OPEN) la etiqueta desaparece y aparece el botón para conectar.
v1.26.113 de octubre de 2026
Conoce tu panel: los 25 videos
Agregado
- Los 25 videos de Conoce tu panel (Menús, Pedidos, Ventas, Tienda, Mesas, Repartidores, Clientes, Cupones, Modificadores, Etiquetas, Personalización, Banners, Reseñas, Asistente, Sucursales, Suscripción, Equipo, Estado de resultados, Gastos, Costos, Satisfacción y reseñas, Opiniones, WhatsApp, Tarjetas y Actividad): verticales, 15 a 26 s, con pantallas reales de KRISPIS, voz y efectos de ElevenLabs y música original.
npm run academia:production -- "<carpeta>": sube los videos y sus portadas a Vercel Blob y los registra en producción (uno por sección, con su entrada en la bitácora). Se salta las secciones que ya tienen video; WhatsApp queda en borrador hasta que Meta apruebe la conexión.
v1.26.013 de octubre de 2026
Etapa 37: Conoce tu panel (videos por sección)
Agregado
- Conoce tu panel: un video vertical corto por sección del panel. La primera vez que cada usuario del equipo entra a una sección se abre en una ventana con la nota "Puedes volver a verlo cuando quieras en Academia". Vuelve a salir cada vez que regresa a esa sección hasta que vea el 80 % (solo cuenta lo que de verdad se reprodujo, no los adelantos) o elija No volver a mostrar. No sale encima del recorrido de bienvenida ni a un super admin "viendo como".
- Academia acepta videos propios además de YouTube: Admin → Academia → "Archivo de video" sube un MP4 (hasta 200 MB) directo a Vercel Blob, lee su duración y orientación y toma la portada del video. Nueva categoría Conoce tu panel, con tarjetas verticales. Al completar un video también queda "Visto".
- Piloto de videos: Menús, Pedidos y Ventas (motion graphics con pantallas reales de KRISPIS, voz y efectos de ElevenLabs, música original).
- Más secciones para ligar videos: Pedidos, Tienda, Mesas, Repartidores, Ventas, Clientes, Cupones, Finanzas (estado, gastos y costos), Modificadores, Asistente, Opiniones, WhatsApp, Tarjetas, Equipo y Actividad.
Cambiado
- "Academy" ahora se llama Academia en el panel y en el super admin.
Detalles técnicos
Migración
0044_stage37_academia_secciones: categoríasections,academy_videosconvideo_url,poster_url,duration_seconds,vertical(YouTube o archivo, uno de los dos) y la tablaacademy_video_progress(avance por usuario).
v1.25.013 de octubre de 2026
Etapa 35: Tienda de Colega Cards
Agregado
- Admin → Colega Cards → Tienda: productos con nombre, descripción, viñetas, fotos (hasta 4), medida, tarjetas que trae, precio con IVA, para quién se venden (negocios, restaurantes o ambos), interruptor a la venta / pausado, existencias opcionales que bajan solas con cada venta, y orden. Todo queda en la bitácora.
- Envío en la misma pestaña: gratis siempre, o con costo fijo por pedido y gratis a partir de un monto; texto con el tiempo de entrega. Aplica a la tienda y al panel de los restaurantes.
- Tienda pública en go.colegastudio.com/tienda: catálogo, carrito guardado en el celular, datos de envío y pago único con el Stripe de Colega Studio. Precios, existencias y envío se recalculan en el servidor. Límite de 10 pedidos por conexión por hora.
- Página del pedido (go.colegastudio.com/tienda/pedido/…): estado (pagado, en producción, enviado, entregado), productos, envío y guía; "Pagar ahora" si quedó pendiente. Correos con el logo de Colega Cards al pagar y al enviar.
- Admin → Colega Cards → Pedidos: un solo tablero para pedidos de la tienda y de los restaurantes, con folio (CC-…), origen, productos y comprador. Al pasar un pedido de la tienda a producción se generan sus tarjetas de Colega Cards, listas para activarse al escanearlas.
- Catálogo en JSON (
/api/card-shop/products) para que colegastudio.com/colega-cards muestre los productos, precios y disponibilidad. - Panel → Tarjetas: explicación en 3 pasos (comprar, recibir, configurar) y la tienda con los productos del catálogo, cantidad y envío. Cada tarjeta puede abrir el menú, una mesa o el flujo de satisfacción de la sucursal (nuevo), desde el panel o al escanearla con la sesión iniciada.
Cambiado
- Se quita la pestaña Activaciones: la satisfacción la configura cada restaurante y el equipo ya no recibe esas solicitudes. Las 6 solicitudes que no se habían activado quedan archivadas.
- Colega Cards del restaurante: aclara que el servicio queda activo al conectar el WhatsApp del restaurante (igual que los avisos a clientes); la compra de tarjetas pasa a Tarjetas. Se quita el pedido de "Tarjeta Colega Cards NFC" por pieza.
Detalles técnicos
Base de datos
- Migración
0043_stage35_tienda_colega_cards: tablascard_productsycard_order_items;card_ordersadmite pedidos de la tienda (sin Cuenta, con correo, subtotal, enlace del pedido y huella de la conexión);smart_links.branch_target(menú o satisfacción). Carga los 2 paquetes de la Etapa 27 al catálogo y archiva las solicitudes sin activar.
v1.24.012 de octubre de 2026
Mesa abierta
Agregado
- Mesa abierta: el QR de una mesa solo acepta pedidos cuando el personal ya abrió la mesa. Un QR guardado o fotografiado ya no sirve para pedir desde fuera del restaurante. Al cobrar la cuenta, la mesa se cierra sola y su QR deja de aceptar pedidos hasta que la vuelvan a abrir.
- POS → Mesas: las mesas libres dicen "Toca para abrir". Al tocarla: Abrir mesa (desde ahí piden con el QR) o Tomar el pedido yo (pasa a Nuevo pedido con "Comer aquí" y esa mesa). Un pedido del POS para "Comer aquí" en una mesa la abre solo.
- En la cuenta de una mesa abierta, Agregar pedido; si no tiene pedidos, un aviso sugiere liberarla para que su QR deje de aceptar pedidos.
- Panel → Mesas: interruptor "Solo mesas abiertas por el personal", encendido de fábrica (también en las sucursales que ya usaban pedidos desde la mesa). Se puede apagar en lugares donde nadie atiende las mesas.
- El comensal con la mesa sin abrir ve el menú y el aviso "Pide a tu mesero que abra Mesa 4"; puede armar su pedido y enviarlo en cuanto la abran (la página se revisa sola cada 8 segundos).
Detalles técnicos
Base de datos
- Migración
0042_stage26_1_mesa_abierta:store_settings.table_requires_open(de fábricatrue) ytable_tabs.opened_by_staff_id(quién abrió la mesa en el POS).
v1.23.412 de octubre de 2026
Logo de Colega Cards
Cambiado
- Las pantallas de las tarjetas (activar una tarjeta, contratar Colega Cards para negocios, pagar, tarjeta en preparación, pausada o sin activar) muestran el logo de Colega Cards en lugar del de Colega Menus.
- Los correos de Colega Cards para negocios (enlace de pago, bienvenida, pago recibido, cobro fallido, suscripción terminada y administrar suscripción) también llevan el logo de Colega Cards. El logo vive en
public/brand/colega-cards-logo.png.
v1.23.312 de octubre de 2026
Crear cuenta con la prueba gratis
Cambiado
- Crear tu cuenta ya no dice "Pagas hasta que estés listo para publicarlo": ahora invita a probar Colega Menus 14 días GRATIS, con todas las funciones y sin tarjeta. Los días salen de la prueba vigente (si hay un periodo de promoción en Ajustes globales, muestra sus días).
v1.23.212 de octubre de 2026
Video de ventas en la página
Agregado
- Video "Tu restaurante, en piloto automático" (4:12) en la página de ventas, justo debajo del inicio (
/#video): los dolores del dueño y cómo los resuelve cada función conectada, con la UI real. Portada propia, botón de play grande, subtítulos en español y controles nativos. - El video, la portada y los subtítulos viven en Vercel Blob (
landing/vsl/v1/) y el video solo se descarga cuando alguien da play (preload="none"), sin mover el resto de la página (proporción 16:9 reservada).
v1.23.112 de octubre de 2026
Prueba gratis de 14 días
Cambiado
- Toda Cuenta nueva empieza con 14 días de prueba gratis con todas las funciones y el menú público (antes quedaba "por pagar" salvo que hubiera un periodo de cortesía en Ajustes globales; ese periodo sigue sirviendo para promociones con otros días).
- Aviso de la barra lateral durante la prueba: cuenta regresiva de días con barra, invitación a configurar el restaurante cuanto antes con Primeros pasos y a agendar una videollamada GRATIS con alguien de Colega. En los últimos 3 días invita a activar el plan. Se quita "Tu menú aún no es público".
- Las Cuentas anteriores que quedaron "por pagar" sin haber tenido prueba ven "Comenzar mi prueba gratis" y empiezan sus 14 días (una sola vez, solo el dueño).
v1.23.012 de octubre de 2026
Etapa 32.1: Mis pedidos
Agregado
- Mis pedidos (
…/{slug}/mis-pedidos), con enlace desde la Tienda y la página del pedido. Sin entrar, muestra los pedidos hechos desde ese celular en cualquier sucursal del restaurante, con su ticket y Volver a pedir (los productos regresan al carrito; precios y disponibilidad se revisan al cotizar). - Entrar con WhatsApp: si el restaurante tiene WhatsApp conectado, el cliente recibe un código de 6 dígitos desde el número del restaurante (10 minutos, 5 intentos, límite por teléfono y por conexión) y ve todos sus pedidos del restaurante desde cualquier celular, cambia su nombre y borra sus direcciones guardadas. Sesión de 30 días por restaurante (cookie httpOnly; en la base solo la huella).
- El celular guarda un historial de hasta 30 pedidos de los últimos 6 meses para "Mis pedidos".
v1.22.112 de octubre de 2026
Página de ventas: el ecosistema completo
Cambiado
- Página de ventas (
/) deja de enfocarse solo en el menú digital: ahora presenta el sistema completo para restaurantes que ya no se dan abasto (punto de venta, comandera, tienda en línea propia, repartidores, finanzas, asesor con IA y menú digital). CTA: "Pruébalo GRATIS por 14 días". - Nuevo hero con una sola figura que se transforma (caja → cocina → reparto → números) y un cursor que toca cada acción, con resortes al estilo de motion-broll.
- Demo en vivo guiada (19 pasos): pedido por teléfono en el POS, comandera (aceptar con tiempo, listo, asignar repartidor), celular del repartidor (salir, entregar y cobrar con cambio), corte de caja con el efectivo del repartidor y panel (ventas, estado de resultados y pregunta al asesor). Barra de instrucciones fija, cursor guía, "Reproducir solo" y "Hazlo por mí". Restaurante y cifras de ejemplo.
- Secciones nuevas con tarjetas animadas: Tienda en línea propia (con calculadora de comisiones de las apps de reparto), Operación y administración e Inteligencia artificial. El menú digital queda como una sección más del ecosistema.
- Preguntas frecuentes y precio actualizados al plan todo incluido.
v1.22.012 de octubre de 2026
Etapa 34: Domicilio y repartidores
Agregado
- Panel → Repartidores (dueño y copropietarios en todas las sucursales; gerentes solo en las suyas): alta con nombre, WhatsApp y sucursales, sin límite. Se les manda por WhatsApp un enlace de activación (7 días, una sola vez); "Nuevo enlace" desactiva el celular anterior.
- Vista del repartidor en
/repartidor, hecha para celular: crea su PIN al activar, entra con su PIN (5 intentos = 5 minutos de bloqueo) y ve solo los pedidos que le asigna la cocina: dirección con mapa, llamar o WhatsApp al cliente, productos, cuánto cobrar y con cuánto paga. Salir a entregar (el cliente recibe "va en camino"), Entregado (registra el efectivo con su cambio) o No entregado con motivo (regresa a "Listo" en la comandera). Al entregar o cancelar deja de ver la dirección y el teléfono. - Comandera y POS: "Asignar" o "Cambiar" repartidor en los pedidos a domicilio.
- POS: en domicilio, "Paga con" para que el repartidor lleve cambio.
- Corte de caja: efectivo que trae cada repartidor y "Entregó el efectivo", que lo suma al efectivo esperado del turno.
- Domicilio en la Tienda en línea (Tienda → Domicilio): hasta 4 zonas por distancia en línea recta desde la sucursal con su costo y pedido mínimo, envío gratis desde un monto y efectivo al recibir por sucursal. La sucursal se ubica con su dirección de Google.
- El cliente elige Recoger o A domicilio, escribe su dirección con sugerencias de Google, interior y referencias; el servidor calcula la distancia y el envío (regla 14). Fuera de zona: "Aún no llegamos a tu zona. ¿Quieres recogerlo?". Paga en línea o en efectivo al recibir indicando con cuánto paga. La dirección se guarda en sus direcciones.
- La página del pedido muestra la entrega a domicilio y el paso "En camino"; el ticket incluye el envío. "Mejor pago al recibir" si el pago en línea no sale.
- Variable nueva:
GOOGLE_MAPS_SERVER_KEY(Geocoding y Places API New, solo servidor).
v1.21.011 de octubre de 2026
Etapa 32: WhatsApp por restaurante y ticket digital
Agregado
- Panel → WhatsApp (dueño o copropietario): el restaurante conecta su propio WhatsApp Business en coexistencia con el registro insertado de Meta (sigue usando su app y sus chats). El permiso de Meta se guarda cifrado; se puede desconectar o volver a conectar.
- Plantillas automáticas en la cuenta del restaurante (es_MX): pedido recibido, listo, en camino y cancelado (con botón "Ver mi ticket"), alerta de opinión negativa y código de acceso (para la Etapa 32.1). El panel muestra el estado de cada una y "Revisar plantillas".
- Avisos por WhatsApp desde el número del restaurante: recibido (al llegar a cocina; con pago en línea, al aprobarse), listo, en camino y cancelado (también la cancelación automática). Cada aviso sale una sola vez, en segundo plano para no frenar la comandera, y se descarta si el pedido ya cambió de estado o pasaron 2 horas. Meta cobra cada aviso directo a la cuenta del restaurante.
- Alertas de opiniones negativas por WhatsApp a los WhatsApp de alerta de la sucursal, además del correo.
- Ticket digital con aspecto de ticket impreso en la página del pedido: datos de la sucursal, folio, fecha, productos, totales, pagado o por pagar y código de barras decorativo. Ahora también para los pedidos del POS.
- Folio del cliente (p. ej.
K7M-4QX), sacado del código aleatorio del pedido: el cliente ya no ve el número del día (#12), que queda solo para la comandera; la comandera muestra ambos. - Webhook de Meta (
/api/webhooks/whatsapp) con firma verificada e idempotente: estados de mensajes (entregado, leído, falló) y de plantillas. - Variables nuevas (opcionales):
META_APP_ID,WHATSAPP_CONFIG_ID,WHATSAPP_APP_SECRETyWHATSAPP_VERIFY_TOKEN. - Conectar WhatsApp queda cerrado para los restaurantes (no aparece en el menú) hasta que Meta apruebe a Colega Studio como proveedor de tecnología: se abre con
WHATSAPP_SIGNUP_OPEN=true. El ticket digital, el folio, los detalles del pedido y el POS compacto ya funcionan. - Pedidos → Detalles: cada pedido de la comandera abre su detalle completo (cliente con llamar y WhatsApp, productos con precio, envío, propina, cobrado y por cobrar) y su ticket digital: abrirlo en otra ventana, enviarlo al cliente por WhatsApp o copiar el enlace.
- En el ticket: Compartir (menú del celular o WhatsApp) y Descargar PDF.
Cambiado
- POS: canal y entrega pasan a dos selectores en una sola fila, con el ícono de lo elegido, para ahorrar espacio en tabletas pequeñas.
v1.20.111 de octubre de 2026
WhatsApp de prueba para la revisión de Meta
Agregado
- Admin → WhatsApp (prueba): con el número de prueba de la app de Colega Studio en Meta se envía un mensaje (plantilla o texto) y se crea una plantilla, y se ve la lista de plantillas con su estado. Sirve para grabar los dos videos de la revisión de la app (permisos
whatsapp_business_messagingywhatsapp_business_management). Queda en la bitácora. - Variables nuevas (opcionales):
WHATSAPP_TOKEN,WHATSAPP_PHONE_NUMBER_ID,WHATSAPP_BUSINESS_ACCOUNT_IDyWHATSAPP_GRAPH_VERSION(v25.0 por omisión).
v1.20.011 de octubre de 2026
Etapa 31: Importar contactos
Agregado
- Clientes → Importar contactos (dueño o copropietario): Excel (.xlsx) o CSV, hasta 5,000 por archivo. El archivo se lee en el navegador; detecta solas las columnas de nombre y teléfono (y se pueden cambiar), muestra una vista previa con lo que se importa y lo que se omite, y ofrece una plantilla.
- Los teléfonos de México se guardan en 10 dígitos (sin +52 ni el 1 de celular) para empatar con los clientes que ya pidieron: no se duplica a nadie; a los que ya existían solo se les completa el nombre, y quien pidió su baja no se vuelve a agregar.
- Promociones solo con permiso: se marcan únicamente si el dueño confirma que esas personas le dieron permiso (requisito para las campañas de WhatsApp).
- Filtro Importados en Clientes.
v1.19.011 de octubre de 2026
Etapa 30: Opiniones
Agregado
- Nuevo flujo de opiniones en el enlace de reseñas (
…/{slug}/resena), con el logo y el color del menú del restaurante: el cliente califica con 1 a 5 estrellas grandes (con animación; avanza solo). 1 a 3 → las preguntas del negocio, una a la vez con 5 caritas, barra de avance y "Saltar", luego "Cuéntanos más" y nombre/teléfono opcionales; agradecimiento discreto y nunca se muestra Google. 4 y 5 → agradecimiento y botón grande "Déjanos tu reseña en Google" (reseña directa del lugar de Google de la sucursal). - Opiniones en el panel (dueño y gerentes de sus sucursales): calificación promedio, negativas por atender, positivas y cuántas fueron a Google, estrellas por nivel y la lista con respuestas, comentario y contacto. Botón para escribirle al cliente por WhatsApp y "Marcar como atendida" con nota. Número de negativas pendientes en el menú lateral.
- Alerta por correo al dueño con cada opinión negativa (por el WhatsApp del restaurante desde la Etapa 32). Límite de opiniones por conexión y "Probar enlace" que no cuenta ni avisa.
Cambiado
- Satisfacción y reseñas (Colega Cards) se activa al instante al guardar preguntas y WhatsApp de alerta: ya no espera al equipo ni usa el formulario de GHL. El equipo puede seguir pausándolo desde el admin. Colega Cards para negocios ($199) no cambia.
v1.18.011 de octubre de 2026
Etapa 29: Asesor de negocios con IA
Agregado
- Tu asesor de negocios en Finanzas → Estado de resultados: con los números de la sucursal (semana contra la anterior, mes en curso, punto de equilibrio, gastos, productos, mejores días y horas) da un resumen, hasta 3 alertas y 3 consejos según el tipo de negocio, que la IA deduce del menú.
- Resumen semanal automático (lo prepara la revisión diaria; uno por semana y sucursal con ventas) y botón "Actualizar análisis" una vez al día.
- Correo del lunes al dueño con el resumen, con opción de apagarlo.
- Preguntas libres ("¿qué platillo me deja más?", "¿qué hago en mis días flojos?") con sugerencias, respondidas con sus números (20 al día por sucursal).
- Usa la IA general de la sucursal (si se acaba: Más IA) y registra su costo. Lo ven el dueño y los gerentes de sus sucursales.
v1.17.011 de octubre de 2026
Etapa 28: Finanzas
Agregado
- Finanzas en el menú lateral (dueño, copropietarios y gerentes de sus sucursales).
- Costos (food cost): costo de cada producto y de cada opción de precio, con lo que te deja y el % de food cost (arriba de 35% se marca). Cada venta guarda el costo de ese momento.
- Gastos: registrar, editar y quitar gastos por categoría (insumos, renta, nómina, servicios, gas, publicidad, comisiones de apps, mantenimiento, otros), con fecha y foto del comprobante. Gastos fijos que se registran solos cada mes el día elegido.
- Salida de caja en el POS (Caja → Salida de caja): monto, motivo y tipo; más de $500 la autoriza un encargado. Se descuenta del efectivo esperado del corte y aparece en Gastos.
- Estado de resultados: ventas (sin propinas y menos reembolsos) − costo de lo vendido − gastos = utilidad, por periodo y por sucursal o consolidado, comparado con el periodo anterior. Indicadores (ticket promedio, food cost, margen), punto de equilibrio del mes ("te faltan $X para cubrir tus gastos fijos"), mejores días y horas, lo que más te deja y productos con food cost alto. CSV para el contador (dueño). Montos con IVA.
v1.16.011 de octubre de 2026
Etapa 27: Paquetes de tarjetas
Agregado
- Comprar tarjetas (Panel → Tarjetas): dos paquetes con NFC y QR, IVA y envío incluidos: 4 tarjetas de 10 × 15 cm con base de acrílico por $799 y 10 tarjetas tipo credencial por $499. Compra paso a paso: cómo se usarán (mismo código para todas o códigos distintos, con la mesa de cada tarjeta opcional), dirección de envío (con la de la sucursal ya llenada) y pago único con Stripe. Se aclara que llevan el logo y los colores del diseño del menú. Lista de pedidos con su estado, "Completar pago" y rastreo. Compra el dueño o un copropietario.
- Admin → Colega Cards → Tarjetas: los paquetes aparecen junto a los pedidos de tarjetas, con su plan (mismo código o una mesa por tarjeta). Al pasar a En producción se genera su lote de Enlaces ya activo y ligado al menú de la sucursal y a cada mesa, con la lista código → mesa y el enlace al lote para imprimir y grabar.
- Al marcar un pedido de tarjetas como Enviado, el dueño recibe un correo con la paquetería y el rastreo (también los de Colega Cards).
v1.15.011 de octubre de 2026
Etapa 26: Mesas
Agregado
- Mesas por sucursal (Panel → Mesas): se agregan varias de una vez ("Mesa" × 10 → Mesa 1 a Mesa 10) o una con su nombre ("Terraza 1"), se renombran y se quitan. Cada mesa tiene su QR con un código propio que no cambia aunque se renombre, y una hoja para imprimir todos los QR (6 por hoja).
- Pedidos desde la mesa con interruptor propio, en el horario de la sucursal (aparte de la Tienda en línea). Al escanear el QR, el comensal ve el menú con "Pedir" ligado a su mesa y deja nombre y WhatsApp (queda como Cliente y puede usar cupones). Cada ronda llega "Nueva" a la comandera con "Mesa 4"; la cocina la acepta. Sin pedido mínimo ni propina; se paga al final. La pausa de pedidos aplica también a las mesas. Límite de 10 rondas por hora por conexión.
- Cuenta de mesa: las rondas de una mesa se juntan y en el POS → Mesas se ve cada mesa (libre o con su cuenta, lo que está en cocina y el saldo) y se cobra todo junto (uno o varios métodos; el cobro se reparte entre las rondas y entra al corte de caja). Al quedar pagada, la mesa se libera. En la comandera, entregar una ronda de mesa ya no pide cobrarla.
- El mesero también puede mandar un pedido del POS a una mesa ("Comer aquí" → Mesa).
- Tarjetas a una mesa: al vincular una tarjeta de Enlace libre al menú (panel o al escanearla) se puede elegir la mesa; la tarjeta abre el menú para pedir desde esa mesa.
v1.14.111 de octubre de 2026
Corrección: POS y campana sin complemento
Corregido
- Activar y usar el POS, y el aviso de pedidos sin aceptar en la campana, todavía pedían el antiguo complemento Ventas: una sucursal nueva no podía activar su POS. Ahora toda sucursal activa los tiene, como dice el plan de $499.
v1.14.011 de octubre de 2026
Etapa 25: plan único de $499 y más IA
Cambiado
- Un solo plan: $499 por sucursal activa, parejo (sin escalonado), IVA incluido, con todas las funciones. Se quita el complemento Ventas: Pedidos, Tienda en línea, POS, Clientes, Cupones y Ventas vienen en toda sucursal. "Suscripción y pagos" muestra una sola línea ("3 × $499") y lo que incluye; la página de ventas, el mismo precio.
- Stripe: precio nuevo de $499 por sucursal (
colega-menus-plan-mensual). Una suscripción con el precio anterior pasa al nuevo en su siguiente ajuste, y se quita la partida de Ventas si existiera. - Admin: se quitan el control de complementos de la ficha de la Cuenta y el interruptor "Ventas disponible".
Agregado
- Prueba gratis para Cuentas nuevas (Ajustes globales): fechas "desde" y "hasta" y días de cortesía. Quien se registra dentro del periodo nace en cortesía; al terminar se avisa 3 días antes y la Cuenta queda pendiente de pago, como cualquier cortesía.
- Más IA: aviso en el menú lateral al 80% y al 100% de la IA del mes de la sucursal (con correo al dueño una vez al mes cuando se acaba). El dueño o un copropietario compra paquetes de $50 (cada uno suma $25 de uso, válido hasta fin de mes) con pago único de Stripe. El consumo comprado sirve tanto para traducir, importar y fotos como para el asistente.
- Migración 0031: tablas
ai_creditsyai_budget_alerts. - Pruebas del plan único, la prueba gratis y el presupuesto de IA.
v1.13.010 de octubre de 2026
Más espacio en pantalla, menú plegable y POS más visual
Cambiado
- Sin barra superior en escritorio: el saludo, la fecha y la campana de pedidos pasan al menú lateral, junto al logo. Todo el alto de la pantalla queda para el contenido. En celular se conserva la barra con el menú, el restaurante y la sucursal, y la campana.
- Secciones del menú plegables (Operación, Tu menú, Negocio…): solo una abierta a la vez. Al entrar se abre la de la página actual (o la primera). Una sección cerrada muestra un punto naranja si ahí está la página actual y la suma de pendientes. Aplica también al panel del super admin.
- POS: canal y entrega como botones con ícono grande (mostrador, teléfono, WhatsApp, otro; para llevar, comer aquí, a domicilio). La dirección a domicilio busca con Google Places, como la de la sucursal. Íconos en nombre, teléfono, nota y costo de envío, y en Guardar, Enviar sin cobrar y Cobrar.
- Cobro: cada método con su ícono (efectivo, tarjeta, transferencia).
v1.12.110 de octubre de 2026
Restaurante y sucursal juntos
Cambiado
- Dónde estás trabajando: el restaurante y la sucursal ahora van juntos en una tarjeta arriba del menú lateral (antes la sucursal estaba en el encabezado). Cada uno abre su lista con la opción elegida marcada.
- Al final de cada lista: "Nuevo restaurante" y "Nueva sucursal" (dueño o copropietario), que abren directo el formulario en Sucursales. Cada lista explica en una línea qué es un restaurante (marca o franquicia) y qué es una sucursal (ubicación con su menú, enlace, QR, horario y pedidos).
- Sucursales muestra "Cómo se organiza tu Cuenta" (restaurante → sucursales).
- En celular, el encabezado recuerda el restaurante y la sucursal, y el menú lateral se cierra al tocar cualquier enlace.
- Mercado Pago: se vuelve a la dirección oficial de autorización.
v1.12.010 de octubre de 2026
Etapa 17.2: pagos en línea con Mercado Pago
Agregado
- Cobros en línea (Panel → Tienda en línea): el dueño o un copropietario conecta la cuenta de Mercado Pago del restaurante (OAuth, sin copiar llaves) y, si quiere, otra cuenta solo para una sucursal (T3). Se ve qué cuenta cobra en cada sucursal, si está en modo prueba y se puede desconectar.
- "Pagar en línea" en la Tienda: el cliente paga en Mercado Pago (tarjeta o su cuenta) y regresa a la página de su pedido. El dinero va directo a la cuenta del restaurante, sin comisión de Colega (regla 13). No se aceptan OXXO, cajeros ni transferencias (tardan en confirmarse); el pago se aprueba o rechaza al momento.
- El pedido espera su pago sin número ni comandera; entra a "Nuevos" ya pagado en cuanto Mercado Pago lo aprueba. Si se rechaza, el cliente reintenta o cambia a "pagar al recoger". Si no se paga en una hora se cancela solo (y revive si el pago llega tarde).
- Cada pago se confirma consultándolo a Mercado Pago con la cuenta del restaurante: al volver a la página del pedido y con los avisos (webhook) de firma verificada, procesados una sola vez (regla 15).
- Reembolsos desde Ventas → detalle del pedido (dueño o copropietario): total o parcial, con motivo. Cancelar en el panel un pedido pagado en línea lo reembolsa completo; el POS no lo cancela.
- Los permisos de Mercado Pago se guardan cifrados (AES-256-GCM con
PAYMENT_TOKENS_KEY) y se renuevan solos; si la renovación falla, el pago en línea se apaga y el panel pide reconectar.
Cambiado
- Migración 0030: estado de pedido
awaiting_payment, tablaspayment_accounts,payment_eventsyorder_refunds;orderssumapayment_account_id,provider_preference_idyonline_payment_status;order_paymentssumaprovider_payment_idyrefunded_cents. - Variables nuevas:
MP_CLIENT_ID,MP_CLIENT_SECRET,MP_WEBHOOK_SECRET,PAYMENT_TOKENS_KEY. - 10 pruebas nuevas (con Mercado Pago simulado).
v1.11.09 de octubre de 2026
Etapa 17.1: Tienda en línea para recoger (sin WhatsApp)
Agregado
- Tienda en línea (
menudigital.colegastudio.com/{slug}/pedir): el cliente ve el menú en horario con los colores del restaurante, elige opción de precio, modificadores, nota y cantidad, revisa su carrito (se guarda en su celular), aplica un cupón "En Tienda", deja propina si la sucursal la activó, escribe nombre y teléfono y confirma para recoger y pagar en la sucursal. Lo que no está "Disponible en Tienda" se ve en gris. - El servidor vuelve a revisar precios, modificadores, horario del menú, horario de la sucursal, pausa, pedido mínimo y cupón al confirmar (regla 14). Tocar dos veces "Confirmar" no duplica el pedido.
- Página del pedido en vivo (
…/{slug}/pedido/{código}): número, estado (Recibido → Preparando → Listo → Entregado), hora estimada, detalle, total, cómo llegar, llamar y WhatsApp a la sucursal. Se actualiza sola; el código es aleatorio. - Comandera: los pedidos de la Tienda llegan a "Nuevos" con sonido que se repite cada 8 segundos hasta aceptarlos. Al aceptar se elige el tiempo estimado (10 a 60 min) y el cliente lo ve. Etiquetas "En línea", "Paga al recoger" y "Prueba".
- Cancelación automática si nadie acepta en X minutos (10 por defecto); el cliente ve el motivo.
- Panel → Tienda en línea (sección nueva en Operación): encender, pago al recoger (Mercado Pago aparece como "Próximamente"), tiempo de preparación, último pedido antes de cerrar, cancelación automática, pedido mínimo, propina, nota por producto y aviso de privacidad propio. Enlace, QR, pausar pedidos (30 min, 1 h o resto del día) y guía "Configura tu Tienda" de 5 pasos.
- Pedido de prueba: enlace firmado de 2 horas que funciona con la Tienda apagada o cerrada. Llega a la comandera para practicar, no se cobra y no cuenta en Ventas, Clientes ni usos de cupones.
- Campana de pedidos en el encabezado del panel (P2): pedidos en línea sin aceptar de las sucursales a las que tienes acceso; se pone en rojo a los 2 minutos.
- Menú digital: botón "Pedir" (abajo a la izquierda en Clásico y Lista, en la barra lateral de cada platillo en Feed) cuando la Tienda está encendida.
- Aviso de privacidad automático de la Tienda (
…/{slug}/privacidad) con los datos del restaurante (P4). - Límites mientras no hay WhatsApp (P1): 2 pedidos sin entregar por teléfono y 5 por hora por conexión.
- El cliente queda en Clientes con canal "En línea" y su consentimiento de promociones (opcional).
Cambiado
- Migración 0029: tabla
store_settingsy enorderspublic_code,estimated_ready_at,payment_choice,is_testyplaced_ip_hash. - 12 pruebas nuevas.
v1.10.09 de octubre de 2026
Etapa 24: tarjetas de Enlace libre que llevan al menú
Agregado
- "Mi menú de Colega Menus": al activar una tarjeta de Enlace libre, además de reseñas en Google y enlace personalizado, ahora se puede elegir que abra el menú público de una sucursal. Se toca "Iniciar sesión y vincular", se entra con la cuenta de Colega Menus y se elige restaurante y sucursal (si hay una sola, ya viene elegida). Si el WhatsApp que se escribió coincide con alguien que tiene Colega Menus, la opción se destaca ("Parece que ya tienes Colega Menus"); solo se responde sí o no, nunca se muestran datos.
- Panel → Tarjetas (nueva sección, en Negocio): tarjetas que llevan al menú de las sucursales, con abrir, desvincular (la tarjeta vuelve a quedar lista para activarse) y vincular otra con su código.
- Pueden vincular el dueño, los copropietarios y los gerentes del Equipo (estos, solo a sus sucursales). La Cuenta, el restaurante y la sucursal se verifican en el servidor. Todo queda en la Actividad del restaurante y en el historial del enlace; al equipo le llega una notificación.
- Si la sucursal se pausa o la suscripción deja de pagarse, la tarjeta lleva a la misma página de enlace inactivo que el menú.
- Admin → Enlaces: el destino se ve como "Restaurante · Sucursal" con un ícono de menú; el detalle muestra "Menú de … · …" con su enlace. Cambiar el destino a mano o liberar la tarjeta quita el menú.
/login?next=…regresa a la página del panel a la que se iba (solo rutas/app/…).
Cambiado
- Colega Cards para negocios: un dueño de Colega Menus ya sí puede contratarla para otro negocio (se quita el bloqueo de K3). Se conserva el aviso informativo del asistente. Las tarjetas Colega Cards nunca se vinculan a un menú.
- Migración 0028:
link_kindsumamenu;smart_linkssumarestaurant_id,branch_idylinked_by_user_id. - 9 pruebas nuevas.
v1.9.19 de octubre de 2026
Sin verificación anti-robots en tarjetas y asistente
Cambiado
- Se quitó la verificación de Cloudflare Turnstile ("No pudimos verificar que no eres un robot") de tres lugares donde rechazaba a clientes reales:
- Activar una tarjeta NFC/QR (
/l/{código}). - Darse de alta en Colega Cards para negocios.
- El asistente con IA del menú público.
- Activar una tarjeta NFC/QR (
- Siguen sus otras protecciones: solo se activan tarjetas que el equipo marcó como listas, con límite de 5 por conexión al día y una sola activación por tarjeta. El asistente conserva sus topes de 8 preguntas al día por visitante, 16 por conexión, 60 por sucursal y el tope de gasto mensual.
- Turnstile se queda en el registro de cuentas y en las reseñas de platillos.
v1.9.09 de octubre de 2026
Etapa 23: complemento Ventas ($299) y plan Menús + Reputación
Cambiado
- Un solo complemento, Ventas: $299 al mes por sucursal, IVA incluido, sin descuento por volumen. Reemplaza a Tienda ($399) y Fidelidad ($199). Incluye Tienda en línea, punto de venta, comandera, Clientes, Cupones, informe de Ventas y Fidelidad (cuando llegue su etapa).
- La suscripción base se llama "Menús + Reputación" (menú digital + Colega Cards), con el mismo precio escalonado ($499 / $399 / $299). Se ve en Suscripción y pagos y en Stripe.
- Pedidos, POS, Comandera, Clientes, Cupones y Ventas se desbloquean con Ventas. Los avisos dicen "Viene con Ventas".
- Super admin: la ficha de la Cuenta, Ajustes globales ("Ventas disponible") y Métricas (ingreso de Ventas) usan el complemento único. La cortesía funciona igual.
- Correo "Cambió tu pago mensual": "3 sucursales + Ventas en 1".
npm run stripe:setupcrea el precio "Colega Menus — Ventas" ($299) y renombra el producto base. Variable nueva:STRIPE_PRICE_ID_SALES.STRIPE_PRICE_ID_STOREySTRIPE_PRICE_ID_LOYALTYquedan opcionales: si una suscripción de prueba todavía tiene esas partidas, se quitan al ajustarla.- Panel más limpio: el recuadro de "Primeros pasos" ya no aparece arriba de cada pantalla. Se abre en una ventana desde el acceso del menú lateral (debajo del restaurante). El aviso de suscripción ("Tu menú aún no es público", pago atrasado, etc.) pasa al menú lateral en versión compacta; en celular, los avisos urgentes se ven como una línea arriba del contenido.
- Migración 0027:
addon_kind=sales;billed_store_quantity→billed_sales_quantity; se quitabilled_loyalty_quantity; los ajustes de disponibilidad se unen enaddon_sales_available. La Fase 3 no está en producción, así que no hay clientes que migrar.
v1.8.08 de octubre de 2026
Etapa 22: Colega Cards para negocios
Agregado
- Colega Cards para negocios ($199/mes, IVA incluido, sin periodo de prueba): satisfacción y reseñas para negocios que no son restaurantes ni usan Colega Menus. Es una suscripción propia (
card_subscriptions), separada de las Cuentas, con su propio cliente de Stripe. - Tarjetas tipo "Colega Cards": al generar enlaces ahora se elige el tipo (Enlace libre o Colega Cards).
- Alta al escanear una tarjeta Colega Cards lista (
go.colegastudio.com/{código}), en 3 pasos:- Tus datos: nombre, WhatsApp, correo (para recibos) y aviso de privacidad. Avisa que a los restaurantes Colega Cards les viene incluido en Colega Menus; un correo que ya es dueño de una Cuenta se rechaza (K3).
- Tu negocio: nombre, hasta 2 WhatsApp de alerta, hasta 5 preguntas (con sugerencias para cualquier negocio) y logo opcional (se sube directo a Vercel Blob en WebP).
- Pago con Stripe Checkout. Turnstile, límite por conexión y una sola alta por tarjeta.
- Qué ve quien escanea: pagada con formulario activo → va directo al formulario de GHL; pagada en preparación → "Tu formulario se está preparando" (misma animación que en restaurantes); pago sin completar → "Esta tarjeta se está activando" con Retomar pago, que manda un enlace nuevo al correo registrado (como mucho uno cada 10 minutos, sin mostrar datos del dueño); cobro fallido → sigue funcionando 7 días de gracia (se calcula en cada escaneo); después, cancelada o pausada → misma redirección de enlace inactivo que el menú.
- Correos con la marca Colega Studio y "Colega Cards" en el asunto (K4): enlace de pago, bienvenida, pago recibido, cobro fallido (con la fecha límite) y suscripción terminada. Cada uno lleva un enlace de 30 días que abre el pago o el portal de clientes de Stripe (recibos, tarjeta y cancelación); al equipo le llega correo de cada suscripción nueva y cada pago atrasado.
- Cuentas › Colega Cards (super admin): pestañas Colega Menus / Colega Cards. Lista con negocio, contacto (WhatsApp directo), pago (con días de gracia restantes), etapa, tarjetas y próximo cobro; filtros por etapa y pago, y búsqueda por negocio, contacto, correo o código de tarjeta.
- Ficha del negocio: URL del formulario de AI Studio y etapa (para Activa se exige la URL); estado del pago, "Enviar enlace de pago/del portal" y "Cancelar al final del periodo" (con deshacer); tarjetas vinculadas (agregar por código y quitar); editar datos, preguntas y logo; archivar (solo sin suscripción viva) e historial.
- Alta manual desde el admin: captura los datos, vincula tarjetas opcionales y le manda al cliente el enlace de pago por correo.
- Contador en el menú Cuentas con suscripciones pagadas sin empezar y pagos atrasados; notificaciones nuevas en la campana (categoría "Colega Cards").
- Métricas: suscripciones activas, ingreso mensual, pagos pendientes y atrasados de Colega Cards para negocios.
- Enlaces: la lista muestra el negocio de cada tarjeta Colega Cards; el detalle enlaza a su suscripción. Liberar una tarjeta también la saca de su suscripción.
npm run stripe:setupcrea el precio "Colega Cards — negocio" ($199) y un portal de clientes con el encabezado de Colega Cards. Variable nueva:STRIPE_CARDS_PRICE_ID.- El webhook de Stripe atiende primero los eventos de Colega Cards (por sus metadatos) y nunca toca las Cuentas de Colega Menus. Firma verificada e idempotente, como siempre.
- Migración 0026 (
card_subscriptions,smart_links.subscription_id). Las suscripciones no se pueden borrar (eliminar = archivar). - En los Preview y en local, el admin (lista, detalle, CSV y PDF de QR) muestra la dirección del propio despliegue (
…/l/{código}) en lugar dego.colegastudio.com, para que una tarjeta de prueba no abra producción. - 18 pruebas nuevas: alta, validaciones, K3, pago, evento repetido, gracia (día 7 funciona, día 8 no), reactivación, cancelación, formulario sin URL, "Retomar pago", admin y aislamiento de las Cuentas.
v1.7.09 de octubre de 2026
Etapa 21: Enlaces NFC/QR
Agregado
- Enlaces (super admin, menú "Negocio"): tarjetas NFC y QR para cualquier negocio, también los que no son restaurantes. Cada tarjeta lleva un enlace corto
go.colegastudio.com/{código}(7 caracteres sin letras que se confunden). El código nunca cambia y nunca se reutiliza. Los enlaces se archivan, no se borran. - Generar enlaces: lotes de 1 a 500 con etiquetas iniciales. Por lote se descarga un CSV (código y URL para grabar los chips NFC) y un PDF tamaño carta con los QR y su código, listo para la imprenta.
- Estados: En inventario → Listo para reclamar → Activo ↔ Pausado. Una tarjeta en inventario no se puede reclamar, así que una perdida del almacén no sirve. Hay acciones en grupo para cambiar estado, poner o quitar etiquetas y archivar.
- Reclamo al escanear (
/l/{código}): quien escanea una tarjeta lista deja su nombre y WhatsApp y acepta el aviso de privacidad. Luego elige el destino:- Reseñas en Google: busca su negocio con Google Places y la tarjeta abre directo
search.google.com/local/writereview?placeid=…. - Enlace personalizado: atajos para WhatsApp, Instagram, Facebook o sitio web.
- Al terminar ve "Probar mi tarjeta" y un botón de WhatsApp del equipo para pedir cambios.
- El reclamo tiene Turnstile y un límite de 5 tarjetas por conexión al día. Si dos personas reclaman la misma tarjeta a la vez, solo gana la primera. El lugar de Google se vuelve a confirmar desde el servidor.
- Reseñas en Google: busca su negocio con Google Places y la tarjeta abre directo
- Detalle del enlace: cambiar el destino a mano (si estaba en inventario o lista, queda activa), pausar y reanudar, liberar para otra persona, vincular o cambiar el titular, etiquetas, nombre interno, QR en PNG y SVG, e historial desde la bitácora.
- Titulares de tarjeta (
card_holders): personas que reclamaron tarjetas, con cuántas tiene cada una, edición y exportación a CSV. No se envían a GoHighLevel. El mismo teléfono es el mismo titular. No son los Clientes (customers) de la Fase 3. - Etiquetas personalizables con la paleta de colores de la app.
- Ajustes globales: nuevo campo "WhatsApp de soporte para tarjetas".
- Notificaciones: categoría nueva "Enlaces" cuando alguien reclama una tarjeta.
- Toda acción del equipo y cada reclamo quedan en la bitácora.
- Migración 0025 (
smart_links,card_holders,link_batches,link_tags,smart_link_tags). Triggers para que el código sea inmutable y los enlaces no se puedan borrar. - Variable
LINKS_HOST(por defectogo.colegastudio.com). - 14 pruebas nuevas.
v1.69 de octubre de 2026
Etapa 16: Clientes, Cupones, Ventas y Corte de caja (Fase 3)
Agregado
- Clientes (nueva sección): la base de comensales de cada restaurante, identificados por su teléfono. Se registran solos al enviar un pedido con teléfono en el punto de venta.
- Muestra pedidos, monto acumulado, primer y último pedido (calculados de los pedidos, nunca se desfasan), sucursal y canal de registro y direcciones usadas.
- Filtros por sucursal, canal, pedidos, monto, "no ha pedido en N días" y promociones; búsqueda por nombre o teléfono.
- Ficha con historial (canal, sucursal, total, cómo pagó y quién lo capturó), notas internas y consentimiento de promociones aparte.
- Baja a petición del cliente (dueño o copropietario): sale de la lista y a los 30 días se borran su nombre, teléfono y direcciones; las ventas se conservan sin sus datos.
- El Equipo ve los clientes de sus sucursales. CSV solo para dueño y copropietarios, a prueba de fórmulas en Excel.
- Cupones (nueva sección): porcentaje o monto fijo, compra mínima, vigencia por fechas, días y horario, usos totales y por cliente, canales (punto de venta o Tienda en línea) y sucursales, activo o pausado.
- Se validan en el servidor al enviar el pedido (regla 14). Cancelar un pedido devuelve el uso, y dos cajas no rebasan el máximo a la vez.
- El Equipo crea y administra cupones solo para sus sucursales.
- Punto de venta:
- Al teclear el teléfono aparece el cliente frecuente con su número de pedidos y sus tres últimos pedidos (sin montos acumulados ni notas), y se llena su nombre.
- "Agregar cupón o descuento": cupón con código, o descuento manual con motivo que autoriza un encargado (en turno o con su PIN). El total con descuento lo calcula el servidor.
- Caja (corte): abrir con fondo, ver lo cobrado por método, devoluciones en efectivo y efectivo esperado, y cerrar contando el efectivo. Una diferencia la autoriza un encargado y queda quién abrió, cerró y autorizó. Sin caja abierta el punto de venta no cobra (sí envía "sin cobrar").
- El PIN de encargado se bloquea 5 minutos tras 5 intentos equivocados en el mismo dispositivo.
- Ventas (nueva sección para dueño, copropietarios y Equipo de sus sucursales):
- Filtros recordados en el dispositivo: periodo (hoy, ayer, esta semana, últimos 7 días, este mes, últimos 30 días o fechas), sucursal, canal, método de pago (incluye combinado), modalidad, quién capturó y cupón.
- Indicadores: ventas, pedidos, ticket promedio, descuentos y cancelados, cada uno contra el periodo anterior.
- Gráficas animadas (solo transform y opacity, quietas con "reducir movimiento"): ventas por día, por canal, por método de pago, horas pico (día × hora de la sucursal), productos más vendidos por piezas o monto, y clientes nuevos contra recurrentes. Al pasar el puntero o con el teclado se ve el detalle.
- Lista de pedidos con estado (completados, cancelados o todos) y detalle con productos, descuento, pagos e historial con quién hizo cada cosa.
- Pestaña de cortes de caja con diferencias. CSV de pedidos solo para dueño y copropietarios.
- La navegación muestra Operación (Pedidos, Ventas, Clientes, Cupones) cuando el restaurante tiene Tienda.
- Actividad: ediciones y bajas de clientes, cambios de cupones y descargas de CSV.
- Migración 0024 (
customers,customer_addresses,coupons,cash_shifts; enordersel cliente, cupón y descuento; enorder_paymentsel turno de caja; bloqueo del PIN de encargado enpos_devices) y 34 pruebas nuevas (460 en total): clientes, cupones, descuento manual, corte de caja, Ventas y aislamiento entre Cuentas, sucursales y miembros del equipo.
Cambiado
- La purga a 30 días incluye clientes dados de baja y cupones eliminados.
v1.59 de octubre de 2026
Etapa 15: Pedidos, POS y Comandera (Fase 3)
Agregado
- Punto de venta en
menus.colegastudio.com/pos(sucursales con Tienda). El dueño o alguien del equipo activa el celular o la tableta una vez para una sucursal, y en ese dispositivo se cierra la sesión del panel. Después cada persona entra con su nombre y su PIN. Hay bloqueo de 5 minutos tras 5 intentos, turno de 12 horas y bloqueo automático tras 15 minutos sin uso. - Capturar pedidos:
- Catálogo con búsqueda y categorías, con opciones de precio, modificadores (mínimo y máximo) y nota por producto.
- Canal (Mostrador por defecto, Teléfono, WhatsApp u Otro) y modalidad (para llevar, comer aquí o a domicilio con dirección y costo de envío).
- Nombre y teléfono del cliente, y nota del pedido.
- Pedidos en espera: se guardan y se retoman o descartan después.
- Cobro registrado: efectivo con cambio, tarjeta, transferencia u otro, combinables en un pedido. Se cobra al enviar o después ("Por cobrar"). El dinero no pasa por Colega: solo se registra cómo se pagó.
- Comandera en el POS y en el panel (nueva sección Pedidos, visible si la sucursal tiene Tienda): columnas En preparación, Listos y Terminados hoy; en el celular, una columna a la vez.
- Sonido y vibración con cada pedido nuevo, pantalla siempre encendida, consulta cada 4 segundos y pantalla completa.
- Botones Listo, En ruta y Entregado, y cobrar desde la tarjeta del pedido.
- Cancelar pide motivo. Un pedido cobrado lo cancela un encargado.
- Equipo → Punto de venta: agregar, editar o quitar personal (nombre, PIN, sucursal o todas, "Encargado"), y ver o desactivar los dispositivos activados.
- Pedidos seguros:
- Precios, opciones, modificadores y disponibilidad se recalculan en el servidor al guardar o enviar.
- El pedido guarda una copia de nombres y precios y no se edita.
- Número consecutivo por día y sucursal.
- Enviar dos veces no duplica (llave de idempotencia).
- Cada cambio de estado queda en el historial.
- Migración 0023 (
pos_staff,pos_devices,pos_sessions,order_counters,orders,order_items,order_item_modifiers,order_payments,order_events) y 32 pruebas nuevas (426 en total): precios en el servidor, numeración, idempotencia, cobros, cancelaciones, PIN y bloqueo, dispositivos y aislamiento entre Cuentas.
Cambiado
- Etapas de la Fase 3 reordenadas (aún no está el número de WhatsApp): 16 Clientes, Cupones, Ventas y Corte; 17 WhatsApp y Tienda en línea; 18 Mercado Pago; 19 Domicilio; 20 Fidelidad.
CLAUDE.md: excepción aprobada a "nunca escribir autenticación a mano" para las sesiones de comensales con WhatsApp y del POS. El panel sigue con Better Auth.
v1.48 de octubre de 2026
Etapa 14: Complementos, modificadores y disponibilidad (Fase 3)
Agregado
- Complementos por sucursal en la misma suscripción: Tienda ($399) y Fidelidad ($199) al mes, IVA incluido y sin descuento por volumen. Se encienden o apagan cuando sea en "Suscripción y pagos" y Stripe prorratea; una sucursal pausada o archivada deja de cobrarlos. La garantía de 30 días sigue siendo de la Cuenta e incluye los complementos. Cada complemento dice "Próximamente" hasta que se abre en Ajustes globales.
- Super admin: activar un complemento por sucursal en cortesía (sin cobro, aunque aún no esté abierto, para pilotos) o con cobro, con nota y en la bitácora; interruptores "Complementos que los dueños pueden activar" en Ajustes globales; tarjeta "Complementos" en Métricas (sucursales e ingreso mensual).
- Modificadores (nueva sección para el dueño y el Equipo): grupos por sucursal como "Elige tu salsa" (obligatorio, elige 1), "Extras" (+$15 queso) o "¿Algo que quitar?", con mínimo y máximo, precio extra por opción y ejemplos para empezar. Un grupo se liga a varios productos desde el grupo o desde el producto (hasta 6 por producto, en orden). Apagar una opción ("agotada") la quita de todos sus productos.
- Menú público: el detalle del platillo muestra sus modificadores con la regla ("Elige 1", "Opcional · hasta 2") y el precio extra, en español o inglés. El asistente para comensales también los conoce. El menú de ejemplo (/demo) ya los muestra.
- Disponible en Tienda por producto (se ve cuando la sucursal tiene Tienda): apagado sigue en el menú y se venderá en el punto de venta. Apagar un producto lo sigue quitando de todo.
- Recordatorio diario de lo apagado: la primera vez del día (hora de la sucursal) que alguien abre Menús, ve los platillos, opciones de precio y modificadores apagados para encenderlos uno por uno, "Encender todos" o "Siguen agotados". Se cuenta por persona y por sucursal; un super admin "viendo como" no lo consume.
- Migración 0022 (
branch_addons,modifier_groups,modifier_options,product_modifier_groups,availability_reminders,products.available_onliney cantidades cobradas de complementos) y 39 pruebas nuevas (394 en total): partidas de Stripe, permisos, cortesía, aislamiento entre Cuentas y sucursales, copia de menús, traducciones y recordatorio.
Cambiado
- Equipo sin límite de personas por sucursal (antes 2): no se cobra por usuario (Fase 3, T6).
- Copiar menús entre sucursales y duplicar un producto llevan sus modificadores; "Traducir todo" y la pantalla de Traducciones incluyen los modificadores; la purga a 30 días incluye los grupos archivados.
- El correo "Cambió tu pago mensual" menciona los complementos.
npm run stripe:setupcrea los precios de Tienda y Fidelidad e imprimeSTRIPE_PRICE_ID_STOREySTRIPE_PRICE_ID_LOYALTY.CLAUDE.md: vocabulario y reglas de la Fase 3 (dinero directo al restaurante, totales en el servidor, permisos de pago cifrados).
v1.3.37 de octubre de 2026
Límite de fotos con IA ajustable
Agregado
- Ajustes globales: el super admin define cuántas fotos puede mejorar cada sucursal al mes en el Estudio de fotos IA, con suscripción (30 por defecto) y antes de pagar (15 por defecto). El cambio aplica al instante y queda en la bitácora. Hay 1 prueba nueva.
v1.3.27 de octubre de 2026
Imagen para compartir y favicon
Agregado
- Imagen Open Graph (1200 × 630) de Colega Menus para WhatsApp, Facebook, LinkedIn y X. Tiene el titular "Tu menú digital, listo hoy y siempre al día.", los beneficios, un celular con el menú de ejemplo y la mascota. La usan la página de ventas,
/loginy/signup; los menús públicos siguen con el logo de cada restaurante. - Favicon con la mascota de Colega Studio (16, 32 y 48 px), ícono de 512 px e ícono para iPhone (fondo blanco). Se generan con
node scripts/brand-icons.mjs.
v1.3.16 de octubre de 2026
Pixel de Meta
Agregado
- Pixel de Meta (dataset "Colega Studio Pixel") solo en la página de ventas y en
/signup. No se carga en el panel, en/loginni en los menús públicos, así que no rastrea a los comensales. Registra la visita (PageView) sin eventos automáticos. - Registro (
CompleteRegistration): lo envían el navegador y el servidor (API de Conversiones) con el mismo ID, y Meta lo cuenta una vez. El del servidor lleva correo, teléfono y nombre cifrados (SHA-256), más las cookies del pixel, la IP y el navegador, para saber de qué anuncio vino. - Primer pago (
Subscribe): desde el webhook de Stripe, con lo cobrado. Solo cuando arranca la garantía, no en renovaciones ni al regresar de un pago atrasado. - Variables
NEXT_PUBLIC_META_PIXEL_ID,META_CAPI_TOKENyMETA_TEST_EVENT_CODE(solo Preview). Sin ellas no se envía nada a Meta. Hay 7 pruebas nuevas.
v1.35 de octubre de 2026
Etapa 13: Equipo y Actividad
Agregado
- Equipo (solo dueño y copropietarios): invita personas por correo y elige, por restaurante, todo el restaurante (incluye sucursales futuras) o sucursales específicas. Máximo 2 miembros por sucursal, sin contar al dueño ni a los copropietarios. Puedes editar el acceso, reenviar la invitación (vale 7 días) o quitar a alguien, y el acceso se corta de inmediato.
- Miembros del equipo: entran por el mismo
/loginy solo ven sus restaurantes y sucursales. Administran menús, platillos, fotos, horarios, datos de sucursal, QR, reseñas y asistente. No ven pagos, suscripción, Colega Cards, Personalización, Etiquetas, Banners, Traducciones ni Equipo, y no crean, pausan ni archivan sucursales o restaurantes. - Copropietario: mismos permisos que el dueño, incluidos pagos y Equipo. Solo el dueño titular lo agrega o lo quita.
- Actividad: quién hizo cada cambio ("Ana apagó Molletes · Roma"), con filtros por sucursal y persona.
- Correo de invitación y aviso a quien invitó cuando la persona acepta.
- Migración 0021 (
team_members,team_access,activity_log; rolcoowner) y 10 pruebas nuevas de aislamiento, límites y permisos.
v1.2.35 de octubre de 2026
Corregido
- Menú en vivo: un platillo que se apaga o se enciende, o un cambio de precio, ya no exige recargar el menú abierto. El menú consulta cada 15 segundos (y al volver a la pestaña) una huella ligera de lo visible (
/api/m/{slug}/version, contenido en caché) y se actualiza solo, sin recargar la página ni perder lo que el comensal está viendo. Solo consulta con la pestaña visible.
v1.2.25 de octubre de 2026
Cambiado
- Asistente del menú público: las sugerencias dependen del menú visible de la sucursal. Por ejemplo, "Opciones vegetarianas" o "Opciones sin gluten" salen solo si algún platillo tiene esa etiqueta, "Algo sin picante" solo si hay picantes y no picantes, y "¿Qué postre me recomiendas?" o "Algo para desayunar" solo si existe esa categoría. Siempre está "¿Qué me recomiendas?". Hay 5 pruebas nuevas.
v1.2.15 de octubre de 2026
Corregido
- Asistente del menú público: la primera pregunta del día fallaba con "No pudimos verificar que eres una persona" si se enviaba antes de que llegara el pase invisible de Cloudflare Turnstile (por ejemplo, al tocar una sugerencia en cuanto se abre). Ahora se espera el pase y, si vence o ya se usó, se pide otro y se reintenta una vez.
v1.25 de octubre de 2026
Etapa 12: fotos sin fricción y Estudio de fotos IA
Agregado
- Estudio de fotos IA ("Mejorar foto" en cada foto del producto): 4 estilos (Mejorada, Mesa de madera, Fondo neutro y Profesional, donde la IA decide). Muestra un antes / después con deslizador y, antes de usar la foto mejorada, el dueño confirma que muestra el platillo real. La IA conserva el platillo, las porciones y el plato. Usa FLUX Kontext Pro vía fal.ai, solo en el servidor, con el costo de cada foto registrado ($0.04 USD). Límite: 30 fotos al mes por sucursal (15 antes de pagar), aparte del tope general de IA. La foto mejorada se convierte a WebP en el navegador y se sube solo si el dueño la acepta.
- Recortador cuadrado al subir una foto: se arrastra y se acerca con los dedos, la rueda, el control o el teclado; empieza centrado. En la carga masiva: "Ajustar encuadre" y aviso "Poco nítida".
- "Tomar foto" abre la cámara en celular.
- Landing: tarjeta "Estudio de fotos IA" con animación de antes / después.
- 4 pruebas nuevas (333 en total).
Cambiado
- Fotos desde 300 px (antes 800 px; con aviso por debajo de 800 px) y hasta 25 MB. Las fotos HEIC del iPhone se convierten en el navegador (heic2any, que se carga solo cuando hace falta).
v1.1.14 de octubre de 2026
Cambiado
- Títulos de la página de ventas con Mona Sans (la tipografía de GitHub), igual que colegastudio.com.
v1.14 de octubre de 2026
Página de ventas
Agregado
- Página de ventas en
menus.colegastudio.com/(antes redirigía aSALES_PAGE_URL): hero con un celular que muestra el menú real de ejemplo, el problema, "Cómo funciona" con ilustración fija que cambia por paso, 8 funciones con animaciones que las explican, bloque oscuro con QR, precio con selector de sucursales, Colega Cards, preguntas frecuentes y cierre. Barra "Crear mi menú gratis" fija en celular. - Menú de ejemplo en
/demo("Casa Colega", ficticio): usa los mismos componentes del menú público con datos fijos (sin base de datos). Se puede mostrar dentro de un iframe solo desde el mismo sitio. - Animaciones con los criterios de Emil Kowalski: solo
transform/opacity, curvas propias, en bucle solo mientras se ven y quietas con "reducir movimiento". - Fotos del ejemplo desde Unsplash (
images.unsplash.compermitido ennext.config.ts).
v1.04 de octubre de 2026
Lanzamiento
Colega Menus abre a clientes reales en menus.colegastudio.com (panel) y menudigital.colegastudio.com (menús públicos).
Corregido
- Las confirmaciones que piden escribir un texto (por ejemplo, cancelar una suscripción) siempre dicen qué escribir.
Detalles técnicos
Comprobado en producción
- Registro, verificación de correo (desde
hola@colegastudio.com), creación de restaurante, importación de menú con IA, fotos, traducción, horario por día y QR. - Cobro real con Stripe ($499 por sucursal), activación por webhook, inicio de la garantía de 30 días, reembolso y cancelación desde el super admin.
- Revisión diaria, Turnstile, Sentry, llave de Claude propia de producción y verificación en dos pasos del super admin.
v0.144 de octubre de 2026
Horario por día y guía de primeros pasos
Agregado
- Horario de atención por día en cada sucursal: abierto o cerrado, hasta dos turnos por día y "Copiar el lunes a todos los días". El pie del menú lo agrupa ("Lun a Vie 9:00–18:00 · Dom cerrado") en español o inglés, y el resumen se guarda como texto para el asistente y Primeros pasos. El texto libre anterior se conserva hasta capturar el horario por día.
- Migración 0020 (columna
opening_hours) y 7 pruebas nuevas (329 en total).
Cambiado
- Primeros pasos: cada botón lleva a donde se completa la tarea (baja hasta el contenido); "Completar datos" y "Descargar QR" abren directo el formulario o el QR de la sucursal activa.
Corregido
- Vista previa del dueño: ya no muestra "No pudimos cargar las reseñas" (el menú aún no es público).
v0.13.14 de octubre de 2026
Corregido
- El registro lee los enlaces de términos y aviso de privacidad en cada visita (antes se fijaban al publicar y un cambio en Ajustes no se veía).
v0.134 de octubre de 2026
Preparación del lanzamiento
Agregado
- Producción lista en https://colega-menus.vercel.app: base de datos propia en la rama
productionde Neon (npm run db:migrate:production, se niega a correr contra pruebas), primer super admin con verificación en dos pasos, revisión diaria protegida conCRON_SECRET, Turnstile, Sentry y llave de Claude separada. - Correos desde
hola@colegastudio.com(dominio verificado en Resend) y respuestas aEMAIL_REPLY_TO(opcional). - Ajuste global "Términos de servicio": el registro enlaza a los términos y al aviso de privacidad.
- Borradores breves del aviso de privacidad y de los términos en
docs/legal/. docs/LANZAMIENTO.mden orden y con lo ya hecho marcado.
Cambiado
- Prioridad alta a la imagen principal del menú público y al logo del acceso (Lighthouse en celular: menú 85–94, login 89; 100 en accesibilidad, buenas prácticas y SEO).
- Se retira el ajuste sin uso "Onboarding de Colega Cards" (Colega Cards se solicita desde el panel).
Corregido
- Verificación en dos pasos: aviso claro cuando la contraseña es incorrecta (antes "Algo salió mal").
v0.122 de octubre de 2026
Etapa 11: Asistente para comensales
Agregado
- "¿Qué me recomiendas?" en el menú público: chat corto con Claude Haiku 4.5 que recomienda platillos reales del menú en horario de esa sucursal, con tarjetas para abrir cada platillo, en español o inglés. No inventa platillos ni precios, ante alergias siempre pide confirmar con el mesero, no sale del tema e ignora instrucciones escondidas. En Feed va como botón arriba; en Clásico y Lista, flotante.
- Topes: 8 preguntas por comensal y 60 por sucursal al día, y presupuesto aparte de $30 MXN al mes por sucursal (editable en Ajustes globales) que no toca el de importar y traducir. Turnstile invisible en el primer mensaje del día.
- Panel: interruptor "Asistente para comensales" (encendido por defecto con la IA), aviso de que las funciones de IA no tienen costo adicional, página Asistente con uso del mes, "Lo que más preguntan" (resumen semanal con IA) y últimas preguntas. Prueba del asistente en la vista previa.
- Resumen de reseñas con IA en Reseñas de platos: lo que más gusta, lo que más se critica y una frase por platillo con 3 reseñas o más; se actualiza a diario si hay reseñas nuevas.
- Super admin → Asistente: preguntas y respuestas de los últimos 90 días para revisar la calidad.
- Conversaciones guardadas 90 días sin datos personales; la revisión diaria las borra después.
- Migración 0019 y 10 pruebas nuevas (322 en total).
Corregido
- La gráfica de 12 meses de Métricas se recorría un mes entre las 18:00 y la medianoche.
v0.112 de octubre de 2026
Etapa 10: Menú bilingüe y asistente de textos
Agregado
- Idiomas e IA en Personalización: "Menú también en inglés" y "Funciones de IA", con efecto inmediato en todas las sucursales del restaurante.
- Traducciones (Menús → Inglés): "Traducir todo con IA" (2 veces al mes) traduce menús, categorías, productos, opciones de precio y etiquetas; revisión Español | Inglés con filtros Sin traducir · Por revisar · Por actualizar, "Sugerir" por texto, "Confirmar" y guardar cambios. Si cambia el español, el inglés queda "Por actualizar" y el turista sigue viendo el anterior.
- Campos en inglés en el producto (nombre y descripción) y en los diálogos de menú, categoría y etiqueta, con "Sugerir".
- Asistente de textos: "Mejorar con IA" propone 2 descripciones sin inventar ingredientes ni preparaciones, y "Sugerir etiquetas" marca solo etiquetas que el restaurante ya tiene. 300 usos al mes por restaurante, dentro del tope de gasto; costo de cada llamada registrado.
- Menú público en inglés: botón ES / EN, idioma inicial del celular del comensal (recordado), enlace directo
?lang=eny textos fijos traducidos (buscador, "From $35", reseñas, horario, pie). Lo que no tenga inglés se muestra en español. - Migración 0018 (traducción de opciones de precio y huella del español) y 6 pruebas nuevas (312 en total).
v0.102 de octubre de 2026
Etapa 9: Primeros pasos y Academy
Agregado
- Primeros pasos: tarjeta arriba del panel con 7 pasos que se marcan solos (logo y colores, 5 productos propios, 5 productos con foto, datos de la sucursal, vista previa, menú activado y QR descargado), cada uno con su botón y su video. Se puede minimizar u ocultar; mientras falten pasos, el menú lateral muestra el avance ("4 de 7") y la vuelve a abrir. Al completarla, una celebración.
- Academy: página con videos de YouTube por categoría, avance "3 de 5 vistos" y "Visto" por usuario. El reproductor (youtube-nocookie) se carga solo al dar clic. Botón "¿Cómo funciona?" en cada sección del panel que tenga video. El super admin administra los videos: categoría, orden, paso, sección y borrador.
- Seguimiento de Cuentas en riesgo (super admin): tablero tipo Trello (Por contactar · Contactada · Acompañamiento · Recuperada · Sin interés). Las Cuentas entran solas al detectarse una señal (3 días sin menú, 7 sin activar, 14 activas sin fotos) y pasan solas a Recuperada. Cada tarjeta tiene WhatsApp, llamar y correo directos, responsable, próximo seguimiento (aviso en la campana al vencerse) y bitácora de acciones. Tarjeta "Cuentas en riesgo" en Métricas y contador en el menú.
- Eventos a GoHighLevel: el webhook recibe el campo
event(signup,menu_createdal llegar a 5 productos propios,menu_activatedal primer pago), una vez cada uno; la revisión diaria reintenta los que no llegaron. - Migración 0017 y 8 pruebas nuevas (306 en total).
v0.92 de octubre de 2026
Etapa 8: Opciones de precio, fotos masivas y fuentes propias
Agregado
- Opciones de precio por producto (tamaños, piezas, presentaciones): en el formulario del producto, "Precio único" o "Varias opciones" con plantillas rápidas (Chico / Mediano / Grande, CH / MED / GR, 12 / 18 / 24 pz, Copa / Botella, Sencillo / Doble), de 2 a 6 opciones que se reordenan arrastrando y se apagan una por una. Si se apagan todas, el producto se oculta.
- Plantillas de opciones editables por restaurante: "Editar plantillas" para crear, cambiar o borrar (hasta 12, con precio opcional que se llena solo al aplicarla) y "Guardar como plantilla" desde las opciones de un producto. Empiezan con las 5 de Colega (migración 0016).
- En el menú público las opciones siempre se ven con su precio: "Desde $35" y la línea de opciones en Lista, pastillas en Clásico, botones grandes en Feed y tabla en el detalle. El panel muestra "Desde" en el editor de menú y en "Acompaña con".
- El importador con IA ahora crea un solo producto con sus opciones (antes, uno por tamaño) y la revisión permite corregirlas.
- Subir fotos (Menús → Subir fotos): hasta 100 fotos o una carpeta a la vez. Cada foto se recorta cuadrada y se convierte a WebP en el dispositivo. Se relacionan primero por nombre de archivo (gratis) y las demás con Claude Sonnet 5.5; pantalla de revisión obligatoria (Seguro · Revisar · Sin asignar) para cambiar el producto, descartar o elegir portada. Máximo 3 fotos por producto. Tope de 200 fotos con IA al mes por sucursal, dentro del tope de gasto.
- Fuentes propias (Personalización → Tipografía → "Elegir mis fuentes"): 254 fuentes de Google Fonts con acentos y ñ, con buscador, filtro por estilo y vista previa. Los títulos aceptan cualquier estilo; los textos, solo Sans serif y Serif. Las 10 combinaciones siguen como "Recomendadas". En el menú se piden solo los grosores necesarios, con
display=swap. - Migraciones 0015 (
product_variantsy unidades enai_usage) y 0016 (plantillas de opciones) y 28 pruebas nuevas (291 en total).
Corregido
- Un super admin archivado veía "Crea tu restaurante", pero al guardar le decía que ya tenía uno.
v0.82 de octubre de 2026
Etapa 7: Métricas, Feedback y sugerencias, y pulido final
Agregado
- Métricas del super admin (nueva página de inicio): suscritos activos (restaurantes / sucursales / suscripciones e ingreso mensual con y sin IVA y después de comisión), comisión de Colega Cards ($100 por sucursal con el servicio activo en Cuentas que pagan; las cortesías no cuentan), cortesías, pagos atrasados, ingreso perdido, Cuentas en garantía, embudo de registros del mes, costo de IA y feedback abierto. Gráficas de ingreso mensual y restaurantes suscritos de los últimos 12 meses con una foto diaria.
- Feedback y sugerencias (antes "Quejas y sugerencias"): el restaurante envía sugerencias, errores o peticiones con captura opcional y ve sus envíos con estado y respuesta. El super admin los gestiona en un tablero tipo Trello (Nuevo · En revisión · Planeado · Resuelto · Descartado), responde por correo y deja notas internas; aviso en la campana y por correo al equipo; todo en la bitácora. Límite de 10 envíos al día por Cuenta.
- Borrado definitivo de lo archivado hace más de 30 días (regla 7): menús, categorías, productos, etiquetas y banners con sus fotos sin uso. Apagado hasta que se encienda en Ajustes globales.
- Páginas propias de "No encontrado" y "Algo salió mal" (reportan a Sentry) y encabezados de seguridad (HSTS, nosniff, sin iframes, permisos).
docs/LANZAMIENTO.md: lista paso a paso de todo lo que falta para abrir a clientes reales.- Migraciones 0013 (se retira la tabla vacía de quejas) y 0014 (feedback, fotos de métricas y categoría "Feedback" en avisos), y 11 pruebas nuevas.
Corregido
- Pedidos de tarjetas NFC pagados que seguían "Pago pendiente" cuando el aviso de Stripe (webhook) no llegaba a la versión correcta: al abrir "Satisfacción y reseñas" y antes de "Completar pago", el sistema confirma con Stripe todas las sesiones de pago del cliente, marca el pedido como pagado y evita cobrar dos veces.
Cambiado
- La lista de Cuentas del super admin pasa a
/admin/accounts;/admines Métricas. - Fechas y montos con formato de México (es-MX) en todo el panel.
v0.72 de octubre de 2026
Etapa 6: Onboarding e importador de menú con IA
Agregado
- Registro en 3 pasos (cuenta → correo → restaurante) con verificación anti-bots de Turnstile y aviso de privacidad. Cada registro se envía a GoHighLevel con la etiqueta "Colega Menus Onboarding" (
GHL_WEBHOOK_URL); queda pendiente hasta que GHL lo confirma y la revisión diaria reenvía los que no llegaron (migración 0012). - Registro con un correo que ya tiene cuenta: el sistema no lo revela en pantalla, pero al dueño de ese correo le llega cómo entrar o recuperar su contraseña.
- "Crea tu restaurante": el dueño crea su Cuenta (pendiente de pago), su restaurante, la primera sucursal (con vista previa del enlace permanente) y un menú de ejemplo, y entra directo al panel.
- Panel primero, pago después (O1): las Cuentas pendientes de pago entran a preparar su menú; al guardar su menú importado se les invita a activarlo con la garantía de 30 días, que también aparece destacada en "Suscripción y pagos".
- Vista previa del menú para Cuentas sin pago (
/app/preview): "Ver menú" la abre mientras el enlace público no funcione. - Primera visita: tour guiado de 6 pasos (resalta cada sección en la barra lateral; se puede saltar) y Quick Setup con animaciones (menú bilingüe, funciones de IA y cómo empezar: importar con IA, usar el ejemplo o empezar de cero).
- Menú de ejemplo con franja "Estás viendo datos de ejemplo" y "Borrar datos de ejemplo" (archiva; las etiquetas se quedan).
- Importador de menú con IA (Claude Sonnet 5.5, solo en el servidor): un PDF de hasta 20 páginas o hasta 10 fotos (se reducen en el navegador), procesamiento en segundo plano con aviso en el panel y por correo, pantalla de revisión con descripciones editables y marcas "Revisar precio", y guardado en la sucursal activa (opcionalmente borrando el ejemplo). Topes por sucursal: 3 importaciones al mes y gasto mensual de IA (por defecto $50 MXN, ajustable en Ajustes globales). Cada llamada se registra en
ai_usagecon su costo. Los intentos fallidos no cuentan. - El archivo original no se guarda (O12): se elimina al terminar de procesarse y la revisión diaria limpia lo que hubiera quedado.
- Migración 0011 (
menu_importsyusers.tour_completed_at) y 24 pruebas nuevas (aislamiento entre Cuentas, topes, procesamiento con IA simulada, onboarding y webhook).
Cambiado
- "Importar con IA" deja de ser "Próximamente" en Menús.
- La pantalla "pendiente de pago" se reemplaza por "Crea tu restaurante" (o, si la Cuenta no tiene restaurantes activos, por un aviso).
v0.61 de octubre de 2026
Etapa 5b: Satisfacción y reseñas (Colega Cards)
Agregado
- "Satisfacción y reseñas" en el panel del restaurante: mini landing con 5 funciones animadas, solicitud por sucursal (hasta 2 WhatsApp de alerta, hasta 5 preguntas con sugerencias, logo del restaurante), estado del servicio, enlace inmutable
…/{slug}/resenacon QR y pedidos de tarjetas NFC ($350 c/u con IVA; envío $200 en pedidos de 1 o 2, gratis desde 3) pagados con Stripe. - Enlace de reseñas: redirige al formulario de GHL cuando está activo; si aún no, muestra "Algo rico se está cocinando aquí" con animación; con la Cuenta inactiva redirige como el menú. El botón "Déjanos una reseña" del pie del menú usa este enlace.
- Super admin: sección "Colega Cards" con tablero tipo Trello por etapa (arrastrar o "Mover a…") y subpestaña "Tarjetas" con datos de envío, enlace a programar, estado y guía adjunta (PDF o imagen). Resumen de Colega Cards por sucursal en la ficha de la Cuenta.
- Campana de notificaciones del equipo por categoría (Activaciones · Cambios · Pedidos) y correo al equipo (Ajustes globales).
- Campo de dirección con sugerencias de Google Places (se activa al configurar la llave).
- Migración 0007 (servicio, pedidos y notificaciones; los botones de Google ya activos pasan a Colega Cards activo) y 15 pruebas nuevas.
Cambiado
- Se reemplaza el botón de reseñas de Google por sucursal del super admin y la tarjeta de Colega Cards de Personalización.
- "Reseñas" del menú pasa a llamarse "Reseñas de platos".
- "Editar sucursal" (ajuste del dueño): nombre (el enlace y el QR no cambian), dirección con sugerencias, horario, "Cómo llegar", teléfono, WhatsApp, Instagram, Facebook, TikTok, sitio web y hasta 3 enlaces con nombre; todo aparece en el pie del menú (redes con ícono, enlaces como botones). "Editar esta sucursal" pasa a "Trabajar en esta sucursal". Migración 0009.
- Lugar de Google por sucursal (ajuste del dueño): al elegir el negocio en las sugerencias de dirección se guarda su Place ID; "Cómo llegar" se genera solo (ya no se captura) y la tarjeta de la sucursal tiene "Solicitar reseña en Google Maps" con el enlace directo (copiar, abrir, enviar por WhatsApp). Migración 0010.
- Banners por sucursal (ajuste del dueño): al crear o editar se eligen las sucursales, agrupadas por restaurante de la Cuenta (marcar un restaurante marca todas sus sucursales); al eliminar uno que está en varias, se elige quitarlo solo de esa sucursal o de todas. Límite de 5 por sucursal. Los banners existentes quedan en todas las sucursales de su restaurante (migración 0008).
v0.51 de octubre de 2026
Etapa 5: Stripe
Agregado
- Cobro con Stripe (modo prueba fuera de producción): precio mensual escalonado por sucursal ($499 / $399 / $299, IVA incluido, MXN); una suscripción por Cuenta con la cantidad = sucursales activas de todos sus restaurantes.
- Pago con Stripe Checkout, portal de cliente (tarjeta, recibos, cancelar al final del periodo) y webhooks con firma verificada e idempotentes.
- Estados automáticos: pago recibido → activa (arranca la garantía de 30 días, única por Cuenta); pago fallido → 7 días de gracia con aviso y cuenta regresiva → pausa por falta de pago; cancelación → cancelada.
- "Suscripción y pagos": estado, desglose por escalón, total, próximo cobro, garantía y factura.
- Avisos del panel con el diseño aprobado por el dueño (pendiente de pago, gracia, menú desactivado, cortesía por vencer o vencida, cancelación).
- El dueño agrega restaurantes y sucursales (copiando menús o desde cero), pausa y archiva sucursales; ve el nuevo total antes de confirmar y recibe un correo con el cambio.
- Super admin: "Enviar aviso de suscripción", datos de Stripe en la ficha y "Cancelar suscripción".
- Correos de cobro; revisión diaria ampliada (fin de gracia y aviso 7 días antes de que termine una cortesía).
npm run stripe:setupcrea el producto, el precio y el portal en Stripe.- Migración 0006 y 34 pruebas nuevas.
Cambiado
- Una Cuenta pendiente de pago puede entrar a preparar su menú; el enlace público se activa al pagar (F1).
v0.41 de octubre de 2026
Etapa 4: Menú público, QR, reseñas, vistas y banners
Agregado
- Menú público
/m/{slug}(ymenudigital.colegastudio.com/{slug}): menú en horario según la zona horaria de la sucursal y su prioridad; pestañas si hay varios; pantalla "Abrimos hoy a las…" con opción de ver el menú de todos modos. - Vista Clásico: logo, buscador sin acentos, pestañas de categoría fijas, tira de miniaturas, carrusel de hasta 3 fotos, etiquetas, "Acompaña con", imagen neutra para platos sin foto y footer con datos de la sucursal, "Cómo llegar", reseña de Google (si el super admin la activó) y crédito con UTM.
- Enlaces de Cuentas pausadas, vencidas, canceladas o sin pago redirigen a la URL de ajustes globales.
- Personalización: logo, colores con ajuste automático de contraste, modo claro/oscuro, esquinas, 10 pares de tipografías y vista previa en vivo con el menú real; tarjeta de Colega Cards.
- Sucursales: ver menú, QR en PNG (1024 px) y SVG, y datos del pie del menú (dirección, teléfono, WhatsApp, Instagram, horario, Google Maps).
- Reseñas por plato (adelantadas de la Fase 2): estrellas, comentario y nombre; publicación inmediata; promedio desde 3 reseñas; Cloudflare Turnstile, una reseña por plato y dispositivo cada 30 días, topes diarios, filtro de groserías y enlaces. Sección "Reseñas" en el panel para ocultar/mostrar y responder.
- Vistas Feed y Lista (adelantadas de la Fase 2): "Formato de la carta" en Personalización para elegir las vistas y la predeterminada; selector en el menú que recuerda la elección en el teléfono. Feed estilo Reels: un plato por pantalla completa (un deslizamiento = siguiente plato), foto completa sobre la misma foto difuminada, barra lateral con calificación, reseñas (hoja tipo comentarios), Acompaña con y compartir (enlace directo al plato); banners como primera pantalla y datos de la sucursal como última. Lista: columna compacta. En ambas, el detalle del plato (fotos, Acompaña con, reseñas) se abre en una hoja.
- Banners (adelantados de la Fase 2): del restaurante (hasta 5, 1200×630, enlace y fechas que los encienden y apagan solos) arriba del menú público, con botón para ocultarlos; globales del super admin arriba del panel de los restaurantes, que el dueño puede cerrar. Eliminar = archivar; acciones del super admin en la bitácora.
- Ajustes globales: URL del aviso de privacidad (formulario de reseñas).
- 52 pruebas nuevas (173 en total): disponibilidad por estado, contenido solo de la sucursal, aislamiento en reseñas, banners y datos de sucursal, banners por fecha, formato de la carta, límites anti-abuso, contraste y horarios.
Cambiado
- Cambiar etiquetas renueva el menú público de todas las sucursales del restaurante.
- Migración 0004: columnas de reseñas (nombre, respuesta, huellas anti-abuso). Migración 0005: banners con texto alternativo, archivado y validación de fechas.
v0.31 de octubre de 2026
Etapa 3: Contenido del menú
Agregado
- Panel de restaurante: selector de sucursal; menús con horarios (incluso nocturnos) y estado "En horario ahora"; editor de categorías y productos ordenables; producto con fotos (recorte y WebP en el navegador, subida directa a Vercel Blob), etiquetas, "Acompaña con" y vista previa en celular; etiquetas con paleta fija e ícono; sucursales.
- Copiar menús de otra sucursal con pantalla de revisión (base del importador con IA de la Etapa 6).
- Nuevo look & feel de ambos paneles: lienzo suave, barra lateral translúcida por secciones, tarjeta de usuario, saludo con fecha, tarjetas redondeadas, colores con significado, naranja Colega como acento, botones con elevación y brillo que sigue al cursor. Tipografía Inter, acento
#ff531ay esquinas de 10 px. - Todo cambio de contenido invalida el caché del menú público de la sucursal; los cambios hechos "entrando como restaurante" quedan en la bitácora.
- 45 pruebas nuevas (121 en total): aislamiento entre restaurantes en menús, categorías, productos, etiquetas, fotos y copias; horarios nocturnos.
Cambiado
- El importador de menús con IA (PDF o foto) se adelanta a la Fase 1, Etapa 6.
- Fotos: almacén público de Vercel Blob; la subida muestra un error si tarda más de 60 s.
v0.21 de octubre de 2026
Etapa 2: Panel de super admin
Agregado
- Panel de super admin con barra lateral (menú desplegable en celular): Cuentas, Super admins, Bitácora y Ajustes.
- Cuentas: búsqueda (nombre, correo del dueño o enlace), filtros por estado con contadores, alta en modo cortesía o cobro y ficha con resumen, restaurantes, sucursales y actividad reciente.
- Invitación por correo para que el dueño cree su contraseña (enlace de 7 días). Si el dueño ya tiene Cuenta, el restaurante se suma "por aceptar" y el dueño lo acepta o rechaza desde su panel.
- Pausar y reanudar, archivar (confirmando con el nombre) y restaurar durante 30 días.
- "Agregar sucursal" a un restaurante existente, además de "Agregar restaurante" con su primera sucursal.
- Botón de reseñas de Google por sucursal, solo editable por el super admin.
- "Entrar como restaurante" por máximo 1 hora, con aviso fijo y salida; todo queda en la bitácora.
- Revisión diaria (Vercel Cron) que pausa las cortesías vencidas y avisa al dueño por correo; aviso en su panel.
- Super admins: invitar y archivar, nunca a uno mismo ni al último.
- Ajustes globales con validación de enlaces y registro de antes/después.
- Bitácora con filtros por persona, acción y fechas.
- 36 pruebas nuevas (76 en total), incluida una que verifica que toda acción de super admin revise el rol.
Cambiado
- Cada error de un correo de invitación ya no rompe la acción: se avisa y se puede reenviar.
v0.11 de octubre de 2026
Etapa 1: Cimientos
Agregado
- Proyecto Next.js 16 (App Router) con TypeScript, Tailwind, shadcn/ui, ESLint y Prettier.
- Esquema completo de la Fase 1 en Drizzle, con tablas reservadas para la Fase 2. Modelo Cuenta → Restaurante → Sucursal → Menú → Categoría → Producto (decisiones D1–D8 en
docs/PROPUESTA-ETAPA-1.md). - Migraciones versionadas aplicadas en la rama
devde Neon. - Protecciones en la base de datos: llaves foráneas compuestas que impiden mezclar restaurantes, slug de sucursal inmutable y nunca reutilizado, bitácora solo de inserción, límites de fotos (3) y productos relacionados (5), precios > 0.
- Better Auth: registro, verificación de correo, inicio y cierre de sesión, recuperación de contraseña (un solo uso, 1 hora), contraseñas con Argon2id, límite de intentos guardado en la base.
- Verificación en dos pasos obligatoria para super admins (app autenticadora + códigos de respaldo).
- Roles y rutas protegidas:
/admin/*(super admin) y/app/*(restaurante),/loginúnico que redirige según el rol, selector de restaurante para Cuentas con varios. src/db/tenant.ts: acceso a datos siempre filtrado por el restaurante de la sesión.src/lib/audit.ts: única función para la bitácora.src/lib/slug.ts: generador de slugs.- Correos con Resend (verificación y recuperación) en español; sin llave, en desarrollo se muestran en la consola.
- Sentry configurado (se activa al definir
SENTRY_DSN). scripts/seed.ts: super admin y Cuenta demo con dos restaurantes; se niega a correr en producción o fuera de la rama de pruebas.- 40 pruebas automáticas (aislamiento entre Cuentas y reglas de la base).