Guia de início
Simmetric Chat é uma plataforma de chat de IA local-first e capaz de funcionar offline (air-gap): funciona sem conexão a serviços cloud externos, com LLM local (Ollama), embeddings locais (Xenova) e vector DB local (LanceDB). Pode, no entanto, usar prove…
Simmetric Chat é uma plataforma de chat de IA local-first e capaz de funcionar offline (air-gap): funciona sem conexão a serviços cloud externos, com LLM local (Ollama), embeddings locais (Xenova) e vector DB local (LanceDB). Pode, no entanto, usar provedores cloud (OpenAI, Anthropic, OpenRouter) e um vector DB remoto (Qdrant) quando configurado.
Pré-requisitos
- Node.js ≥ 24 e pnpm 11.24.0 (o gerenciador do monorepo; `corepack enable && corepack prepare [email protected] --activate`)
- PostgreSQL 16 (banco de dados principal)
- Ollama (opcional, mas recomendado para o LLM local) - https://ollama.com
- Docker + Docker Compose (para deploy conteinerizado, ver 09 - Deployment)
Verificar:
node -v && pnpm -v && psql --versionInstalação (desenvolvimento local)
git clone <repo> simmetric-chat
cd simmetric-chat
pnpm installO monorepo usa pnpm workspaces + Turborepo. Os pacotes ficam em packages/: shared, server, frontend, collector, widget, além do app desktop src-tauri/.
Variáveis de ambiente
Todos os pacotes leem o `.env` na raiz do repositório (o único arquivo de configuração runtime; a antiga camada de .env por pacote foi removida: precedência process.env > .env raiz > padrões do código). Crie o arquivo mínimo:
cp .env.example .envSegredos obrigatórios (JWT_SECRET, COLLECTOR_SECRET) e a chave do widget:
JWT_SECRET=$(openssl rand -hex 32)
COLLECTOR_SECRET=$(openssl rand -hex 32)
WIDGET_API_KEY=$(openssl rand -hex 32)
DATABASE_URL=postgresql://simmetricchat:simmetricchat@localhost:5432/simmetricchat
LLM_PROVIDER=ollama
LLM_MODEL=gemma4:latest
OLLAMA_BASE_URL=http://localhost:11434WIDGET_API_KEY é exigida pelo serviço widget (seu próprio schema Zod encerra o processo sem ela); o servidor a registra como chave de API da conta widget-service no boot (idempotente). Opcionais em desenvolvimento: API_KEY_HMAC_SECRET (as chaves de API sk- ficam inutilizáveis até serem definidas) e ENCRYPTION_KEY (fallback scryptSync(JWT_SECRET); obrigatória em produção). LICENSE_KEY ausente = build Community.
Tabela completa de variáveis de ambiente: 03 - Configuration.
Banco de dados
Crie o banco PostgreSQL (ex.: docker compose -f docker/docker-compose.infra.yml up -d postgres), depois gere o client Prisma, aplique as migrações e o seed:
pnpm db:generate # gera o client Prisma (+ fix de symlink Prisma 7/pnpm)
pnpm --filter server db:migrate # aplica as migrações (interativo)
pnpm --filter server db:seed # papéis padrão (Admin, Superuser, User), permissões, config, templatesAlternativa ao seed manual: em um banco vazio, o frontend mostra o assistente de setup em 4 etapas (admin, provedor LLM, vector DB) - ou o servidor auto-seeda o admin de bootstrap (SEED_BOOTSTRAP_ADMIN=true por padrão, configurável via SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL, padrões admin / admin123 / [email protected] com mustChangePassword=true). O auto-registro é fechado por padrão (ALLOW_REGISTRATION=false): um admin cria usuários a partir de Settings ou via POST /api/auth/admin-register.
Iniciando o desenvolvimento
Um único comando inicia todos os serviços via Turborepo:
pnpm devPortas padrão:
| Service | Porta | Descrição |
|---|---|---|
| frontend | 5173 | SPA Vite (React 19), proxy /api → server |
| server | 3000 | API Express + Swagger em /api-docs |
| collector | 3210 | Microsserviço de ingestão de documentos |
| widget | 3211 | Serviço de widget incorporável (Preact) |
Abra http://localhost:5173, entre com admin / admin123, troque a senha.
Se o Ollama não estiver em execução, os chats falham com erro de conexão. Baixe um modelo
com ollama pull gemma4:latest && ollama serve, ou configure um provedor cloud emSettings → Providers.
Tour rápido da UI
- Sidebar - grupos filtrados por papel: Overview (dashboard), Chat (chat, projects, workspaces), Knowledge (documents, base de conhecimento, uploads), Platform (widgets, marketplace, analytics - admin), System (event log, SSO - admin/enterprise). Os itens seguem as 13 seções de menu RBAC.
- Chat - streaming token por token, seleção de modelo por chat (paleta
Cmd+K), comparação lado a lado (Cmd+Shift+M), citações RAG, comando slash/model. - Documents - upload drag & drop (PDF, DOCX, XLSX, PPTX, TXT, MD, CSV, imagens com OCR), status
pending → processing → completed → failed. - Settings - 5 abas principais (Perfil, Provedores LLM, Aparência, Segurança, Avançado) aninhando as subseções: Providers, LLM & Embedding, Vector DB, API Keys, Roles, Users, MCP Connections, Maintenance, Backups, DLP, Widget (página dedicada), OCR, etc.
- Maintenance - reindexação RAG em um clique após mudança do modelo de embedding.
Primeiros passos recomendados
- Configure um provedor - Settings → Providers: adicione Ollama (local) ou OpenAI/Anthropic.
- Crie um workspace e um projeto - documentos e chats são restritos ao workspace.
- Carregue um documento - Documents → upload; aguarde o status
completed. - Converse - abra um chat no workspace e faça perguntas sobre o documento (RAG híbrido).
- (Admin) Explore o marketplace - instale um servidor MCP para estender o agente com ferramentas.
Próximos passos
- Entender como funciona por baixo: 02 - Architecture
- Todas as env vars e feature flags: 03 - Configuration
- Incorporar o chat no seu site: 06 - Widget Integration