Arquitetura do Portal Meu Núcleo - MBL
Visao Geral
O Portal Meu Núcleo - MBL e uma plataforma web para gestao de militancia, com economia interna gamificada (moeda virtual do nucleo, nome e sigla configuraveis, ex: Capixacoins/CC), eventos, projetos, loja e sistema de pagamentos real (Asaas).
Stack Tecnologica
| Camada | Tecnologia | Deploy |
|---|---|---|
| Frontend | Next.js 14 (App Router) + TypeScript + Tailwind CSS | Google Cloud Run |
| Backend | NestJS + TypeScript | Google Cloud Run |
| Banco de Dados | Supabase (PostgreSQL 17) | Supabase Cloud |
| Autenticacao | Supabase Auth (JWT) | Supabase Cloud |
| Storage | Supabase Storage | Supabase Cloud |
| Pagamentos | Asaas (PIX, Cartao, Boleto) | Asaas Cloud |
| Mobile | Capacitor (wrapper nativo) | Google Play / App Store |
| Docs | Next.js (este portal) | Google Cloud Run |
Estrutura do Monorepo
mbles/
├── apps/
│ ├── web/ # Next.js frontend (Google Cloud Run)
│ ├── api/ # NestJS backend (Cloud Run)
│ ├── docs/ # Este portal de documentacao
│ └── mobile/ # Capacitor (Android/iOS)
├── packages/
│ └── shared/ # Types, enums, Zod schemas
├── supabase/
│ ├── migrations/ # SQL migrations
│ └── seed.sql # Dados iniciais
├── .github/workflows/ # CI/CD
├── turbo.json # Turborepo config
└── CLAUDE.md # Convencoes do projetoFluxo de Dados
Browser/App
│
├──► Next.js (Google Cloud Run) ──► Supabase Auth (login/signup)
│ ──► Supabase DB (via RLS, leitura direta)
│
└──► NestJS API (Cloud Run)
│
├──► Supabase DB (service_role, bypassa RLS)
├──► Supabase Storage (uploads)
├──► Asaas API (pagamentos)
├──► OpenAI API (IA — resumos, chat, matching)
└──► Resend API (emails transacionais)Fluxo de Autenticacao
- Frontend faz login via Supabase Auth (email/senha)
- Supabase retorna JWT (access_token + refresh_token)
- Frontend envia JWT no header
Authorization: Bearer tokenpara o NestJS - NestJS valida o JWT com Supabase e extrai user_id + nucleo_id
- Middleware de tenant garante isolamento multi-tenant
Multi-tenancy
Todas as tabelas (exceto nucleos e planos) possuem a colunanucleo_id. O backend injeta automaticamente o nucleo_id do usuario logado em todas as queries via TenantInterceptor.
No banco, Row Level Security (RLS) garante que mesmo queries diretas do frontend (via Supabase client) respeitam o isolamento de dados entre nucleos.
Pagamentos (Asaas)
Integrado desde o V1. Membros podem pagar com moeda do nucleo, reais (R$ via Asaas) ou um mix de ambos (split payment). O Asaas suporta PIX, Cartao de Credito, Debito e Boleto.
Mobile
O app mobile usa Capacitor para empacotar o Next.js como app nativo. Uma unica codebase responsiva serve desktop (browser) e mobile (Google Play / App Store). Push notifications via Firebase Cloud Messaging.
Modulos do Backend (NestJS)
Principais modulos do backend alem dos modulos base (Auth, Membros, Projetos, Eventos, etc.):
- NacionalModule: Modulo para funcionalidades de nivel nacional (produtos, comunicados, enquetes, emails). Acessivel apenas por Super Admin.
- SuperAdminReportsModule: Relatorios globais consolidados de todos os nucleos (7 abas: membros, economia, eventos, projetos, engajamento, planos, comparativo).
- IAToolsService: Servico que expoe ferramentas de IA para o chat (consultas ao banco, acoes de escrita, geracoes de texto). Utiliza OpenAI function calling.
Pacotes e Bibliotecas Adicionais
| Pacote | Onde | Uso |
|---|---|---|
ia-chat-core | Backend | Core do chat IA — gerencia conversas, historico, streaming de respostas, function calling com OpenAI |
openai | Backend | SDK oficial da OpenAI para chamadas ao GPT-4o-mini |
resend | Backend | SDK do Resend para envio de emails transacionais (boas-vindas, rejeicao, comunicados) |
DataTable | Frontend | Componente reutilizavel para tabelas com paginacao, busca, filtros e layout responsivo (desktop: tabela, mobile: cards) |
AIChatWidget | Frontend | Widget flutuante de chat IA para Coord/Admin/Super Admin |