Acompanhe a evolucao da plataforma. Dividimos o changelog entre a Plataforma BrutusForge (o software self-hosted que você instala) e o Portal & Licensing (a experiencia de compra, minha conta e cobranca).
Plataformacliente self-hosted
v1.0.4286GitHub ↗
## [O painel para de religar seus servidores sozinho] - 2026-08-23
- **Você não conseguia manter um servidor desligado.** Ao parar um servidor pelo ASM, o painel entendia aquilo como uma queda e subia de volta — dois a cada varredura. Na prática isso impedia o que mais importa: **atualizar plugins e editar configuração**, que exigem o servidor parado. Confirmado capturando a árvore de processos: quem estava subindo era o próprio painel.
- **Agora o religamento é opcional e vem DESLIGADO.** O campo **"Religar servidor que cair"** está em Auto-Restart. Enquanto você não ligar, o painel não encosta nos seus servidores. Se quiser a recuperação automática de queda de volta — ela existe e tem valor, foi ela que pegou um servidor que ficou 10h fora do ar —, é só ligar ali.
- **Marcar um servidor como parado agora dura.** Antes, no instante em que o servidor subia uma vez, o painel apagava sozinho essa marcação e voltava a considerá-lo "deve estar ligado". Sua decisão de mantê-lo parado era perdida sem aviso.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
---
v1.0.4283GitHub ↗
## [Licença dos plugins, reinício agendado que respeita você e faxina no código] - 2026-08-23
- **Os plugins pararam de conseguir validar a licença, e ninguém percebeu.** Uma correção de segurança anterior passou a gerar uma chave separada para o bot — e, sem querer, a chave que os plugins usavam deixou de ser aceita justamente na verificação de licença. Os servidores continuaram funcionando porque cada um guarda o último resultado válido em cache, mas a verificação vinha falhando **desde 12 e 17 de agosto**. Um servidor novo, sem esse cache, teria comandos de chat e eventos desligados em silêncio. Corrigido.
- **Reinício agendado ignorava o desligamento intencional.** Se você marcasse um servidor como parado no painel, o agendamento subia ele de volta na hora marcada assim mesmo. Agora o agendamento **pula** servidor que você desligou de propósito, e registra o motivo.
- **Dá para pausar um reinício agendado sem apagá-lo.** A aba Restarts ganhou um interruptor por linha. Antes, o único jeito de parar um agendamento era excluir — perdendo o horário configurado e o histórico.
- **Faxina interna:** removidas cerca de 2.000 linhas de comentário do código. Não muda nada no que você usa; serve para o próprio código parar de carregar explicações antigas que envelhecem e passam a induzir ao erro — foi exatamente o que aconteceu no caso da licença acima.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
---
v1.0.4280GitHub ↗
## [Métricas dos servidores, mods do ASM e o site parando de errar sozinho] - 2026-08-22
- **As métricas de cada servidor apareciam como "-" e nunca funcionaram na sua frota.** Todos os servidores foram configurados para reportar métricas pela **mesma porta de rede**, e só um deles consegue ocupá-la — os outros nove ficavam mudos. O painel já sabia distribuir uma porta por servidor, mas três dos quatro caminhos de cadastro pulavam essa etapa, inclusive o import do ASM, que foi por onde a sua frota inteira entrou. Agora cada servidor ganha a porta dele automaticamente, e o botão **Instalar plugins** conserta os que já existem.
- **A tela de mods estava vazia mesmo com 30 mods rodando em cada servidor.** O import do ASM lia os mods do perfil e os descartava. Agora a lista real é adotada assim que você abre a tela — sem precisar cadastrar nada.
- **E havia um risco sério escondido nisso:** como o painel achava que não existia mod nenhum, uma ação de mods poderia reescrever a lista do servidor **vazia, apagando os 30**. Foi criada uma trava que distingue "o operador desligou tudo" de "o painel não sabe de nada", e o segundo caso agora é bloqueado.
- **O site (loja e páginas públicas) errava cerca de 2.750 vezes por dia.** Um problema na forma de guardar o cache fazia páginas falharem ao serem entregues. Além de encher o registro de erros, o cache **nunca funcionava de verdade** — cada visita reconstruía a página do zero. Corrigido: o site fica mais rápido e o registro volta a ser útil para achar problemas reais.
- **O medidor de memória do painel mostrava um valor muito menor que o real.** Ele media apenas o consumo interno do serviço, enquanto o de processador já media a máquina inteira. Os dois agora medem a máquina.
- **Trocar a identidade de um servidor podia perder dados.** A renomeação não levava junto a fila de comandos pendentes nem o registro de quem já tinha acesso VIP. Agora leva tudo, de uma vez só. Também é possível corrigir a **pasta de instalação** de um servidor pela tela — antes não havia onde.
- **Configuração do ArkShop abre sozinha** quando o servidor está online, sem precisar clicar em "Carregar".
- **Menos ruído no Discord e nos registros.** Quando o bot não tem acesso a um canal, ele para de insistir de meia em meia hora indefinidamente e passa a espaçar as tentativas — o aviso continua, com o motivo e o que fazer.
**Depois de atualizar:** clique em **Instalar plugins** em cada servidor e reinicie-os quando puder. É isso que entrega a porta de métricas nova para cada um — a atualização do painel sozinha não faz isso.
---
---
v1.0.4277GitHub ↗
## [O religamento automático de servidor nunca funcionou] - 2026-08-21
- **Servidor que caía ficava fora até alguém perceber.** O painel detecta corretamente quando um servidor para de responder e tenta religá-lo sozinho — mas a tentativa falhava **sempre**, por um erro interno de programação, desde que a funcionalidade existe. Em 40 horas de registro foram 2.161 detecções e 105 tentativas de religar, **nenhuma bem-sucedida**. Um servidor que travou às 10:50 ficou dez horas fora do ar. Agora o religamento funciona de verdade: servidor que cai volta sozinho, sem depender de alguém estar olhando.
- **Por que passou despercebido tanto tempo.** Duas proteções falharam juntas: a verificação de tipos não alcançava esse trecho, e o teste automatizado reproduzia o mesmo engano do código — ficava verde enquanto a execução real falhava toda vez. As duas foram corrigidas, então uma volta do problema passa a ser barrada antes de chegar em você.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
v1.0.4275GitHub ↗
## [Campanha de cupom no Discord e na loja, boas-vindas que finalmente funcionam] - 2026-08-21
- **Cupom promocional agora se divulga sozinho.** Ao cadastrar um cupom em Comércio → Cupons, marque **"Divulgar como promoção"**: ele passa a aparecer numa faixa no topo da loja (com código, desconto, valor mínimo e quanto falta para expirar) e num painel fixo do Discord, num canal novo chamado **Promoções**. O painel se atualiza sozinho e **sai de cena** quando não há promoção — nada de "nenhuma promoção" parado num canal. A divulgação é opt-in por cupom: quem você criar para um cliente específico continua invisível.
- **As boas-vindas do Discord nunca aconteciam do jeito configurado.** Havia dois sistemas: um simples, que rodava, e um completo — com mensagem personalizável, mensagem privada e avatar do membro — que estava **desligado por dentro** apesar de ter cinco campos configuráveis no painel. Você preenchia, salvava, e nada mudava. O completo passou a ser o que roda, e o campo de mensagem personalizada finalmente é usado.
- **O painel de boas-vindas não é mais soterrado.** O mesmo canal recebia o painel fixo e uma mensagem por pessoa que entrava, empurrando o painel para cima a cada entrada. Agora só o painel fica lá.
- **O bot deixou de insistir eternamente em painel sem permissão.** Quando falta permissão num canal, ele agora registra uma vez e espera 30 minutos antes de tentar de novo — antes eram dezenas de milhares de tentativas idênticas enchendo o registro. A proteção passou a valer para os nove painéis; antes existia só em um.
- **Erro de canal do Discord deixou de ser apagado no caminho.** O código descartava a causa da falha ao buscar o canal, então "sem permissão" e "instabilidade momentânea" chegavam indistinguíveis — e o bot tratava as duas como se valesse a pena tentar de novo para sempre. É o que fazia a proteção acima não funcionar de verdade.
- **Acabamento nos avisos do Discord.** Três embeds (enquete, estatísticas de servidor e sugestão) apareciam sem a identificação da comunidade que os outros dez já traziam.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
v1.0.4273GitHub ↗
## [Meio milhão de comandos desnecessários por dia contra os servidores] - 2026-08-21
- **O painel repetia as permissões de todo jogador nos servidores, a cada 5 minutos, para sempre.** A sincronização de cargos reenviava `Permissions.Add` de cada grupo que o jogador deve ter **e** `Permissions.Remove` de cada grupo que ele não deve ter — em todos os servidores ARK ligados — sem verificar o que já estava aplicado. Medido em 40 horas de registro: **518.392 comandos**, cerca de 14 mil por hora sem parar, dos quais **73% eram remoções de grupos que o jogador nunca teve**. Agora o painel guarda o que já aplicou e só envia o que mudou; a cada 6 horas reenvia mesmo sem mudança, para corrigir divergência criada por fora. Falha de conexão não é registrada como aplicada — o comando é retentado no ciclo seguinte.
- **O site consultava a API a cada página aberta para saber se a instalação está configurada.** Um valor que muda uma vez na vida era buscado a cada requisição: **27.608 consultas** em 40 horas. Numa máquina que roda os servidores de jogo ao lado, é processamento gasto à toa. Passou a ser consultado uma vez e lembrado.
- **A identidade visual era rebuscada a cada 5 segundos.** Cor, logo e nome mudam quando você os edita — não a cada 5 segundos. Eram **26.467 consultas**. A janela passou para 5 minutos.
- **O gráfico de jogadores das últimas 6 horas era refeito a cada 30 segundos, um pedido por servidor.** Com a frota inteira ligada, cada visitante da página pública gerava uma dezena de consultas a cada meio minuto — **22.166** no período. O gráfico agora se atualiza a cada 5 minutos; a lista de servidores continua a cada 30 segundos.
- **Duas falhas que apareciam como comportamento normal.** Se a API não respondesse, o site assumia "instalação completa" sem registrar nada — indistinguível de estar tudo certo. E, se a identidade visual não carregasse, o site caía na marca padrão em silêncio, aparecendo sem a sua marca sem nada explicando. As duas passam a ficar registradas.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
v1.0.4271GitHub ↗
## [Vincular a Steam agora libera o VIP na hora, e o que falha para de falhar calado] - 2026-08-21
- **Quem comprou VIP antes de vincular a Steam ficava esperando sem saber.** A liberação nos mapas VIP é endereçada pelo identificador do jogo (SteamID/EosID). Quem comprava sem tê-lo vinculado não tinha como ser alcançado — e vincular depois **não disparava nada**: só sincronizava os cargos do Discord. O acesso só chegava no próximo reinício de servidor, sem nada indicando que estava aguardando por isso. Agora o vínculo libera o acesso na hora.
- **Compra sem identidade de jogo agora aparece no registro.** Quando o comprador não tem Steam vinculada, a liberação não tem como acontecer — mas isso acontecia em silêncio absoluto: o pedido ficava "pago", a lista de permissão vazia, e nenhuma linha explicando o motivo. Passa a registrar o caso e o que fazer.
- **Aviso enganoso a cada servidor comum que subia.** O registro dizia "nenhum servidor está marcado como VIP" toda vez que um mapa **não-VIP** era iniciado — situação normal, tratada como problema. O aviso agora só aparece quando a frota inteira está sem marcação, que é o defeito de verdade.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
v1.0.4269GitHub ↗
## [Pagamentos do MercadoPago que nunca chegavam, acesso VIP que nunca era liberado e o formulário de configuração] - 2026-08-21
- **Pagamento aprovado, pedido parado, nada entregue.** O aviso que o MercadoPago envia ao painel quando um pagamento é aprovado vinha sendo **recusado** por uma proteção contra requisição forjada. Como esse aviso é servidor-para-servidor, ele não traz a identificação de navegador que a proteção esperava — e era barrado antes de qualquer verificação. O efeito: o dinheiro entrava, o pedido continuava "Pendente", nada era entregue, e o painel mostrava receita zerada mesmo com vendas. Nenhum erro aparecia em lugar nenhum; o pedido apenas parecia abandonado. **Se você usa MercadoPago, confira seus pedidos pendentes depois de atualizar** — os que foram pagos podem ser recuperados.
- **Botão "Sincronizar Pagamento" e verificação automática.** Todo pedido pendente agora tem um botão que pergunta ao gateway o que aconteceu e conclui o pedido se o pagamento foi aprovado. Além disso, o painel passa a varrer sozinho os pedidos pendentes quatro vezes por dia. Aviso de pagamento é entrega de terceiro e pode se perder por queda de rede ou instabilidade do gateway — agora não fica dependendo só dele.
- **"Acesso a mapas VIP" não liberava ninguém.** Servidores trazidos pela importação do ARK Server Manager não eram marcados como VIP, e a liberação depende dessa marcação — então nenhuma compra de acesso jamais chegou à lista de permissão do servidor. A importação agora marca os mapas VIP pelo nome, e a liberação passa a valer para a frota inteira, não só para o cluster do último servidor jogado. Quem comprava sem nunca ter jogado ficava permanentemente de fora, sem conseguir entrar para se corrigir.
- **Servidor desligado deixava de receber e de perder o VIP.** A liberação é feita com o servidor no ar; se o mapa VIP estivesse fora quando alguém comprava, aquela compra nunca alcançava esse mapa. E, pior, quem tinha o acesso vencido enquanto o servidor estava fora ficava com ele **para sempre**. Agora, quando um servidor sobe, a lista é reconciliada nos dois sentidos: libera quem tem direito e remove quem perdeu.
- **Renovar antes de vencer queimava os dias restantes.** Comprar de novo um VIP ainda ativo criava uma segunda assinatura em paralelo começando do zero, em vez de somar. Quem renovava com 20 dias restantes perdia esses 20 dias — e passava a receber avisos de vencimento duplicados. Agora os dias são somados ao prazo atual.
- **Venda para quem não tinha como receber.** A trava que exige Steam vinculada só valia para produtos que entregam por comando no jogo. Acesso a mapa não usa comando — usa lista de permissão, que também precisa saber quem é o jogador — então a trava não o alcançava e a compra passava. Agora qualquer produto que dependa da identidade no jogo exige o vínculo.
- **O formulário de configuração nunca funcionou no programa instalado.** Nos cinco jogos, ao abrir a configuração de um servidor a tela sempre caía no editor de texto puro, porque a descrição dos campos não era encontrada no pacote. Agora ela vai embutida no programa. Junto, a configuração de ARK passou de 56 para 121 opções, com busca por palavra-chave, unidade e limites em cada campo.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
v1.0.4266GitHub ↗
## [Chave do bot realmente separada, importação do ASM visível e envs que enganavam] - 2026-08-17
- **A chave do bot não separava nada de verdade.** O painel já gerava uma chave própria para o bot, mas a API continuava aceitando *também* o segredo do plugin do jogo como senha de administrador. Como esse plugin roda na máquina do servidor de ARK, mais exposta que a do painel, quem o comprometesse ganhava acesso administrativo completo — exatamente o que a chave separada existia para impedir. Agora, quando a chave do bot está configurada, só ela vale. O plugin continua funcionando normalmente: ele se autentica por outro caminho.
- **A importação do ARK Server Manager estava pronta e escondida.** Ela só era alcançável por "Varrer pasta base", um nome que não menciona o ASM — então quem procurava acabava no assistente de instalar do zero, que pergunta tudo à mão. Agora, com o ASM detectado, "Importar do ARK Server Manager" aparece como primeira opção do menu Adicionar servidor, já com a quantidade de servidores encontrados.
- **Não dava para sair do assistente de novo servidor.** O botão "Voltar" só andava entre os passos; quem entrava por engano ficava preso na tela. Agora há um caminho de volta para a lista.
- **O assistente sugeria nomes de ARK para qualquer jogo.** Com Palworld escolhido, os exemplos de nome e identificador continuavam falando de ARK. Passaram a refletir o jogo selecionado.
- **Busca de mods falhava para quem seguia o manual.** A chave da Steam era lida com dois nomes diferentes em partes diferentes do sistema, e o manual documentava só um deles — quem preenchia o documentado via a busca de mods do painel falhar sem explicação. Os dois nomes passaram a valer.
- **O modelo de configuração de produção levava a um painel que não subia.** Ele descrevia uma forma de instalação que saiu do projeto em abril e omitia três configurações obrigatórias. Reescrito para a instalação atual. Também saíram do modelo os ajustes de limite de requisições, que nunca tiveram efeito nenhum apesar de documentados.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
v1.0.4263GitHub ↗
## [Chave do bot realmente separada, importação do ASM visível e envs que enganavam] - 2026-08-17
- **A chave do bot não separava nada de verdade.** O painel já gerava uma chave própria para o bot, mas a API continuava aceitando *também* o segredo do plugin do jogo como senha de administrador. Como esse plugin roda na máquina do servidor de ARK, mais exposta que a do painel, quem o comprometesse ganhava acesso administrativo completo — exatamente o que a chave separada existia para impedir. Agora, quando a chave do bot está configurada, só ela vale. O plugin continua funcionando normalmente: ele se autentica por outro caminho.
- **A importação do ARK Server Manager estava pronta e escondida.** Ela só era alcançável por "Varrer pasta base", um nome que não menciona o ASM — então quem procurava acabava no assistente de instalar do zero, que pergunta tudo à mão. Agora, com o ASM detectado, "Importar do ARK Server Manager" aparece como primeira opção do menu Adicionar servidor, já com a quantidade de servidores encontrados.
- **Não dava para sair do assistente de novo servidor.** O botão "Voltar" só andava entre os passos; quem entrava por engano ficava preso na tela. Agora há um caminho de volta para a lista.
- **O assistente sugeria nomes de ARK para qualquer jogo.** Com Palworld escolhido, os exemplos de nome e identificador continuavam falando de ARK. Passaram a refletir o jogo selecionado.
- **Busca de mods falhava para quem seguia o manual.** A chave da Steam era lida com dois nomes diferentes em partes diferentes do sistema, e o manual documentava só um deles — quem preenchia o documentado via a busca de mods do painel falhar sem explicação. Os dois nomes passaram a valer.
- **O modelo de configuração de produção levava a um painel que não subia.** Ele descrevia uma forma de instalação que saiu do projeto em abril e omitia três configurações obrigatórias. Reescrito para a instalação atual. Também saíram do modelo os ajustes de limite de requisições, que nunca tiveram efeito nenhum apesar de documentados.
Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
---
Portalv0.1.0 — licensing + checkout
v0.1.0 — Primeira venda (2026-04-21)
Portal público de licensing funcional com Stripe + MercadoPago Checkout Pro, admin interno (M2) e dashboard do cliente (M3).
Licensing
- Emissão de JWT Ed25519 por compra, phone-home diario, HWID fingerprint, grace period de 7 dias.
- Rate limit + HMAC-SHA256 em
/api/licenses/*e webhooks MP. - 59 testes criticos (Ed25519, HMAC, subscription, webhook idempotency).
Checkout e renovacoes
- Stripe subscription lifecycle: renovacao via
invoice.paid, revogacao automática emcustomer.subscription.deleted. - MercadoPago Checkout Pro com BRL (PIX/boleto/cartao 12x).
- Emails transacionais via Resend (confirmação, expiracao, revocacao, 2FA) com templates aplicados na marca.
Admin interno (portal)
- Dashboard com MRR, gestao de licenses (revoke, estender, transferir HWID).
- Visao de clientes e pedidos com filtros e paginacao.
Minha conta
- Cliente acompanha licenses, transfere HWID self-service (1x/mês sem custo), abre Stripe Customer Portal.
- Login por magic link (email) — em breve: Discord OAuth + email/senha.
Compliance e SEO
- Páginas legais revisadas: Termos (CDC art. 49 — 7 dias arrependimento), Privacidade (LGPD art. 18 completo + DPO + transferência internacional), EULA (L1 + OFAC + indenizacao).
sitemap.xml,robots.txte OpenGraph image com brand.
Proximos passos
- Login Discord OAuth + email/senha (além do magic link).
- Auditoria de acoes admin.
- Reprocessamento manual de compras.
- i18n completo (pt-BR + en-US).