Skip to content

ADR 0055 — TLSStress.Art Admin Console + Token Marketplace

  • Status: Accepted
  • Date: 2026-05-14
  • Deciders: André Luiz Gallon (Architect/Operator)
  • Supersedes: —
  • Related: ADR 0053 (Cell-based Hyperscale), ADR 0054 (PQC-Everywhere), ADR 0056 (Auto-Provisioning), ADR 0040 + 0041 (Dashboard cliente baseline)
  • Memory: project_octopus_hyperscale_admin_pqc_locked_2026_05_14.md, project_dashboard_only_operator_access_2026_05_13.md

Context

O Dashboard cliente atual (dashboard.tlsstress.art) é a única interface do operador cliente — uma decisão LOCKED. Mas operadores TLSStress.Art (André + futuro time) precisam de uma interface completamente separada para:

  • Gerenciar lifecycle de clientes (signup queue, ativação, suspensão, churn, KYC)
  • CRUD do marketplace de tokens (packages, pricing, promo codes, A/B pricing)
  • Faturamento (Stripe Connect, refunds, disputes, dunning, invoicing manual)
  • Fleet view real-time (mapa global, cells alive, clientes ativos por região)
  • Inspecionar workflows de provisioning (Temporal UI embedded)
  • Support tickets (Linear/Intercom integration)
  • Operations (feature flags, kill switches, maintenance windows)
  • Audit log + security (bug bounty, pen-test, ZTP-Prem compliance status)
  • Analytics (cohort, churn, MRR, LTV, NPS, conversion funnel)

Este console NUNCA pode ser acessado por clientes. Comprometer este console = comprometer TODOS os clientes simultaneamente. Postura de segurança: equivalente a Stripe back-office ou AWS Control Plane interno.

Decisão

A TLSStress.Art Admin Console é uma aplicação Next.js + TypeScript hospedada em admin.tlsstress.art, isolada do customer plane em:

  • Conta cloud separada (sem trust com contas que servem clientes)
  • VPC separada (peering apenas para audit chain ingestion read-only)
  • Domínio separado (sem subdomain wildcard que cliente possa adivinhar)
  • IdP separado (Auth0 Enterprise tenant exclusivo para admins TLSStress.Art)
  • Banco separado (PG cluster próprio com encryption at rest + WAL shipping para off-cloud backup)

Stack canônica

Camada Tecnologia Por quê
Frontend Next.js 15 + React + TypeScript Mesma stack do Dashboard cliente. Reuso massivo de componentes (tabelas, gráficos, brand tokens).
Auth Auth0 Enterprise + WebAuthn MFA mandatory + SSO MFA hardware key obrigatório para roles admin e engineering. SSO para o time TLSStress.Art (Google Workspace).
RBAC Casbin (policy engine) ou OPA 5 roles: admin / billing / support / engineering / readonly. Policy versionada no repo.
Backend Go (Gin ou Echo) + Postgres + Redis Consistência com resto da stack TLSStress.Art.
Workflows Temporal.io Ver ADR 0056. Workflows duráveis, idempotentes, retriable.
Payments Stripe API (Go SDK) + webhooks idempotentes assinados Cartões internacional + Apple Pay + Google Pay + ACH + wire. PIX/boleto via Stripe BR ou Mercado Pago futuro.
Email Postmark (transacional) + SendGrid (broadcast) Postmark TX delivery > 99.5%.
Observability OpenTelemetry + Grafana + Honeycomb Honeycomb para alta-cardinalidade per-customer.
Audit Merkle chain (compartilhada com customer audit) Toda ação admin → audit chain com root global.

Módulos UI

