Este paquete se copia sobre el repositorio actual de Kiosco. Mantiene Firebase, JavaScript Vanilla, Bootstrap 5, Bootstrap Icons, PWA y la estructura existente web/js, web/css e index.html.
La actualización conserva las mejoras funcionales de tienda y administración e incorpora mantenimiento técnico, refuerzo de seguridad y una biblioteca de imágenes administrable desde el propio panel. El propietario puede subir, reutilizar, cambiar y quitar imágenes sin editar código ni tocar GitHub. La opción de pegar una dirección URL se mantiene.
web/js/kiosco-upgrade-config.js: configuración pública segura y cargador del sistema.web/js/kiosco-system.js: mejoras funcionales, seguridad operativa, biblioteca de imágenes, permisos, offline y administración.web/css/kiosco-system.css: estilos responsive para tienda, panel, accesibilidad, imágenes y biblioteca.web/sw.js: caché PWA actualizado e inclusión del sistema en el app shell.firestore.rules: autorización reforzada e incorporación demedia_assets.storage.rules: acceso restringido para el Storage legado.COMO_APLICAR.txt: instalación, prueba y despliegue.MANTENIMIENTO_SEGURIDAD.txt: detalle técnico y limitaciones conocidas.
La administración incorpora Biblioteca de imágenes con tres carpetas lógicas:
- Productos.
- Logos.
- General.
Desde allí el administrador puede:
- Subir archivos desde PC o móvil.
- Arrastrar y soltar archivos.
- Guardar una imagen usando una dirección URL.
- Buscar y filtrar imágenes.
- Copiar la URL de una imagen.
- Eliminar imágenes que ya no estén en uso.
- Reutilizar imágenes guardadas en productos.
- Reutilizar imágenes guardadas como logo.
Las referencias se guardan en Firestore en media_assets. Una imagen asociada a un producto o al logo registra su uso; por seguridad, la biblioteca impide eliminar manualmente una imagen mientras siga referenciada.
Cuando se cambia o quita la imagen de un producto, se libera automáticamente la referencia anterior. Cuando se elimina un producto, el sistema intenta liberar también su imagen. Lo mismo ocurre al cambiar o quitar el logo.
El formulario conserva tres métodos:
- Subir archivo desde el dispositivo.
- Elegir una imagen de la Biblioteca.
- Pegar una dirección URL externa.
Además incluye vista previa, validación, drag & drop, botón para pegar desde el portapapeles y botón para quitar la imagen actual.
En Apariencia se puede:
- Subir un logo desde el dispositivo.
- Elegir un logo de la Biblioteca.
- Pegar y guardar una dirección URL externa.
- Quitar el logo personalizado.
Las nuevas cargas usan Cloudinary mediante Upload API con un Upload Preset unsigned. El API Secret nunca se coloca en el frontend.
Configuración inicial, una sola vez:
- Crear una cuenta de Cloudinary.
- Crear un Upload Preset con modo
Unsigned. - Limitar el preset a archivos visuales admitidos, máximo 10 MB y nombres únicos.
- Iniciar sesión como administrador principal.
- Ir a
Administración > Apariencia > Imágenes del sistema. - Guardar
Cloud nameyUpload preset.
Las cargas se organizan lógicamente en kiosco/products, kiosco/logos y kiosco/general. Si el preset de Cloudinary fija su propia carpeta, esa configuración puede prevalecer en el proveedor; Kiosco mantiene de todas formas su clasificación interna en Firestore.
Kiosco elimina inmediatamente la asociación del producto/logo y retira la imagen de su biblioteca cuando ya no tiene usos. Si Cloudinary devuelve un delete_token vigente, también intenta eliminar físicamente el archivo. Los tokens de borrado del cliente tienen una ventana limitada; pasado ese tiempo, la eliminación física requiere una operación firmada del lado servidor. En ese caso Kiosco marca el recurso como retirado del sistema para que no vuelva a aparecer ni utilizarse.
No se expone API Secret para forzar borrados desde el navegador.
- Los parámetros sensibles conocidos se eliminan de la URL.
config/admin,config/staffyconfig/mediano son públicos.media_assetssolo puede ser leído o modificado por administradores/personal reconocido.- Los cambios administrativos de productos/categorías requieren administrador o personal reconocido.
- El Storage legado no permite escritura pública.
- Los clientes bloqueados no pueden listarse desde una sesión pública.
- Las sesiones administrativas no son de lectura pública.
- La reducción de stock del checkout queda vinculada al pedido creado en la misma transacción.
- No se almacenan API secrets en los archivos frontend.
- Vista cuadrícula/lista.
- Filtro y ordenamiento local.
- Oferta y producto del día.
- Estado abierto/cerrado.
- Modo accesible.
- Variantes de producto.
- Pedir de nuevo.
- Clientes bloqueados.
- Splash screen.
- Gestos táctiles.
- Vibración y beep administrativo.
- Caché local y comportamiento offline.
- Registro de sesiones.
- Modo mantenimiento.
- Permisos granulares del personal.
- Botón volver arriba.
- Responsive en PC, tablet y móvil.
Desde la raíz:
node --check web/js/kiosco-upgrade-config.js
node --check web/js/kiosco-system.js
node --check web/sw.jsPrueba local:
firebase serve --only hostingDespliegue:
firebase deploy --only firestore:rules,storage,hostingEl historial de clientes actual no usa una identidad Firebase individual para cada comprador. Para no romper esa funcionalidad, orders conserva lectura pública. No deben guardarse contraseñas, tokens, claves privadas ni secretos dentro de pedidos. Una migración futura a clientes autenticados permitiría cerrar también esa lectura.