Home
TypeScript

overxyz

OverXYZ é uma plataforma open source desenvolvida em Next.js para estudar autenticação, assinaturas, pagamentos via PIX, controle de acesso por planos, integração com Discord e painel administrativo. O projeto inclui boas práticas de segurança, privacidade e documentação para aprendizado e contribuição da comunidade.

README

OverXYZ

Projeto educacional em Next.js que demonstra uma landing page, catálogo por planos,
autenticação local e via Discord, checkout PIX e um painel administrativo.

Este repositório é uma base de estudo. O armazenamento em JSON, o rate limit em
memória e a confirmação manual de pagamentos não são adequados para produção
distribuída sem as adaptações descritas abaixo.

Requisitos

  • Node.js 20 ou superior
  • npm 10 ou superior

Rodando localmente

npm ci
cp .env.example .env.local
npm run dev

No PowerShell, use Copy-Item .env.example .env.local no lugar de cp.
Em desenvolvimento, SESSION_PASSWORD pode ficar vazia e será gerada uma chave
temporária a cada processo. Em produção, ela é obrigatória e precisa ter pelo
menos 32 caracteres:

openssl rand -base64 48

Validação completa:

npm run check

Variáveis de ambiente

Copie .env.example e preencha somente as integrações que usar.

Variável Necessidade Finalidade
SESSION_PASSWORD produção Criptografia e autenticação da sessão.
TRUST_PROXY opcional Use true somente se o proxy sobrescrever os headers de IP.
LEGAL_ENTITY_NAME produção pública Nome do responsável pela implantação.
LEGAL_CONTACT_EMAIL produção pública Contato dos Termos de Uso.
PRIVACY_CONTACT_EMAIL produção pública Canal para solicitações de privacidade.
ADMIN_EMAILS painel admin E-mails autorizados, separados por vírgula.
DISCORD_INVITE_URL opcional Convite público da comunidade.
DISCORD_WIDGET_SERVER_ID opcional ID público usado pelo widget.
DISCORD_CLIENT_ID Discord OAuth Identificador público do aplicativo.
DISCORD_CLIENT_SECRET Discord OAuth Credencial secreta do aplicativo.
DISCORD_WEBHOOK_URL opcional Webhook secreto de notificações.
MISTICPAY_CLIENT_ID checkout PIX Credencial da API.
MISTICPAY_CLIENT_SECRET checkout PIX Credencial secreta da API.
MISTICPAY_WEBHOOK_URL opcional URL pública de callback do projeto.

Nunca use valores reais em .env.example, documentação, screenshots ou HTMLs
promocionais. Todos os arquivos .env*, exceto o exemplo, são ignorados pelo Git.

Dados e privacidade

O estado local é criado em data/ e pode conter e-mails, hashes de senha, IDs do
Discord, transações e executáveis enviados pelo administrador. O conteúdo da pasta
é ignorado pelo Git; somente data/.gitkeep deve ser versionado.

O checkout envia nome e CPF diretamente à MisticPay, mas não os persiste no JSON
local. As notificações de compra enviam apenas o handle ao Discord.

Antes de publicar uma instância real, revise os Termos e a Política de Privacidade
com aconselhamento jurídico e configure os três campos legais do ambiente.

Limitações importantes

  • O banco JSON não oferece transações nem segurança para múltiplos processos.
  • O rate limit em memória não funciona de forma global em múltiplas instâncias.
  • Sem um proxy confiável, o rate limit usa um bucket compartilhado e ignora headers
    de IP enviados pelo cliente. Configure TRUST_PROXY=true somente atrás de um proxy
    que sobrescreva X-Forwarded-For e X-Real-IP.
  • Uploads e dados exigem disco persistente; plataformas serverless precisam de banco
    e object storage externos.
  • O pagamento é confirmado manualmente no admin. Não libere acesso baseado apenas
    no corpo de um webhook: valide assinatura, valor, moeda, status e idempotência.
  • Não existe fluxo automático de recuperação de senha ou exclusão de conta.
  • Executáveis enviados pelo administrador devem ser assinados e verificados contra
    malware antes de serem oferecidos para download.

Publicação segura

  1. Gere credenciais novas para a implantação; nunca reutilize segredos de dev.
  2. Confirme que git status --ignored mostra .env.local e data/ como ignorados.
  3. Rode npm audit e npm run check.
  4. Revise imagens, vídeos e documentos para metadados ou dados pessoais.
  5. Se um segredo já entrou em algum commit, rotacione-o primeiro e depois remova-o
    de todo o histórico com uma ferramenta como git filter-repo.

Consulte SECURITY.md para reportar vulnerabilidades e
CONTRIBUTING.md antes de contribuir.

Licença

Código e assets incluídos neste repositório são distribuídos sob a licença MIT.
Veja LICENSE.