Módulos comerciais: Master, Workspace e Site

Estes três módulos tornam a Encantra comercializável: atraem e convertem clientes (Site), deixam cada cliente configurar o próprio workspace (Workspace) e dão à Inspire4U o controle da plataforma e da receita (Master).

Site (público)

Rota Descrição
/ Landing (narrativa Kotler/5A, módulos, Lumi, Connect, preços, FAQ)
/precos Planos ativos e públicos da tabela plans, mensal/anual e comparativo
/signup Cadastro self-service: cria tenant em avaliação, owner, emite tenant.created, envia boas-vindas e leva ao onboarding
/signup/check-slug JSON de disponibilidade/sugestão do endereço público
/design-system Documentação viva do Aurora Design System
/docs/... Portal que renderiza docs/**/*.md (e exibe .yaml/.json); whitelist por varredura, sem path traversal
/termos, /privacidade, /status Legal (LGPD) e status da plataforma

Proteções do cadastro: platform.signup_enabled, rate limit (5/h por IP), honeypot, slugs reservados.

Workspace (/app/settings, owner/admin)

  • Geral: nome, endereço (/h/{slug}), fuso, e-mail de suporte, dados fiscais.
  • Marca: cor e logotipo (PNG/JPG/WEBP ≤ 2 MB, validado por finfo + getimagesize), salvo em storage/uploads/{tenant_uuid}/ e servido por /media/{uuid}/{arquivo} com nosniff e CSP.
  • Equipe: convites com token de uso único (72 h), papéis, desativação; respeita o limite agents (observadores não ocupam assento). Se o e-mail falhar, o link é exibido uma única vez para cópia.
  • Lumi: tom de voz, assinatura, triagem e resposta automática com limiar de confiança; BYOK (chave Claude própria, criptografada) quando o plano tem byok.
  • Auditoria: audit_logs do tenant com filtros.
  • Onboarding: assistente em 6 passos; grava onboarding_completed_at.
  • Plano e faturamento (visível a todos; alterar exige owner/admin): medidores (núcleo + Hooks::collect('usage.meters')), troca de plano mensal/anual com fatura gerada (redireciona ao link de pagamento quando o Asaas está ativo); planos "sob consulta" notificam o master.

Limites efetivos: App\Modules\Workspace\Services\Limits::get($key) = limite do plano sobreposto por settings.limits_override (definido pelo master).

Master (/master, papel master)

Painel (MRR/ARR, status, churn, IA por tenant, operação, Hooks::render('master.home')), Workspaces (CRUD, limites personalizados, suspensão, personificação com auditoria), Planos (limites/recursos amigáveis), Faturas, Comunicados (banner + e-mail aos owners), E-mails, Fila de jobs, Auditoria, Sistema (migrações, cron, extensões), Configurações (SMTP com teste, IA com teste, plataforma, cobrança) e Administradores.

Cobrança (Asaas)

  • Services\Asaas: cliente + cobrança billingType=UNDEFINED (o pagador escolhe PIX, boleto ou cartão); sandbox ou produção.
  • Webhook POST /billing/webhook/asaas (sem CSRF) autenticado pelo header asaas-access-token; idempotente via billing_events; PAYMENT_RECEIVED/CONFIRMED → fatura paga, tenant ativo, período estendido (mensal ou anual).
  • Services\Billing::daily() (cron 06:15): renovações, vencidas → past_due, suspensão após billing.suspend_after_days (padrão 10), lembrete de fim de avaliação.

Eventos e hooks

  • Emite: tenant.created (via TenantFactory::create).
  • Consome: settings.sections, usage.meters, master.home.

Configurações (platform_settings)

mail.* (senha criptografada), ai.enabled, ai.model, ai.api_key*, platform.signup_enabled, platform.trial_days, platform.default_plan, platform.support_email, billing.api_key*, billing.sandbox, billing.webhook_secret*, billing.suspend_after_days (* = criptografado).


Encontrou algo para melhorar? Escreva para master@inspire4u.com.br.