youtube-check

Publicação na Chrome Web Store

Guia para publicar o YouTube Check no Chrome Web Store Developer Dashboard.

Pré-requisitos


Passo 1 — Hospedar a política de privacidade

A Chrome Web Store exige uma URL HTTPS pública para a política de privacidade.

Opção recomendada: GitHub Pages

  1. Crie um repositório público (ex.: youtube-check)
  2. Faça push deste projeto
  3. Em Settings → Pages, ative GitHub Pages na branch main, pasta /store
  4. A URL ficará algo como:

    https://SEU-USUARIO.github.io/youtube-check/privacy-policy.html
    
  5. Cole essa URL no campo Privacy policy do painel da loja

O arquivo está em store/privacy-policy.html. Atualize o e-mail de contato antes de publicar.


Passo 2 — Gerar o ZIP

./scripts/package-extension.sh

O arquivo será criado em dist/youtube-check-v{version}.zip, com a versão lida do manifest.json.

Importante: faça upload apenas do ZIP gerado. Não inclua .git, docs/, store/ ou scripts/.


Passo 3 — Criar item na loja

  1. Acesse o Developer Dashboard
  2. New item → faça upload do ZIP
  3. Preencha os campos abaixo (textos prontos para copiar)

Textos da listagem (copiar e colar)

Nome

YouTube Check

Descrição curta (máx. 132 caracteres)

Marca vídeos do YouTube que você já avaliou (Like ou Dislike) com o badge Visualizado.

Descrição detalhada

YouTube Check ajuda você a não perder tempo com vídeos que já avaliou.

Como funciona
• Abra um vídeo no YouTube e dê Like ou Dislike
• A extensão salva a avaliação localmente no seu navegador
• Ao navegar (Home, Busca, Canal, Playlists, Shorts, a lista de recomendados e a playlist ao lado do vídeo), vídeos já avaliados aparecem com o badge "✓ Visualizado"

Recursos
✓ Detecção automática de Like e Dislike — Likes dados no celular ou na TV entram pela lista "Vídeos com Gostei"
✓ Marcar como visto pelo tempo assistido — sinaliza o vídeo ao atingir uma porcentagem configurável (75%–95%, padrão 90%), mesmo sem avaliar
✓ Badge ou overlay configurável nas thumbnails
✓ Opcional: exibir o título completo dos vídeos nos cards, sem o corte em "…"
✓ Suporte completo a YouTube Shorts
✓ Contador flutuante de vídeos vistos na página — mostra o progresso da playlist quando você está acompanhando uma lista; dispensável por página e arrastável para qualquer posição (clique duplo restaura o canto)
✓ Indicador na página do vídeo e nos Shorts ("Você já avaliou este vídeo" / "Você já assistiu a este vídeo")
✓ Popup com estatísticas e histórico recente — inclui quantos vídeos você visualizou hoje, nesta semana e neste mês; clique em um total para listar todos os vídeos dele; remova itens individuais ou limpe tudo
✓ Limpeza automática do histórico (para sempre, ou 30 / 90 / 180 / 365 dias)
✓ Exportar e importar dados (JSON)
✓ Configurações sincronizadas entre dispositivos (Chrome Sync)
✓ Tela de boas-vindas na instalação e interface em Inglês / Português

Privacidade
• Nenhum dado é enviado para servidores externos
• Tudo fica armazenado localmente no seu navegador
• Você pode limpar o histórico a qualquer momento

Ideal para quem assiste muito YouTube e quer saber rapidamente o que já passou pelo feed.

Descrição detalhada (English)

YouTube Check helps you avoid re-watching videos you've already rated on YouTube.

HOW IT WORKS
• Open any YouTube video and give it a Like or Dislike
• The extension saves your rating locally in your browser
• While browsing Home, Search, Channels, Playlists, Shorts, and both the suggested videos and the playlist queue beside the video you're watching, rated videos show a "✓ Viewed" badge on thumbnails

