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.3367GitHub ↗
## [Upload de capa de produto + seletor de pasta] - 2026-07-23
- **Enviar a capa do produto direto pelo painel.** No cadastro de produto, além de colar uma URL, agora dá pra **enviar um arquivo de imagem** (PNG, JPG, WebP ou GIF, até 5 MB). A capa fica guardada no seu servidor e aparece na loja; se uma imagem quebrar, a loja mostra o ícone da categoria no lugar.
- **Correção do "Selecionar pasta" (importar servidor).** O botão que abre o explorador de pastas voltou a funcionar no aplicativo — o seletor passou a usar um caminho nativo mais confiável.
Validação: `pnpm validate` verde (API 4427 testes, Web 1251) + revisão de segurança do upload. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar os servidores.
v1.0.3366GitHub ↗
## [Limpeza do painel + loja mais robusta] - 2026-07-23
- **Nomes de itens mais legíveis no aviso de entrega.** O aviso de "compra entregue" agora usa nomes curados para itens comuns (ex.: "Tek Bow Alfa", "Elemento") em vez do nome técnico do blueprint.
- **Loja: imagem de produto quebrada não deixa mais buraco.** Se a URL da imagem de um produto falhar ao carregar (ou estiver vazia), a loja mostra o ícone da categoria no lugar — tanto na grade quanto na página do produto.
- **Cadastro de produto: removida a busca "ARK Data".** Aquele seletor gerava um ícone que nunca aparecia (link quebrado). Continue usando o campo de **URL da imagem** para a capa do produto.
- **Menos controles sem uso no painel.** Removidos os botões de "cluster padrão/favorito" (o sistema já escolhe o cluster automaticamente) e a tela interna "ARK Data" (catálogo que não era usado por loja nem kits).
Validação: `pnpm validate` verde (API 4418 testes, Web 1251, Domain 103) + revisão holística. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar os servidores ARK.
v1.0.3365GitHub ↗
## [Notificação de entrega agora lista os itens] - 2026-07-23
- **A notificação de "compra entregue" mostra os itens do kit.** Além de sair uma vez só por pedido, agora o aviso (no canal de compras e no seu privado) **lista cada item entregue com nome e quantidade** (e a qualidade quando houver). Assim dá pra conferir de relance tudo que o jogador recebeu no kit, num único aviso.
Validação: `pnpm validate` verde. Atualização in-place pelo auto-updater.
---
v1.0.3364GitHub ↗
## [Uma notificação por kit + nome do servidor + modal] - 2026-07-22
- **Fim do spam de "compra entregue" no Discord.** Um kit com vários itens virava várias entregas, e o bot mandava **uma notificação por item** (no seu privado e no canal de compras) — poluindo tudo com mensagens repetidas. Agora sai **uma única notificação por pedido**, quando o kit inteiro é entregue, mostrando o produto e a **quantidade de itens** entregues. Item avulso continua com uma notificação (naturalmente).
- **Nome do servidor no pedido:** onde aparecia **"Servidor: undefined · Ragnarok"** agora mostra o nome certo do servidor.
- **Janela "Dar produto":** não corta mais o conteúdo — a janela ganha rolagem interna e o botão **"Entregar"** fica sempre visível, mesmo em telas menores ou com produto selecionado.
Validação: `pnpm validate` verde (+ migração `deliveredNotifiedAt`). Atualização in-place pelo auto-updater.
---
v1.0.3363GitHub ↗
## [Fim das tentativas em servidores desligados] - 2026-07-22
- **O sistema para de tentar aplicar coisas em servidor offline.** Quando um servidor estava desligado, o painel ficava tentando, a cada ciclo, liberar acesso VIP e sincronizar a loja nele via RCON — gerando um monte de "conexão recusada" no log sem sentido. Agora ele **pula servidores offline** e **reaplica automaticamente assim que o servidor volta a ficar online** (o VIP no próximo ciclo; a loja já reaplicava na reconexão). Menos ruído, menos desperdício.
Validação: `pnpm validate` verde. Atualização in-place pelo auto-updater (não precisa mexer nos plugins).
---
v1.0.3362GitHub ↗
## [Entrega de itens do kit corrigida de verdade] - 2026-07-22
- **Os itens do kit agora chegam mesmo no inventário do jogador.** A entrega usava um comando que, por baixo dos panos, espera um número de jogador pequeno — mas recebia o SteamID (17 dígitos), que "estourava" o campo, então **nenhum item era criado**, mesmo com o jogador online. Pior: o painel marcava "Entregue" assim mesmo (só os pontos, que vão por outro caminho, chegavam). Agora a entrega **coloca o item direto no inventário do jogador** (do mesmo jeito que a loja in-game faz) e **confirma se o item foi realmente criado**.
- **"Entregue" passa a ser honesto:** só marca entregue quando o item de fato entrou. Se o jogador estiver offline, aguarda ele entrar; se o item não puder ser criado (ex.: blueprint inválido), fica pendente em vez de mentir "Entregue".
Validação: build C++ (ASE + ASA) verde + `pnpm validate` verde. ⚠️ Para valer nos servidores: **Cluster → Plugins & Config → "Atualizar todos" + reinicie o ARK** (o backend atualiza sozinho pelo auto-updater).
---
v1.0.3361GitHub ↗
## [Correção do login no launcher (hotfix)] - 2026-07-22
- **Corrige o login que ficava voltando para a tela de entrar** depois da última atualização, quando o painel é aberto pelo launcher (endereço local `localhost:3000`) com o domínio público configurado. A nova etapa final do login (uma chamada interna do próprio app) estava sendo barrada pela política de origem porque o app local não constava na lista do domínio. Agora a **origem local do launcher é sempre confiada** — como já acontecia com o app empacotado — então o login conclui normalmente. Isso não afrouxa a proteção: um site externo continua bloqueado (a origem dele nunca é `localhost`).
Validação: `pnpm validate` verde. Atualização in-place pelo auto-updater.
---
v1.0.3360GitHub ↗
## [Login em uma etapa só + fim do spam do chat global] - 2026-07-22
- **O login no Discord agora entra de primeira, mesmo pelo domínio (HTTPS) dentro do app.** A tentativa anterior (cookies `SameSite=None; Secure`) não resolveu: o navegador embutido do launcher **descarta** os cookies temporários criados na ida para o Discord, então a validação da volta falhava e o painel pedia para autenticar de novo. Agora o sistema **não depende desses cookies** — a informação de segurança (origem + verificação anti-fraude) viaja **assinada dentro do próprio retorno do Discord**, junto com uma prova que só o navegador que iniciou o login possui. Funciona em qualquer navegador embutido, por HTTP local ou HTTPS de domínio, na primeira tentativa.
- **Segurança do login reforçada:** a conclusão do login foi endurecida para impedir um golpe clássico de OAuth (fazer alguém logar, sem perceber, numa conta controlada por terceiros) — a etapa final agora só é aceita a partir do próprio painel, atrelada ao navegador que começou o processo.
- **O chat global não repete mais a mesma mensagem várias vezes.** Quando a confirmação de entrega de uma mensagem entre servidores não chegava a tempo (ex.: conexão do plugin instável após um reinício da API), o sistema **reenviava a mesma mensagem** — e o plugin do jogo a exibia de novo a cada reenvio, fazendo o chat parecer "espamando". Agora o plugin **reconhece e ignora entregas repetidas do mesmo comando** (identificador único), então cada mensagem aparece **uma vez só**. A mesma proteção evita, por tabela, que um comando reenviado (por exemplo, entregar um item) seja executado em duplicidade.
Validação: `pnpm validate` verde (API + Web + Bot + Domain + build) + revisão de segurança + build C++ (ASE + ASA). Atualização in-place pelo auto-updater. Lembretes: (1) o Discord precisa ter as URLs de retorno cadastradas (`http://localhost:3000/auth/callback` e a do seu domínio); (2) para o fix do chat valer nos servidores, rode Cluster → Plugins & Config → **"Atualizar todos"** e reinicie o ARK (isso também restabelece o canal de confirmação e elimina o reenvio na origem).
---
v1.0.3359GitHub ↗
## [Kits entregam os itens de verdade + tela de pedido mais clara] - 2026-07-22
- **Itens de kit agora chegam mesmo no inventário:** o comando de entrega de item exige o blueprint no formato completo do ARK (`Blueprint'/Game/.../X.X'`). Quando o item estava cadastrado só com o caminho (`/Game/.../X`), o jogo aceitava o comando mas **não criava o item** — e a entrega ficava marcada como "Entregue" sem o jogador receber nada. Agora o sistema **completa o formato do blueprint automaticamente** na entrega, então caminhos "crus" cadastrados nos produtos passam a funcionar.
- **Tela do pedido:** o servidor de entrega agora aparece com o **nome + mapa** (em vez do id interno), e a lista de entregas **atualiza sozinha** enquanto houver entrega pendente (não precisa mais dar F5).
Validação: `pnpm validate` verde. Atualização in-place pelo auto-updater. (Observação: pedidos já marcados como "Entregue" com blueprint antigo não reenviam sozinhos — reentregue o kit para o item chegar com o formato corrigido.)
---
v1.0.3355GitHub ↗
## [Login sem precisar autenticar duas vezes] - 2026-07-22
- **Corrigido o login que às vezes exigia autenticar no Discord 2×:** o diagnóstico apontou que os cookies temporários do login (usados para validar a volta do Discord) não sobreviviam ao redirecionamento quando o painel é acessado por HTTPS (domínio) dentro do app. Agora, sob HTTPS, esses cookies usam `SameSite=None; Secure`, então a 1ª autenticação já entra direto. Em acesso local (HTTP) o comportamento anterior é mantido.
Validação: `pnpm validate` verde. Atualização in-place pelo auto-updater.
---
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).