Aplicación web completa

EquipTrack

Sistema de gestión de inventario y alquiler de equipos para empresas de eventos. Realiza un seguimiento de audio, vídeo, iluminación y mobiliario en eventos simultáneos: totalmente personalizable por empresa mediante tema, logotipo y favicon. Implementado en Cloudflare Workers + D1.

¿Qué es EquipTrack?

EquipTrack es un sistema de control de inventario y alquiler basado en web para empresas de eventos. Gestiona todo el ciclo de vida del alquiler de equipos: creación de eventos, asignación de equipos, registro de entrada y salida de artículos, registro de mantenimiento y seguimiento de daños. Las funciones de personalización (logotipo intercambiable, favicon y temática a todo color) están integradas precisamente para que cualquier empresa pueda adoptarlas como propias.

El sistema comenzó como una herramienta interna de Arturo Perico, quien diseñó y construyó la plataforma central y la migró a Cloudflare Workers + D1 para la implementación perimetral. Más tarde me uní al proyecto e introduje un conjunto de mejoras que iban desde mejoras de UI/UX hasta automatización de CI/CD.

Alcance técnico

  • Stack: JavaScript, Node.js, Express (local), Cloudflare Workers, Cloudflare D1 (SQLcompatible con ite), bcryptjs, GitHub Actions
  • Tipo de sistema: Aplicación web completa, backend sin servidor, sistema estilo SaaS de gestión de inventario
  • Implementación: Cloudflare Workers (API + activos) + GitHub Páginas (espejo frontal estático a través de Acciones)

Descripción general del sistema

EquipTrack — Sistema de Estoque para Eventos

Servidor: Cloudflare Workers Base de datos: D1 Interfaz: HTML + CSS + JS CI/CD: GitHub Actions Licencia: MIT

Un completo sistema de gestión de inventarios y alquileres para empresas de eventos. Gestiona sistemas de audio, cámaras, equipos de iluminación, tableros de vídeo y mobiliario para eventos en eventos simultáneos, con una personalización completa de la marca para que cualquier empresa pueda implementarla como su propia herramienta.

Módulos principales

MóduloDescripción
EventosCree, busque y administre eventos. Cada evento realiza un seguimiento de sus asignaciones de equipos.
AlquilerRegistro de entrada y salida de equipos por evento. Evita el overbooking en eventos simultáneos.
MantenimientoRegistrar daños, averías y reparaciones en equipos y cables. Seguimiento del historial de mantenimiento.
Base de datos (Banco)Vista de exploración completa de equipos, cables y otros elementos registrados.
RegístrateAgregue nuevos equipos por nombre, código de barras y categoría. Formularios separados para equipos, cables y artículos genéricos.
HistoriaRegistro de auditoría completo de todos los movimientos de alquiler y operaciones de eventos.
Usuarios (administrador)Panel exclusivo para administradores para administrar permisos y cuentas de inicio de sesión.

Arquitectura

Browser (Client)
  └─ public/
       ├─ login/index.html      ← Login + guest mode toggle
       ├─ index.html            ← Main SPA (all modules as sections)
       ├─ css/                  ← Modular styles: app.css, theme.css, login.css, event.css
       ├─ js/                   ← app.js, login.js, event.js, storage.js
       └─ assets/images/        ← Logo, favicon (WebP)

Cloudflare Worker (Edge)
  └─ src/worker.mjs
       ├─ Page routing          ← Redirects authenticated users away from login
       ├─ /api/login POST       ← bcrypt session authentication
       ├─ /api/logout POST      ← Session invalidation
       ├─ /api/auth/status GET  ← Auth check (guest detection)
       ├─ /api/events           ← CRUD for events
       ├─ /api/equipments       ← CRUD for equipment
       ├─ /api/cables           ← CRUD for cables
       ├─ /api/others           ← CRUD for generic items
       ├─ /api/rentals          ← Rental movements per event
       ├─ /api/maintenance      ← Damage and repair records
       ├─ /api/history          ← Full movement log
       └─ /api/users            ← Admin-only user management

Cloudflare D1 (SQLite)
  └─ migrations/0001_initial.sql
       ├─ users
       ├─ events
       ├─ equipments
       ├─ cables
       ├─ other_items
       ├─ rentals
       ├─ maintenance
       └─ history

Modo invitado

Los usuarios pueden ingresar como Invitado sin credenciales. En el modo invitado, todos los datos se conservan completamente en localStorage a través de la clase DataStorage en js/storage.js, que cambia de forma transparente entre la API y el almacenamiento local del navegador según el estado de autenticación. Los datos de los invitados se limitan a cada sesión del navegador y no requieren interacción con el servidor.

Personalización del tema

Todos los valores de color están controlados por propiedades personalizadas de CSS (--primary, --primary-2, --primary-3, etc.) definido en css/theme.css. Los usuarios pueden elegir un color de acento personalizado a través de un selector de color en la aplicación, que escribe en localStorage y se aplica inmediatamente a través de document.documentElement.style.setProperty(). Las imágenes de logotipos personalizados y los favicons también se pueden configurar y persistir en localStorage como cadenas base64.