FEATURES
✓ Automatic Like/Dislike detection — Likes given on your phone or TV are picked up from your "Liked videos" list
✓ Mark as viewed by watch time — flags a video once you've watched a configurable amount of it (75%–95%, default 90%), even without rating it
✓ Configurable badge or overlay on thumbnails
✓ Optional: show the full video title on cards, with no "…" cut-off
✓ Full YouTube Shorts support
✓ Floating page counter (viewed/total on the current listing) — reports your progress through a playlist while you watch one; dismissible per page and draggable to any position (double-click to reset)
✓ Watch page and Shorts indicator ("You already rated this video" / "You already watched this video")
✓ Popup with statistics and recent history — including how many videos you've viewed today, this week and this month; click any total to list every video behind it; remove individual videos or clear everything
✓ Automatic history cleanup (keep forever, or 30 / 90 / 180 / 365 days)
✓ Export and import your data (JSON)
✓ Settings synced across devices via Chrome Sync
✓ Welcome guide on install and English / Portuguese interface

PRIVACY
• No data is sent to external servers
• Everything is stored locally in your browser
• You can clear your history at any time from the extension popup

Perfect for anyone who watches a lot of YouTube and wants to quickly see what they've already rated.

Categoria

Produtividade

Idioma principal

Português (Brasil)

Propósito único (Single purpose)

Ajudar o usuário a identificar visualmente vídeos do YouTube que ele já assistiu ou avaliou (curtido ou com dislike), exibindo badges nas thumbnails e estatísticas locais. Também marca como visto pelo tempo assistido (~90% do vídeo), com a porcentagem configurável e a opção desativável nas configurações.

Justificativa de permissões

Permissão Justificativa
storage Armazenar localmente o histórico de vídeos avaliados e as preferências do usuário (cor do badge, texto, etc.).
unlimitedStorage Remove o limite padrão de ~10MB do chrome.storage.local, evitando falhas silenciosas ao salvar para usuários com histórico extenso. Nenhum dado sai do dispositivo do usuário.
alarms Agenda uma verificação diária que aplica a limpeza automática de histórico (configurável em “Manter histórico por”), quando o usuário optar por não manter os dados para sempre.
scripting Ativar a extensão nas abas do YouTube que já estavam abertas no momento da instalação. O Chrome só injeta os scripts declarados no carregamento seguinte da página, então sem isso essas abas ficam inertes até o usuário apertar F5. Usada uma única vez, na instalação, e apenas nas abas de youtube.com já cobertas por host_permissions.
host_permissions: youtube.com Ler o estado dos botões de like/dislike nas páginas do YouTube e injetar badges visuais nas thumbnails. A extensão só funciona no YouTube.

Textos prontos para colar na aba “Práticas de privacidade”

O painel bloqueia a publicação enquanto cada permissão do manifest.json não tiver justificativa preenchida — inclusive as que já existiam, se a aba nunca foi revisada. As justificativas ficam salvas entre envios; só é preciso preencher as novas.

scripting (nova na 1.8.0):

A permissão scripting é usada uma única vez, no momento da instalação, para ativar a extensão nas abas do YouTube que já estavam abertas.

O Chrome só injeta os content scripts declarados no manifesto quando a página é carregada novamente. Sem essa permissão, quem instala a extensão com o YouTube já aberto encontra uma aba em que nada funciona até apertar F5, o que gerou relatos de usuários de que a extensão estava quebrada.

Uso exato: no evento chrome.runtime.onInstalled, e somente quando reason === "install", a extensão chama chrome.scripting.insertCSS e chrome.scripting.executeScript nas abas cuja URL corresponde a https://www.youtube.com/* ou https://youtube.com/* — exatamente os hosts já declarados em host_permissions. Não é usada em atualizações nem em nenhum outro momento.

Os arquivos injetados são exclusivamente os arquivos locais já incluídos no pacote (os mesmos listados em content_scripts no manifest.json). Nenhum código remoto é baixado ou executado, nenhum dado é coletado e nenhuma outra aba ou site é acessado.

Versão em inglês, caso prefira responder ao revisor no idioma da revisão:

The scripting permission is used exactly once, at install time, to activate the extension in YouTube tabs that were already open.

