sinka/README.md
2026-09-16 05:04:04 +00:00

2.7 KiB

Sinka

SaaS de inteligência logística. Cada operação simula frete, compara transportadoras e acompanha custo — com os dados de uma empresa isolados dos das outras.

Demo: armandosoares.tech · código: git.armandosoares.tech/armando/sinka

O que faz

  • Cotação de frete (peso cubado, distância, ad valorem) a partir de CEP (ViaCEP) e coordenadas (Nominatim)
  • Ranking de transportadoras da própria empresa
  • Clientes, equipe e papéis (Administrador, Manager, Operador)
  • Dashboard de custo
  • Chat interno (admin da plataforma ↔ empresa)
  • Arquivos de operação (CSV/XLSX) por empresa

Dois produtos no mesmo sistema: o admin da Sinka (/admin) cria e suspende empresas; cada empresa entra pelo slug na URL (/demo, /outra-empresa).

Isolamento

Um database MySQL por empresa (sinka_t_<slug>). O catálogo fica em sinka_platform.

O JWT carrega o tenant. As queries de operação usam o PrismaClient daquele banco — um WHERE errado não cruza empresa. Backup, restore e exclusão também são por tenant.

Stack

Camada Tecnologia
API NestJS, Prisma, JWT em cookie httpOnly
Web Next.js (App Router)
Dados MySQL 8, Redis
Infra Docker Compose
Next.js  →  NestJS /api  →  sinka_platform
                 ↓                ↓
               Redis       sinka_t_<slug> …

Estrutura

api/     REST, auth, regras, Prisma
web/     landing, login, painéis
docs/    arquitetura, decisões, testes

Como rodar

cp .env.example .env
docker compose up -d
cd api && npm install && npm run prisma:setup && npm run start:dev
cd web && npm install && npm run dev

MySQL e Redis sobem no Docker; API e web no Node da máquina.

Tudo em containers:

cp .env.example .env
docker compose --profile full up -d --build

Contas

Área URL E-mail Senha
Plataforma /admin/login tina.r@example.net SinkaPlatform!1
Empresa (admin) /demo/login xena.w@example.org SinkaAdmin!1
Empresa (manager) /demo/login james.b@example.com SinkaManager!1
Empresa (operador) /demo/login ursula.b@example.com SinkaOperador!1

Testes

npm test
npm run test:cov

Jest na API: frete, papéis, tenancy, chat, dashboard. A cobertura mede regra de negócio. Detalhes em docs/TESTING.md.

Documentação