Geek Social — Documentação

Roadmap

O que já está pronto e o que vem pela frente — features, moderação, arquitetura.

Status atual do projeto + features e melhorias planejadas. Atualizado conforme entregamos coisa nova.

Sumário


Estado atual

Tudo que está rodando hoje (referências cruzadas com a documentação técnica):

✅ Autenticação e identidade

  • Email/senha com bcrypt (cost 12) + refresh token rotation
  • Google OAuth via OpenID Connect (vincular/desvincular)
  • Recuperação de senha por e-mail (token single-use, TTL 1h)
  • Troca de senha autenticada + definição inicial de senha (após OAuth)
  • Cookies HttpOnly + Secure + SameSite
  • Exclusão de conta com cascade total (irreversível)
  • 📖 Módulo Auth · Conceito

✅ Perfil e privacidade

  • Perfil rico: bio (10k chars), birthday, interests, pronouns, location, website
  • Avatar + capa + fundo de perfil (imagem OU cor sólida)
  • Privacy granular: perfil (public/friends_only/private), show_presence, show_read_receipts
  • Search de usuários por nome/e-mail
  • 📖 Módulo Users

✅ Social

  • Sistema de amizades simétrico com fluxo de pedido/aceite (auto-aceite em interesse mútuo)
  • Bloqueio direcional com cascade (desfaz amizade, desconecta chat, esconde conteúdo)
  • 📖 Módulo Friends

✅ Coleções e items

  • Coleções tipadas (games, books, cardgames, boardgames, custom)
  • Schema dinâmico por coleção (campos custom configuráveis)
  • 50+ field definitions de sistema seedadas (Plataforma, Gênero, Status, etc.)
  • Items com fields JSONB + rating + comment + cover
  • Filtros dinâmicos na listagem (por field, range, sort customizável)
  • Cursor pagination
  • Lista global de itens cross-coleção com filtro por coleção, busca e ordenação
  • Dashboard de coleções — gráficos de itens por tipo, breakdown de campos, classificações por estrelas, jogos zerados por ano (Chart.js, tabs por tipo)
  • Integração IGDB — busca de jogos com preenchimento automático de nome, capa, gênero, plataforma e desenvolvedor (token caching, mapeamento EN→PT)
  • 📖 Módulo Collections+Items

✅ Feed e posts

  • Posts manuais com texto + mídia (galeria)
  • Posts item_share automáticos quando coleção tem auto_share_to_feed
  • Reactions temáticas (power_up, epic, critical, loot, gg)
  • Comentários planos (sem aninhamento)
  • Visibility por post (public/friends_only/private)
  • Feed cronológico filtrado por amizade + blocks
  • 📖 Módulo Posts/Feed

✅ Chat

  • Conversas DM 1-1 + grupos (com roles owner/admin/member + permissions)
  • DM Requests entre não-amigos (caixa "Solicitações")
  • Mensagens texto, áudio (com waveform), vídeo, imagem, arquivo
  • Reactions livres com emoji, replies, forward (até 20 destinos)
  • Calls 1-1 (vídeo/áudio) via WebRTC com sinalização Socket.IO
  • Modo Snapchat per-user (mensagens efêmeras com cleanup cron)
  • Read receipts respeitando show_read_receipts
  • Mute, archive, hide per-conversation
  • 📖 Módulo Chat

✅ Criptografia E2E (DMs)

  • Signal Protocol completo — X3DH (handshake assíncrono) + Double Ratchet (chave por mensagem)
  • PreKeys publicadas no servidor (até 100 one-time prekeys por usuário)
  • Forward secrecy + post-compromise security garantidos pelo Double Ratchet
  • Backup cifrado de chaves com versionamento (counters SPK/Kyber)
  • Auto-retry com repair throttle + botão "Tentar novamente" no bubble de erro
  • Cache de plaintext para mensagens próprias (evita re-decrypt no reload)
  • Escopo: DMs 1-1; grupos continuam em texto plano (MLS fora do escopo atual)

