armando 1f0559f544 Center the landing hero copy in the middle of the screen.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 05:26:31 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00
2026-09-16 03:56:18 -03:00

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.

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 (/cliente-1, /cliente-2).

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
Cliente 1 (admin) /cliente-1/login xena.w@example.org SinkaAdmin!1
Cliente 1 (manager) /cliente-1/login james.b@example.com SinkaManager!1
Cliente 1 (operador) /cliente-1/login ursula.b@example.com SinkaOperador!1
Cliente 2 (admin) /cliente-2/login ivan.p@example.net Cliente2Admin!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

Entrega

Push em main sobe a demo na hora. Neste desafio isso basta; em produção o caminho é merge request → pipeline (testes e build) → merge → deploy. Detalhes em docs/CI.md.

Description
No description provided
Readme 19 MiB
Languages
TypeScript 94.7%
CSS 4%
JavaScript 0.9%
Dockerfile 0.4%