radartube.dougss.com

Guia de uso — RadarTube Clone

Radar de canais de música em crescimento no YouTube. Este guia cobre o que já está rodando em produção, como acompanhar e como continuar o desenvolvimento.

Fase 1 Fundação no ar
Fase 2 Pipeline de dados no ar
Fase 3 Scoring no ar
Fase 4 API + Dashboard no ar
01

Acesso em produção

A aplicação roda 24/7 num VPS compartilhado, atrás de HTTPS automático (Caddy + Let's Encrypt).

App (frontend)

radartube.dougss.com

API (backend)

apiradartube.dougss.com

Login com a conta única de admin (email/senha definidos nas variáveis RADARTUBE_ADMIN_EMAIL / RADARTUBE_ADMIN_PASSWORD do deploy). Não existe cadastro público — é uma ferramenta pessoal, de usuário único.

02

Como o radar funciona

Todo dia, 02:00 UTC, quatro etapas rodam em sequência — cada uma isolada, então uma falha numa etapa nunca impede as seguintes de rodar.

1

Discovery

Busca canais novos a partir das suas niches cadastradas, mais uma expansão orgânica: extrai keywords dos vídeos de melhor desempenho já rastreados e realimenta como candidatas pro dia seguinte.

2

Ingestion

Atualiza estatísticas (inscritos, views, vídeos recentes) de todo canal rastreado — inclusive os que o discovery acabou de achar no mesmo ciclo.

3

Channel scoring

Calcula, por canal: taxa de crescimento, score de decolagem (canais de 3–5 meses, ranqueados dentro da própria niche), média de outlier dos vídeos, melhor dia pra postar, e o radarScore composto.

4

Trending analysis

Compara a frequência de keywords nos últimos 10 dias contra os 20 anteriores pra achar sub-nichos esquentando.

Tudo isso respeita um orçamento diário de cota da YouTube API (10.000 unidades) — busca é cara (100/chamada), atualização de estatísticas é barata (~1 a cada 50 canais).

03

Cadastrar niches

É a única entrada manual do sistema hoje. Logado, vá em Niches e adicione as palavras-chave de música que te interessam — ex.: phonk, lofi, sertanejo remix. O discovery usa essa lista todo dia como ponto de partida.

Sem niche cadastrada, o pipeline não descobre canal nenhum — a expansão orgânica só existe pra ampliar a partir de um ponto de partida seu, não substitui ele.

04

Chaves de API do Google

Logado, vá em Chaves de API e cadastre uma ou mais chaves da YouTube Data API v3 (rótulo + valor da chave). Cada chave cadastrada tem seu próprio orçamento diário de 10.000 unidades — quando a chave em uso esgota a cota do dia, o pipeline passa automaticamente pra próxima chave ativa, na ordem em que foram cadastradas. Cadastrar N chaves amplia o limite diário efetivo pra N × 10.000 unidades, sem precisar de nenhuma mudança de código ou redeploy.

A tela mostra, por chave: rótulo, valor mascarado (só os 4 últimos caracteres), status ativa/inativa e o consumo do dia (unidades usadas/orçamento), com um selo "Esgotada hoje" quando o orçamento acabou. Uma chave pode ser desativada temporariamente (sem apagar) ou removida.

As chaves ficam criptografadas no banco (AES-256-GCM) — o valor completo nunca é exibido de volta na tela nem trafega em texto puro fora do cadastro inicial.

Instalações existentes de antes desta funcionalidade continuam funcionando sem ação manual: a chave já configurada em YOUTUBE_API_KEY vira automaticamente a primeira linha cadastrada no primeiro boot depois do deploy.

05

O painel

Logado, a barra de navegação tem 6 abas: Decolagem, Tendências, Busca, Spy, Niches e Chaves de API. Tema escuro fixo (sem alternância clara/escura — decisão de projeto). As quatro primeiras leem direto do que o pipeline diário já calculou; listas longas têm paginação (Anterior/Próxima).

Decolagem

Canais elegíveis — publicados há 3 a 5 meses e descobertos via alguma niche cadastrada — ranqueados por score de decolagem (ver métricas explicadas). Cada canal aparece como um card com avatar, nome, e uma grade com os stats principais: crescimento em 30 dias, score de decolagem e Radar Score. Abaixo dos stats, uma grade 2×3 com os 6 vídeos mais vistos do canal (dentro da janela de vídeos rastreados) — thumbnail, título, views e outlier ratio de cada um. Clicar no card leva pro detalhe do canal (mesma tela que a Busca usa).

Tendências

Sub-nichos (palavras-chave extraídas de título/tags dos vídeos rastreados) que estão esquentando, ranqueados por trend score — só aparecem keywords com pelo menos 3 menções recentes e uma aceleração de 1.5× ou mais frente ao período anterior (ver métricas explicadas).

Busca

Busca por nome sobre todos os canais rastreados, com filtro de inscritos mínimos e três opções de ordenação: Radar Score, Crescimento 30d ou Inscritos. Cada resultado é um card igual ao da Decolagem — avatar, stats, e a mesma grade de 6 vídeos mais vistos com thumbnail/views/outlier. Clicar num canal abre o detalhe do canal: um gauge grande com o Radar Score atual (gradiente vermelho→amarelo→verde) ao lado de um gráfico de linha com a evolução de inscritos nos últimos 90 dias.

Spy

Cola um Channel ID (UCxxxx…) ou @handle e analisa esse canal na hora — funciona tanto pra canais já rastreados (usa o histórico que o pipeline já calculou, mais rápido e mais completo) quanto pra canais nunca vistos antes (consulta a YouTube API ao vivo, gasta cota, análise mais simples). Mostra avatar, nome, inscritos, o Radar Score (só quando o canal já tem scoring calculado — no caminho ao vivo esse número nunca existe ainda), duas caixas de estatística (outlier médio e melhor dia pra postar, ver métricas explicadas), e a mesma grade de 6 vídeos mais vistos por thumbnail/views/outlier que Busca e Decolagem usam.

Niches

Gerencia a lista de palavras-chave semente (adicionar/remover) que o discovery usa como ponto de partida todo dia — ver seção 03. Também tem um botão "Rodar radar agora", que dispara manualmente o pipeline completo (discovery → ingestion → scoring → tendências) sem esperar o horário agendado — útil depois de cadastrar uma niche nova, pra não ter que esperar até 02:00 UTC do dia seguinte pra ver resultado.

As tabelas por trás disso — channel, channel_snapshot, video/video_snapshot, discovered_keyword, radar_score, trending_keyword — continuam existindo pra quem quiser olhar direto no banco.

06

Métricas explicadas

Todo número que aparece no painel vem de uma fórmula específica, calculada pelo pipeline diário (ou, no caso do Spy ao vivo, na hora). Esta seção explica cada uma.

Radar Score

O número composto de 0 a 100 que resume "quão bem esse canal está indo agora", usado como ordenação padrão da Busca. É uma média ponderada de três sinais:

Crescimento 30d (Growth Rate)

Variação percentual de inscritos nos últimos 30 dias: (inscritos hoje − inscritos há 30 dias) ÷ inscritos há 30 dias. Fica em branco (—) quando o canal ainda não tem histórico suficiente (menos de 30 dias de dados).

Score de Decolagem

Parecido com o percentil de crescimento do Radar Score, mas com dois recortes a mais: só considera canais publicados entre 3 e 5 meses atrás, e o ranking é feito dentro da mesma niche de descoberta (não contra todos os canais) — ou seja, compara canais de sertanejo com outros canais de sertanejo, não com canais de phonk. É a métrica que decide quem aparece na aba Decolagem.

Outlier ratio e outlier médio

Pra cada vídeo do pool rastreado de um canal (os últimos 20 uploads), o outlier ratio daquele vídeo é views do vídeo ÷ mediana de views do pool — ou seja, quantas vezes esse vídeo específico performou acima (ou abaixo) do vídeo "típico" do canal. Um vídeo com outlier 3.5x teve 3,5 vezes mais views que a mediana dos últimos 20 uploads do canal; um vídeo com 0.4x ficou bem abaixo do normal do canal.

O outlier médio (mostrado no Spy e usado no Radar Score) é a média desses outlier ratios entre todos os vídeos do pool — um resumo de "quão consistentemente esse canal produz vídeos que estouram acima da própria mediana". Um outlier médio alto (por exemplo, 1.6×) indica que o canal tem vários vídeos puxando bem acima da mediana (hits ocasionais fortes); perto de 1.0× indica performance mais uniforme entre os vídeos, sem grandes picos nem quedas.

A grade de vídeos (Busca/Decolagem/Spy) sempre mostra os 6 vídeos de maior view count desse mesmo pool de 20, cada um com seu outlier ratio individual ao lado — não confundir com o outlier médio do canal, que é agregado.

Melhor dia pra postar

Pra cada vídeo do pool (mínimo de 7 vídeos necessário pra calcular — com menos que isso o campo fica vazio), calcula-se "views por dia desde a publicação" e agrupa pelo dia da semana em que o vídeo foi postado. O dia da semana com a maior média de views/dia é o "melhor dia" sugerido.

Trend Score

Compara a frequência de uma palavra-chave (extraída de títulos e tags dos vídeos rastreados) nos últimos 10 dias contra os 20 dias anteriores a esses: (menções/dia recente) ÷ (menções/dia anterior). Só entra na aba Tendências quem tem trend score de pelo menos 1.5× (50% mais frequente que antes) e pelo menos 3 menções no período recente — evita que uma keyword rara e aleatória apareça como "tendência" por puro ruído estatístico.

07

Rodar localmente

Precisa de Docker. Clone o repositório e:

# 1. copie o .env de exemplo e preencha a chave da YouTube API cp .env.example .env # 2. suba tudo (postgres + redis + backend + frontend) docker compose up --build

O admin único é criado automaticamente no primeiro boot, a partir de RADARTUBE_ADMIN_EMAIL/RADARTUBE_ADMIN_PASSWORD no seu .env.

Portas locais

ServiçoURL local
Frontendhttp://localhost:3500
Backend / APIhttp://localhost:8380/api
Postgreslocalhost:5436

Chave da YouTube Data API v3

  1. Crie um projeto em console.cloud.google.com
  2. Em "APIs e serviços" → "Biblioteca", habilite YouTube Data API v3
  3. Em "Credenciais", crie uma "Chave de API" e cole em YOUTUBE_API_KEY — usada só pra popular a primeira chave automaticamente no primeiro boot (ver seção 04); depois disso, gerencie chaves pela tela.

Cota gratuita: 10.000 unidades/dia por chave — cadastre mais de uma em Chaves de API pra multiplicar o limite diário efetivo.

API_KEY_ENCRYPTION_SECRET também precisa estar no .env (≥ 32 caracteres) — é o segredo usado pra criptografar as chaves de API em repouso.

08

Deploy

Push pra master que toque backend/, frontend/ ou deploy/ dispara o deploy automaticamente via GitHub Actions — build nativo arm64 num runner self-hosted no próprio VPS, imagem publicada no GHCR com tag sha-<7> (nunca latest, pra sempre poder reverter), migrations do Flyway aplicadas no boot.

Deploy completo manual (sem depender de mudança em backend//frontend/): gh workflow run deploy.yml -R dougss10/radartube

09

Arquitetura, em uma tabela

MóduloResponsabilidade
authLogin JWT single-user
nichesCRUD das palavras-chave semente
youtubeCliente da YouTube Data API v3, com guarda de cota
apikeysCadastro e rotação de chaves de API do Google, criptografadas em repouso
quotaOrçamento diário de cota, rastreado por chave de API
channelsCanais/vídeos rastreados + ingestion diária
discoveryBusca de canais novos + expansão orgânica
scoringRadar Score, score de decolagem e detecção de tendências
spyAnálise sob demanda de um canal específico (rastreado ou ao vivo)

Backend em Kotlin/Spring Boot, frontend em Next.js. Detalhes completos, decisões de design e todas as fórmulas de scoring estão no docs/superpowers/specs/2026-08-08-radartube-clone-design.md do repositório.

10

Próximos passos

Depois do redesenho visual (tema escuro, cards, gauges), o painel foi comparado com o produto de referência comercial e o gap de funcionalidades foi quebrado em 6 frentes independentes, priorizadas nesta ordem:

B — Grade de thumbnails de vídeo concluído

Os 6 vídeos mais vistos de cada canal (thumbnail, título, views, outlier ratio) em Busca, Decolagem e Spy.

A — Sinais rápidos nos cards

Sparkline de tendência, badge de "Esfriando/Acelerando" e filtros de idioma/categoria — tudo reaproveitando dados que já existem.

C — Vigiar (favoritos pessoais)

Fixar canais específicos pra acompanhar de perto, separado do rastreamento global.

D — Filtros avançados

Duração de vídeo e tempo desde a decolagem como critérios de busca.

E — Canais similares

A frente mais cara — precisa de schema e pipeline novos pra tagging/similaridade entre canais.

F — Reorganização de navegação

Separar/renomear abas e adicionar páginas de Histórico e Análises.

11

Fora de escopo

Deixado de fora de propósito, por não serem essenciais pro uso pessoal do dia a dia — diferente da lista acima, aqui não há intenção de implementar:

Geração de conteúdo com IA

Títulos, descrições, prompts de thumbnail sugeridos a partir dos outliers encontrados.

Alertas por email

Notificação quando um canal monitorado decola ou uma keyword começa a esquentar, sem precisar abrir o painel.

Multi-usuário / billing

É uso pessoal — não faz sentido pra este projeto, mas fica registrado como não-objetivo.