vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Análise estatística avançada da Mega-Sena com gerador inteligente de apostas baseado em ciência de dados.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Análise estatística avançada da Mega-Sena com gerador inteligente de apostas baseado em ciência de dados.
A versão 1.19.2 mantém frontend, API e banco SQLite em Workers/Durable Objects, com atualização diária da CAIXA em produção, e apresenta o site como um anuário estatístico: cada sorteio aparece no volante completo de 60 dezenas com as seis sorteadas marcadas, e números, prêmios e frequências viram tabelas com fio fino e linha de fonte da CAIXA. Produção e staging usam ambientes separados; staging bloqueia indexação e não agenda trabalho autônomo. A origem anterior foi arquivada após aceite público e reconciliação final dos dados. Veja os requisitos em docs/DEPLOY.md. Contas, inventários e evidências de implantação ficam fora deste repositório público. As instruções Bun/Docker abaixo descrevem o caminho local e de recuperação.
cloudflare/worker.ts atende páginas App Router via vinext/Vite e encaminha /api/* ao Durable Object SQLite MegaSenaData pelo binding privado DATA.lib/api/handler.ts contém o contrato compartilhado da API; server.ts é o adaptador Bun. Contextos de banco e log isolam operações concorrentes.cloudflare.config.ts define staging/produção, o segredo IP_HASH_SECRET e habilita o agendador persistente somente em produção. O Durable Object agenda a atualização diária às 06:00 UTC (03:00 Brasília), sem depender de visitas ao site. Staging cancela alarmes existentes e permite refresh manual por RPC privado, sem retries autônomos.no-store. Queries, cookies, autenticação, variantes de navegação e respostas comprimidas não entram no cache HTML.Use bun run dev:vinext para desenvolvimento Worker; bun run build:cloudflare para staging, bun run build:cloudflare:production para o artefato de produção e bun run test:cloudflare para a verificação local do runtime SQLite Durable Object. bun run build:vinext é o build Vite direto. Esses checks acrescentam evidência aos gates existentes de cobertura, SQLite Bun e build standalone. Argent Chromium deve verificar o candidato; não usar Playwright nesta migração. Deploy, backup, DNS e desativação do VPS seguem docs/DEPLOY.md.
/concurso/{número}), por ano (/resultados/{ano}) e por número de 1 a 60 (/numeros/{número}), com análise própria de cada sorteio e links entre concursos, anos e números/mega-da-virada, com prêmios, recordes, frequência das dezenas na Virada e as regras oficiais da CAIXAlastmod fiel, canonical e Open Graph por página, JSON-LD encadeado (Organization, WebSite, WebPage, BreadcrumbList, Dataset), imagem social por concurso, llms.txt e respostas 404/308 reais para URLs inválidas ou com zeros à esquerda50,50 e 1.200,50 preservam reais e centavos; erros esperados da geração permanecem legíveis em produçãonodejs_compat em produção; Bun >=1.4.2 no caminho local/CI; imagem Docker de recuperação com digest imutávelbun:sqlite no caminho local e de recuperaçãocorepack enable)pnpm install
bun run db:migrate
bun run db:pull -- --limit 100
Ou baixar todo o histórico (pode levar vários minutos):
bun run db:pull
bun run dev
Acesse http://localhost:3000 para ver a aplicação.
Para validar o runtime de produção local:
bun run build
bun run start
O repositório usa bunfig.toml com run.noOrphans = true, disponível no baseline Bun 1.3.14, para encerrar processos Bun filhos quando o processo pai morre. bun run build delega somente a compilação do Next.js ao Node 22+, evitando um crash conhecido do Bun 1.3.14 no Linux; scripts, SQLite, API e runtime de produção continuam no Bun. Os scripts de supervisão também esperam process.exited após SIGTERM e escalam para SIGKILL depois do período de graça; não use proc.killed como prova de encerramento.
bun run dev - Iniciar servidor de desenvolvimento (API Bun + proxy Next.js)bun run build - Build para produção com o bundler padrão do Next.js 16bun run dist:standalone - Sincronizar dist/standalone a partir de .next/standalone para deploy self-hostedbun run deploy:verify - Validar que a produção pública em /api/health está saudável e na mesma versão de package.jsonbun run security:csp:edge - Validar que a borda pública não substitui a CSP nonce-based da aplicação e classificar o dono provável da sobrescrita; quando a CSP é compartilhada por home/API, imprime fingerprint curto, resumo de fontes e ações de remediação públicas; com ORIGIN_BASE_URL, compara uma origem direta sem imprimir a URL privada; com token read-only, diferencia zona inacessível de zona acessível sem regra candidata e pode executar Cloudflare Trace com simulação opt-inbun run start - Iniciar a stack de produção local (API Bun + Next standalone já buildado)bun run lint - Executar ESLint (falha em warnings)bun run lint:ast - Executar regras estruturais de supply chain com ast-grepbun run typecheck - Verificar os tipos TypeScript sem emitir arquivosbun run lint:fix - Corrigir problemas de lint automaticamentebun run format - Formatar código com Prettierbun run test - Executar testes com Vitest (usa fallback de banco em memória)bun run test:sqlite - Executar os testes de atraso no bun:sqlite em arquivo; limpa apenas a fixture descartável .tmp/e2e/delay-analysis-test.dbbun run test:argent - Reproduzir a geração de 200 apostas e a página 4 em Chromium de 375 px, usando Argent.argent/flows/qa-generator-ptbr-budget.yaml verifica 50,50 como R$ 50,50 e oito apostas, sem inflar o orçamento. Reproduza-o duas vezes com argent flow run qa-generator-ptbr-budget --platform chromium na mesma fixture de produção.bun run doctor - Executar o React Doctor instalado pelo lockfilebun run security:secrets - Escanear a árvore fonte limpa com Gitleaks via Dockerbun run security:secrets:history - Escanear o histórico Git com relatório redigido em .tmp/ e resumo de alcance por branch/tagbun run db:migrate - Executar migrações do banco de dadosO seed versionado inclui 3.064 concursos, até #3064 (29/09/2026). Para atualizar
somente os concursos posteriores ao último armazenado, o entry point legado
bun run scripts/fetch-missing.ts usa a mesma ingestão incremental, validação,
DATABASE_PATH e transação de db:pull.
# Baixar últimos N sorteios (substitui existentes)
bun run db:pull -- --limit 100
# Baixar últimos N sorteios (incremental - apenas novos)
bun run db:pull -- --limit 100 --incremental
# Baixar faixa específica
bun run db:pull -- --start 1 --end 500
# Baixar todos os sorteios (sem flags)
bun run db:pull
# Baixar todos incrementalmente (pula existentes)
bun run db:pull -- --incremental
# Aceitar explicitamente lacunas da CAIXA quando uma faixa parcial for aceitável
bun run db:pull -- --incremental --allow-partial
db:pull reescreve todas as colunas de todos os concursos em uma transação única e
longa. Quando faltam apenas os dados de premiação — o caso de um banco carregado antes
do tratamento atual de listaRateioPremio/faixa, que faz a seção "Prêmios" exibir
R$ 0,00 — use o backfill dedicado, que altera só as colunas de prêmio, commita em
lotes e é retomável:
As consultas HTTP e pausas acontecem fora da transação de escrita. Cada lote já recebido é aplicado numa transação curta, permitindo logs/auditoria de outra conexão durante a espera da CAIXA. Falhas de banco revertem o lote; falhas sustentadas de rede preservam o progresso já recebido para retomada.
# Somente concursos sem dados de premiação
bun run db:backfill-prizes
# Refazer todos os concursos armazenados
bun run db:backfill-prizes -- --all
# Limitar a quantidade e ajustar o espaçamento entre requisições
bun run db:backfill-prizes -- --limit 100 --delay 500
Modos:
ON CONFLICT ... DO UPDATE - atualiza sorteios existentes preservando a linha--incremental): Usa ON CONFLICT ... DO NOTHING - apenas adiciona novos sorteios, pula existentes--allow-partial): mantém sorteios baixados mesmo quando alguns concursos falham; sem essa flag, downloads de faixa falham fechados para evitar bases incompletas tratadas como sucessoQuando usar modo incremental:
Após baixar grandes quantidades de dados, otimize o banco para recuperar espaço e melhorar performance:
# Otimizar banco de dados (recomendado após grandes ingestões)
bun scripts/optimize-db.ts
Este script executa:
Quando executar:
bun run db:pull)Nesta revisão, a instrução do responsável substitui o gate Playwright por Argent.
O fluxo salvo cobre geração e paginação; as demais verificações de UI exigem
interação e evidência pelo Argent. Não representa toda a cobertura legada de
tests/app.
Com Argent e Google Chrome instalados no macOS, prepare uma fixture isolada e inicie a stack de produção local (o build usa a porta padrão da API, 3201):
bun run scripts/prepare-e2e-db.ts
bun run build
PORT=3117 DATABASE_PATH=.tmp/e2e/mega-sena.db \
IP_HASH_SECRET=public-argent-test-only-secret-0123456789 \
TRUST_PROXY_HEADERS=true bun run start
Em outro terminal, rode bun run test:argent duas vezes sem alterar o YAML. Cada
execução abre um perfil novo em .tmp/ e produz um relatório por etapa. O fluxo
confirma 200 apostas e a faixa 61–80; contraste, largura efetiva e screenshots
devem ser inspecionados pelo Argent em desktop e celular. O reset de fixtures
aceita somente arquivos .db regulares em .tmp/e2e via E2E_DATABASE_PATH e
ignora DATABASE_PATH herdado. Nunca use o segredo público de teste em produção.
O build do caminho local/VPS usa o fluxo padrão do Next.js 16:
bun run build
Para preparar os artefatos usados no deploy self-hosted e no Dockerfile, gere dist/standalone a partir do output oficial do Next:
bun run dist:standalone
Esse comando copia .next/standalone e .next/static sem depender de glob de shell, preservando arquivos ocultos como BUILD_ID e manifests.
O build exclui bancos SQLite, WAL/SHM, backups e artefatos .bak do output tracing do Next.js e falha se .next/standalone ainda contiver esses arquivos. O script também remove qualquer diretório db/ remanescente de dist/standalone, mantendo o deploy fail-closed e dependente do volume/runtime reais.
Staging segue o mesmo artefato self-hosted documentado em docs/DEPLOY.md, mas exige alvo remoto explícito. Não considere staging publicado quando houver apenas tarball, imagem local ou CI verde; é preciso health check no domínio/base URL de staging real.
├── app/ # App Router Next.js
│ ├── (home)/ # Página inicial e seu estado de carregamento
│ ├── dashboard/ # Páginas do dashboard
│ │ ├── page.tsx # Dashboard principal
│ │ ├── statistics/ # Página de estatísticas
│ │ └── generator/ # Página do gerador de apostas
│ ├── resultados/ # Arquivo de resultados e páginas por ano
│ ├── concurso/[numero]/ # Página e imagem social de cada concurso
│ ├── numeros/ # Frequência e atraso de cada número de 1 a 60
│ ├── mega-da-virada/ # Todas as edições da Mega da Virada
│ ├── _lib/, _components/ # Carregadores e UI compartilhados do arquivo
│ ├── sitemap.xml/, robots.ts, llms.txt/ # Superfície para buscadores e IAs
│ └── layout.tsx # Layout raiz
├── components/ # Componentes React
│ ├── ui/ # Componentes shadcn/ui
│ └── *.tsx # Componentes customizados
├── lib/ # Bibliotecas principais
│ ├── analytics/ # Estatísticas e geração de apostas
│ ├── api/ # Cliente da API CAIXA
│ ├── security/ # CSP e headers de segurança
│ ├── db.ts # Utilitários do banco de dados
│ ├── constants.ts # Constantes compartilhadas
│ └── utils.ts # Funções auxiliares
├── db/ # Banco de dados SQLite
│ ├── migrations/ # Migrações SQL
│ └── mega-sena.db # Arquivo do banco (gerado)
├── docs/SECURITY.md # Decisões de CSP e manutenção de overrides
├── next.config.js # Rewrites e output standalone do Next.js
├── proxy.ts # Proxy Next.js (CSP e headers de segurança)
├── server.ts # Superfície `/api/*` executada em Bun
└── scripts/ # Scripts CLI
├── migrate.ts # Executor de migrações
├── pull-draws.ts # Ingestão de dados
└── sync-standalone-dist.ts # Prepara `dist/standalone` para deploy
drawsArmazena histórico completo de sorteios com:
number_frequencyAnálise de frequência em cache para todos os números (1-60):
user_betsRastreamento opcional de apostas geradas para análise futura.
Copie .env.example para .env.local e personalize:
# URL base usada pelas páginas do App Router para fetches server-side
NEXT_PUBLIC_BASE_URL=http://localhost:3000
# Porta exposta pelo servidor Bun (`server.ts`)
API_PORT=3201
# CORS: lista de origens permitidas (separadas por vírgula)
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3002
# Confie em headers de proxy apenas quando o peer for loopback ou estiver em TRUSTED_PROXY_IPS
TRUST_PROXY_HEADERS=false
# TRUSTED_PROXY_IPS=172.18.0.10
# Segredo opcional para chamadas server-side internas escaparem do rate limit público.
# Deve ter no mínimo 32 caracteres e nunca ser exposto ao navegador.
# INTERNAL_API_SECRET=
# LGPD: segredo HMAC para pseudonimização de IP (mínimo 32 caracteres).
# Obrigatório em produção (NODE_ENV=production). Gere com: openssl rand -hex 32
IP_HASH_SECRET=
# O E2E injeta um valor público de teste no próprio playwright.config.ts.
# Produção nunca gera esse segredo automaticamente.
Os testes executados via
bun run testsimulam o banco de dados usando um driver em memória quando a variávelVITESTestá definida, permitindo rodar a suite sem obun:sqlitereal.
O projeto cumpre a Lei nº 13.709/2018 (LGPD):
/privacy (fonte: docs/PRIVACY.md)./privacy/direitos com modelo de solicitação.docs/LGPD-COMPLIANCE.md (RoPA, bases legais, retenção, segurança).docs/INCIDENT-RESPONSE.md (Art. 48).localStorage.lib/security/pseudonymize.ts).[email protected].A aplicação segue um design limpo e minimalista inspirado em Apple/Linear/Mercury com:
Todos os design tokens estão definidos em app/globals.css e tailwind.config.cjs.
Usados pelas páginas /resultados, /concurso, /numeros e /mega-da-virada. Parâmetros inválidos,
ambíguos ou fora do intervalo respondem 400; concurso ou ano inexistente, 404.
Seguem o mesmo rate limit por visitante e a mesma auditoria das demais rotas.
GET /api/draws — índice: total de concursos, últimos 10 sorteios e resumo por ano.GET /api/draws?year=2026 — todos os concursos do ano (1996–2100).GET /api/draws?contest=3060 — um concurso com premiação por faixa, concursos vizinhos, histórico de cada dezena até aquele sorteio e posição da soma.GET /api/draws?view=mega-da-virada — as edições da Mega da Virada, da mais recente para a mais antiga.GET /api/numbers — frequência, ranking e atraso dos 60 números.GET /api/numbers?n=10 — perfil de um número: aparições, intervalo médio, maior sequência sem sair e dezenas parceiras.GET /api/sitemap — lista mínima de concursos e anos para o sitemap.xml./api/generate-bets (POST)Gera apostas baseadas em orçamento, estratégia e modo.
Modos aceitos: simple_only, multiple_only, mixed e optimized.
O valor simple_only corresponde a Apenas Simples na interface.
Corpo da Requisição:
{
"budget": 100,
"strategy": "balanced",
"mode": "optimized"
}
Resposta:
{
"success": true,
"data": {
"bets": [
{
"id": "bet_1727711234567_n1m2o3p4q",
"numbers": [5, 12, 23, 34, 45, 56],
"cost": 6,
"type": "simple",
"numberCount": 6,
"strategy": "balanced"
}
],
"totalCost": 6,
"remainingBudget": 94,
"budgetUtilization": 6,
"totalNumbers": 6,
"strategy": "balanced",
"mode": "optimized",
"summary": {
"simpleBets": 1,
"multipleBets": 0,
"averageCost": 6
}
}
}
A descoberta no ChatGPT Search, as políticas de crawlers e os limites de medição de citações/referrals estão documentados em CHATGPT-SEARCH.md. O site mantém telemetria operacional, sem analytics de aquisição.
Esta aplicação implementa medidas de segurança seguindo OWASP e melhores práticas atuais:
proxy.tsnonce + strict-dynamic, sem unsafe-inline em script-srcunsafe-inline de style-src; Google Fonts continua permitido por origem. Não há exceção para atributos style: o HTML do servidor não usa style=.< antes da injeção no <script>| Header | Valor |
|---|---|
| Content-Security-Policy | Restritivo por origem e tipos de recurso |
| Cross-Origin-Embedder-Policy | require-corp |
| Cross-Origin-Opener-Policy | same-origin |
| Cross-Origin-Resource-Policy | same-origin |
| Strict-Transport-Security | Aplicado pela API Bun em HTTPS confiável e pelo reverse proxy nas páginas TLS |
| X-Content-Type-Options | nosniff |
| X-Frame-Options | DENY |
/api/*, incluindo /api/health e preflights CORS405 e header AllowContent-Type ausente ou não JSON com 415, evitando requisições simples cross-site sem preflight em operações de custo computacional/api/* em Bun também aplica CSP deny-by-default para JSON, nosniff, DENY em frame e no-referrerContent-Type e sujeito ao mesmo rate limit da APICF-Connecting-IP/X-Real-IP/X-Forwarded-For só influenciam IP, auditoria ou rate limit quando TRUST_PROXY_HEADERS=true, o peer de socket é loopback ou está em TRUSTED_PROXY_IPS, o valor recebido é válido e o proxy sobrescreve headers de IP vindos do cliente; proxy.ts não emite HSTS nem upgrade-insecure-requests, então HSTS de TLS terminado deve ser aplicado no reverse proxyINTERNAL_API_SECRET para evitar consumir a cota pública, mas o bypass exige peer loopback e segredo forte compartilhado; um cliente público não deve conseguir ativá-lo apenas enviando headers.Content-Lengthbun (UID/GID 1000)HIGH/CRITICAL passarSIGKILL quando SIGTERM não encerra dentro do prazoBuild para produção:
bun run build
A aplicação pode ser implantada via Docker. Veja docker-compose.yml para configuração.
O docker-compose.yml local publica as portas apenas em 127.0.0.1. Em produção, exponha somente o proxy reverso público e mantenha a porta da API Bun restrita à rede interna do Docker/proxy.
bun run lint:fix e bun run format antes de commitarbun run test -- --runAntes de publicar uma release, execute bun run lint, bun run lint:ast, bun run typecheck, bun run test -- --run --coverage, bun run test:sqlite, bun run security:braces, pnpm audit e bun run build; verifique mudanças de UI com Argent conforme o fluxo acima. A exceção de audit do patch local é específica e exige a regressão anterior; veja SECURITY.md.
Depois do deploy, execute bun run deploy:verify; produção com versão antiga em /api/health deve ser tratada como release não concluída. Depois de mudanças em Cloudflare/Traefik, execute também bun run security:csp:edge; a borda não deve trocar a CSP nonce-based por uma política com unsafe-inline em script-src ou style-src. A aplicação não usa unsafe-inline em nenhuma diretiva de produção. Quando a mesma CSP ampla aparecer na home e em /api/health, o verificador deve apontar shared_response_headers como diagnóstico provável; investigue primeiro regras globais de response headers ou middleware do proxy. Se o lookup Cloudflare disser que a zona está inacessível ao token, não conclua que a zona não tem regras candidatas.
Apache 2.0
Esta aplicação é apenas para fins educacionais e de análise estatística. Não garante resultados vencedores. Jogos de loteria são jogos de azar. Jogue com responsabilidade.
bun run db:pull - Baixar dados de sorteios da API CAIXAbun run db:backfill-prizes - Reidratar apenas as colunas de premiação dos sorteios já armazenadosbun run db:export-draws - Atualizar o seed público versionado db/seed/draws.json a partir do banco localbun run db:import-draws <seed.json> [--dry-run] - Acrescentar a um banco vivo só os concursos que faltam, sem trocar o arquivo (ver docs/DEPLOY.md)bun run seo:indexnow -- --contests N[,M] [--dry-run] - Avisar o IndexNow (Bing e parceiros) das páginas que mudaram; exige INDEXNOW_KEYbun run audit:prune - Hard delete de logs de auditoria antigos (retenção)bun run log:prune - Hard delete de eventos de log antigos (retenção)bun scripts/optimize-db.ts - Otimizar banco de dados (checkpoint WAL + VACUUM + ANALYZE)