Português (BR)
Changelog
Todas as mudanças da Knockwire, da mais recente para a mais antiga, agrupadas pelo dia em que saíram. Não há números de versão aqui porque não há releases: o produto entra em produção continuamente, então a data é o único rótulo honesto. A lista começa no primeiro commit, em 29 de julho de 2026. Manutenção interna fica de fora. Tudo o que mudou o que o produto faz, ou o que ele afirma sobre si mesmo, está aqui.
Cinco línguas, e nenhuma caixa de entrada publicada
- AdicionadoAs páginas de marketing, os três documentos jurídicos e o blog agora existem em japonês, português do Brasil, espanhol e francês, além do inglês. Cada página é canônica de si mesma, com hreflang recíproco. Uma página que não foi traduzida não tem rota e não tem entrada de hreflang, porque um link prometendo uma língua que ele não consegue servir é pior que link nenhum.
- AdicionadoField Notes, os textos. Catorze peças longas, cerca de 19.000 palavras em inglês, e as catorze em todas as cinco línguas: 70 textos. Os gráficos são declarados como dados, e não como imagens, então um texto traduzido ganha um gráfico traduzido.
- AdicionadoO painel é lido em cinco línguas, 246 textos em cada uma. A língua vem da conta, então mudá-la vale em todos os dispositivos de uma vez, e não só no próximo login.
- AdicionadoUm formulário de contato. Toda mensagem chega a uma pessoa, e os endereços moram no servidor, onde nada consegue lê-los.
- RemovidoSeis endereços de e-mail publicados pelo site, e um sétimo nos dados estruturados, que era o pior deles: legível por máquina e servido em toda página. Um produto construído sobre a premissa de que ler páginas públicas em escala é fácil não deveria se surpreender quando isso acontece com a gente.
- CorrigidoToda página era servida como inglês. Uma página em japonês estava sendo lida em voz alta por leitores de tela com voz inglesa, e os buscadores ouviam a mesma coisa.
- CorrigidoCompartilhar qualquer página produzia o card da página inicial em inglês. As 101 páginas tinham herdado um único card social, então uma política de privacidade em japonês se anunciava com o resumo da página inicial.
- CorrigidoUma URL sem correspondência derrubava o servidor em vez de devolver 404. Essa era a causa dos 502 intermitentes, e do estilo quebrado que as pessoas relatavam junto com eles.
- CorrigidoSeguir de outra página um link para uma seção da página inicial levava a uma tela em branco. O script de interação não estava sendo ligado depois de uma navegação no lado do cliente, o que também deixava o acordeão, os contadores e a demonstração ao vivo mortos.
- CorrigidoO único número ao vivo da página inicial era formatado pela localidade do servidor, e não pela do leitor. O francês agora mostra 4 182 e o português do Brasil 4.182, batendo com os números fixos ao lado.
- CorrigidoDois links da moldura do site apontavam para rotas que não existiam, e o link do rodapé para o Field Notes mandava um leitor francês para o índice em inglês.
Contas, um remetente verificado, e a etapa de envio
- AdicionadoEntrar com um código de seis dígitos por e-mail, ou com o Google. Não existe coluna de senha em lugar nenhum do banco de dados, e uma coluna que não existe não vaza.
- AdicionadoNada é enviado sob um endereço que o cliente não provou ser dele. O envio depende de um registro DNS publicado no domínio. Um link de confirmação prova o controle de uma caixa de e-mail, e um arquivo em um servidor web prova o controle de um servidor web; nenhum dos dois é a afirmação que está sendo feita. Endereços de e-mail gratuitos são recusados logo de cara, com uma mensagem própria.
- AdicionadoA etapa de envio. Uma mensagem aprovada é preparada, ensaiada contra o formulário real, e só então postada. Ela vira um envio quando o formulário a aceita, e não antes. O ensaio é o padrão, um formulário atrás de um CAPTCHA é recusado em vez de resolvido, e nenhum caminho do código repete uma requisição que talvez já tenha saído: não existe condição de rede sob a qual uma segunda carta a um desconhecido seja o conserto correto.
- AdicionadoDuas fontes de descoberta. Um diretório de empresas de dados, em que o requisito de entrada é justamente o perfil que procuramos: 28 de 28 domínios da primeira varredura resolveram, contra cerca de quatro em cada cinco vindos de bios. E o diretório da Y Combinator, a única fonte que diz em voz alta se uma empresa ainda está operando. 1.861 das 6.108 empresas dele já foram adquiridas ou estão inativas.
- AdicionadoUm cliente pode nomear as empresas para as quais já vende, e excluir quem ele não quer que seja contatado. As duas listas estavam vazias desde que a regra que as lê foi escrita, e é por isso que um cliente atual entre os doze maiores tinha sido pesquisado como prospect frio.
- AdicionadoUm perfil de remetente, para que um formulário que pede telefone ou país tenha onde buscar isso. Nada naquela página é inferido. Um telefone digitado no formulário de contato de um desconhecido é uma afirmação sobre um negócio real, então ou ele vem de uma pessoa ou não vai.
- AlteradoO painel mostra o registro de verdade. Ele vinha renderizando dados de exemplo escritos antes de o pipeline existir: mais movimentado que a realidade, e com todos os números inventados.
- AlteradoToda empresa qualificada tirava exatamente 20. Três dos quatro termos da nota não podiam variar no momento em que ela era calculada, então a fila era a ordem de inserção vestida de número. Agora são seis termos, todos conhecíveis quando a nota é tirada.
- CorrigidoO formulário de entrada podia ficar em “Verificando” para sempre. O servidor respondia o tempo todo; uma conexão caída deixava o botão travado, sem mensagem e sem saída a não ser recarregar.
- RemovidoO Tailwind, e quatro componentes órfãos. Nada no app usava mais uma classe utilitária.
O Índice de Recusas deixa de ser ilustrativo
- AlteradoO Índice de Recusas lê o registro. Embaixo de um título sobre publicar as nossas recusas havia uma tabela de porcentagens inventadas, com o rodapé “Distribuição ilustrativa”. Era a única parte da página que argumentava contra si mesma. A primeira leitura real foi de 72 recusas em 151 empresas, cada uma com a frase escrita quando o veredito foi dado.
- AdicionadoEnriquecimento, redação e uma fila de revisão. Um veredito tirado do site da própria empresa vence o veredito tirado da bio dela: 79 aprovações provisórias viraram 5, com 16 domínios mortos e 6 coincidências de nome entre as baixas. Uma aprovação derrubada é gravada de volta como recusa, então o Índice de Recusas fica mais honesto conforme o pipeline roda, em vez de se afastar dele.
- AdicionadoO e-mail de entrada sai sob um teto autoimposto de 40 envios por hora, reservado antes do envio e não contado depois. O jeito realista de perder uma caixa de e-mail não é o uso legítimo e constante, é um laço de repetição às 3 da manhã.
- CorrigidoDois endpoints de leitura respondiam a chamadas anônimas e devolviam até 500 linhas do registro para qualquer cliente que a URL nomeasse. Os dois estão atrás da tranca do painel agora, e o cliente vem da sessão, e não da query string.
- CorrigidoA demonstração respondia sobre empresas conhecidas de memória em vez de ir olhar. Um domínio voltou completo com zero buscas e zero requisições, enquanto a página ao lado diz que a demonstração realmente vai lá e procura. Os dois prompts agora carregam um piso, e o texto sobre o tempo foi corrigido junto: “cerca de 40 segundos” virou um ou dois minutos, que é o que ela de fato leva.
- AlteradoA demonstração roda em um modelo fixado, com um ajuste de esforço deliberado, em vez de herdar o que a ferramenta traz de fábrica. No esforço padrão, uma execução gastou 203 segundos, esgotou o orçamento de turnos e não devolveu nada, por quase três vezes o custo da execução que deu certo em 73.
- AdicionadoAs falhas da demonstração são diferenciadas. Cota esgotada, modelo sobrecarregado, tempo esgotado e executor não configurado colapsavam em uma única mensagem que soava como se o visitante tivesse digitado um domínio ruim.
- AdicionadoOs limites de taxa, os orçamentos de execução e o disjuntor sobrevivem a um deploy. Eles moravam na memória, então subir uma mudança distribuía uma cota nova e esquecia toda execução já em andamento.
- AdicionadoAs execuções da demonstração são registradas, para que as afirmações daquela página possam ser conferidas contra o que ela realmente fez. O endereço do visitante passa por hash com sal e nunca é armazenado: nada aqui precisa identificar ninguém, só contar.
Primeiro commit, e as recusas viram registro
- AdicionadoA Knockwire, renomeada de delvebase no dia em que começou. O produto não é a lista que ele produz. É a lista que ele recusa, e o motivo anexado a cada recusa.
- AdicionadoO registro de leituras. Toda empresa olhada é guardada, aprovada ou não, com o resultado, o motivo da recusa e um link de evidência que uma pessoa pode abrir. Apagar uma empresa recusada destruiria a evidência sobre a qual este produto se apoia, então nada é apagado.
- AdicionadoDescoberta. Cinco jeitos de encontrar empresas foram medidos contra endpoints ao vivo e um venceu: ler o que as organizações escrevem sobre si mesmas devolveu 1.171 organizações com site a partir de 136 consultas, das quais 186 se qualificaram. Publicar um scraper é comportamento de fornecedor. Escrever “plataforma de inteligência de preços” na própria bio é comportamento de compradora, e o primeiro filtro inteiro se apoia em distinguir os dois.
- AlteradoA filtragem de fornecedores saiu da descoberta e foi para a etapa de julgamento. Concorrentes eram descartados em silêncio, então nunca chegavam ao registro, e uma recusa que ninguém pode auditar não é evidência.
- CorrigidoUm concorrente chegou à lista de qualificadas na primeira rodada ao vivo. A lista de exclusão de fornecedores tinha dez nomes e precisava de trinta. Essa é a pior falha que este produto já teve, e ela fica registrada aqui em vez de ser consertada em silêncio.
- AdicionadoA resolução de contato, que nunca chuta. Um formulário de contato publicado é preferido a um endereço, porque um formulário é uma porta que a empresa abriu para esse fim. Um endereço de função só é usado quando a empresa realmente o publica. Não há permutação de nome.sobrenome nem inferência de padrão, e o robots.txt é lido antes de qualquer requisição.
- AdicionadoO site, os preços, e os termos, a privacidade e a política de reembolso.
- AdicionadoA demonstração ao vivo no site público, que roda contra qualquer domínio que o visitante digitar. Ela é confinada, e não confiada: duas ferramentas liberadas e todo o resto negado, um diretório de trabalho vazio, nenhum acesso ao nosso ambiente, e as páginas obtidas tratadas como dados, e não como instruções.
- CorrigidoTrês jeitos de abusar dessa demonstração, todos demonstrados contra a produção e não teorizados. Duas das três ações dela não eram medidas, o limite por visitante podia ser contornado com um cabeçalho, e nada limitava quantas execuções podiam estar em andamento ao mesmo tempo.
- AdicionadoO registro entrou no ar em um banco de dados real na mesma noite. Primeira rodada: 60 empresas lidas, 36 qualificadas, 24 recusadas, cada recusa carregando o seu motivo e o seu link de evidência.