✅ Vitrine (marketplace)

  • Listings com status (active/paused/closed) + auto-rejeição de offers em close
  • Offers tipo buy (dinheiro) ou trade (item por item)
  • Counter-propostas via offer_proposals (apenas 1 pending por offer)
  • Dual confirmation antes de transferir + auto-criação de coleção destino
  • Auto-expiração 7 dias após accepted sem confirms
  • Avaliações imutáveis pós-transação com threshold de visibilidade (MIN_RATINGS=3)
  • 📖 Listings · Offers · Ratings

✅ Steam Integration

  • Vínculo via OpenID 2.0
  • API key per-user pra chamadas autorizadas
  • Importação de games em batch via pg-boss (workers import-game + enrich-game)
  • Throttle de appdetails pra respeitar rate limit Steam
  • Finalização atômica (race-free) via import_batch_finalized
  • 📖 Módulo Steam

✅ Notificações

  • Persistência + entrega real-time via Socket.IO
  • Web Push (VAPID) pra notificação fora do app
  • 23 tipos de notificação (sociais, vitrine, propostas, ratings, Steam, eventos)
  • 📖 Módulo Notifications

✅ Rolê (Eventos)

  • Encontros entre usuários — presencial (com endereço) ou online (com link de reunião)
  • Visibilidade híbrida (public / friends / invite) com tabela de convites materializada
  • Inscrição com lista de espera + auto-promoção quando alguém sai
  • Detecção de conflito de horário via tstzrange (sobreposição de intervalos)
  • Lembretes automáticos T-48h (com ação Confirmar/Sair) e T-2h (ping) via pg-boss
  • Edição de campos sensíveis dispara notificação pros inscritos; conflitos pós-edição alertados
  • Cron horário finaliza eventos passados (status=ended)
  • 📖 Módulo Events

✅ Comunidades (estilo Orkut)

Espaços temáticos que reúnem pessoas em torno de um interesse (gênero, jogo específico, hobby de colecionador).

  • Criar comunidade com nome, slug, descrição, capa, ícone, categoria (15 categorias) e visibilidade
  • Visibilidade: pública (entrar direto) ou restrita (requer aprovação)
  • Roles de membro: owner, moderador, member
  • Status de membro: active, pending, banned
  • Pedidos de entrada: aprovar / rejeitar (owner ou moderador)
  • Gestão de membros: promover/rebaixar moderador, banir/desbanir, kick
  • Tópicos — posts dentro da comunidade com reactions + comentários, pinned/locked (infra pronta no schema)
  • Slug auto-suffix atômico em colisão (transação)
  • Audit log de todas as ações de moderação (community_audit_log)
  • Soft delete de comunidade (somente owner)
  • Tópicos de comunidade não aparecem no feed global
  • 📖 Módulo Communities

✅ Reports e moderação admin

  • Denúncias em 5 superfícies (user, message, post, collection, conversation)
  • 5 razões (spam, harassment, nsfw, hate, other)
  • Painel admin live em geeksocialadmin.homelab-cloud.com (restrito por CIDR)
  • Dashboard com KPIs: usuários, reports pendentes, conteúdo sinalizado
  • Moderação de usuários: banimento, suspensão, força logout, reset de senha
  • Feature flags — tabela feature_flags, toggle em runtime via painel, rollout percentual
  • Audit log de ações de moderação (admin_audit_log) com actor + alvo + metadata JSONB
  • Painel de reports com ações por tipo de alvo e gráfico de severidade
  • 📖 Módulo Reports

✅ Realtime + infra

  • Socket.IO no mesmo HTTP server do Fastify
  • 20+ eventos socket (notifications, chat, presence, calls, imports)
  • pg-boss queue persistida no PG pra jobs assíncronos
  • 📖 Conceito Realtime · Eventos socket

✅ Deploy em produção

  • Stack Docker Compose completa em VPS dedicada
  • nginx-proxy com SSL automático Let's Encrypt (certbot) para todos os subdomínios
  • Subdomínios: app · api · admin · docs · minio · keycloak
  • Pipeline de sync geek-sync (GitHub → SSH sem token exposto)
  • Usuário admin criado + Feature Flags seedadas na inicialização

