Voltar para o blog
BunTypeScriptHacker NewsLivros

HackerBooks e Bun: os livros que o Hacker News recomenda

02 de novembro de 2026·6 min de leitura·Diego Horvatti

Toda discussão boa no Hacker News tem alguém dizendo "leia o Designing Data-Intensive Applications", e você salva a aba para nunca mais abrir. O HackerBooks apareceu em um Show HN para resolver isso. A proposta cabe no título do post: é o HackerTube, mas para livros mencionados no HN.

Um aviso antes de continuar. Este texto parte do anúncio, não da implementação do HackerBooks, então não vou chutar stack ou números do projeto. O código aqui é um esboço meu com Bun, ainda sem rodar contra a API real. Trate como ponto de partida.

O que é o HackerBooks?

É uma camada de descoberta de livros construída sobre o que a comunidade do HN cita. A ideia é a mesma do HackerTube, que apareceu no blog do Andrej Karpathy: tirar a decisão de um algoritmo comercial e entregar para gente que discute o assunto.

Esse padrão está virando um gênero. Primeiro vídeos, agora livros. E, sinceramente, livro me parece um caso até melhor.

Vídeo você testa em cinco minutos. Livro técnico custa semanas de leitura. Quanto mais caro o erro, mais vale um bom filtro.

Por que recomendação de livro no HN vale mais que um top 10

Listas de "10 livros que todo dev deve ler" costumam reciclar os mesmos títulos. Muitas vivem de link de afiliado. Avaliação de loja tem outro problema: mede quem comprou e gostou, nem sempre quem usou aquilo no trabalho.

Uma menção em comentário tem contexto. Ninguém costuma citar um livro no vazio. A pessoa está resolvendo uma dúvida sobre replicação, compilador ou gestão de time, e o livro entra como resposta.

Esse contexto é o verdadeiro valor. Saber que um livro foi citado 300 vezes ajuda. Ler por que alguém o recomendou para um problema parecido com o seu ajuda muito mais.

Livro citado em discussão real vem com bula.

Mas o HN continua sendo o HN:

  • O viés é forte: inglês, startup, sistemas e nostalgia.
  • Citar não prova leitura. Tem clássico que é mais citado do que lido, e SICP que o diga.
  • Parte das menções é crítica. Contagem não separa elogio de reclamação.

Por que livro é mais difícil de extrair que vídeo

Aqui mora a parte técnica divertida. Vídeo do YouTube tem um ID na URL. Você extrai aquele ID e acabou.

Livro não tem isso. A mesma obra aparece como link da Amazon, link do Goodreads, "DDIA", "o livro do Kleppmann" ou "aquele livro do porco na capa". Humano entende. Regex, nem tanto.

E os identificadores também enganam. A edição impressa costuma ter um ISBN, a nova edição tem outro, e a versão Kindle ganha um ASIN começando com B. Um livro, três IDs. Se você não juntar tudo, seu ranking divide os votos do mesmo título.

Tem mais um detalhe. Story do HN tem pontos públicos, mas a pontuação de comentários não é exposta. Logo, você não sabe se aquela recomendação foi aplaudida ou enterrada. Precisa de outro sinal.

Eu usaria pessoas distintas. Uma pessoa citar o mesmo livro 40 vezes é um fã. Quarenta pessoas citarem o livro uma vez é um indício bem melhor.

Como montar sua versão com Bun

Vou seguir o caminho preguiçoso: pegar só os links da Amazon com ISBN e ignorar o resto. Você perde as menções em texto puro, mas ganha um dado limpo em uma tarde.

O Bun encaixa bem porque roda TypeScript direto e já traz fetch e SQLite. Sem npm install, sem configuração.

// coleta.ts
import { Database } from "bun:sqlite";

const db = new Database("livros.sqlite");
db.run(`CREATE TABLE IF NOT EXISTS mencao (
  isbn TEXT, autor TEXT, comentario TEXT, criado_em INTEGER,
  PRIMARY KEY (isbn, comentario)
)`);

const url = new URL("https://hn.algolia.com/api/v1/search");
url.searchParams.set("query", "amazon.com");
url.searchParams.set("tags", "comment");
url.searchParams.set("hitsPerPage", "1000");

const res = await fetch(url);
if (!res.ok) throw new Error(`Algolia respondeu ${res.status}`);
const { hits } = await res.json();

