Dependências Inteligentes
Uma macro-ação só inicia quando a predecessora terminar. A tabela DEPENDENCY armazena relações predecessor→successor e a API valida transições antes de permitir mudanças de status.
Arquitetura completa da plataforma de gestão inteligente de planos de ação
Plataforma enterprise para gestão completa de planos de ação. Três módulos integrados: Flow (importação e sincronização bidirecional com WayV), Plano de Ações (funil de 3 níveis com timesheet e Kanban) e Dashboards (métricas e KPIs em tempo real por perfil de acesso).
Grandes empresas gerenciam planos de ação em planilhas isoladas, e-mails e ferramentas desconectadas. Resultado: zero rastreabilidade, sem audit trail, sem conformidade regulatória (LGPD) e impossibilidade de medir produtividade real.
Organizações multi-departamento que precisam de controle hierárquico sobre projetos e planos de ação. Cinco perfis com permissões granulares: Super Admin (plataforma), Admin (organização), Gestor (projetos), Coordenador (escopo) e Colaborador (execução).
Monolito modular com Next.js 16 (frontend), Fastify 5 (API REST), PostgreSQL 17 (RLS por tenant), Drizzle ORM (schema tipado), Redis 7 + BullMQ (cache e filas) e Socket.io (tempo real). Cada ação é rastreável do planejamento à conclusão, com audit trail completo e LGPD nativa em código.
Cada tecnologia foi escolhida com critério. Nada entra por hype — entra por resolver um problema real com trade-offs aceitáveis.
App Router + Server Components + Turbopack
Renderização no servidor com streaming parcial (PPR), Server Components para dados pesados sem enviar JavaScript ao client, e Turbopack para builds 10x mais rápidos que Webpack. Maior ecossistema de componentes e bibliotecas do mercado.
Alternativas analisadas: Nuxt (ecossistema Vue menor no Brasil, menos devs disponíveis), Remix (absorvido pelo React Router v7, futuro incerto), SvelteKit (comunidade pequena, difícil contratar)
Engine Oxide — build 10x mais rápido
Utility-first com design system consistente. Prototipagem rápida, sem CSS morto em produção e integração nativa com Next.js.
Alternativas analisadas: Styled Components (runtime JS, mais lento), CSS Modules (sem design tokens nativos)
API REST separada do frontend
~77k req/s — 2 a 3x mais rápido que Express. Schema validation nativa com JSON Schema (valida input antes de processar), hooks system para middleware, plugins oficiais de WebSocket, CORS e rate limiting. TypeScript com generics tipados para rotas.
Alternativas analisadas: Express 5 (~15k req/s, lento e sem schema nativo), NestJS (overhead de decorators, complexidade desnecessária), Hono (ecossistema imaturo, poucos plugins)
SQL-first + RLS nativo
Único ORM com suporte nativo a Row Level Security do PostgreSQL. Define pgPolicy e pgRole direto no schema TypeScript — o schema do banco é código versionado. Migrations declarativas, tipagem forte end-to-end e zero overhead de runtime (queries são SQL puro).
Alternativas analisadas: Prisma (sem suporte RLS nativo, abstrai demais o SQL, runtime pesado), Kysely (sem sistema de migrations integrado), TypeORM (instável, padrões antigos, manutenção errática)
Multi-tenant com Row Level Security
RLS nativo para isolamento automático por tenant (cada organização vê apenas seus dados), partitioning declarativo por organização, JSON_TABLE para campos configuráveis, VACUUM 20x mais eficiente (crítico para audit log) e backup incremental nativo.
Alternativas analisadas: MySQL 9 (sem RLS nativo — isolamento exigiria views manuais), CockroachDB (complexidade operacional desnecessária no MVP)
In-memory cache + Job Queue assíncrona
Redis como cache de sessões, queries frequentes e invalidação por tenant. BullMQ para jobs assíncronos (sync WayV, envio de notificações, audit log, geração de relatórios) com retry automático, prioridade configurável e parent-child jobs para workflows complexos.
Alternativas analisadas: RabbitMQ (overkill para o MVP, mais uma infra para manter), AWS SQS (vendor lock-in, latência maior, custo por mensagem)
Bidirecional com reconnect automático
Sincronização do Kanban em tempo real (drag-and-drop reflete instantaneamente para outros usuários), notificações push instantâneas e indicador de presença online. Rooms para isolamento por organização via RLS. Fallback HTTP long-polling automático.
Alternativas analisadas: SSE (apenas server→client, não suporta sync bidirecional do Kanban), Pusher (custo por mensagem, vendor lock-in)
Object Storage com API S3-compatible
MinIO self-hosted no MVP (custo zero, mesma API do S3). Migração transparente para AWS S3 ao escalar — basta trocar as credenciais. Armazena anexos de tarefas, backups criptografados com AES-256 e lifecycle policies para expirar arquivos automaticamente.
Alternativas analisadas: Google Cloud Storage (vendor lock-in Google), Azure Blob (menos adotado no ecossistema Node.js)
Métricas + Dashboards + Alertas proativos
Open-source, sem custo em qualquer escala. Prometheus coleta métricas de CPU, memória, queries lentas, saúde dos jobs BullMQ e latência da API. Grafana visualiza tudo em dashboards customizáveis com alertas proativos por threshold (ex: CPU > 80% notifica Slack).
Alternativas analisadas: Datadog (~US$15/host/mês, custo escala rápido), New Relic (~US$25/host/mês) — custos desnecessários no MVP
Quatro opções analisadas com prós, contras e custos
R$ 0 (self-hosted)
Prós
Contras
US$ 0–275/mês (10k MAU)
Prós
Contras
US$ 0–50+/mês (10k MAU)
Prós
Contras
R$ 0 (self-hosted)
Prós
Contras
Do banco ao frontend, uma única linguagem com tipagem forte. Isso significa types compartilhados entre API e UI, refactoring seguro, autocomplete real e zero “undefined is not a function” em produção.
Como as peças se encaixam — 5 camadas com responsabilidades claras e fronteiras bem definidas.
O que o usuário vê e interage. Interface responsiva renderizada no servidor (SSR) com visões especializadas para cada perfil de acesso. Server Components carregam dados pesados sem enviar JavaScript ao navegador.
Fastify 5 processa todas as requisições REST. Valida input com JSON Schema antes de processar, aplica regras de negócio nos hooks e injeta o tenant_id na conexão do banco para ativar o RLS automaticamente.
Módulos isolados com responsabilidades específicas dentro do monolito. Cada serviço (plano de ações, timesheet, sync WayV) pode evoluir independentemente e ser extraído quando a carga justificar.
PostgreSQL 17 como fonte da verdade (single source of truth) com isolamento por tenant via Row Level Security. Redis 7 como cache de sessões e queries, e BullMQ como fila de jobs assíncronos.
Integrações com sistemas de terceiros. Todas operam de forma assíncrona via BullMQ com retry automático — falhas não bloqueiam o fluxo principal da aplicação.
Microsserviços prematuros adicionam complexidade operacional sem benefício real. Um monolito com módulos bem isolados entrega a mesma separação de responsabilidades, com deploy simples, debugging direto e latência mínima entre módulos. Quando um serviço precisar escalar independentemente, extraímos apenas ele. O PIXOOM começa como monolito modular com caminho claro de evolução.
Monolito Modular
Módulos bem isolados dentro de um único deploy. Rápido para iterar e simples de operar.
Módulos Independentes
Extrair serviços críticos (filas, notificações) quando a carga justificar.
Microsserviços Seletivos
Apenas onde há necessidade real de escala independente ou times separados.
Três módulos integrados — cada um resolve uma parte do problema
Integração WayV
Ponte bidirecional com o WayV via Project ID. Sincroniza prazos, comentários e justificativas com data e hora registrados. Ações automáticas são criadas nos prazos importados. Todo o processo opera como job assíncrono via BullMQ — sem bloquear a interface do usuário.
Features
Coração da Plataforma
Coração do PIXOOM. Funil de três níveis hierárquicos (Macro-ação → Atividade → Ação) com timesheet integrado, Kanban permissionado por perfil de acesso e audit trail completo via trigger automático no banco. Cada colaborador vê apenas as tarefas designadas a ele.
Features
Métricas sob medida
Métricas e KPIs calculados direto do PostgreSQL em tempo real — sem camada intermediária de ETL. Cada perfil de acesso tem seu dashboard customizado com widgets e layouts configuráveis.
Features
Dados fluem do WayV até os dashboards de forma automatizada
Flow
Importa dados do WayV
Plano de Ações
Processa e gerencia ações
Dashboards
Visualiza métricas e KPIs
O funil de três níveis — do estratégico ao executável
Etapa estratégica do projeto, definida pelo Gestor ou Admin. Possui datas de início e conclusão planejadas, data meta real (revised_end para replanejamento) e predecessoras inteligentes — uma macro-ação só inicia quando a anterior terminar. Campo is_locked trava edição após conclusão.
Desdobramento tático da macro-ação, atribuído pelo Coordenador. Suporta templates reutilizáveis (tabela ACTIVITY_TEMPLATE) para padronizar atividades recorrentes. Campo estimated_hours permite controle de desvio no timesheet — horas reais vs. estimadas.
Nível mais granular e executável — o que o Colaborador vê e trabalha. Cronômetro de horas em tempo real (via Socket.io) ou inserção manual. Estimativa em minutos para tarefas curtas. Visível no Kanban permissionado por nível de acesso, com prioridade (low, medium, high, urgent).
Em Atraso é calculado em tempo real: status = in_progress AND planned_end < NOW()
Uma macro-ação só inicia quando a predecessora terminar. A tabela DEPENDENCY armazena relações predecessor→successor e a API valida transições antes de permitir mudanças de status.
Um plano de ação só é marcado como concluído quando 100% das macro-ações, atividades e ações estiverem finalizadas. Campo is_locked = true impede edição após conclusão.
Ações são organizadas pelo deadline mais alto na cadeia hierárquica (macro-ação → atividade → ação). No Kanban, o deadline mais próximo aparece primeiro automaticamente.
Trigger no PostgreSQL registra automaticamente quem alterou o quê, quando, de onde (IP, user-agent). Valores antes e depois são armazenados em JSONB — rastreabilidade completa.
Cronômetro em tempo real via Socket.io (inicia/pausa/finaliza) ou inserção manual de horas por ação. Tabela TIMESHEET_ENTRY vincula horas à ação específica com aprovação do gestor.
Esteira visual de tarefas com drag-and-drop. Filtrada pelo nível de acesso: Colaborador vê apenas suas tarefas, Coordenador vê seu escopo, Gestor vê tudo do projeto.
Cinco perfis hierárquicos — do Super Admin ao Colaborador
Acesso total à plataforma. Gerencia todas as organizações (tenants), billing, configurações globais e tem visão completa do audit trail. Único perfil que opera acima do RLS.
Acesso total dentro da sua organização. Gerencia usuários e convites, cria e edita templates de atividades, configura dashboards e é responsável pela conformidade LGPD (DPO).
Gerencia projetos e planos de ação dentro da organização. Cria macro-ações, atribui tarefas a coordenadores e colaboradores, e acompanha execução via dashboard completo com KPIs.
Coordena atividades dentro do seu escopo definido pelo Gestor. Move tarefas entre status no Kanban, cria ações dentro das atividades atribuídas e acompanha o progresso operacional.
Executa apenas as tarefas designadas a ele. Registra horas no timesheet (cronômetro ou manual), adiciona comentários e anexos. Interface simplificada — sem acesso à visão global do projeto.
Visão consolidada de cada recurso por perfil de acesso
Controla o que o usuário pode fazer. A cada requisição, o middleware do Fastify verifica se o perfil tem permissão para aquela operação antes de executar qualquer lógica de negócio.
Controla quais dados o usuário enxerga. O PostgreSQL filtra automaticamente por organização via Row Level Security. Mesmo que o RBAC falhe por um bug na aplicação, o RLS no banco impede acesso a dados de outro tenant.
Defesa em profundidade — quatro camadas de proteção
A arquitetura de segurança do PixoomFlow é baseada no princípio de defesa em profundidade: quatro camadas independentes de proteção que operam em série. Mesmo que um atacante comprometa uma camada, as próximas continuam bloqueando o acesso.
Trânsito
TLS 1.3 criptografa tudo em movimento
API
Rate limiting + validação bloqueiam requisições maliciosas
Autenticação
JWT + 2FA verificam a identidade do usuário
Banco
RLS + AES-256 protegem os dados no nível mais baixo
Conformidade nativa em cada camada — implementada em código, não em documentos
O que a lei exige
O titular pode solicitar a eliminação dos seus dados pessoais a qualquer momento.
Como o PIXOOM resolve
Soft-delete imediato (campo deleted_at) + anonimização irreversível automática após 15 dias via job BullMQ. O audit log é mantido para fins legais, mas com dados do titular anonimizados (hash irreversível) — atende à lei sem perder rastreabilidade.
O que a lei exige
Agentes de tratamento devem adotar medidas de segurança técnicas e administrativas aptas a proteger os dados.
Como o PIXOOM resolve
Quatro camadas de proteção: RLS por tenant no banco (isolamento automático), AES-256 at-rest (dados criptografados no disco), TLS 1.3 em trânsito (comunicação criptografada), pgcrypto para colunas sensíveis (CPF, tokens). Rate limiting em todas as camadas.
O que a lei exige
Controlador e operador devem manter registro das operações de tratamento de dados pessoais.
Como o PIXOOM resolve
Tabela AUDIT_LOG funciona como RIPD (Relatório de Impacto) automático: quem alterou o quê, quando, de onde (IP e user-agent). Valores antes e depois gravados em JSONB. Exportável em JSON para envio à ANPD sob demanda.
O que a lei exige
O controlador deverá indicar encarregado pelo tratamento de dados pessoais com identidade e informações de contato divulgadas publicamente.
Como o PIXOOM resolve
DPO registrado por organização na tabela ORGANIZATION com dados públicos acessíveis. Endpoint /api/v1/dsar automatizado permite que titulares façam requisições de acesso, portabilidade ou exclusão — tabela DSAR_REQUEST rastreia cada pedido com prazo legal.
O que a lei exige
Comunicar à ANPD e ao titular, em prazo razoável, a ocorrência de incidente de segurança que possa acarretar risco ou dano.
Como o PIXOOM resolve
Tabela SECURITY_INCIDENT com workflow completo: detecção → classificação de severidade → identificação de dados afetados → notificação automática à ANPD em até 72h → plano de contenção → notificação aos titulares. Tudo rastreado com timestamps.
O que a lei exige
Tratamento de dados pessoais só pode ser realizado com base legal definida e para finalidade legítima, específica e informada ao titular.
Como o PIXOOM resolve
Tabela CONSENT_LOG registra cada consentimento com: timestamp exato, IP de origem, versão do termo aceito e hash SHA-256 do conteúdo (prova de integridade). Consentimento granular por operação — o titular escolhe exatamente o que autoriza e pode revogar a qualquer momento.
Todas as proteções são implementadas em código, não em documentos. O sistema garante conformidade automaticamente — RLS impede acesso indevido, audit log registra cada operação e consentimentos são versionados com hash criptográfico.
Features que resolvem problemas reais do PIXOOM
Crítico para a tabela AUDIT_LOG que cresce continuamente — cada alteração de cada usuário gera um registro via trigger automático. No PG17, o VACUUM usa 20x menos memória, evitando degradação de performance mesmo com milhões de linhas acumuladas.
Transforma colunas JSONB em tabelas relacionais diretamente no SQL, sem ETL. Campos customizados de projetos (briefings, metadados) viram colunas consultáveis com índice GIN — filtragem e ordenação nativas.
Backups diários de 50GB caem para ~500MB — apenas o delta (dados alterados) é transferido. Viabiliza retenção de 90 dias conforme LGPD sem estourar armazenamento. Backup criptografado com AES-256.
Dezenas de colaboradores atualizando status, movendo cards no Kanban e registrando horas simultaneamente. O WAL do PG17 tem o dobro de capacidade de escrita concorrente — elimina gargalos de lock em tabelas críticas.
Sincronização com WayV: INSERT se o projeto é novo, UPDATE se já existe — tudo em uma operação atômica. RETURNING devolve o estado final do registro, eliminando race conditions. wayv_project_id UNIQUE por org garante zero duplicatas.
Permite manutenção de tabelas (VACUUM, REINDEX, ANALYZE) sem precisar de superuser. Isso é crítico porque superuser ignora RLS — operar sem superuser protege o isolamento entre organizações mesmo durante manutenção.
RLS nativo
MySQL 9 não possui Row Level Security. Para isolar dados por tenant, seria necessário criar views manuais por organização ou adicionar WHERE tenant_id = ? em cada query — erro humano garantido.
JSONB indexável
JSONB do PostgreSQL é indexável com GIN (busca em campos aninhados em milissegundos). MySQL JSON é armazenado como texto, mais lento para queries e sem suporte a JSON_TABLE com a mesma flexibilidade.
Partitioning declarativo
PostgreSQL permite particionamento declarativo por organização (tabela AUDIT_LOG particionada por mês). MySQL é limitado a uma coluna de partição por tabela e não suporta partitioning com foreign keys.
Como cada organização vê apenas seus dados — isolamento total via RLS
Usuário faz login e recebe um JWT contendo organization_id. O token identifica a qual organização (tenant) o usuário pertence.
A cada requisição, um hook do Fastify executa SET app.tenant = 'uuid-da-org' na conexão do banco antes de qualquer query. Isso ativa o filtro RLS automaticamente.
O PostgreSQL aplica a policy RLS em todas as queries — SELECT, INSERT, UPDATE e DELETE. O desenvolvedor escreve SQL normal e o banco filtra por tenant automaticamente. Zero WHERE manual.
Risco crítico com PgBouncer
Ao usar PgBouncer em modo transaction pooling, é obrigatório resetar app.tenant no checkout de cada conexão. Sem isso, uma organização pode ver dados de outra.
22 tabelas em 7 domínios — schema completo com indexes compostos por tenant
Base de autenticação, permissões e multi-tenancy. Organizações (tenants), usuários com perfil de acesso e sessões de login ativas.
Integração com sistema externo WayV. Projetos importados via Project ID e log detalhado de cada sincronização (sucesso, falha, retry).
Coração do sistema. Funil de 3 níveis (planos → macro-ações → atividades → tarefas), dependências entre ações e templates reutilizáveis de atividades.
Controle de horas trabalhadas. Apontamentos vinculados diretamente a atividades e tarefas, com cronômetro em tempo real ou inserção manual e fluxo de aprovação.
Interações e rastreabilidade. Comentários em tarefas/atividades, audit trail automático via trigger (quem alterou o quê, quando) e notificações push em tempo real via Socket.io.
Camada de visualização. Dashboards customizáveis por perfil de acesso, widgets configuráveis (KPIs, gráficos, tabelas) e configuração da visão Kanban por projeto.
Conformidade regulatória em código. Consentimentos granulares com hash SHA-256, requisições DSAR automatizadas, registro de incidentes com workflow de 72h e políticas de retenção de dados configuráveis.
22 tabelas · 7 domínios · Indexes compostos por tenant + created_at em todas as tabelas
12 regras que governam o sistema — organizadas em 3 pilares
Uma macro-ação só pode iniciar quando sua predecessora estiver concluída. A tabela DEPENDENCY armazena relações predecessor→successor e a API valida transições automaticamente antes de permitir mudança de status.
Um plano de ação só é marcado como concluído quando 100% das macro-ações, atividades e ações estiverem finalizadas. Após conclusão, is_locked = true impede qualquer edição retroativa.
Predecessora concluída → notificação push ao responsável da próxima. Deadline em 48h → alerta amarelo. Atraso detectado → notificação ao gestor. Tudo via BullMQ + Socket.io.
No Kanban, tarefas são ordenadas pelo deadline mais próximo na cadeia hierárquica (macro-ação → atividade → ação). O deadline mais urgente sempre aparece primeiro, sem configuração manual.
Constraint UNIQUE(organization_id, wayv_project_id) impede duplicatas. O comando MERGE do PG17 faz INSERT ou UPDATE em operação atômica — zero race conditions durante sincronização.
Drag-and-drop no Kanban atualiza sort_order no banco em tempo real via Socket.io. Toda movimentação entre status é registrada no AUDIT_LOG com timestamp e usuário responsável.
Trigger automático no PostgreSQL registra cada INSERT, UPDATE e DELETE. Grava: quem (user_id), o quê (tabela e coluna), quando (timestamp), de onde (IP, user-agent) e valores antes/depois em JSONB.
Sem campo is_delayed no banco — atraso é calculado dinamicamente: status = in_progress AND planned_end < NOW(). Isso garante que o estado está sempre correto, sem jobs de atualização.
Cronômetro em tempo real via Socket.io (inicia/pausa/finaliza) ou inserção manual de horas. Cada entrada é vinculada a uma ação específica na tabela TIMESHEET_ENTRY, com fluxo de aprovação pelo gestor.
Colaborador vê apenas tarefas atribuídas a ele (assigned_to = user_id). Interface simplificada sem menus de gestão. RLS garante que mesmo via API direta, dados de outros não são acessíveis.
Cinco status idênticos em todos os níveis do funil (macro-ação, atividade, ação): Em Início, Em Andamento, Concluída, Cancelada e Em Atraso (calculado). Enum compartilhado garante consistência.
Esteira visual com drag-and-drop filtrada pelo perfil de acesso. Colaborador vê suas tarefas, Coordenador vê seu escopo, Gestor vê todo o projeto. Configuração na tabela KANBAN_VIEW por projeto.
Como crescer de 1.000 para 50.000+ usuários sem reescrever
~1.000 usuários, ~100 organizações
VPS com PG17 (4vCPU/16GB), Redis local, Fastify + Next.js no mesmo servidor. Monolito modular com deploy único.
R$ 500-800/mês
1k–10k usuários
Read replica do PG17 para queries pesadas (dashboards). Worker BullMQ em processo separado. Cache agressivo no Redis para sessões e queries frequentes.
R$ 1.500-3.000/mês
10k–50k usuários
Múltiplas réplicas de leitura. PgBouncer para connection pooling. Partitioning do AUDIT_LOG por mês. CDN para assets estáticos. Extração de serviços críticos.
R$ 5k-10k/mês
50k+ usuários
Sharding por organização. Microsserviços seletivos (filas, notificações). Instâncias dedicadas para clientes enterprise. Multi-região.
Sob demanda
PIXOOM Blueprint Técnico v4.0 — Fevereiro 2026
5 Perfis · 3 Módulos · 3 Níveis · 22 Tabelas · 7 Domínios · PostgreSQL 17 + RLS
Arquitetura e anatomia completa da plataforma enterprise de gestão de planos de ação