✅ Documentação

  • Portal Fumadocs self-hosted em geeksocial.doc.rafaelmarquesdev.com (domínio público, sem VPN)
  • API Reference auto-gerada de Zod schemas (143+ endpoints)
  • Sandbox interativo Scalar embedado em cada endpoint
  • Dicionário de banco com 28 tabelas + ER diagrams Mermaid
  • Filosofia, conceitos, tutoriais, frontend, operations
  • Módulos completos: Events (11 endpoints), Communities (18 endpoints), Integrations (IGDB)
  • 📖 Você está nele

Próximas features

Em ordem aproximada de prioridade.

🚧 Recomendações no feed (algoritmo de ranking)

Hoje o feed é cronológico simples. Migrar pra ranking inteligente que mistura recência + afinidade + engajamento.

Abordagens possíveis (a pesquisar e decidir):

  1. Collaborative filtering — "users que curtiram o que você curtiu também curtiram X"
    • Matrix factorization (SVD, ALS)
    • Item-based similarity
    • Cold start: novos users sem histórico → fallback cronológico
  2. Content-based — usa embeddings dos itens/posts pra rankear por similaridade ao histórico
    • Tags, categorias, conteúdo de bio
    • Vector store (pgvector já no Postgres)
  3. Hybrid — combina os dois pesos
  4. Engagement-based (mais simples) — pondera por:
    • Recência (decay temporal)
    • Reações/comments (mais engajamento → maior score)
    • Afinidade com autor (interagiu antes? amigo? mesma comunidade?)
    • Diversidade (não saturar com 1 só pessoa)

Provável caminho inicial: heurística simples (engagement + decay + afinidade) → coletar métricas → eventualmente migrar pra ML formal.

Considerações:

  • Calcular ranking sob demanda (custo por request) ou pré-computar (job recorrente)?
  • pgvector pra embeddings semânticos vale a pena? (depende do volume)
  • A/B testing infra (a planejar — usa feature flags do roadmap abaixo)

📋 Pesquisa antes: revisão de papers + benchmark de complexidade vs ganho.

🚧 Melhorar lista de amigos

Hoje a lista é simples (nome + avatar). Melhorias planejadas:

  • Status online (já temos presence, falta integrar visualmente)
  • Last interaction — última conversa/comment/reaction
  • Filtros — online agora, amigos novos (últimos 30 dias), favoritos
  • Pin/favoritar amigos pra topo da lista
  • Categorias — "Família", "Trabalho", "Gaming" (tags por usuário, não compartilhadas)
  • Atividades recentes — preview de últimos posts/coleções relevantes do amigo
  • Aniversários — destaque pros que fazem aniversário hoje/semana
  • Sugestões — "amigos de amigos" (pode usar mesmo algoritmo do feed recomendação)

Decisões pendentes:

  • Categorias/tags são per-user (privadas) ou colaborativas?
  • Notificação de aniversário automática (já no roadmap em Tutorial: tipo de notificação)?

Plataforma de admin

O painel administrativo está live em produção em geeksocialadmin.homelab-cloud.com (restrito por CIDR). Segue o que está implementado e o que ainda está no backlog.

✅ Painel administrador (implementado)

Acesso restrito por role (users.role = 'admin'):

Dashboard principal

  • Total de usuários cadastrados
  • Reports pendentes por severidade (gráfico)
  • KPIs de saúde da plataforma

Moderação de usuários

  • Buscar user por email/displayName/ID
  • Banir — flag users.banned_at + motivo + auto-logout (revogar refresh tokens)
  • Suspenderusers.suspended_until (data) — login bloqueado temporariamente
  • Reativar — limpar flags de ban/suspensão
  • Forçar logout — revogar todos refresh_tokens
  • Forçar reset de senha — invalidar password_hash, mandar e-mail de reset

Gerenciar reports

  • Lista de reports pendentes com filtro por tipo de alvo
  • Ações por targetType (user, post, message, collection, conversation)
  • Gráfico de severidade com dados reais
  • Histórico de denúncias por target/reporter