Chrome only injects manifest-declared content scripts on a page's next load. Without this permission, a user who installs the extension while YouTube is already open finds a tab where nothing works until they press F5 — which led to user reports that the extension was broken.

Exact usage: inside the chrome.runtime.onInstalled event, and only when reason === "install", the extension calls chrome.scripting.insertCSS and chrome.scripting.executeScript on tabs whose URL matches https://www.youtube.com/* or https://youtube.com/* — precisely the hosts already declared in host_permissions. It is never used on updates or at any other time.

The injected files are exclusively local files already bundled in the package (the same ones listed under content_scripts in manifest.json). No remote code is fetched or executed, no data is collected, and no other tab or site is accessed.

Uso de dados (Data usage)

No formulário de privacidade do painel, declare:

Pergunta Resposta
Coleta dados pessoais? Não
Coleta histórico de navegação? Não (apenas metadados de vídeos que o usuário avaliou, salvos localmente)
Usa criptografia? N/A (dados locais)
Vende dados? Não
Compartilha com terceiros? Não

Passo 4 — Screenshots e imagens promocionais

As imagens já estão prontas em store/screenshots/ (não vão no ZIP da extensão). Em Itens da loja, envie:

Campo Arquivos
Capturas de tela localizadas, com o seletor de idioma em Português (Brasil) store/screenshots/pt-BR/01-… a 05-…, nesta ordem
Capturas de tela localizadas, com o seletor de idioma em English store/screenshots/en/01-… a 05-…, nesta ordem
Capturas de tela globais (em “Recursos globais”, valem para todos os idiomas) as mesmas store/screenshots/en/01-… a 05-…
Bloco promocional pequeno store/screenshots/promo/small-promo-tile-440x280.png
Bloco promocional de letreiro store/screenshots/promo/marquee-promo-tile-1400x560.png

“Capturas de tela localizadas” pertence ao idioma escolhido no seletor do topo da página; “Recursos globais” é um bloco só, compartilhado. Remova as capturas antigas antes de enviar as novas (o limite é de cinco por campo) e envie uma por vez: a ordem de envio é a ordem da galeria. O campo “Vídeo promocional global” fica vazio.

Requisitos da loja

Como gerar de novo

Quando a interface mudar, refaça o conjunto com scripts/store-images/ — as capturas saem da extensão real, num Chromium isolado e sem login. O passo a passo, o que cada imagem mostra e as limitações conhecidas estão em store/screenshots/README.md.


Passo 5 — Ícone da loja

Use icons/icon-128.png (já incluído no projeto).


Passo 6 — Notas da versão (What’s new — v1.10.1)

Se a v1.10.0 já foi publicada, use apenas a nota da 1.10.1:

English

• Fixed: an ad left to play to the end could mark the video as watched before it had even started — or halfway through, on a mid-roll ad. Watch time now counts the video itself, never the ad
• Videos wrongly marked this way stay in your history: remove them with the × in the popup lists if you need to

Português (Brasil)

• Correção: um anúncio deixado até o fim podia marcar o vídeo como assistido antes mesmo de ele começar — ou pela metade, num anúncio do meio do vídeo. O tempo assistido agora conta só o vídeo, nunca o anúncio
• Vídeos marcados por engano dessa forma continuam no histórico: remova-os pelo × nas listas do popup, se precisar

Caso publique acumulando desde a 1.9.0, some as notas da 1.10.0 abaixo:

English

• New: the Total, Viewed, Liked and Disliked cards in the popup are now clickable — each one opens the full list of the videos it counts, newest first, with a Back button to return
• New: remove any video straight from those lists; long histories load as you scroll
• New: videos you opened but neither rated nor watched through show up in the Total list labelled "Not viewed" — that is why Total is higher than Viewed

Português (Brasil)

• Novo: os quadros Total, Visualizados, Curtidos e Não curtidos do popup agora são clicáveis — cada um abre a lista completa dos vídeos que ele conta, do mais recente para o mais antigo, com um botão Voltar
• Novo: remova qualquer vídeo direto nessas listas; históricos longos carregam conforme você rola
• Novo: vídeos que você abriu sem avaliar nem assistir até o fim aparecem na lista Total com o selo "Não visualizado" — é por isso que Total é maior que Visualizados