Iconos SVG en línea

El sistema original utilizaba caracteres emoji como iconos de menú. Estos fueron reemplazados por SVG en línea personalizados cuyo stroke el color hereda currentColor, permitiéndoles adaptarse automáticamente al color del tema activo establecido a través del CSS --primary variable. Esto hace que todo el conjunto de íconos tenga en cuenta el tema sin sobrecarga JavaScript.

Alternar barra lateral

Se agregó una barra lateral plegable mediante un botón de alternancia (#sidebarToggle). Cuando está colapsada, la barra lateral se desliza fuera de la vista y el área de contenido principal se expande, lo que resulta útil en pantallas más pequeñas y para sesiones de trabajo concentradas.

Control de versiones automático y eliminación de caché (GitHub Actions)

Dos flujos de trabajo GitHub Actions automatizan el proceso de implementación:

  • implementar-páginas.yml — Al presionar para main, revisa el repositorio, inyecta el SHA corto de Git commit en todos __BUILD_VERSION__ marcadores de posición en archivos HTML (utilizados en ?v=__BUILD_VERSION__ enlaces CSS/JS), luego implementa public/ a GitHub páginas.
  • sincronización-docs.yml — Siempre que sea public/ cambios, lo copia automáticamente a docs/, inyecta el mismo token de versión de compilación, confirma y empuja, manteniendo el docs/ Carpeta sincronizada para alojamiento de páginas alternativo GitHub.

Cloudflare Implementación D1

# Install dependencies
npm install

# Login to Cloudflare
npx wrangler login

# Create D1 database
npx wrangler d1 create sistema-estoque-24h

# Apply schema migrations
npx wrangler d1 migrations apply sistema-estoque-24h --remote

# Export local SQLite data to D1-compatible SQL
npm run export:d1
npx wrangler d1 execute sistema-estoque-24h --remote --file d1-export.sql

# Deploy worker
npm run deploy

Desarrollo Local

npm install
npm run dev           # Express server on localhost
# or
npm run dev:worker    # Wrangler local emulation

Autoría y contribuciones

El sistema original fue diseñado y construido por Arturo Perico. Me uní al proyecto e introduje un conjunto de mejoras específicas, que se enumeran por separado a continuación para reflejar una atribución precisa.

◆ Sistema original: Arthur Perico

  • Diseño del sistema central y lógica empresarial completa.
  • Módulos de equipos, eventos, cables, mantenimiento e historial.
  • Inicio de sesión y autenticación de sesión (bcryptjs)
  • Panel de gestión de usuarios administradores
  • Migración de backend de Express/SQLite a Cloudflare Workers + D1
  • Esquema de base de datos y migraciones SQL
  • Scripts para SQLcopia de seguridad de ite y exportación de datos D1
  • Lógica de prevención de overbooking de alquiler
github.com/arthurperico

◆ Mis contribuciones — Patrick Araujo

  • Refactor SEO completo: meta descripción, Open Graph, Twitter Cards, datos estructurados JSON-LD en todas las páginas
  • Barra lateral plegable con botón de alternancia e ícono de chevron animado
  • Sistema de selección de color personalizado: los colores de acento persistieron localStorage, aplicado a través de variables CSS
  • Carga de logotipo personalizado y favicon, almacenado como base64 en localStorage
  • Se reemplazaron los íconos del menú emoji con íconos SVG en línea: se adaptan al color a través de CSS currentColor
  • Modo invitado: La clase DataStorage cambia de forma transparente entre la API y localStorage
  • Corrección de errores visuales y de botones
  • Control de versiones automático a través de GitHub Actions (flujos de trabajo de implementación de páginas + sincronización de documentos)
  • Eliminación de caché con ?v=__BUILD_VERSION__ inyectado en el momento del despliegue
  • Reorganización de archivos de proyecto: plano public/ → estructurado css/, js/, assets/ directorios
  • Conversión de activos: logotipo y favicon de PNG a WebP
github.com/PkLavc

Atribución de funciones de un vistazo

CaracterísticaAutor
Eventos, Alquiler, Mantenimiento, Módulos de Historiaarturoperico
Cloudflare Workers + motor D1arturoperico
autenticación de sesión bcryptjsarturoperico
Gestión de usuarios administradoresarturoperico
SEO: metaetiquetas, OG, Twitter, JSON-LDPkLavc
Alternar barra lateral plegablePkLavc
Selector de color + persistencia del temaPkLavc
Personalización de logotipo + faviconPkLavc
Iconos SVG en línea (color adaptable)PkLavc
Modo invitado (almacenamiento de datos local)PkLavc
GitHub Actions CI/CD + eliminación de cachéPkLavc
Reorganización de la estructura de archivos + activos WebPPkLavc

Stack tecnológico

JavaScript
Cloudflare Workers
Cloudflare D1
Node.js
expreso
bcryptjs
GitHub Actions
SQLite
Variables CSS
almacenamiento loca la API

Ver el proyecto