Itens ainda no backlog (incompletos):

  • Busca avançada de conteúdo (posts/coleções/mensagens denunciadas)
  • removed_by_admin soft delete com motivo + restauração
  • Erros recentes (5xx, exceções) no dashboard

✅ Sistema de audit log (admin actions)

Tabela admin_audit_log — registra todas as ações administrativas:

admin_audit_log
├── id, admin_id, action, target_type, target_id
├── metadata JSONB
└── created_at

Eventos logados: ban, unban, suspend, unsuspend, force-logout, force-reset-password, report-dismiss, report-resolve

Pendente: audit log de ações do usuário comum (user_activity_log — login, mudança de senha, etc.)

🚧 Conformidade LGPD

  • Direito ao esquecimento: já implementado via DELETE /users/me
  • Portabilidade: endpoint pra exportar dados pessoais (GET /users/me/export)
    • JSON com perfil, coleções, items, posts, comentários, mensagens, offers
    • Bundle ZIP com mídia incluída?
  • Consentimento: termos no signup (UI implementada; texto pendente revisão jurídica)
  • Direito de acesso: log de quem acessou meus dados (admin queries no audit_log)
  • Correção: já coberto pelos endpoints de update
  • Notificação de breach: protocolo definido (ainda não há infra)
  • DPO: identificar responsável + canal de contato

🚧 Moderação de imagem e vídeo (anti-CSAM, conteúdo proibido)

Crítico pra evitar uso da plataforma pra crimes. Opções:

  1. Hash matching com bases públicas
    • PhotoDNA (Microsoft, gratuito pra non-profits)
    • NCMEC hash list (CSAM identification)
    • Funciona com mídia já catalogada por autoridades
  2. AI vision — modelos que detectam conteúdo NSFW/violento
    • AWS Rekognition (pago, mas barato por imagem)
    • Google Vision SafeSearch (pago)
    • Open source: NSFW Detection (CLIP-based, self-host)
  3. Manual review queue — toda mídia uploadada passa por aprovação humana antes de ficar pública

Recomendação inicial: combinação 1 + 2.

  • Hash matching automático no upload (bloqueia + reporta NCMEC se match positivo)
  • AI vision pra flag de NSFW (não bloqueia, mas marca pra review do admin + esconde de minors)
  • Manual review apenas pra reports

✅ Feature flags (implementado)

Habilitar/desabilitar recursos sem deploy:

  • Tabela feature_flags (key, enabled, rollout_percentage, target_user_ids)
  • Service FeatureFlagsService.isEnabled(flag, userId) no backend
  • Toggle em runtime via painel admin (sem deploy)
  • Flags seedadas na inicialização da plataforma
  • Middleware frontend esconde UI de features desabilitadas

🚧 Verificação de idade (16+)

Plataforma exclusiva pra maiores de 16 anos. Como verificar de forma barata e razoável (sem rodar serviços caros tipo Veriff)?

Opções por custo crescente:

  1. Self-declaration + birthday no signup
    • Usuário declara idade; legal disclaimer ("falsa declaração responsabiliza o usuário")
    • Já parcialmente implementado (users.birthday existe; falta gate no signup)
    • Custo: 0
    • Confiabilidade: baixa (qualquer um mente)
  2. Verificação por documento apenas em flags (perfil reportado)
    • User suspeito é forçado a enviar foto de documento + selfie
    • Admin valida manualmente
    • Custo: tempo do admin
  3. Provas de idade via cartão de crédito (verificação emissor)
    • Razoável em adultos; minors raramente têm
    • Cartão precisa coincidir com nome do user
    • Custo: gateway de pagamento (Stripe/Pagar.me — taxa por verificação)
  4. Identidade digital governamental (Gov.br no Brasil)
    • Confiável, "barato"
    • User precisa ter conta gov.br
    • Custo: integração técnica + UX cara
  5. Provedores de verificação especializados (Veriff, Onfido, Stripe Identity)
    • Caro
    • Best UX

