Plataforma completa para gerenciamento de lojas de card games (Pokémon, Magic: The Gathering, Yu-Gi-Oh! e outros). Painel administrativo moderno, frente de caixa, comandas por QR Code, crediário, assistente IA e conformidade LGPD.
Produção: santuarionerd.com.br — o antigo santuarionerd.tech redireciona (301) para cá.
- Venda direta no balcão sem QR Code
- Catálogo com busca por nome, categoria e código de barras
- Carrinho com controle de estoque em tempo real
- Desconto percentual por venda
- Múltiplas formas de pagamento: Pix, Dinheiro, Cartão Crédito/Débito, Crediário, Pontos, Cashback
- Geração de comprovante para impressão térmica (80mm) e PDF
- Histórico navegável por qualquer data com popup de detalhes
- Clientes escaneiam QR Code na mesa e abrem comanda pelo celular
- Login rápido por CPF + WhatsApp com consentimento LGPD integrado
- Dashboard ao vivo com SignalR — novas comandas aparecem sem recarregar
- Admin pode adicionar itens, fechar (com seleção de pagamento) ou cancelar comandas
- Leitor de código de barras via câmera ou USB no painel admin
- Saldo de pontos e cashback do cliente exibido na modal de fechamento (bloqueia se insuficiente)
- Cliente pode aplicar e remover pontos de fidelidade antes do fechamento
- Desconto de pontos aplicados deduzido do
TotalInCentsno fechamento (analytics corretos)
- Criação automática ao fechar comanda/venda no crédito
- Acumula dívidas em aberto por cliente
- Registro de pagamentos parciais com histórico
- Relatório de inadimplência
- Cadastro de cards com integração às APIs: Pokémon TCG, Magic (Scryfall) e Yu-Gi-Oh!
- Busca automática de imagens e metadados via APIs externas
- Upload de imagens (JPEG/PNG/WebP, máx 5 MB)
- Alertas de estoque baixo
- Categorias customizáveis
- Cadastro com imagem de capa, jogo (texto livre), data, vagas e prêmio
- Inscrições com controle de vagas
- Listagem pública e painel admin
- Dashboard com receita, custo e margem por período
- Gráfico de barras diário
- Breakdown por forma de pagamento com drill-down de transações
- Filtros por data, cliente e faixa de valor
- Exportação em PDF
- Chat flutuante no painel admin alimentado pelo Google Gemini 2.5 Flash
- Contexto automático do negócio (comandas, estoque, crediário)
- Sugestões rápidas de perguntas
- Histórico de comandas com detalhamento de itens
- Saldo de pontos de fidelidade e cashback/crédito na loja
- Perfil editável com upload de foto (JPEG/PNG/WebP, máx 5 MB)
- ThemeToggle (modo claro/escuro persistido)
- Modo RPG — comanda exibida como "pergaminho" temático
- Histórico de campeonatos e inscrições
- Gestão de usuários com funções (Admin / Customer)
- Pontos de fidelidade e saldo cashback por cliente
- Inscrição manual de clientes em campeonatos; remoção de participantes
- Nova dívida (crediário) com lista de itens e cálculo automático do total
- Anúncios e promoções
- Geração de QR Codes para mesas
- Painel LGPD para resposta de solicitações de titulares
- Formulário público
/lgpdcom validação de CPF (Módulo 11) - Audit log imutável com IP anonimizado (SHA-256)
- Política de Privacidade e Termos de Uso
- Painel admin para gestão de solicitações dentro do prazo legal
| Tecnologia | Finalidade |
|---|---|
| ASP.NET Core 10 | API REST |
| Entity Framework Core 8 | ORM — PostgreSQL (sem migrations automáticas) |
| PostgreSQL 16 | Usuários, produtos, comandas, crediários, campeonatos |
| MongoDB 7 | Vendas avulsas (event store imutável) |
| SignalR | Tempo real — comandas ao vivo |
| JWT (HttpOnly Cookies) | Autenticação stateless |
| BCrypt.Net | Hash de senhas |
| Google Gemini 2.5 Flash | Assistente IA (HTTP direto, sem SDK) |
| xUnit + Moq + FluentAssertions | Testes unitários |
| Tecnologia | Finalidade |
|---|---|
| Next.js 14 (App Router) | Framework React SSR |
| TypeScript 5 | Tipagem estática |
| Tailwind CSS 3 | Estilização |
| Axios | Chamadas HTTP com interceptors de refresh token |
| @microsoft/signalr | Cliente SignalR |
| lucide-react | Ícones |
| react-hot-toast | Notificações |
| clsx | Classes condicionais |
| Tecnologia | Finalidade |
|---|---|
| Docker + Docker Compose | Containerização |
| Nginx 1.27 Alpine | Proxy reverso — porta 80 |
| Hostinger VPS (Ubuntu 24.04, 4 GB RAM) | Servidor de produção |
| Cloudflare | DNS + SSL/TLS (HTTPS) |
softNerd/
├── CardGameStore/ # ASP.NET Core 10 — API REST
│ ├── Controllers/ # Endpoints (Auth, Product, Comanda, Venda, Upload, ...)
│ ├── Services/ # Lógica de negócio
│ ├── Models/
│ │ ├── PostgreSQL/ # Entidades EF Core
│ │ └── MongoDB/ # Documentos (VendaAvulsa)
│ ├── DTOs/ # Requests e responses
│ ├── Data/ # AppDbContext
│ └── Dockerfile
│
├── frontend/ # Next.js 14 App Router
│ ├── app/
│ │ ├── admin/ # Painel administrativo
│ │ │ ├── dashboard/ # Comandas ao vivo
│ │ │ ├── venda-avulsa/ # Frente de caixa
│ │ │ ├── crediario/ # Gestão de crediário
│ │ │ ├── estoque/ # Produtos e estoque
│ │ │ ├── campeonatos/ # Gestão de campeonatos
│ │ │ ├── financeiro/ # Relatórios
│ │ │ ├── usuarios/ # Gestão de clientes
│ │ │ ├── anuncios/ # Anúncios e promoções
│ │ │ ├── qrcodes/ # QR Codes de mesas
│ │ │ └── lgpd/ # Painel LGPD
│ │ ├── cliente/ # Área do cliente logado
│ │ ├── mesa/[mesa]/ # Login por QR Code
│ │ ├── lgpd/ # Formulário público LGPD
│ │ ├── privacidade/ # Política de Privacidade
│ │ └── termos/ # Termos de Uso
│ ├── components/
│ │ └── admin/
│ │ └── AiChatWidget.tsx # Chat IA flutuante
│ ├── lib/
│ │ ├── api.ts # Todos os endpoints tipados
│ │ ├── auth.ts # Gestão de sessão
│ │ └── signalr.ts # Hub de tempo real
│ └── Dockerfile
│
├── tests/
│ ├── api/ # Testes de endpoints (.http — REST Client)
│ └── unit/ # Testes unitários xUnit (10 serviços)
│
├── docs/ # Documentação (ver índice em docs/README.md)
│
├── deploy/
│ ├── docker-compose.prod.yml # Stack de produção completa
│ ├── nginx/nginx.conf # Configuração do proxy reverso
│ ├── setup.sh # Instalação automática no VPS
│ ├── update.sh # Atualização (git pull + rebuild)
│ └── cleanup.sh # Limpeza segura de espaço em disco
│
├── softNerd.sln # Solução Visual Studio
└── .gitignore
Tudo em docs/:
- Documentação técnica — arquitetura, endpoints, regras de negócio, variáveis de ambiente
- Backup e restauração
- Automação do WhatsApp
- Integração Tenant-ERP e motor fiscal
- Correções do motor fiscal NFC-e
- Backlog de pendências
O histórico de versões fica em frontend/public/CHANGELOG.md (também exibido em Admin → Sobre).
curl -fsSL https://raw.githubusercontent.com/Taino-Edu/softNerd/main/deploy/setup.sh | bashO script instala Docker, configura o firewall (UFW), clona o repositório, gera segredos e sobe os containers.
bash /opt/santuarionerd/deploy/update.shOu manualmente:
cd /opt/santuarionerd
git pull
docker compose -f deploy/docker-compose.prod.yml build api frontend
docker compose -f deploy/docker-compose.prod.yml up -dbash /opt/santuarionerd/deploy/cleanup.shCopie deploy/.env.example para /opt/santuarionerd/.env e preencha:
# PostgreSQL
POSTGRES_DB=cardgamestore
POSTGRES_USER=cardgame_user
POSTGRES_PASSWORD=<gerado pelo setup.sh>
# JWT (não altere após o primeiro deploy)
JWT_SECRET=<gerado pelo setup.sh>
# E-mail via Resend
SMTP_PASSWORD=<API Key do resend.com>
# Google Gemini IA
GEMINI_API_KEY=<chave do Google AI Studio>
# Segurança
IP_HASH_SALT=<gerado pelo setup.sh>
# Senha do admin inicial (opcional — só tem efeito no PRIMEIRO boot com banco vazio)
# Se omitido, usa "SenhaForte@123" e emite LogWarning
ADMIN_SEED_PASSWORD=<senha forte para o admin inicial># Windows
.\run-tests.ps1
# Linux/macOS
dotnet test tests/unit/CardGameStore.Tests/CardGameStore.Tests.csprojCobertura: 134 testes unitários, 100% aprovados. Serviços: Auth, Product, Comanda, VendaAvulsa, Crediário, Championship, User, Announcement, Audit, LGPD.
cd frontend
npx playwright testInfraestrutura de testes E2E configurada em frontend/tests/.
Abra os arquivos em tests/api/ com a extensão REST Client no VS Code.
Configure as variáveis em tests/api/http-client.env.json.
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/auth/login |
Login — define cookies HttpOnly |
POST |
/api/auth/refresh |
Renova accessToken |
POST |
/api/auth/logout |
Encerra sessão |
POST |
/api/auth/quick-login |
Login via QR Code (mesa) |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/product |
Lista produtos com filtros |
POST |
/api/product |
Cria produto |
PUT |
/api/product/{id} |
Atualiza produto |
DELETE |
/api/product/{id} |
Desativa produto |
GET |
/api/product/barcode/{code} |
Busca por código de barras |
GET |
/api/product/low-stock |
Produtos com estoque baixo |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/comanda/dashboard |
Comandas ativas (tempo real) |
POST |
/api/comanda/{id}/items |
Adiciona item |
DELETE |
/api/comanda/{id}/items/{itemId} |
Remove item |
PUT |
/api/comanda/{id}/close |
Fecha comanda |
PUT |
/api/comanda/{id}/cancel |
Cancela comanda |
POST |
/api/comanda/{id}/apply-points |
Aplica pontos de fidelidade |
DELETE |
/api/comanda/{id}/apply-points |
Remove pontos aplicados |
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/venda-avulsa |
Registra venda no balcão |
GET |
/api/venda-avulsa/recent |
Últimas N vendas |
GET |
/api/venda-avulsa/by-date?date=YYYY-MM-DD |
Vendas de um dia específico |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/crediario |
Lista crediários com filtros |
POST |
/api/crediario |
Cria crediário manual |
POST |
/api/crediario/{id}/pagamento |
Registra pagamento |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/championship |
Lista campeonatos públicos |
GET |
/api/championship/admin/all |
Lista todos (admin, com busca) |
POST |
/api/championship |
Cria campeonato |
PUT |
/api/championship/{id}/image |
Define imagem de capa |
DELETE |
/api/championship/{id} |
Remove campeonato finalizado/cancelado |
POST |
/api/championship/{id}/admin-register |
Inscreve cliente manualmente |
DELETE |
/api/championship/{id}/participants/{pid} |
Remove participante |
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/upload/image |
Upload de imagem de produto (máx 5 MB) |
POST |
/api/upload/profile-image |
Upload de foto de perfil do usuário (máx 5 MB) |
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/ai/chat |
Chat com Gemini 2.5 Flash |
| Medida | Implementação |
|---|---|
| Autenticação | JWT em HttpOnly Cookies (tokens nunca expostos no body JSON) |
| Senhas | BCrypt com salt aleatório; admin seed via ADMIN_SEED_PASSWORD |
| CSRF | SameSite=Lax |
| Rate Limiting | GlobalLimiter 300 req/min por IP; políticas "auth" (5/min) e "api" (200/min) |
| Content-Security-Policy | default-src 'none'; frame-ancestors 'none' |
| SQL Injection | EF Core (queries parametrizadas) |
| HTML Injection | HtmlEncoder.Default.Encode() em campos livres enviados por e-mail |
| IP em logs | Anonimizado via SHA-256 |
| HTTPS | Forçado via Cloudflare + COOKIE_SECURE=true |
| Proxy reverso | UseForwardedHeaders + X-Forwarded-For |
| Claims nulas | Guid.TryParse em todos os controllers — nunca null-forgiving operator |
Software proprietário e confidencial. Todos os direitos reservados.
Consulte LICENSE para os termos completos.
Santuário Nerd — Gestão inteligente para lojas de card games.