Post
Um favorito para pedir o TL;DR de qualquer página ao ChatGPT
Um bookmarklet que pega a URL aberta, monta um pedido de resumo e prepara uma conversa no ChatGPT, além da versão usada nos meus sites Jekyll.
Eu mantenho nos meus sites um link que oferece ao leitor a opção de começar por um resumo do texto. O arquivo HTML que deu origem a este post contém uma variação portátil dessa ideia: em vez de funcionar apenas nos meus artigos, ela usa a página que estiver aberta no navegador.
É um bookmarklet, um favorito cujo endereço começa com javascript:. Quando
acionado, ele pega location.href, coloca a URL em um prompt e o abre em uma
nova aba do ChatGPT.
O código não copia o conteúdo da página e não chama a API da OpenAI. Ele envia ao ChatGPT o endereço público e o pedido de leitura. Essa diferença importa: o resultado ainda depende de o ChatGPT conseguir acessar a página.
Arraste este link para a barra de favoritos
Em um navegador desktop, mostre a barra de favoritos e arraste o botão abaixo para ela:
Depois:
- abra o artigo que pretende resumir;
- clique em TL;DR → ChatGPT nos favoritos;
- revise o prompt aberto no ChatGPT;
- envie a mensagem.
Se o navegador não aceitar o arrasto, crie um favorito comum, edite-o e cole o código da próxima seção no campo destinado à URL. Clicar no botão nesta própria página também funciona como exemplo: a página atual será a URL incluída no prompt.
O endereço completo do favorito
Este é o bookmarklet em uma única linha, no formato que precisa ser salvo como URL:
1
javascript:(()=>{const u=location.href;const p=`Por favor, abra esta URL com busca na web e leia o artigo completo:\n\n${u}\n\nDepois de ler o conteúdo real do artigo:\n1) Resuma os cinco pontos mais importantes e a conclusão.\n2) Explique quais detalhes, dados e insights eu perco por não ler o artigo completo.\n3) Sugira uma boa pergunta de follow-up para continuar a conversa sobre o artigo.`;window.open('https://chatgpt.com/?q='+encodeURIComponent(p),'_blank','noopener')})()
Uma versão HTML arrastável usa exatamente esse endereço no atributo href:
1
<a href="javascript:(()=>{const u=location.href;const p=`Por favor, abra esta URL com busca na web e leia o artigo completo:\n\n${u}\n\nDepois de ler o conteúdo real do artigo:\n1) Resuma os cinco pontos mais importantes e a conclusão.\n2) Explique quais detalhes, dados e insights eu perco por não ler o artigo completo.\n3) Sugira uma boa pergunta de follow-up para continuar a conversa sobre o artigo.`;window.open('https://chatgpt.com/?q='+encodeURIComponent(p),'_blank','noopener')})()">TL;DR → ChatGPT</a>
Uma URL javascript: executa código no contexto da página atual. A
documentação da MDN
recomenda não usar esse esquema para navegação comum e observa que políticas de
segurança podem bloqueá-lo. Aqui ele tem uma finalidade deliberadamente
restrita: ser instalado pelo próprio usuário como favorito. Eu não instalaria
um bookmarklet sem antes ler seu código.
O que acontece quando clico
A versão expandida é mais fácil de inspecionar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const articleUrl = window.location.href;
const prompt = `Por favor, abra esta URL com busca na web e leia o artigo completo:
${articleUrl}
Depois de ler o conteúdo real do artigo:
1) Resuma os cinco pontos mais importantes e a conclusão.
2) Explique quais detalhes, dados e insights eu perco por não ler o artigo completo.
3) Sugira uma boa pergunta de follow-up para continuar a conversa sobre o artigo.`;
const chatgptUrl =
`https://chatgpt.com/?q=${encodeURIComponent(prompt)}`;
window.open(chatgptUrl, '_blank', 'noopener');
O encodeURIComponent() impede que espaços, acentos, quebras de linha e
caracteres como & sejam interpretados como partes separadas da URL. A
referência da função
descreve justamente seu uso para codificar um valor que será colocado em uma
query string.
O terceiro argumento de window.open() usa noopener, impedindo que a nova aba
receba uma referência para a janela de origem. A opção faz parte dos
recursos documentados de window.open().
O prompt pede três resultados. Além dos cinco pontos e da conclusão, ele solicita os detalhes perdidos pela leitura abreviada e uma pergunta para continuar a conversa. Esse segundo item evita fingir que um TL;DR equivale ao artigo inteiro.
Um exemplo com URL fixa
Dentro de um site, a URL do artigo já é conhecida. Não é necessário capturar a aba atual. Este link abre o mesmo prompt para “Publicando apps Python no Nomad sem Docker”:
O destino é formado por duas partes:
1
https://chatgpt.com/?q=[PROMPT CODIFICADO]
O exemplo não chama um endpoint de API e não executa processamento no gpupo.com. O navegador apenas abre uma URL do ChatGPT contendo o prompt.
Como isso está implementado nos meus sites
O gpupo.com e o site da BP Strat usam o mesmo desenho para oferecer um TL;DR em todas as páginas de determinados layouts. No gpupo.com, o leitor pode escolher entre ChatGPT e Claude. Os dois links partem do mesmo prompt e mudam apenas a URL de destino. Na BP Strat, a implementação continua apontando para o Claude.
No gpupo.com, o código está diretamente em _layouts/post.html. Todo conteúdo
com layout: post recebe o link. Na BP Strat, a lógica foi extraída para
_includes/tldr-claude.html; os layouts de posts e documentos reutilizam o
include e informam se o conteúdo é um “artigo” ou um “documento”.
Nos dois casos, Liquid monta o prompt durante o build do Jekyll. No gpupo.com, o componente com as duas opções pode ser escrito assim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{% assign canonical_url = page.url | absolute_url %}
{% capture tldr_prompt %}
Por favor, abra esta URL com busca na web e leia o artigo completo:
{{ canonical_url }}
Depois de ler o conteúdo real do artigo:
1) Resuma os cinco pontos mais importantes e a conclusão.
2) Explique quais detalhes, dados e insights o leitor perde por não ler o artigo completo.
3) Sugira uma boa pergunta de follow-up para continuar a conversa sobre o artigo.
{% endcapture %}
{% assign encoded_prompt = tldr_prompt | strip | url_encode %}
{% assign chatgpt_tldr_url =
'https://chatgpt.com/?q=' | append: encoded_prompt %}
{% assign claude_tldr_url =
'https://claude.ai/new?q=' | append: encoded_prompt %}
Se preferir começar por um resumo, peça um TL;DR ao
<a href="{{ chatgpt_tldr_url }}" target="_blank" rel="noopener noreferrer">ChatGPT</a>
ou ao
<a href="{{ claude_tldr_url }}" target="_blank" rel="noopener noreferrer">Claude</a>.
O filtro absolute_url combina a URL e o baseurl configurados no site com
o caminho da página. O url_encode faz no build o trabalho que
encodeURIComponent() faz no navegador. Esses filtros estão descritos na
documentação do Jekyll.
Esse desenho tem um componente global e não exige JavaScript para o link de cada artigo. Se o prompt mudar, a alteração fica no layout ou no include, não em todos os posts. O bookmarklet continua separado porque precisa descobrir em tempo de execução qual página o usuário abriu, inclusive fora dos meus sites.
O limite que deixei explícito
O protótipo que originou este post usa o parâmetro ?q= como conveniência de
interface. Em uma consulta feita em 11 de agosto de 2026, a
documentação oficial da OpenAI não apresentou
um contrato público que o defina como API estável.
Por isso eu o trataria como uma integração descartável. Se o formato mudar, o favorito e o componente dos sites precisarão ser ajustados. Para uma integração controlada por contrato, autenticação, erros e respostas estruturadas, o caminho é a API oficial, não uma URL da interface do ChatGPT.
Também não usaria o favorito com páginas privadas. A URL e o prompt são enviados ao ChatGPT. Páginas que exigem autenticação, bloqueiam acesso automatizado ou não estão publicadas podem não ser lidas. Se a resposta não demonstrar contato com o conteúdo real, resta copiar o trecho relevante ou fornecer o arquivo diretamente em uma conversa.