Pré-requisitos:
- Node.js 20+
- Java 17+
- Maven 3.9+
Backend (Javalin + Maven):
cd backend
mvn test
mvn exec:java "-Dexec.mainClass=com.nextcut.app.App"Por padrão, a API sobe em http://localhost:8080.
Important
Aviso para uso no GitHub Codespaces:
O backend rodando na porta 8080 precisa estar com a visibilidade Pública para o frontend conseguir acessá-lo sem ser bloqueado pela tela de autenticação do GitHub.
Rode no terminal: gh codespace ports visibility 8080:public -c $CODESPACE_NAME (A porta 8081 do Robô NÃO precisa ser pública, o Java acessa ela internamente).
Micro-serviço WhatsApp (Node.js): Responsável por enviar os códigos OTP (4 dígitos) via WhatsApp Web de forma invisível.
cd whatsapp-service
npm install
npm start(Um QR Code aparecerá no terminal para você escanear e conectar)
Frontend (Vite + React + Tailwind):
cd frontend
npm installConfiguração de Ambiente (.env): O frontend precisa saber onde o backend está, e o backend precisa saber onde o WhatsApp está.
- Frontend: Copie
cp .env.example .env. - Backend: Copie
cp .env.example .enve mantenhaEVOLUTION_API_URL=http://localhost:8081. Preencha os dados do PIX (opcional) se for testar a geração de QR Code.
Inicie o servidor frontend:
npm run devTestes (local e CI):
cd frontend && npm test
cd backend && mvn testNextCut é uma plataforma web de fila virtual para barbearias que desejam abandonar métodos manuais e oferecer uma experiência moderna aos clientes.
🎯 Estado atual: frontend React com telas de cliente (incluindo verificação de telefone via código OTP de 4 dígitos), acompanhamento da fila, login e painel administrativo; backend Java com Javalin, JDBC/PostgreSQL, autenticação BCrypt, fila FIFO com tratamento para clientes
IN_SERVICEeWAITING, além de WebSocket para atualização em tempo real. Algumas ações administrativas exibidas na UI ainda dependem de endpoints backend futuros, conforme planejamento do projeto.
- Caderno físico
- Confusão na ordem
- Cliente preso no local
- Falta de previsibilidade
- Gestão manual
- Entrada via link
- Fila em tempo real
- Senha automática
- Acompanhamento remoto
- Painel administrativo
- Entrar na fila com nome + telefone
- Receber senha sequencial automática
- Acompanhar posição em tempo real
- Ver estimativa de espera
- Sair da fila
- Login seguro
- Visualizar fila completa
- Chamar próximo cliente
- Remover clientes (previsto no planejamento)
- Abrir/Fechar atendimento (previsto no planejamento)
- Ajustar tempo médio de serviço (previsto no planejamento)
flowchart LR
A[Cliente / Barbeiro Frontend React] --> B[HTTP REST API]
A --> C[WebSocket Tempo Real]
B --> D[Javalin Controllers]
C --> E[WebSocket Manager]
D --> F[Service Layer]
E --> F
F --> G[DAO Layer]
G --> H[(Supabase PostgreSQL)]
F --> W[Node.js WPPConnect Bot]
flowchart TD
UI[Frontend React] --> Controller
Controller --> Service
Service --> DAO
DAO --> Database[(Supabase)]
Service --> QueueMemory[(ArrayDeque FIFO)]
Service --> NodeBot[WhatsApp Bot]
nextcut/
│
├── frontend/
│ ├── src/
│ │ ├── pages/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── services/
│ │ ├── routes/
│ │ └── tests/
│
├── backend/
│ ├── src/main/java/com/nextcut/
│ │ ├── controller/
│ │ ├── service/
│ │ ├── dao/
│ │ ├── model/
│ │ ├── websocket/
│ │ ├── config/
│ │ └── util/
│ │
│ └── src/test/
│
├── whatsapp-service/ (Node.js WPPConnect)
│
└── docs/- React JS
- Vite
- TailwindCSS
- Vitest (com
jsdom) - Axios
- React Router
- Context API
- WebSocket
- Java 17+
- Javalin
- Maven
- JDBC
- BCrypt
- JUnit
- Mockito
- Node.js 20+
- Express
- WPPConnect (WhatsApp Web JS)
- Supabase PostgreSQL
- JDBC
- Scripts SQL em
docs/sql/ - Autenticação própria com BCrypt
- Atualização em tempo real via WebSocket Javalin
sequenceDiagram
participant Cliente
participant Frontend
participant Backend
participant NodeBot
participant DB
participant WebSocket
Cliente->>Frontend: Preenche nome + telefone
Frontend->>Backend: POST /queue/request-otp
Backend->>NodeBot: POST /message/sendText (WPPConnect)
NodeBot-->>Cliente: Envia WhatsApp real
Backend-->>Frontend: 200 OK (Código salvo)
Cliente->>Frontend: Digita código de 4 dígitos na tela de OTP
Frontend->>Backend: POST /queue/verify-otp
Backend->>DB: Salva entrada
Backend->>Backend: Atualiza ArrayDeque
Backend->>WebSocket: Broadcast atualização
WebSocket-->>Frontend: Nova posição
Frontend-->>Cliente: Exibe senha e posição
- FIFO (First In, First Out)
- Senha sequencial
- Telefone único
- Cliente não duplica
- Apenas admin gerencia fila
- Atualização em tempo real
- Persistência híbrida (memória + banco)
| Campo | Tipo |
|---|---|
| id | UUID |
| username | VARCHAR |
| password_hash | TEXT |
| avg_service_minutes | INT |
| is_open | BOOLEAN |
| created_at | TIMESTAMP |
| Campo | Tipo |
|---|---|
| id | UUID |
| ticket_number | INT |
| client_name | VARCHAR |
| client_phone | VARCHAR |
| status | VARCHAR |
| position | INT |
| entered_at | TIMESTAMP |
| called_at | TIMESTAMP |
| paid_amount | DOUBLE |
| tip_amount | DOUBLE |
Estado atual do backend:
GET /
POST /queue/request-otp
POST /queue/verify-otp
POST /queue/join (Legado interno)
GET /queue/status/{phone}
POST /queue/leave/{phone}POST /login
POST /admin/next
POST /admin/payment/request
POST /admin/finish
POST /pix/gerarPlanejados para o painel administrativo:
POST /admin/remove/{id}
POST /admin/toggle/ws/queue- BCrypt password hashing
- Validação de telefone (OTP via WhatsApp)
- Proteção contra duplicidade
- Proteção de Rate Limiting (Anti-spam OTP)
- Token de sessão simples para o painel
- Erros controlados
Issue #9: o frontend usa Vitest + Testing Library (padrão recomendado com Vite); o comando continua sendo
npm test, como nos critérios de aceite.
- QueueService
- AuthService
- DatabaseConfig
- FIFO
- Duplicidade por telefone
- Componentes base
- Renderização com Testing Library
- Estados visuais de botao
flowchart LR
A[Testes Unitários] --> B[Testes Integração]
B --> C[Testes Fluxo Crítico]
C --> D[Deploy]
Veja os arquivos de especificação para detalhes:
- agents.md — Guia mestre para agentes de IA e developers
- specs.md — Especificações técnicas
- requirements.md — Requisitos funcionais
- docs/git-workflow.md — Fluxo Git, branches e checklist de PR
- CONTRIBUTING.md — Como contribuir e padrões do repositório
- Definição de arquitetura
- Especificação de requisitos
- Modelagem de dados
- Design de API
- Estrutura de pastas
- Estrutura base (frontend + backend)
- Banco de dados via JDBC/PostgreSQL
- Login admin
- Entrada na fila com validação OTP via WhatsApp
- Tela de acompanhamento
- Tempo real (WebSocket)
- Completar endpoints administrativos de remover cliente e alternar atendimento
- WhatsApp notifications (Micro-serviço WPPConnect)
- Multi-barbeiro
- Histórico avançado
- Dashboard analytics
- Painel TV
Fila instantânea e atualizações em segundos
Visual moderno e experiência premium
Base pronta para crescimento
Código estruturado para aprendizado
- Clean Architecture
- SOLID
- DRY
- KISS
- Testes obrigatórios
Este projeto pode ser adaptado para fins acadêmicos, comerciais ou evolutivos conforme necessidade.