Um painel que junta Prime Video, SkyShowtime, Apple TV+, Disney+, Netflix e HBO Max num só sítio, com estreias a contar 5 dias, nota TMDB em cada cartão, trailers no hover e os providers que tu escolhes.

Se és como eu, tens mais do que uma subscrição de streaming e perdes-te a tentar lembrar onde está aquele filme. Quando um título novo entra no catálogo, ninguém te avisa — até agora.

Nasceu o Qoder Streaming: um painel web (dark mode, claro) que agrega o catálogo de várias plataformas em Portugal usando os dados oficiais do TMDB, e te diz, com badges verdes/vermelhos, o que está disponível em cada serviço.

O problema

Cinco apps, cinco pesquisas, zero memória. "Este filme está na Prime? Na SkyShowtime? Ou saiu e já não está em lado nenhum?" E as novidades? Espalhadas por notificações que ninguém lê.

A ideia… o prompt que deu origem a tudo

A missão nasceu de um único pedido:

❝

"Quero um sistema web local que agregue os catálogos de streaming disponíveis em Portugal (Prime Video, SkyShowtime, Apple TV+, Disney+) usando a API gratuita do TMDB. Deve mostrar onde cada filme/série está disponível em PT, permitir pesquisar por título ou IMDb ID, marcar como 'visto/interesse/por ver', e sincronizar o catálogo automaticamente. Tudo a correr localmente, sem contas, sem publicidade, com um dashboard dark mode simples."

A partir daí, cada conversa adicionou um módulo — o projeto cresceu em camadas, uma pergunta de cada vez.

O pedido original pedia também a preparação da arquitetura: que agentes e sub-agentes seriam necessários, ferramentas MCP e tudo o mais que fosse preciso para o projeto, seguindo boas práticas de vibecoding: ficheiros pequenos e reutilizáveis, código organizado e gestão de logs para se perceber de onde vêm os erros.

O que faz por ti

  • Pesquisa instantânea — escreve um título ou cola um ID IMDb (tt0944947) e vês logo em que plataforma de streaming está disponível em Portugal.

  • Novidades = estreias com menos de 5 dias, um filme é novidade se estreou há menos de 5 dias; uma série é novidade se o último episódio saiu há menos de 5 dias (uma nova temporada, tipo Ted Lasso S4, aparece na hora). Nada de catálogo inteiro a piscar: quando é novidade, o chip do streamer acende e o cartão ganha um badge com um brilho pulsante discreto.

  • Trailer no hover, passas o rato por cima do cartão e, além da sinopse, tens um botão "Ver trailer" que abre o vídeo oficial num modal. Pesquisado uma única vez e guardado em cache local.

  • Classificação TMDB em cada cartão, a nota média (⭐) aparece logo no cartão, para decidires num relance se vale a pena; no detalhe vês também o número de votos.

  • Providers à tua escolha (⚙️ Configuração), abres a roda dentada e tens checkboxes com todos os serviços disponíveis em Portugal (Prime, SkyShowtime, Apple TV+, Disney+, Netflix e HBO Max), já assinalados. Desmarcas o que não assinas, gravas, e a aplicação adapta-se na hora: chips, contagens, pesquisa e ligações. A escolha fica guardada no .env e sobrevive a reinícios.

  • Gestão pessoal, marca títulos como Com Interesse, Visto ou Por Ver.

  • Filtros inteligentes, Todos, Novidades, Escondidos, Melhores, Mais vistos, Filmes e Séries.

  • Paginação, em vez de "carregar mais", navegação por páginas (1 2 3 4 5 … 87 88), com os totais sempre à vista.

  • Deeplinks por serviço, "Abrir Prime ↗" leva-te à página certa; onde os serviços não expõem pesquisa pública (SkyShowtime, Disney+, Max), abre a página inicial do serviço, testado e corrigido.

Uma espécie de JustWatch só para Portugal?

Sim… e não. É um agregador de disponibilidade em streaming para Portugal, como o JustWatch, mas com filosofia oposta:

Qoder Streaming

JustWatch

Foco

Catálogo PT de 4–6 serviços (à tua escolha)

40+ serviços, 100+ países, milhões de títulos

Dados

TMDB (grátis, 1 chave) + SQLite local

Equipas dedicadas, feed comercial, compara preços

Privacidade

100% local — sem conta, sem tracking, sem ads

Conta obrigatória para features, recolhe dados

Custo

€0 (TMDB free tier; roda no teu PC)

Grátis com premium upsell; API de dados paga

Personalização

Providers à escolha, janela de novidades, UI própria, código teu

Fixo, decidido por eles

Extras

Trailers, estados, dark mode, paginação, MCP

Notificações, sync de lista, apps mobile, avaliações

Limitações

Sem preços, sem apps mobile, sem "também vais gostar"

—

Vantagens nossas: privacidade total, zero custo, personalização absoluta, tudo o que se pediu foi feito em dias: estreias com menos de 5 dias, trailers, classificação nos cartões, paginação, e agora a Configuração com checkboxes. UI 100% PT, e o projeto é teu, o JustWatch não te deixa mudar nada.

Desvantagens honestas: não mostra preços (só disponibilidade), o catálogo vem do que o TMDB descobre em Portugal (~2 000 títulos, o JustWatch tem muito mais), sem apps móveis e sem notificações. E a manutenção é tua: as plataformas mudam URLs, vimos isso com a Sky e a Disney.

