Documentação/APIs e integrações
TI, arquitetura e gestão
9 min de leitura

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

TecnologiaVersão/baseUso
Node.js22.xRuntime do frontend, API, scripts e ferramentas
TypeScript5.8.3Linguagem principal do frontend e backend
JavaScript ES2022ES2022Alvo de compilação do frontend
npm10 ou superiorDependências, scripts e workspaces
npm Workspacesnativo do npmOrganizaçã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

TecnologiaVersão declaradaResponsabilidade
React19.2.0Componentes e interface
React DOM19.2.0Renderização web
TanStack Start1.167.50Estrutura da aplicação e runtime web
TanStack Router1.168.25Rotas tipadas e navegação
TanStack Query5.83.0Cache, consultas e atualização de dados da API
Vite7.3.1Desenvolvimento, build e preview
Nitro3.0 betaDependência de runtime/build do TanStack Start
Zustand5.0.13Estado local e persistência de sessão/filtros

Interface e design system

TecnologiaVersão declaradaResponsabilidade
Tailwind CSS4.2.1Estilos utilitários e tokens visuais
shadcn/uicomponentes no repositórioBase do design system
Radix UIfamília 1.x e 2.xPrimitivos acessíveis de interface
Lucide React0.575.0Ícones
Recharts2.15.4Gráficos e visualizações
React Easy Crop6.2.3Recorte e enquadramento de fotos de perfil
Class Variance Authority0.7.1Variantes dos componentes
clsx2.1.1Composição condicional de classes
tailwind-merge3.5.0Resolução de classes Tailwind
tw-animate-css1.3.4Animações de interface
Sonner2.0.7Mensagens e notificações na tela

Outros componentes de interface:

  • cmdk para menus de comando;
  • vaul para drawers;
  • embla-carousel-react para carrosséis;
  • react-day-picker para calendários;
  • react-resizable-panels para painéis redimensionáveis;
  • input-otp para campos de código;
  • @dnd-kit/core para arrastar vendedores na lista da vez.

Formulários, dados e utilitários

TecnologiaVersão declaradaUso
React Hook Form7.71.2Infraestrutura de formulários
Zod3.24.2Validação de schemas no frontend
Hookform Resolvers5.2.2Integração entre formulários e validação
date-fns4.1.0Datas, meses, períodos e calendários
SheetJS xlsx0.18.5Leitura e geração de XLSX/CSV
Fetch APInativaCliente HTTP para a API REST

Tablet, PWA e operação offline

RecursoTecnologiaEstado
Instalação webWeb App ManifestImplementado
Fila offlineIndexedDBImplementado
IDs de eventosWeb Crypto randomUUIDImplementado
Detecção de conectividadenavigator.onLineImplementado
SincronizaçãoREST em loteImplementado
Aplicativo AndroidCapacitor 6Empacotado em APK, minSdkVersion 22
Service Worker avançadoWorkbox ou equivalenteNã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

TecnologiaVersão declaradaResponsabilidade
NestJS10.4.15Framework da API e módulos de negócio
NestJS Platform Express10.4.15Adaptador HTTP e upload multipart
NestJS JWT11.0.2Emissão e validação de tokens
RxJS7.8.1Base reativa utilizada pelo NestJS
Reflect Metadata0.2.2Decorators e metadados do NestJS
Prisma Client6.1.0Acesso tipado ao PostgreSQL
SheetJS xlsx0.18.5Importação de planilhas
Sharp0.34.5Validaçã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-data para 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

RecursoImplementação
AutenticaçãoJWT Bearer
TokensAccess token e refresh token
Senhas e PINsscrypt com salt aleatório
Comparação de hashtimingSafeEqual do Node.js
AutorizaçãoGuards e decorators de papéis do NestJS
EscopoEmpresa, supervisor, loja, vendedor e dispositivo
Upload de fotosMultipart limitado a 2 MB, recodificado como WebP 512x512
SegredosVariáveis de ambiente

Papéis principais:

  • SUPER_ADMIN e ADMIN;
  • DIRECTOR;
  • REGIONAL_MANAGER;
  • STORE_MANAGER;
  • SELLER;
  • DEVICE.

Banco de dados

TecnologiaVersão/baseUso
PostgreSQL16 AlpineBanco relacional transacional
Prisma ORM6.1.0Schema, client, migrations e seed
UUIDnativo/modelado pelo PrismaIdentificadores das entidades
JSON/JSONBPostgreSQL via PrismaPayloads 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

TecnologiaVersão/baseEstado
Redis7 AlpineProvisionado no Docker Compose
Persistência RedisAOF na homologaçãoConfigurada
BullMQNão instaladoAinda não utilizado
Cliente Redis na APINão instaladoAinda 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

ItemImplementação
ProtocoloHTTP REST
Autenticação da origemBasic Auth
Cliente HTTPFetch API nativa do Node.js
ParâmetrosCNPJ, data inicial e data final
AgendamentoTemporizador interno no processo NestJS
FrequênciaHorária, revisão diária e fechamento mensal
IdempotênciaChave documental e hash do payload
DivergênciasValidador NF
MonitoramentoLogs persistidos e reprocessamento

IBGE Localidades

ItemImplementação
FonteAPI de Localidades do IBGE
UsoPadronização de UF e município no cadastro de lojas
ConsultaMunicípios carregados sob demanda após selecionar a UF
CacheReact Query por 30 dias
ContingênciaCidades 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çoImagem/tecnologiaPorta local
FrontendVite8080
APINestJS3000
PostgreSQLpostgres:16-alpine55432
Redisredis:7-alpine56379

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

CamadaTecnologia
ServidorVPS Linux
PainelCloudPanel
RuntimeNode.js 22
ProcessosAplicações Node gerenciadas no servidor
TLSHTTPS configurado pelo CloudPanel
BancoPostgreSQL 16 em container
RedisRedis 7 em container
ContainersDocker e Docker Compose
FrontendBuild Vite servido atualmente por vite preview
APIBuild 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

TecnologiaVersão declaradaUso
ESLint9.32.0Análise estática
typescript-eslint8.56.1Regras TypeScript
Prettier3.7.3Formatação
Nest CLI10.4.9Build e desenvolvimento da API
ts-node10.9.2Execução TypeScript auxiliar
tsx4.20.6Seeds e scripts TypeScript
Gitversão do servidor/localControle 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

RecursoEstado atual
@nestjs/testingInstalado
Testes unitários automatizadosNão configurados no repositório
Testes de integração automatizadosNão configurados
Playwright/CypressNão instalados
Pipeline CI/CDNão configurado no repositório
QA manualDocumentado e executado em homologação
OpenAPI/SwaggerAinda 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

ArquivoConteúdo
package.jsonDependências e scripts do frontend
apps/api/package.jsonDependências e scripts do backend
apps/api/prisma/schema.prismaBanco e modelo de dados
infra/docker-compose.dev.ymlPostgreSQL e Redis locais
infra/docker-compose.homolog.ymlPostgreSQL e Redis da homologação
infra/env.exampleVariáveis locais
vite.config.tsBuild e runtime frontend
components.jsonConfiguração shadcn/ui
tsconfig.jsonConfiguração TypeScript
eslint.config.jsRegras de lint
public/manifest.webmanifestPWA
wrangler.jsoncCompatibilidade 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.