Recomendação: começar com (1) self-declaration + disclaimer + check de birthday + (2) escalada manual em reports quando houver suspeita. Caro/complexo só se tiver problema concreto.

🚧 Moderação via AI

Augment a moderação humana com modelos pre-treinados:

Texto:

  • Detecção de toxicidade (Perspective API ou models open-source tipo Detoxify)
  • Detecção de hate speech / insulto
  • Detecção de threats / harassment
  • Auto-flag mensagens/comentários acima de threshold pra review

Imagem:

  • NSFW detection (já mencionado acima)
  • Violência / armas
  • Texto em imagem (OCR + análise — anti-spam)

Combina com flags humanas:

  • AI flag → fila de review do admin
  • Admin valida ou rejeita o flag
  • Modelo aprende com decisões humanas (active learning)

Fica pra fase tardia — quando tivermos volume que justifique.


Conformidade e segurança

Itens cross-cutting já mencionados acima, agrupados:

  • ✅ Erros tipados (já implementado)
  • ✅ Cookies HttpOnly/Secure (já)
  • ✅ bcrypt + sha256 (já)
  • ✅ Rate limiting backend (@fastify/rate-limit + Redis — auditoria OWASP round 1)
  • ✅ Helmet headers (CSP, HSTS, X-Frame-Options, Referrer-Policy — auditoria OWASP round 1)
  • ✅ Audit log de ações admin (descrito acima)
  • ✅ Criptografia E2E para DMs (Signal Protocol — descrito em Estado atual)
  • 🚧 Audit log de ações do usuário comum (login, senha, privacy)
  • 🚧 Signed URLs S3 pra mídia private
  • 🚧 Criptografia at-rest pra steam_api_key em DB
  • 🚧 npm audit em CI + Dependabot
  • 🚧 Pen testing (terceirizar quando chegar a fase comercial)
  • 🚧 LGPD compliance check (descrito acima)

📖 Security checklist


Ajustes de arquitetura

🚧 Reorganização de módulos do backend

Hoje a estrutura é razoável mas tem inconsistências históricas. Reorganizar pra:

  • Tudo de um domínio em um único módulo — facilita encontrar
  • Cada módulo auto-contido com routes + controller + service + repo + schema + types
  • Sub-módulos quando faz sentido (ex: posts/comments, posts/reactions, posts/feed poderiam ser explícitos)

Inconsistências atuais:

  • posts/ tem comments, reactions, feed misturados (poderia ser posts/posts.*, posts/comments.*, posts/reactions.*, posts/feed.* — JÁ ESTÁ ASSIM, mas a relação não está documentada bem)
  • chat/ tem conversations, messages, dm-requests, push, presence — todos juntos. Considerar splitar em chat/conversations, chat/messages, etc.?
  • integrations/steam/ é o único integration; quando vier mais (Discord? Twitch?) precisa de pasta integrations/<provider>/ consistente
  • Tabelas no schema.ts único de 400+ linhas — considerar splitar por domínio (schema/auth.ts, schema/chat.ts, etc.) e re-exportar

Plano de refator:

  1. Catalogar a estrutura atual — diagrama de quem importa de quem
  2. Identificar acoplamentos cross-module ruins (imports diretos entre módulos)
  3. Mover gradualmente — 1 módulo por PR, com testes passando
  4. Atualizar docs — caminhos em tutoriais e módulos

Risco: refator grande sem ganho funcional. Fazer em momento de baixo throughput de features novas.

📋 Sub-projeto dedicado — não fazer parcial.


Outras melhorias técnicas no backlog

Observability + Monitoring

  • Prometheus + Grafana + Loki + Jaeger (descrito em Observability)
  • GlitchTip pra exception tracking
  • Dashboards de KPIs de produto (não só de infra)

Performance

  • Particionamento de messages por mês (quando volume crescer)
  • Materialized views pra reputação (cache de count + avg em listing_ratings)
  • Read replica de Postgres pra queries pesadas
  • CDN na frente do MinIO (Cloudflare)
  • Service worker do frontend com cache mais agressivo de imagens