admin.tlsstress.art
├── /marketplace                  CRUD de pacotes de tokens
│   ├── /packages                 Plans (Free / Pro / Enterprise / Defense)
│   ├── /pricing                  Tiered pricing, volume discounts
│   ├── /promo                    Promo codes (limited use, expiry, cohort-targeted)
│   └── /experiments              A/B pricing experiments (Statsig integration)
├── /customers                    Lifecycle
│   ├── /signup-queue             KYC pending, manual approve
│   ├── /active                   Active customers (search, filter, drill-in)
│   ├── /suspended                Suspended (payment failed, ToS violation)
│   ├── /churned                  Churn analysis
│   └── /[id]/audit               Per-customer audit log
├── /billing                      Stripe operations
│   ├── /invoices                 Manual invoicing (wire customers)
│   ├── /refunds                  Refund queue
│   ├── /disputes                 Chargeback management
│   └── /dunning                  Retry failed payments
├── /fleet                        Real-time mapa global
│   ├── /pods                     OCTOPUS pods live (Pattern A + Pattern B)
│   ├── /cells                    Cells por região, saturação
│   ├── /customers-by-region      Distribution heatmap
│   └── /alerts                   Active SLO breach alerts
├── /provisioning                 Temporal UI embedded (iframe)
├── /support                      Linear / Intercom integration
│   ├── /tickets                  Open tickets
│   └── /comms                    Customer comms history
├── /ops                          Operations
│   ├── /feature-flags            Statsig / LaunchDarkly integration
│   ├── /kill-switches            Emergency stop per-cell, per-feature
│   ├── /maintenance              Scheduled maintenance windows (status.tlsstress.art)
│   └── /releases                 Version rollout per-cell (canary)
├── /security                     Security posture
│   ├── /bug-bounty               HackerOne / Bugcrowd dashboard
│   ├── /pen-test                 Annual report links
│   ├── /ztp-compliance           Re-render of /admin/security/ztp-compliance (read-only)
│   └── /audit-chain              Merkle audit chain explorer
├── /analytics                    Business metrics
│   ├── /cohort                   Cohort analysis (week-over-week retention)
│   ├── /mrr                      MRR / ARR / LTV / CAC
│   ├── /funnel                   Signup → activation → first-test → first-paid
│   └── /nps                      NPS surveys
└── /admin                        Self-management
    ├── /users                    Admin user CRUD (sysadmin only)
    ├── /audit-self               Admin actions audit log
    └── /api-keys                 Internal API keys (rotated quarterly)

Acesso e segurança

  • Domínio: admin.tlsstress.art (CAA records hard-pinned, HSTS preload, CT logs monitored)
  • WAF: Cloudflare + IP allowlist (escritório + VPN corp + casa de cada admin com WireGuard)
  • MFA: WebAuthn hardware key mandatory para roles admin, engineering, billing
  • Session: 4h max, idle timeout 30min, re-auth para ações destrutivas
  • Audit log: TODA ação (read incluído para roles sensíveis) → Merkle chain
  • IP geofencing: bloqueio automático de logins fora dos países do time
  • Anomaly detection: alerta se admin acessa de IP novo, hora atípica, ou padrão fora do perfil (e.g. download massivo de dados de cliente)
  • Break-glass: emergency access requer 2-of-3 approval de outros admins (Sigstore-style)

Customer plane isolation

NUNCA admin code roda no mesmo cluster K8s que customer code. NUNCA admin credentials caem em log/metric de customer service. Cross-plane API access SOMENTE via:

  • Read-only audit chain ingestion (mTLS service-to-service)
  • Provisioning workflow webhooks (Temporal → Vault → cell APIs, com short-lived tokens per workflow)

Não há "shared service" entre admin plane e customer plane. Comprometer admin não dá acesso direto a customer data — adversário ainda precisa quebrar mTLS + Vault PKI.

Alternativas consideradas

Alternativa Por que rejeitada
Go full-stack (templ + htmx) sem Next.js Mais simples de operar mas UI menos rica para fleet view real-time + analytics. Tempo de iteração mais lento para o time.
Retool / Internal SaaS low-code Fast time-to-market (dias) mas lock-in vendor + dados sensíveis trafegam em SaaS terceiro. Inaceitável para nossa postura ZTP-Prem.
Embedded admin no Dashboard cliente (subdomain) Cross-plane shared code = blast radius gigante. Rejeitado decisivamente.
AWS QuickSight ou Looker para analytics OK para read-only dashboards, mas não substitui o tooling de ops + fleet + lifecycle. Pode ser embedded como tab futura.

Consequências

Positivas

  • Pareamento com decisão LOCKED "Dashboard is the only operator interface" (cliente-side)
  • Reuso massivo de componentes UI entre admin e customer Dashboards
  • Hiring pool gigantesco para Next.js + Postgres + Stripe
  • Operations team pode iterar fast (deploy admin sem tocar customer plane)
  • Multi-region admin é trivial (Next.js + Vercel ou self-hosted)

Negativas

  • 2 codebases UI para manter (mas componentes shared via npm workspace)
  • Admin plane é alvo de alto valor — security overhead grande (mas mandatory anyway)
  • Stripe operations expertise precisa ser adquirida pelo time

Neutras

  • Custo de operação admin plane ~$500-2k/mês (Vercel + Auth0 Enterprise + Postmark + Honeycomb + observability tooling)

Wave-1 implementação

PRs antecipados:

  • PR-OCTOPUS-4: Admin Console scaffold (Next.js + Auth0 + RBAC + brand tokens)
  • PR-OCTOPUS-5: Marketplace UI + Stripe integration + webhooks
  • PR-OCTOPUS-6: Provisioning Orchestrator (Temporal workflows) — ver ADR 0056

Estimativa: 4 semanas com 1 dev fulltime (frontend + backend integration).