Stack tecnológica
Produto: GV - Gestor de Vendas
Última atualização: 25/07/2026
Referência: código e dependências do repositório gv-dbai
Este documento lista as tecnologias usadas no projeto, a finalidade de cada uma e o estado atual de adoção. Versões indicadas correspondem às versões declaradas no repositório.
Resposta rápida
O GV - Gestor de Vendas é uma aplicação web em TypeScript, organizada como um monorepo npm com dois componentes implantáveis:
- frontend React 19 com TanStack Start, TanStack Router, TanStack Query, Vite e Tailwind CSS;
- backend REST em Node.js 22 e NestJS 10;
- PostgreSQL 16 com Prisma 6;
- Redis 7 provisionado para evolução de filas e processamento assíncrono;
- autenticação JWT, controle de acesso por perfil e escopo de lojas;
- integração REST com o ERP Protheus;
- operação em VPS Linux com CloudPanel e HTTPS.
Visão arquitetural
Navegador / tablet
|
| HTTPS
v
Frontend React + TanStack Start
|
| REST JSON / Bearer JWT
v
API Node.js + NestJS
|
+---- PostgreSQL 16 / Prisma
|
+---- Protheus REST
|
+---- Redis 7 (provisionado para evolução)
O backend é um monólito modular NestJS. Não há microserviços separados no estado atual. Frontend e API são aplicações distintas e possuem domínio, processo e porta próprios no ambiente de homologação.
Runtime e linguagem
| Tecnologia | Versão/base | Uso |
|---|---|---|
| Node.js | 22.x | Runtime do frontend, API, scripts e ferramentas |
| TypeScript | 5.8.3 | Linguagem principal do frontend e backend |
| JavaScript ES2022 | ES2022 | Alvo de compilação do frontend |
| npm | 10 ou superior | Dependências, scripts e workspaces |
| npm Workspaces | nativo do npm | Organização da API em apps/api |
Node.js 20.19+ também é compatível segundo a configuração do projeto, mas o
ambiente atual utiliza Node.js 22.
Frontend
Núcleo da aplicação
| Tecnologia | Versão declarada | Responsabilidade |
|---|---|---|
| React | 19.2.0 | Componentes e interface |
| React DOM | 19.2.0 | Renderização web |
| TanStack Start | 1.167.50 | Estrutura da aplicação e runtime web |
| TanStack Router | 1.168.25 | Rotas tipadas e navegação |
| TanStack Query | 5.83.0 | Cache, consultas e atualização de dados da API |
| Vite | 7.3.1 | Desenvolvimento, build e preview |
| Nitro | 3.0 beta | Dependência de runtime/build do TanStack Start |
| Zustand | 5.0.13 | Estado local e persistência de sessão/filtros |
Interface e design system
| Tecnologia | Versão declarada | Responsabilidade |
|---|---|---|
| Tailwind CSS | 4.2.1 | Estilos utilitários e tokens visuais |
| shadcn/ui | componentes no repositório | Base do design system |
| Radix UI | família 1.x e 2.x | Primitivos acessíveis de interface |
| Lucide React | 0.575.0 | Ícones |
| Recharts | 2.15.4 | Gráficos e visualizações |
| React Easy Crop | 6.2.3 | Recorte e enquadramento de fotos de perfil |
| Class Variance Authority | 0.7.1 | Variantes dos componentes |
| clsx | 2.1.1 | Composição condicional de classes |
| tailwind-merge | 3.5.0 | Resolução de classes Tailwind |
| tw-animate-css | 1.3.4 | Animações de interface |
| Sonner | 2.0.7 | Mensagens e notificações na tela |
Outros componentes de interface:
cmdkpara menus de comando;vaulpara drawers;embla-carousel-reactpara carrosséis;react-day-pickerpara calendários;react-resizable-panelspara painéis redimensionáveis;input-otppara campos de código;@dnd-kit/corepara arrastar vendedores na lista da vez.
Formulários, dados e utilitários
| Tecnologia | Versão declarada | Uso |
|---|---|---|
| React Hook Form | 7.71.2 | Infraestrutura de formulários |
| Zod | 3.24.2 | Validação de schemas no frontend |
| Hookform Resolvers | 5.2.2 | Integração entre formulários e validação |
| date-fns | 4.1.0 | Datas, meses, períodos e calendários |
SheetJS xlsx | 0.18.5 | Leitura e geração de XLSX/CSV |
| Fetch API | nativa | Cliente HTTP para a API REST |
Tablet, PWA e operação offline
| Recurso | Tecnologia | Estado |
|---|---|---|
| Instalação web | Web App Manifest | Implementado |
| Fila offline | IndexedDB | Implementado |
| IDs de eventos | Web Crypto randomUUID | Implementado |
| Detecção de conectividade | navigator.onLine | Implementado |
| Sincronização | REST em lote | Implementado |
| Aplicativo Android | Capacitor 6 | Empacotado em APK, minSdkVersion 22 |
| Service Worker avançado | Workbox ou equivalente | Não configurado |
O tablet funciona como experiência web/PWA. Eventos de atendimento são armazenados no IndexedDB quando necessário e enviados em lote à API.
Backend
Plataforma
| Tecnologia | Versão declarada | Responsabilidade |
|---|---|---|
| NestJS | 10.4.15 | Framework da API e módulos de negócio |
| NestJS Platform Express | 10.4.15 | Adaptador HTTP e upload multipart |
| NestJS JWT | 11.0.2 | Emissão e validação de tokens |
| RxJS | 7.8.1 | Base reativa utilizada pelo NestJS |
| Reflect Metadata | 0.2.2 | Decorators e metadados do NestJS |
| Prisma Client | 6.1.0 | Acesso tipado ao PostgreSQL |
SheetJS xlsx | 0.18.5 | Importação de planilhas |
| Sharp | 0.34.5 | Validação, redimensionamento e conversão de fotos para WebP |
Arquitetura da API
- API REST com prefixo versionado
/api/v1; - controllers NestJS por domínio;
- services para regras de negócio;
- Prisma para persistência;
- JSON como formato principal;
multipart/form-datapara planilhas e fotos;- arquivos de fotos em diretório persistente e somente a URL no banco;
- CORS configurável por ambiente;
- health check em
/api/v1/health; - logs de integração e trilha de auditoria persistidos no banco.
Módulos implementados:
- autenticação;
- empresas, lojas, usuários e vendedores;
- metas e distribuição diária;
- campanhas e motivos de perda;
- feriados, lotações, transferências e ausências;
- tablet, eventos e atendimentos;
- vendas e importações;
- validação diária e Validador NF;
- dashboard, relatórios e feedbacks;
- configurações, auditoria e integração Protheus.
Autenticação e segurança
| Recurso | Implementação |
|---|---|
| Autenticação | JWT Bearer |
| Tokens | Access token e refresh token |
| Senhas e PINs | scrypt com salt aleatório |
| Comparação de hash | timingSafeEqual do Node.js |
| Autorização | Guards e decorators de papéis do NestJS |
| Escopo | Empresa, supervisor, loja, vendedor e dispositivo |
| Upload de fotos | Multipart limitado a 2 MB, recodificado como WebP 512x512 |
| Segredos | Variáveis de ambiente |
Papéis principais:
SUPER_ADMINeADMIN;DIRECTOR;REGIONAL_MANAGER;STORE_MANAGER;SELLER;DEVICE.
Banco de dados
| Tecnologia | Versão/base | Uso |
|---|---|---|
| PostgreSQL | 16 Alpine | Banco relacional transacional |
| Prisma ORM | 6.1.0 | Schema, client, migrations e seed |
| UUID | nativo/modelado pelo Prisma | Identificadores das entidades |
| JSON/JSONB | PostgreSQL via Prisma | Payloads externos, configurações e dias |
Recursos de persistência:
- schema Prisma versionado;
- migrations incrementais;
- seed de desenvolvimento/homologação;
- restrições e chaves únicas;
- auditoria de alterações;
- logs de integração;
- armazenamento do payload recebido do Protheus;
- controle de versões e divergências de NF.
Redis e processamento assíncrono
| Tecnologia | Versão/base | Estado |
|---|---|---|
| Redis | 7 Alpine | Provisionado no Docker Compose |
| Persistência Redis | AOF na homologação | Configurada |
| BullMQ | Não instalado | Ainda não utilizado |
| Cliente Redis na API | Não instalado | Ainda não utilizado |
O Redis faz parte da infraestrutura preparada, porém a API atual não o consome. O agendador Protheus utiliza um temporizador interno do processo NestJS. Para produção com múltiplas instâncias, é recomendado migrar os trabalhos agendados e filas para um mecanismo distribuído baseado em Redis.
Integrações e arquivos
Protheus
| Item | Implementação |
|---|---|
| Protocolo | HTTP REST |
| Autenticação da origem | Basic Auth |
| Cliente HTTP | Fetch API nativa do Node.js |
| Parâmetros | CNPJ, data inicial e data final |
| Agendamento | Temporizador interno no processo NestJS |
| Frequência | Horária, revisão diária e fechamento mensal |
| Idempotência | Chave documental e hash do payload |
| Divergências | Validador NF |
| Monitoramento | Logs persistidos e reprocessamento |
IBGE Localidades
| Item | Implementação |
|---|---|
| Fonte | API de Localidades do IBGE |
| Uso | Padronização de UF e município no cadastro de lojas |
| Consulta | Municípios carregados sob demanda após selecionar a UF |
| Cache | React Query por 30 dias |
| Contingência | Cidades já cadastradas permanecem disponíveis como fallback |
Planilhas
- formatos aceitos: XLSX, XLS e CSV;
- biblioteca: SheetJS
xlsx; - upload multipart;
- limite atual de 10 MB;
- importação de vendas e script de importação de metas;
- relatório de linhas criadas, atualizadas e rejeitadas.
Infraestrutura local
| Serviço | Imagem/tecnologia | Porta local |
|---|---|---|
| Frontend | Vite | 8080 |
| API | NestJS | 3000 |
| PostgreSQL | postgres:16-alpine | 55432 |
| Redis | redis:7-alpine | 56379 |
PostgreSQL e Redis sobem com Docker Compose:
npm run dev:infra
Frontend e API são executados separadamente:
npm run dev:web
npm run dev:api
Hospedagem e deploy
Ambiente atual de homologação
| Camada | Tecnologia |
|---|---|
| Servidor | VPS Linux |
| Painel | CloudPanel |
| Runtime | Node.js 22 |
| Processos | Aplicações Node gerenciadas no servidor |
| TLS | HTTPS configurado pelo CloudPanel |
| Banco | PostgreSQL 16 em container |
| Redis | Redis 7 em container |
| Containers | Docker e Docker Compose |
| Frontend | Build Vite servido atualmente por vite preview |
| API | Build NestJS executado por Node.js |
Domínios da homologação:
- frontend:
https://technos.projeto.dbai.com.br; - API:
https://api.technos.projeto.dbai.com.br/api/v1.
O uso de vite preview é adequado para a homologação atual, mas deve ser substituído
por um runtime final validado antes da produção definitiva.
Cloudflare
O repositório contém:
@cloudflare/vite-plugin;- configuração
wrangler.jsonc; - compatibilidade
nodejs_compat.
Essa configuração prepara o build para Cloudflare, mas o ambiente de homologação atual está na VPS/CloudPanel. Cloudflare não é a hospedagem operacional atual.
Desenvolvimento e qualidade
| Tecnologia | Versão declarada | Uso |
|---|---|---|
| ESLint | 9.32.0 | Análise estática |
| typescript-eslint | 8.56.1 | Regras TypeScript |
| Prettier | 3.7.3 | Formatação |
| Nest CLI | 10.4.9 | Build e desenvolvimento da API |
| ts-node | 10.9.2 | Execução TypeScript auxiliar |
| tsx | 4.20.6 | Seeds e scripts TypeScript |
| Git | versão do servidor/local | Controle de versão |
Comandos principais:
npm install
npm run dev:web
npm run dev:api
npm run build
npm run build:api
npm run lint
npm run format
Estado dos testes e automação
| Recurso | Estado atual |
|---|---|
@nestjs/testing | Instalado |
| Testes unitários automatizados | Não configurados no repositório |
| Testes de integração automatizados | Não configurados |
| Playwright/Cypress | Não instalados |
| Pipeline CI/CD | Não configurado no repositório |
| QA manual | Documentado e executado em homologação |
| OpenAPI/Swagger | Ainda não publicado |
Antes de produção definitiva, recomenda-se priorizar testes automatizados dos fluxos de autenticação, permissões, metas, integração Protheus, validações e tablet.
O que não faz parte da stack atual
Para evitar respostas imprecisas:
- não há arquitetura de microserviços;
- não há Kubernetes;
- não há BullMQ ou fila Redis conectada à API;
- não há código Android nativo específico de negócio; o APK usa Capacitor/WebView;
- não há Swagger/OpenAPI gerado;
- não há suíte Playwright, Cypress, Vitest ou Jest configurada;
- não há armazenamento S3 ou serviço equivalente configurado;
- não há pipeline CI/CD versionado no repositório;
- Cloudflare está preparado no build, mas não hospeda a homologação atual.
Arquivos que comprovam a stack
| Arquivo | Conteúdo |
|---|---|
package.json | Dependências e scripts do frontend |
apps/api/package.json | Dependências e scripts do backend |
apps/api/prisma/schema.prisma | Banco e modelo de dados |
infra/docker-compose.dev.yml | PostgreSQL e Redis locais |
infra/docker-compose.homolog.yml | PostgreSQL e Redis da homologação |
infra/env.example | Variáveis locais |
vite.config.ts | Build e runtime frontend |
components.json | Configuração shadcn/ui |
tsconfig.json | Configuração TypeScript |
eslint.config.js | Regras de lint |
public/manifest.webmanifest | PWA |
wrangler.jsonc | Compatibilidade Cloudflare |
Perguntas e respostas rápidas
Qual é a stack principal?
React, TypeScript, TanStack Start, Vite, Tailwind CSS, NestJS, Prisma e PostgreSQL.
É SPA ou SSR?
O frontend usa TanStack Start e possui entrada de servidor compatível com SSR. A
operação atual também utiliza navegação cliente e consumo de API REST.
É monolito ou microserviços?
É um monorepo com frontend e API separados. A API é um monólito modular NestJS.
Qual banco é usado?
PostgreSQL 16, acessado pelo Prisma 6.
Como funciona a autenticação?
JWT com access e refresh tokens, senhas/PINs em scrypt, papéis e escopo por loja.
Tem integração com ERP?
Sim. O Protheus é consumido por REST com sincronizações horária, diária e mensal.
O tablet funciona offline?
Os eventos operacionais usam IndexedDB e sincronização em lote quando a conexão
volta. Não há service worker avançado configurado.
Redis é usado?
Está provisionado, mas ainda não conectado ao código. É a base prevista para filas e
jobs distribuídos.
Onde está hospedado?
A homologação está em VPS Linux com CloudPanel, Node.js, Docker, PostgreSQL e Redis.
Existe aplicativo Android?
Sim. A experiência web/tablet está empacotada com Capacitor 6. O APK aceita
instalação técnica a partir do Android 5.1 (minSdkVersion 22), mas o mínimo
operacional indicado é Android 10, 3 GB de RAM e 32 GB; para novas compras,
recomenda-se Android 12 ou superior, 4 GB de RAM e 64 GB.
Existem testes automatizados?
Ainda não há suíte configurada. O projeto possui lint, build e roteiros de QA manual.