Caso publique acumulando desde a 1.8.1, some as notas da 1.9.0 abaixo:

English

• New: Likes you give on your phone, TV or another browser now count too — open your "Liked videos" list and every video in it gets the "✓ Viewed" badge
• New: videos marked as viewed by watch time now get their own indicator on the watch page and in Shorts ("You already watched this video") — it also shows up the moment you reach the watch-time threshold
• Improved: your history is now saved one video at a time, so saving and syncing stay fast however long it gets. Existing data is migrated automatically, and JSON backups keep the same format
• Fixed: a Like given at the same moment watch time marked the video — or saves from two tabs at once — could cancel each other out
• Fixed: the popup's recent history is now ordered and dated by when each video was viewed, matching the Today / This week / This month counters, and broken thumbnails there are hidden

Português (Brasil)

• Novo: Likes dados no celular, na TV ou em outro navegador também passam a contar — abra a lista "Vídeos com Gostei" e todos os vídeos dela ganham o badge "✓ Visualizado"
• Novo: vídeos marcados como vistos pelo tempo assistido ganham um indicador próprio na página do vídeo e nos Shorts ("Você já assistiu a este vídeo") — que aparece também no instante em que você atinge a porcentagem configurada
• Melhoria: o histórico passa a ser salvo vídeo a vídeo, então salvar e sincronizar continuam rápidos por maior que ele seja. Os dados existentes são migrados automaticamente, e os backups JSON mantêm o mesmo formato
• Correção: um Like dado no mesmo instante em que o tempo assistido marcava o vídeo — ou gravações de duas abas ao mesmo tempo — podiam se anular
• Correção: o histórico recente do popup agora é ordenado e datado por quando cada vídeo foi visualizado, igual aos contadores Hoje / Esta semana / Este mês, e miniaturas quebradas ali ficam ocultas

Caso publique acumulando desde a 1.8.0, some as notas da 1.8.1 abaixo:

English

• Fixed: Shorts in the Shorts carousel now get the "✓ Viewed" badge too — on a channel's Home tab and in search results, where they were skipped even though the very same Shorts were badged on the channel's Shorts tab
• Fixed: the floating counter no longer inflates the total on the Home feed — it was counting the same video more than once
• Fixed: a Short saved from a card now keeps its full title and its /shorts/ link

Português (Brasil)

• Correção: os Shorts do carrossel também recebem o badge "✓ Visualizado" — na aba Início do canal e nos resultados de busca, onde ficavam de fora mesmo com os mesmos Shorts marcados na aba Shorts do canal
• Correção: o contador flutuante não infla mais o total na Home — o mesmo vídeo estava sendo contado mais de uma vez
• Correção: um Short salvo a partir de um card mantém o título completo e o link /shorts/

Caso publique acumulando desde a 1.7.0, some as notas da 1.8.0 abaixo:

English

• Fixed: liking a video is now detected when you reach it by clicking a card too, with no page reload needed — this was why the extension seemed not to work right after installing
• Fixed: YouTube tabs already open when you install the extension now start working straight away, no refresh needed
• Changed: "mark as viewed by watch time" is now on by default, so watching a video through already counts towards Today, This week and This month

Português (Brasil)

• Correção: dar Like agora é detectado também quando você chega ao vídeo clicando num card, sem precisar recarregar a página — era o motivo de a extensão parecer não funcionar logo após a instalação
• Correção: abas do YouTube já abertas na hora da instalação passam a funcionar na hora, sem F5
• Mudança: "marcar como visto pelo tempo assistido" vem ligado por padrão, então assistir um vídeo até o fim já conta em Hoje, Esta semana e Este mês

Caso publique acumulando desde a 1.6.0, some as notas da 1.7.0 abaixo:

English

• New: the popup now shows how many videos you've viewed today, this week and this month, right below the statistics

Português (Brasil)

