commit 1796e5f79feabf17227415b93e9fc3d4fc745e97 Author: HOKMA-TECH Date: Wed Aug 5 20:03:33 2026 -0300 docs: spec de design do Ares Next (arquitetura hibrida, backend na VPS) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee439b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Rust / Cargo +target/ +**/*.rs.bk + +# Node / npm +node_modules/ +dist/ +build/ + +# Tauri +**/src-tauri/target/ + +# Ambiente / IDEs +.env +.env.* +!.env.example +.idea/ +.vscode/ +*.swp +.DS_Store + +# Sensível +*.pem +*.key +id_ed25519* +!.ssh/ + +# Brainstorm / superpowers +.superpowers/ + +# Logs +*.log \ No newline at end of file diff --git a/attachment_9f73235f24525145c296cbac87242b61.jpg b/attachment_9f73235f24525145c296cbac87242b61.jpg new file mode 100644 index 0000000..f7ab523 Binary files /dev/null and b/attachment_9f73235f24525145c296cbac87242b61.jpg differ diff --git a/como-usar-o-spotify-web-player-no-pc-dois.jpg b/como-usar-o-spotify-web-player-no-pc-dois.jpg new file mode 100644 index 0000000..89983cf Binary files /dev/null and b/como-usar-o-spotify-web-player-no-pc-dois.jpg differ diff --git a/docs/superpowers/specs/2026-08-05-ares-next-design.md b/docs/superpowers/specs/2026-08-05-ares-next-design.md new file mode 100644 index 0000000..5f2ec81 --- /dev/null +++ b/docs/superpowers/specs/2026-08-05-ares-next-design.md @@ -0,0 +1,162 @@ +# Ares Next — Design Document + +**Data:** 2026-08-05 +**Status:** Aprovado (brainstorming) + +--- + +## 1. Objetivo + +Aplicativo desktop multiplataforma (Windows, Linux, macOS) moderno para **compartilhamento e download de arquivos autorizados** (próprios, software livre, domínio público ou licenciado). Inspirado em clientes P2P clássicos (Ares), com arquitetura atual, segurança em primeiro plano e base para evolução comercial. + +O **backend roda na VPS** Hokma (`13.140.174.24`), **isolado** dos demais projetos, sob o domínio **ares.hokmatech.com**. + +--- + +## 2. Decisões de arquitetura (validadas) + +| Decisão | Escolha | Motivo | +|---|---|---| +| Modelo de rede | **Híbrido** | Transferência P2P direta + índice / tracker central no VPS | +| Protocolo P2P | **libp2p (Rust)** | NAT traversal, relay, cripto e robustez mantidas pela comunidade | +| Framework desktop | **Tauri 2** | Binário leve, core em Rust, seguro, multiplataforma | +| Frontend | **React + TypeScript + Tailwind** | Ecossistema maduro, temas claro/escuro, acessibilidade | +| Backend | **Rust + axum** | Mesma linguagem do core, alto throughput, controle de rede | +| Banco de dados | **SQLite (FTS5)** | Zero-config, embarcado no backend e no desktop | +| Identidade | **Ed25519 por dispositivo** | Sem contas; peer ID = hash da chave; assinatura de metadados | +| Integridade | **BLAKE3 por chunk + arquivo inteiro** | Rápido e verificável incrementalmente | +| Deploy | **Coolify (projeto isolado) + Cloudflare** | Sem misturar com hokma-api, n8n, evolution | +| Domínio | **ares.hokmatech.com** | Registro A → `13.140.174.24` + Proxy Host no Coolify | + +--- + +## 3. Visão geral da arquitetura + +``` +┌───────────────────────────────┐ +│ Desktop App (Tauri 2) │ +│ React + TS + Tailwind (UI) │ +│ ┌─────────────────────────┐ │ +│ │ Rust core (libp2p) │ │ +│ │ downloads/uploads/player │ │ +│ │ SQLite local │ │ +│ └───────────▲─────────────┘ │ +└──────┬────────┼──────────────┬─┘ + b │ │ │ + e │ HTTPS │ │ libp2p (direto) + m │ │ │ +┌──────▼──────┐ │r ┌──────▼──────┐ +│ Backend │ │ │ Outros │ +│ axum+VPS │ │ │ pares │ +│ SQLite/FTS │ │ │ (desktop) │ +└─────────────┘ └───────┴─────────────┘ +``` + +- **Busca, metadados, tracker e coordenação** ficam no servidor. +- **Bytes dos arquivos** trafegam par-a-par via libp2p (sessão cifrada). +- **NAT impossível** → relay libp2p no servidor como último recurso (bytes cifrados). + +--- + +## 4. Estrutura de pastas (monorepo) + +``` +ares-next/ +├── server/ # Backend na VPS (Rust + axum + SQLite) +│ ├── src/ +│ │ ├── main.rs # bootstrap + config + rotas +│ │ ├── config.rs # env/lepo, domínio, limites +│ │ ├── api/ # handlers REST (health, search, announce, peers, stats) +│ │ ├── ws/ # tracker WebSocket em tempo real +│ │ ├── store/ # SQLite + FTS5 + migrações +│ │ ├── search/ # buscador com filtros e ordenação +│ │ ├── validate/ # validação de metadados (coerência, tipo, licença) +│ │ ├── rate/ # rate limit por peer +│ │ └── relay/ # relay libp2p (último recurso NAT) +│ ├── migrations/ # SQL versionadas +│ └── Dockerfile # multi-stage build +├── app/ # Desktop App (Tauri 2 + React + TS + Tailwind) +│ ├── src-tauri/ # core Rust (commands, identity, network, etc) +│ └── src/ # UI React +├── crates/ # libs compartilhadas do workspace +│ ├── identity/ # Ed25519 → peer ID +│ ├── integrity/ # BLAKE3, verificação de chunks +│ ├── metadata/ # tipos, assinatura de anúncios +│ └── protocol/ # encoding de chunks, verificação +├── docs/ +│ └── superpowers/specs/ # specs de design +└── README.md +``` + +Na VPS: projeto Coolify dedicado `ares-next` → container único → domínio `ares.hokmatech.com`, dados em `/opt/ares-next/data` (Volumes/backup independentes). + +--- + +## 5. Contrato da API (Fase 1 — aprovado) + +Base: `/api/v1` + +| Método/rota | Descrição | +|---|---| +| `GET /health` | status + versão | +| `GET /search?q=&type=&cat=&limit=&offset=&sort=` | busca FTS5 com filtros/ordenação | +| `GET /files/{file_id}` | metadados + assinatura | +| `POST /announce` | publicar metadados assinados (Ed25519) | +| `GET /peers/{file_id}` | pares com o arquivo + endereços | +| `WS /tracker/ws?peer_id=&file_id=` | tempo real: status, slots, peers | +| `GET /stats` | agregados (nº de arquivos, hosts, bytes) | + +Validação no servidor: coerência de hash/tamanho, type-sniffing (extensão + magic bytes), política de extensões proibidas, licença declarada, rate limit por peer. + +--- + +## 5. Segurança (transversal) + +- **Cifração:** Noise (libp2p) para transferência; TLS no transporte backend. +- **Integridade:** checks BLAKE3 por chunk e arquivo, verificação a cada download. +- **Assinaturas:** metadados assinados com a chave Ed25519 do publicador. +- **Arquivos executáveis:** quarentena com aviso + confirmação explícita. +- **Corrupção:** re-download de chunk inválido; hashes conferidos. +- **Entradas:** validação robusta, limites de tamanho, rate limiting. +- **Logs:** estruturados e separados (request/app/security) com rotação. + +--- + +## 6. Qualidade + +- **SOLID / Clean Architecture / Clean Code / DRY / KISS.** +- **Testes:** unitários por módulo + integração da API. +- **Revisão de código** por fase (agent de revisão). +- **Entregas curtas,** codare commitadas por fase. + +--- + +## 7. Riscos e mitigação + +| Risco | Mitigação | +|---|---| +| Servidor como ponto único de busca | Fallback opcional via DHT/gossipsub na fase 2+ | +| Conteúdo abusivo | Validação de metadados, licença declarada, moderação | +| NAT/firewalls difíceis | relay libp2p limitado por rate; múltiplos transports | +| Complexidade do libp2p | isolamento em crate dedicada + testes de integração | + +--- + +## 8. Roteiro de fases + +1. **Fase 0 — Fundação:** monorepo, workspace cargo, crates identity/metadata, CI básico. +2. **Fase 1 — Backend na VPS:** axum + SQLite/FTS5 + search + announce + tracker/WS + deploy isolado Coolify. +3. **Fase 2 — Núcleo P2P:** `network` crate, transação por chunks, NAT, relay. +4. **Fase 3 — Downloads/Uploads:** gerenciador com banda, prioridade, pausa/retoma. +5. **Fase 4 — Interface:** busca, biblioteca, player, configurações, aparência. +6. **Fase 5 — Security & Qualidade:** revisão final, testes E2E, docs. + +--- + +## 9. Escopo imediato (Fase 0 + 1) + +1. Fundamentar o monorepo git (Commit inicial da spec). +2. Scaffold do `server/` cargo (axum + rsqlite FTS5) compilando. +3. Endpoints health/search/announce/peers/stats + WS tracker. +4. Deploy isolado no Coolify (projeto `ares-next`, domínio ares.hokmatech.com, TLS automático). +5. DNS Cloudflare (registro A) + validação em produção. \ No newline at end of file diff --git a/download-page-image-mac.fec937cc.png b/download-page-image-mac.fec937cc.png new file mode 100644 index 0000000..0a629d2 Binary files /dev/null and b/download-page-image-mac.fec937cc.png differ diff --git a/images (1).jpg b/images (1).jpg new file mode 100644 index 0000000..a5cbd2b Binary files /dev/null and b/images (1).jpg differ diff --git a/images.jpg b/images.jpg new file mode 100644 index 0000000..ab001fd Binary files /dev/null and b/images.jpg differ