Pular para o conteúdo principal

Arquitetura da plataforma

O SleepComet é composto por quatro componentes principais, desacoplados por uma fila de mensagens. Essa separação permite que o processamento pesado de vídeo aconteça de forma assíncrona, sem impacto na experiência de uso.

Visão geral

┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Frontend │────▶│ API (Go) │────▶│ Worker (Py) │
│ React SPA │ │ Gin │ │ Asyncio │
└──────────────┘ └──────┬───────┘ └──────┬───────┘
│ │
┌──────▼───────┐ ┌──────▼───────┐
│ PostgreSQL │ │ Redis │
│ (dados) │ │ (fila) │
└──────────────┘ └──────────────┘

O armazenamento de mídia (vídeos enviados, clipes renderizados e legendas) fica no Cloudflare R2, compatível com S3.

Frontend (React SPA)

Interface web da plataforma, disponível em app.sleepcomet.com.

CamadaTecnologia
FrameworkReact + TypeScript (build com Vite)
EstiloTailwind CSS v4 + componentes Coss UI
Estado de servidorTanStack Query (React Query)
RoteamentoReact Router v6
AutenticaçãoBetter Auth com Google OAuth

Rotas principais

RotaFunção
/Dashboard com envio de vídeo e configurações de processamento
/projectsLista de projetos
/projects/:idDetalhe do projeto com os clipes gerados
/caption-templatesGerenciador de templates de legenda
/calendarCalendário de publicações agendadas
/analyticsMétricas de desempenho
/integrationsConexão com redes sociais
/settingsConfigurações da conta e do plano

API (Go)

Serviço central de negócio, escrito em Go com o framework Gin.

Responsabilidades:

  • Autenticação e autorização das requisições (Better Auth, session tokens);
  • CRUD de projetos, templates de legenda, integrações e agendamentos;
  • Upload de vídeos para o Cloudflare R2;
  • Validação de créditos, limites de plano e parâmetros de template antes de publicar o job na fila;
  • Publicação de jobs na fila Redis (LPUSH) e streaming de status via Server-Sent Events.

:::info Validação no servidor Todo parâmetro numérico ou de enumeração de um template é validado e ajustado pela API no momento de criar o job — incluindo as regras de plano, como a marca d'água obrigatória no plano Free. O valor enviado pelo cliente nunca é confiado às cegas. Detalhes em Segurança. :::

Worker (Python)

Consumidor assíncrono da fila Redis (BRPOP), responsável por todo o processamento de mídia.

FunçãoTecnologia
TranscriçãoWhisper (OpenAI)
Seleção de momentosModelo de IA com pontuação de viralidade
LegendasFormato ASS com animações por palavra e de entrada
RenderizaçãoFFmpeg (H.264, burn-in de legendas)
ReenquadramentoOpenCV com detecção de rosto
Separação de vocaisDemucs (opcional)

A pipeline completa de oito etapas está documentada em Pipeline de processamento; os detalhes internos, em Pipeline do worker.

Banco de dados

TabelaConteúdo
usersUsuários autenticados
projectsProjetos, status e configurações de processamento
clipsClipes gerados, com scores e URLs de mídia
caption_templatesTemplates de legenda personalizados
scheduled_postsPublicações agendadas
social_accountsIntegrações OAuth com redes sociais
notificationsNotificações do usuário

Fluxo de um processamento

  1. O usuário configura o projeto no frontend e envia a requisição;
  2. A API valida créditos, plano e template, grava o projeto no PostgreSQL e publica o job na fila Redis;
  3. O worker consome o job e executa a pipeline de oito etapas, reportando progresso a cada passo;
  4. A API retransmite o progresso ao navegador via SSE;
  5. Os clipes renderizados são enviados ao R2 e registrados no banco;
  6. O usuário recebe uma notificação de conclusão.

Próximos passos: Pipeline de processamento · Referência da API