Aplicativo da Web Full Stack

EquipTrack

Sistema de gerenciamento de inventário e aluguel de equipamentos para empresas de eventos. Rastreia áudio, vídeo, iluminação e móveis em eventos simultâneos – totalmente personalizável por empresa por meio de tema, logotipo e favicon. Implantado em Cloudflare Workers + D1.

O que é EquipTrack?

EquipTrack é um sistema de controle de inventário e aluguel baseado na web para empresas de eventos. Ele gerencia todo o ciclo de vida do aluguel de equipamentos: criação de eventos, atribuição de equipamentos, check-in e check-out de itens, registro de manutenção e rastreamento de danos. Os recursos de personalização – logotipo trocável, favicon e temas coloridos – são integrados precisamente para que qualquer empresa possa adotá-los como seus.

O sistema começou como uma ferramenta interna por Arthur Perico, que projetou e construiu a plataforma principal e a migrou para Cloudflare Workers + D1 para implantação na borda. Mais tarde, entrei no projeto e introduzi um conjunto de melhorias que vão desde melhorias de UI/UX até automação de CI/CD.

Escopo Técnico

  • Stack: JavaScript, Node.js, Express (local), Cloudflare Workers, Cloudflare D1 (SQLite-compatível), bcryptjs, GitHub Actions
  • Tipo de sistema: Aplicativo web full-stack, backend sem servidor, sistema estilo SaaS de gerenciamento de inventário
  • Implantação: Cloudflare Workers (API + ativos) + GitHub Páginas (espelho de front-end estático via Actions)

Visão geral do sistema

EquipTrack — Sistema de Estoque para Eventos

Backend: Cloudflare Workers Banco de dados: D1 Front-end: HTML + CSS + JS CI/CD: GitHub Actions Licença: MIT

Um sistema completo de gerenciamento de estoque e aluguel para empresas de eventos. Gerencia sistemas de áudio, câmeras, equipamentos de iluminação, placas de vídeo e móveis para eventos em eventos simultâneos — com personalização total da marca para que qualquer empresa possa implantá-lo como sua própria ferramenta.

Módulos principais

MóduloDescrição
EventosCrie, pesquise e gerencie eventos. Cada evento rastreia suas atribuições de equipamento.
AluguelVerifique a entrada e saída de equipamentos por evento. Evita overbooking em eventos simultâneos.
ManutençãoRegistre danos, quebras e reparos em equipamentos e cabos. Rastreia o histórico de manutenção.
Banco de dados (Banco)Visualização completa de equipamentos, cabos e outros itens registrados.
Cadastre-seAdicione novos equipamentos por nome, código de barras e categoria. Formulários separados para equipamentos, cabos e itens genéricos.
HistóriaRegistro de auditoria completo de todos os movimentos de aluguel e operações de eventos.
Usuários (Administrador)Painel exclusivo de administrador para gerenciar contas de login e permissões.

Arquitetura

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 visitante

Os usuários podem entrar como Convidado sem credenciais. No modo visitante, todos os dados são mantidos inteiramente em localStorage pela classe DataStorage em js/storage.js, que alterna de forma transparente entre a API e o armazenamento local do navegador, dependendo do estado de autenticação. Os dados do convidado têm escopo por sessão do navegador e não requerem interação com o servidor.

Personalização do tema

Todos os valores de cores são orientados por propriedades personalizadas CSS (--primary, --primary-2, --primary-3, etc.) definido em css/theme.css. Os usuários podem escolher uma cor de destaque personalizada por meio de um seletor de cores no aplicativo, que escreve para localStorage e aplica-se imediatamente via document.documentElement.style.setProperty(). Imagens de logotipo personalizadas e favicons também podem ser definidas e persistidas para localStorage como strings base64.

Ícones SVG embutidos

O sistema original usava caracteres emoji como ícones de menu. Eles foram substituídos por SVGs embutidos personalizados, cujos stroke herança de cor currentColor, permitindo que eles se adaptem automaticamente à cor do tema ativo definida por meio do CSS --primary variável. Isso faz com que todo o conjunto de ícones reconheça o tema com zero JavaScript de sobrecarga.