Como funciona por dentro

Uma arquitetura limpa baseada em agentes (com MCP — o mesmo protocolo de IA):

TMDB API (grátis)
      |
      v
+------------------------------+
|  MASTER ORCHESTRATOR AGENT   |
|  (coordena sub-agentes +     |
|   eventos + MCP)             |
+------------------------------+
        |                 |
+-------v-------+   +-----v---------+
| TMDB/IMDb     |   | Sync Agent    |
| Agent         |   | /discover PT  |
| pesquisa +    |   | + deltas      |
| trailer       |   |               |
+-------+-------+   +-------+-------+
        |                   |
        +---------+---------+
                  |
+-----------------v-----------------+
|  Database Manager (SQLite async)  |
|  títulos · disponibilidade ·      |
|  estados · trailers               |
+-----------------^-----------------+
                  |
          +-------v-------+
          | API FastAPI + |
          | WebSocket     |
          +-------^-------+
                  |
          Dashboard dark mode
          (HTML/CSS/JS puro)

Fluxo: o Sync Agent varre o TMDB (/discover com watch_region=PT e os providers ativos) → guarda tudo no SQLite → a API serve a UI → quando passas o rato num cartão, pede o trailer ao TMDB (em cache localmente para nunca repetir).

As bibliotecas, sim, instala-se, mas são só 9

Requisitos: Python 3.11+ + chave TMDB grátis (2 minutos em themoviedb.org).

Biblioteca

Para quê

fastapi + uvicorn

API web + servidor

sqlalchemy + aiosqlite

Base de dados SQLite assíncrona

httpx

Chamadas à API do TMDB

pydantic + pydantic-settings

Configuração e validação (.env)

loguru

Logs estruturados — consola colorida + JSON diário (rotação 1 dia, retenção 7 dias)

truststore

Certificados SSL do Windows (redes com interceção)

Nada de React, Docker ou bases de dados externas — corre em qualquer PC com Python.

Os passos que construíram os módulos

  1. Núcleo — FastAPI + SQLite + sync básico do catálogo PT (4 providers) e dashboard.

  2. Arquitetura de agentes — orquestrador + sub-agentes TMDB/Sync/DB (cada ficheiro < ~200 linhas) + ferramentas MCP.

  3. Sync inteligente — varredura periódica com deltas (entrou/saiu) e progresso em tempo real via WebSocket.

  4. Estados pessoais — ⭐ Com Interesse / ✅ Visto / 👁️ Por Ver + estatísticas.

  5. Pesquisa instantânea — por título ou IMDb ID, com badges de disponibilidade PT.

  6. Deeplinks — botão "Abrir {serviço} ↗" por serviço ativo.

  7. Novidades — estreia (filme) ou último episódio (série) com menos de 5 dias.

  8. Trailers no hover — descoberta no TMDB + cache local (e as correções: sem filtro de idioma + fallback à temporada 1).

  9. Providers configuráveis — Netflix e HBO Max ligam-se no .env (PROVIDER_IDS=119,337,8).

  10. Paginação — 1 2 3 4 5 … 87 88 em vez de "carregar mais".

  11. Ajustes finos — deeplinks corrigidos (Sky/Disney/Max já não têm URL de pesquisa público → abrem a home).

  12. Configuração (⚙️) — módulo com checkboxes das principais plataformas de streaming de Portugal, pré-assinalados: o utilizador final escolhe os serviços que assina e tudo se adapta na hora, com persistência no .env.

  13. Polimento visual — classificação TMDB (⭐) em cada cartão e brilho das novidades mais suave: um pulso lento e discreto em vez do neon forte.

O que não faz (aviso honesto)

Os deeplinks abrem a pesquisa (ou a home) do serviço com o título, os browsers não conseguem "disparar" o filme diretamente noutra app (DRM e ausência de API universal). É o máximo que a web permite, e é suficiente: um clique e estás dentro do serviço.

Como correr em casa

Todo o código está em aberto: https://github.com/luisd72/Qoder-Streaming

Windows — um clique: entra na pasta do projeto e faz duplo clique em start.bat (cria o .venv se faltar, instala as 9 bibliotecas, gera o .env se faltar e abre o browser).

Ou manualmente — sempre DENTRO da pasta do projeto (é lá que estão o requirements.txt e a pasta app):

cd C:\projetos\Qoder-Streaming
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env   # coloca a tua TMDB_API_KEY
.venv\Scripts\python.exe -m uvicorn app.main:app

Abre http://127.0.0.1:8000 (se a porta estiver ocupada, arranca na 8001) e o catálogo sincroniza-se sozinho (6h por defeito, botão manual incluído). Depois é só abrir a ⚙️ e assinalar os serviços que assinas.

❝

⚠️ Não corras os comandos a partir da pasta pessoal (C:\Users\...) nem uses o Python do sistema: o .venv é obrigatório (o Python global costuma ter pydantic v1 incompatível — erro cannot import name 'IncEx').

O que vem a seguir?

Notificações quando uma novidade entra, listas partilhadas e, quem sabe, integração com o teu calendário, ainda não decidi. O projeto é modular de propósito — cada peça cabe num ficheiro com menos de 200 linhas, fácil de estender.

Qoder Streaming, o teu painel, os teus providers, zero adivinhas.

Código aberto: github.com/luisd72/Qoder-Streaming"

Continue lendo

Ver mais
caret-right