Testes

  • Cobertura threshold no CI
  • Playwright pra E2E do frontend
  • Performance tests com k6
  • Mutation testing (Stryker)

DX (developer experience)

  • Faker.js factories pra fixtures de dev (não seeds checked-in)
  • Hot reload mais rápido (já bom com tsx watch, mas pode melhorar)
  • Storybook ou Histoire pro frontend? (talvez não precisar)

Mobile

  • App nativo (React Native ou Tauri?) — out of scope no curto prazo
  • PWA já cobre o caso "instalar como app"

Outros recursos de produto

  • Seguir alguém sem ser amigo (similar ao Twitter follow)
  • Stories (24h) — tipo Instagram
  • Eventos / Calendário compartilhado entre amigos
  • Wishlist pública (já tem rascunho mencionado em tutorial)
  • Importação de outras plataformas (Goodreads pra livros, BoardGameGeek pra board games, RetroAchievements)

Cronograma sugerido

Ordem de execução proposta (cada bloco = sub-projeto com spec própria + plano + execução):

Próximas 1-2 sessões (curto prazo)

  1. Lista de amigos melhorada — UX win rápido (status online, filtros, favoritos)
  2. Comunidades: notificações + cross-post — completar loop social das comunidades
  3. LGPD: portabilidade (export) — endpoint GET /users/me/export com bundle ZIP

Médio prazo

  1. Comunidades: chat próprio + eventos da comunidade
  2. Audit log self-service do usuário (GET /users/me/activity-log)
  3. Verificação de idade (self-declaration + gate no signup)
  4. Moderação AI básica (texto via Perspective API ou Detoxify)

Longo prazo (requer pesquisa/spec extensa)

  1. Feed com recomendações — após coletar dados de engajamento
  2. E2E em grupos — MLS (RFC 9420), muito mais complexo que DMs
  3. Moderação de mídia (NCMEC + AI vision)
  4. Refator de arquitetura backend — quando o volume de features novas baixar

Paralelo, qualquer momento

  • Observability stack completa (Loki + Prometheus + Jaeger + GlitchTip)
  • npm audit em CI + Dependabot automático

Como contribuir com este roadmap

  1. Brainstorm — usar a skill brainstorming antes de codar qualquer item ⚠️
  2. Spec — escrever em docs/superpowers/specs/YYYY-MM-DD-<feature>-design.md
  3. Planodocs/superpowers/plans/
  4. Execute — sessão dedicada com TDD onde aplicável
  5. Documente — adicione/atualize páginas em geek-social-docs
  6. Atualize este roadmap — move o ✅ pra "Estado atual" + remove de "Próximas"

A documentação é parte do produto — mudanças de feature só consideram-se prontas quando os docs refletem.


Histórico de releases

Tracking aproximado de quando cada bloco entrou:

PeríodoMarcos
Sessão 2026-04-23Amigos + privacidade · Chat tempo real · Coleções+Items · Feed+interações · Frontend
Sessão 2026-04-24E2E tests
Sessão 2026-04-26Chat áudio · Chat privacidade · Steam integration · Vídeo call 1-1
Sessão 2026-04-27Chat temporário · Forward/share/download · Google OAuth · Coleção cross-user · Perfil expandido
Sessão 2026-04-28Vitrine completa (listings + offer_proposals + ratings) · Keycloak removido · Cor sólida capa/fundo · Excluir conta
Sessão 2026-04-29Portal de documentação completo (681 páginas)
Sessão 2026-05-01Comunidades — CRUD, membros, moderação, tópicos, join-requests, audit log
Sessão 2026-05-03Painel admin + Feature Flags + Audit log · Criptografia E2E (Signal Protocol) · Auditoria OWASP (rate limiting + Helmet) · Rolê (Eventos) · Deploy em produção com SSL
Sessão 2026-05-04Integração IGDB · Dashboard de coleções (Chart.js) · Lista global de itens com filtros · Docs em domínio público · Mermaid v11 fix em 8 módulos · Módulos Events + Communities na doc

On this page