• Novo: o popup mostra quantos vídeos você visualizou hoje, nesta semana e neste mês, logo abaixo das estatísticas

Caso publique acumulando desde a 1.5.1, some as notas da 1.6.0 abaixo:

English

• New: the "✓ Viewed" badge now also shows in the video list beside the player — the playlist you're following, the autoplay queue and Mixes
• New: the floating counter reports your progress through the playlist (e.g. 11/47) while you watch one, instead of mixing the queue in with the suggested videos

Português (Brasil)

• Novo: o badge "✓ Visualizado" agora aparece também na lista de vídeos ao lado do player — a playlist que você está acompanhando, a fila de reprodução automática e os Mixes
• Novo: o contador flutuante mostra o progresso da playlist (ex.: 11/47) enquanto você assiste a uma lista, em vez de misturar a fila com os vídeos recomendados

Caso publique acumulando desde a 1.5.0, some também as notas da 1.5.1 abaixo:

• Fixed: Like/Dislike detection is reliable again on the watch page — YouTube changed its layout and the extension sometimes read the wrong button, leaving videos unmarked
• Fixed: already-marked videos are no longer un-marked on their own by an incorrect reading
• Fixed: liking a video now updates the badge immediately, with no page reload needed
• Fixed: the "You already rated this video" indicator is back on Shorts
• Correção: o Like/Dislike voltou a ser detectado de forma confiável na página do vídeo — o YouTube mudou o layout e a extensão às vezes lia um botão errado, deixando de marcar o vídeo
• Correção: vídeos já marcados não são mais desmarcados sozinhos por uma leitura incorreta
• Correção: dar Like agora atualiza o selo na hora, sem precisar recarregar a página
• Correção: o indicador "Você já avaliou este vídeo" voltou a aparecer nos Shorts

Caso publique acumulando desde a 1.4.2, some as notas da 1.5.0 abaixo:

• New: "Show full video title" setting — displays the complete title on video cards, with no "…" cut-off and no hovering needed (Home, Search, Channels, Playlists, Shorts and suggested videos). Off by default
• Novo: opção "Exibir título completo" — mostra o título inteiro dos vídeos nos cards, sem o corte em "…" e sem precisar passar o mouse (Home, Busca, Canal, Playlists, Shorts e recomendados). Desligada por padrão

Caso publique acumulando desde a 1.4.1, some as notas da 1.4.2 abaixo:

• Fixed: importing a JSON backup no longer drops videos that were marked as viewed by watch time
• Fixed: videos marked by watch time alone are no longer labelled "Disliked" in the popup history — they now have their own "Watched" tag
• Fixed: turning "Hide viewed videos" or "Highlight unviewed" off now restores the listing straight away, with no page reload needed

Caso publique acumulando desde a 1.2.1, some as notas da 1.3.0/1.4.x abaixo:

• Viewed badges now also appear on the "Up next" / suggested videos list beside the video you're watching (newer YouTube card layout), counted on the page counter too
• Mark videos as viewed by watch time — new opt-in setting (off by default) that flags a video once you've watched a configurable amount of it (75%–95%, default 90%), even without a Like or Dislike
• The floating page counter can now be dragged anywhere on screen (double-click to reset the corner), and stays dismissible per page
• Manage your history: remove individual videos from the popup, or set automatic cleanup (keep forever, or 30 / 90 / 180 / 365 days)
• New welcome page on install with a quick 3-step guide, plus a friendlier empty popup state

A partir da v1.4.2 a descrição da extensão no manifest.json usa __MSG_extDescription__, traduzida em _locales/{en,pt_BR}/messages.json. Ao mudar a descrição curta da listagem, atualize também esses dois arquivos para não divergirem.


Passo 7 — Distribuição


Checklist final antes de enviar


Atualizações futuras

  1. Incremente version no manifest.json (ex.: 1.1.1, 1.2.0)
  2. Atualize CHANGELOG.md
  3. Gere novo ZIP: ./scripts/package-extension.sh
  4. No painel: Package → upload do novo ZIP → enviar para revisão