Alternar barra lateral

Uma barra lateral recolhível foi adicionada por meio de um botão de alternância (#sidebarToggle). Quando recolhida, a barra lateral desaparece e a área de conteúdo principal se expande – útil em telas menores e para sessões de trabalho focadas.

Versionamento automático e bloqueio de cache (GitHub Actions)

Dois fluxos de trabalho GitHub Actions automatizam o pipeline de implantação:

  • implantar páginas.yml - Ao pressionar para main, verifica o repositório, injeta o curto Git commit SHA em todos __BUILD_VERSION__ espaços reservados em arquivos HTML (usados em ?v=__BUILD_VERSION__ Links CSS/JS) e, em seguida, implanta public/ para GitHub páginas.
  • sincronizar-docs.yml - Sempre que public/ alterações, copia-o automaticamente para docs/, injeta o mesmo token de versão de compilação, confirma e envia push — mantendo o docs/ pasta sincronizada para hospedagem alternativa de páginas GitHub.

Cloudflare Implantação 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

Desenvolvimento Local

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

Autoria e Contribuições

O sistema original foi projetado e construído por Arthur Perico. Entrei no projeto e introduzi um conjunto de melhorias direcionadas – listadas separadamente abaixo para refletir uma atribuição precisa.

◆ Sistema Original — Arthur Perico

  • Design central do sistema e lógica de negócios completa
  • Módulos de equipamentos, eventos, cabos, manutenção e histórico
  • Autenticação de login e sessão (bcryptjs)
  • Painel de gerenciamento de usuários administradores
  • Migração de backend de Express/SQLite para Cloudflare Workers + D1
  • Esquema de banco de dados e migrações SQL
  • Scripts para backup SQLite e exportação de dados D1
  • Lógica de prevenção de overbooking de aluguel
github.com/arthurperico

◆ Minhas contribuições — Patrick Araujo

  • Refatoração completa de SEO: meta descrição, Open Graph, Twitter Cards, dados estruturados JSON-LD em todas as páginas
  • Barra lateral dobrável com botão de alternância e ícone de divisa animado
  • Sistema de seleção de cores personalizado – cores de destaque persistidas localStorage, aplicado por meio de variáveis CSS
  • Upload de logotipo personalizado e favicon, armazenado como base64 em localStorage
  • Ícones de menu emoji substituídos por ícones SVG embutidos – adaptáveis a cores via CSS currentColor
  • Modo visitante: a classe DataStorage alterna transparentemente entre a API e localStorage
  • Correções de bugs visuais e de botões
  • Controle de versão automático via GitHub Actions (fluxos de trabalho de implantação + fluxos de trabalho de sincronização)
  • Quebra de cache com ?v=__BUILD_VERSION__ injetado no momento da implantação
  • Reorganização do arquivo do projeto: plana public/ → estruturado css/, js/, assets/ diretórios
  • Conversão de ativos: logotipo e favicon de PNG para WebP
github.com/PkLavc

Resumo da atribuição de recursos

RecursoAutor
Módulos de Eventos, Aluguel, Manutenção, Históricoarthurperico
Cloudflare Workers + backend D1arthurperico
autenticação de sessão bcryptjsarthurperico
Gerenciamento de usuários administradoresarthurperico
SEO: meta tags, OG, Twitter, JSON-LDPkLavc
Alternar barra lateral recolhívelPkLavc
Seletor de cores + persistência de temaPkLavc
Personalização de logotipo + faviconPkLavc
Ícones SVG embutidos (cor adaptável)PkLavc
Modo visitante (localStorage DataStorage)PkLavc
GitHub Actions CI/CD + impedimento de cachePkLavc
Reorganização da estrutura de arquivos + ativos WebPPkLavc

Stack tecnológica

JavaScript
Cloudflare Workers
Cloudflare D1
Node.js
Expresso
bcryptjs
GitHub Actions
SQLite
Variáveis CSS
armazenamento loca la API

Veja o projeto