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. |
| 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).