const padrao = /amazon\.[a-z.]+\/(?:[^\s"<]*\/)?(?:dp|gp\/product)\/(\d{9}[\dX])/g;
const salvar = db.prepare("INSERT OR IGNORE INTO mencao VALUES (?, ?, ?, ?)");

for (const h of hits) {
  const texto = (h.comment_text ?? "").replaceAll("&#x2F;", "/");
  for (const [, isbn] of texto.matchAll(padrao)) {
    salvar.run(isbn, h.author, h.objectID, h.created_at_i);
  }
}

Rode com bun coleta.ts. A chave primária composta deixa rodar de novo sem duplicar nada, o que combina com um cron.

Repare no replaceAll. O texto de comentário pode vir com a barra codificada como &#x2F;, e aí a regex não casa. Já o padrão \d{9}[\dX] descarta de propósito os ASINs de Kindle, porque eles não são ISBN.

O ranking vira uma consulta:

// ranking.ts
import { Database } from "bun:sqlite";

const db = new Database("livros.sqlite");

const topo = db.query(`
  SELECT isbn, COUNT(DISTINCT autor) AS pessoas, COUNT(*) AS mencoes
  FROM mencao
  GROUP BY isbn
  ORDER BY pessoas DESC
  LIMIT 20
`).all() as { isbn: string; pessoas: number; mencoes: number }[];

for (const livro of topo) {
  const res = await fetch(`https://openlibrary.org/isbn/${livro.isbn}.json`);
  const titulo = res.ok ? (await res.json()).title : "título desconhecido";
  console.log(`${livro.pessoas} pessoas: ${titulo} (${livro.isbn})`);
}

A Open Library resolve o título sem chave de API. Ela não conhece todo ISBN, por isso o fallback.

Armadilhas antes de confiar no ranking

Três coisas vão aparecer logo:

  • Paginação: a busca não entrega o histórico inteiro de uma vez. Fatie por período usando created_at_i em numericFilters.
  • Falso positivo: nem todo link da Amazon é livro. O ISBN filtra boa parte, mas a query amazon.com também traz muito comentário sobre a própria empresa, e esses só gastam sua janela de resultados.
  • Edições separadas: o agrupamento por ISBN ainda parte clássicos com várias edições. Dá para usar o identificador de obra (works) que a Open Library devolve e agrupar por ele.

Para pegar as menções sem link, a saída é rodar um LLM sobre os comentários e pedir título e autor em JSON. Funciona, mas custa dinheiro e pode inventar livro. Eu só iria por esse caminho depois de ver o dado simples dando resultado.

Um cuidado ético: se você publicar a lista, deixe claro quando houver link de afiliado. Um projeto que nasce da desconfiança em listas patrocinadas não deveria virar uma delas.

O que muda no seu fluxo de trabalho

Você não vai ler mais livros por causa disso. Desculpa. A pilha na mesa continua lá, me julgando.

O ganho é outro: decidir melhor o próximo. Antes de comprar, abra as discussões em que o livro apareceu. Procure quem discorda. Veja para qual problema ele foi indicado. Dez minutos ali podem poupar um mês de leitura errada.

O padrão também serve para o seu time. Troque os comentários do HN pelo histórico do Slack e você descobre quais livros e artigos o pessoal realmente indica. É um onboarding bem mais honesto que uma wiki parada desde 2023.

Vale a pena usar o HackerBooks?

Vale como bússola, não como cânone. Minha opinião forte: a parte mais útil de um projeto assim é o link para a conversa original, não a posição no ranking. Um número diz que muita gente citou. Só o comentário diz se aquilo serve para você.

E o gênero merece continuar. Vídeo, livro, depois paper, ferramenta, curso. O que a gente precisa aqui é de boas consultas sobre discussões públicas, e isso cabe em um script. Se você gosta de ferramentas pequenas assim, tem mais nos meus projetos.

Resumo para o LinkedIn

"Leia o Designing Data-Intensive Applications." Quase toda thread boa do Hacker News tem essa frase, e a aba salva nunca mais é aberta.

O HackerBooks surgiu para resolver isso: descobrir livros pelo que a comunidade realmente cita, não por lista de afiliado.

Vídeo ruim custa cinco minutos. Livro técnico errado custa semanas. Quanto mais caro o erro, mais vale um bom filtro.

Para mim, o melhor de um projeto assim não é o ranking, é o link para a conversa original. Um número diz que muita gente citou. Só o comentário diz se aquilo serve para você.

No artigo, esbocei como montar sua versão com Bun e SQLite em uma tarde, contando pessoas distintas em vez de menções. Uma pessoa citar 40 vezes é um fã. Quarenta pessoas citarem uma vez é um indício.

Qual livro técnico você leu por indicação de um comentário e nunca esqueceu?

#HackerNews #Bun #TypeScript #DesenvolvimentoDeSoftware #Livros