Español
Changelog
Todos los cambios de Knockwire, del más reciente al más antiguo, agrupados por el día en que salieron. Aquí no hay números de versión porque no hay lanzamientos: el producto se despliega de forma continua, así que la fecha es la única etiqueta honesta. La lista empieza en el primer commit, el 29 de julio de 2026. El mantenimiento de rutina queda fuera. Todo lo que cambió lo que el producto hace, o lo que afirma sobre sí mismo, está adentro.
Cinco idiomas, y ningún buzón publicado
- AgregadoLas páginas de marketing, los tres documentos legales y el blog ahora existen en japonés, portugués de Brasil, español y francés además de inglés. Cada página es canónica de sí misma, con hreflang recíproco. Una página que no se ha traducido no tiene ruta ni entrada de hreflang, porque un enlace que promete un idioma que no puede servir es peor que ningún enlace.
- AgregadoEl blog, los textos. Catorce piezas largas, unas 19,000 palabras en inglés, y las catorce en los cinco idiomas: 70 publicaciones. Los gráficos se declaran como datos y no como imágenes, así que una publicación traducida obtiene un gráfico traducido.
- AgregadoEl panel se lee en cinco idiomas, 246 cadenas cada uno. El idioma viene de la cuenta, así que cambiarlo aplica en todos los dispositivos a la vez y no en el siguiente inicio de sesión.
- AgregadoUn formulario de contacto. Cada mensaje llega a una persona, y las direcciones viven en el servidor, donde nada puede leerlas.
- QuitadoSeis direcciones de correo publicadas por el sitio, y una séptima en los datos estructurados, que era la peor: legible por máquinas y servida en cada página. Un producto construido sobre la premisa de que leer páginas públicas a escala es fácil no debería sorprenderse cuando nos pasa a nosotros.
- CorregidoTodas las páginas se servían como inglés. Un lector de pantalla leía en voz inglesa una página en japonés, y a los buscadores se les decía lo mismo.
- CorregidoCompartir cualquier página producía la tarjeta de la página de inicio en inglés. Las 101 páginas habían heredado una sola tarjeta social, así que una política de privacidad en japonés se anunciaba con el texto de la página de inicio.
- CorregidoUna URL sin coincidencia tumbaba el servidor en lugar de devolver 404. Esa era la causa de los 502 intermitentes y de los estilos rotos que la gente reportaba junto con ellos.
- CorregidoSeguir un enlace a una sección de la página de inicio desde otra página llevaba a una pantalla en blanco. El script de interacción no se conectaba después de una navegación del lado del cliente, lo que también había dejado muertos el acordeón, los contadores y la demostración en vivo.
- CorregidoLa única cifra en vivo de la página de inicio se agrupaba según la configuración regional del servidor y no la del lector. Ahora el francés muestra 4 182 y el portugués de Brasil 4.182, coincidiendo con las cifras fijas que tienen al lado.
- CorregidoDos enlaces del marco del sitio apuntaban a rutas que no existían, y el enlace del pie de página al blog llevaba a un lector francés al índice en inglés.
Cuentas, un remitente verificado y la etapa de envío
- AgregadoInicio de sesión con un código de seis dígitos por correo, o con Google. No hay ninguna columna de contraseña en toda la base de datos, y una columna que no existe no se puede filtrar.
- AgregadoNada se envía bajo una dirección que un cliente no haya probado que le pertenece. El envío queda condicionado a un registro DNS publicado bajo el dominio. Un enlace de confirmación prueba el control de un buzón, y un archivo en un servidor web prueba el control de un servidor web; ninguna de las dos cosas es la afirmación que se está haciendo. Las direcciones de correo gratuitas se rechazan de entrada con un mensaje propio.
- AgregadoLa etapa de envío. Un mensaje aprobado se prepara, se ensaya contra el formulario real y solo entonces se publica. Se convierte en un toque cuando el formulario lo acepta, y no antes. El ensayo es lo predeterminado, un formulario detrás de un CAPTCHA se rechaza en lugar de resolverse, y ninguna ruta de código reintenta una petición que quizá ya salió: no existe condición de red bajo la cual una segunda carta a un desconocido sea la reparación correcta.
- AgregadoDos fuentes de descubrimiento. Un directorio de empresas de datos, donde el requisito de entrada es justo el perfil que buscamos: 28 de 28 dominios del primer barrido resolvieron, contra alrededor de cuatro de cada cinco provenientes de biografías. Y el directorio de Y Combinator, la única fuente que dice en voz alta si una empresa sigue operando. 1,861 de sus 6,108 empresas ya fueron adquiridas o están inactivas.
- AgregadoUn cliente puede nombrar las empresas a las que ya les vende, y excluir a quien no quiera que se contacte. Las dos listas habían estado vacías desde que se escribió la regla que las lee, y por eso uno de sus doce clientes principales actuales había sido investigado como prospecto frío.
- AgregadoUn perfil de remitente, para que un formulario que pide un teléfono o un país tenga dónde buscarlo. Nada en esa página se infiere. Un número de teléfono escrito en el formulario de contacto de un desconocido es una afirmación sobre un negocio real, así que viene de una persona o no va.
- CambiadoEl panel muestra el registro real. Había estado mostrando datos de prueba escritos antes de que existiera el pipeline: más movido que la verdad, y con cada cifra inventada.
- CambiadoCada empresa calificada obtenía exactamente 20 puntos. Tres de los cuatro términos del puntaje no podían variar en el momento en que se calculaba, así que la cola era el orden de inserción disfrazado de número. Ahora tiene seis términos, todos conocibles cuando se toma el puntaje.
- CorregidoEl formulario de inicio de sesión podía quedarse en “Verificando” para siempre. El servidor respondía todo el tiempo; una conexión caída dejaba el botón clavado, sin mensaje y sin más salida que recargar.
- QuitadoTailwind, y cuatro componentes huérfanos. Ya nada en la aplicación usaba una clase de utilidad.
El Índice de Rechazos deja de ser ilustrativo
- CambiadoEl Índice de Rechazos lee el registro. Bajo un encabezado sobre publicar nuestros rechazos había una tabla de porcentajes inventados, con el pie “Distribución ilustrativa”. Era la única parte de la página que argumentaba en contra de sí misma. La primera lectura real fue 72 rechazos de 151 empresas, cada uno con la frase escrita cuando se llegó al veredicto.
- AgregadoEnriquecimiento, redacción y una cola de revisión. Un veredicto tomado del propio sitio de una empresa se impone al tomado de su biografía: 79 aprobaciones provisionales quedaron en 5, con 16 dominios muertos y 6 coincidencias de nombre entre las bajas. Una aprobación revertida se escribe de vuelta como rechazo, así que el Índice de Rechazos se vuelve más honesto conforme corre el pipeline en lugar de alejarse de él.
- AgregadoEl correo de inicio de sesión sale bajo un tope autoimpuesto de 40 envíos por hora, reservado antes del envío y no contado después. La forma realista de perder un buzón no es el uso legítimo y constante, es un bucle de reintentos a las 3 de la mañana.
- CorregidoDos endpoints de lectura respondían a llamadas anónimas y devolvían hasta 500 filas del registro del cliente que nombrara la URL. Los dos están ahora detrás del bloqueo del panel, y el cliente viene de la sesión y no de la cadena de consulta.
- CorregidoLa demostración respondía de memoria sobre empresas conocidas en lugar de ir a mirar. Un dominio volvió completo con cero búsquedas y cero descargas, mientras la página al lado dice que la demostración de verdad va y mira. Ahora los dos prompts llevan un mínimo, y el texto sobre los tiempos se corrigió con eso: “unos 40 segundos” pasó a un minuto o dos, que es lo que en realidad tarda.
- CambiadoLa demostración corre sobre un modelo fijado y con un nivel de esfuerzo deliberado, en lugar de heredar el que traiga la herramienta. Con su esfuerzo por defecto, una ronda gastó 203 segundos, agotó su presupuesto de turnos y no devolvió nada, por casi el triple del costo de la ronda que terminó bien en 73.
- AgregadoLas fallas de la demostración se distinguen entre sí. Un cupo agotado, un modelo sobrecargado, un tiempo de espera vencido y un ejecutor sin configurar se agrupaban antes en un solo mensaje que se leía como si el visitante hubiera escrito mal el dominio.
- AgregadoLos límites de frecuencia, los presupuestos de ronda y el cortacircuitos sobreviven a un despliegue. Vivían en memoria, así que publicar un cambio repartía un cupo nuevo y olvidaba cada ronda que ya estaba en curso.
- AgregadoLas rondas de la demostración quedan registradas, así que las afirmaciones de esa página se pueden contrastar con lo que de verdad hizo. La dirección del visitante se convierte en un hash con sal y nunca se almacena: aquí nada necesita identificar a nadie, solo contarlos.
Primer commit, y los rechazos se vuelven registros
- AgregadoKnockwire, renombrado desde delvebase el día en que empezó. El producto no es la lista que produce. Es la lista que rechaza, y el motivo adjunto a cada rechazo.
- AgregadoEl registro de lecturas. Cada empresa mirada se conserva, haya pasado o no, con su resultado, su motivo de rechazo y un enlace de evidencia que una persona puede abrir. Borrar una empresa rechazada destruiría la evidencia sobre la que se apoya este producto, así que no se borra nada.
- AgregadoDescubrimiento. Se midieron cinco formas de encontrar empresas contra endpoints en vivo y ganó una: leer lo que las organizaciones escriben sobre sí mismas devolvió 1,171 organizaciones con sitio web a partir de 136 consultas, de las cuales 186 calificaron. Publicar un scraper es conducta de proveedor. Escribir “plataforma de inteligencia de precios” en la propia biografía es conducta de comprador, y todo el primer filtro se apoya en distinguir esas dos cosas.
- CambiadoEl filtrado de proveedores salió del descubrimiento y pasó al paso de criterio. Los competidores se descartaban en silencio, así que nunca llegaban al registro, y un rechazo que nadie puede auditar no es evidencia.
- CorregidoUn competidor llegó a la lista de calificadas en la primera ronda en vivo. La lista de exclusión de proveedores tenía diez nombres y necesitaba treinta. Esa es la peor falla que ha tenido este producto, y queda registrada aquí en lugar de repararse en silencio.
- AgregadoResolución de contacto, que nunca adivina. Un formulario de contacto publicado se prefiere sobre una dirección, porque un formulario es una puerta que la empresa abrió para este fin. Una dirección de área se usa solo cuando la empresa de verdad la publica. No hay permutación nombre.apellido ni inferencia de patrones, y robots.txt se lee antes de cualquier descarga.
- AgregadoEl sitio, los precios, y los términos, la privacidad y las políticas de reembolso.
- AgregadoLa demostración en vivo del sitio público, que corre contra el dominio que escriba el visitante. Está encajonada en lugar de gozar de confianza: dos herramientas permitidas y todo lo demás denegado, un directorio de trabajo vacío, sin acceso a nuestro entorno, y las páginas obtenidas tratadas como datos y no como instrucciones.
- CorregidoTres formas de abusar de esa demostración, todas demostradas contra producción y no solo planteadas en teoría. Dos de sus tres acciones no tenían medición, el límite por visitante se podía saltar con una sola cabecera, y nada ponía tope a cuántas rondas podían estar en curso a la vez.
- AgregadoEl registro entró en operación sobre una base de datos real esa misma noche. Primera ronda: 60 empresas leídas, 36 calificadas, 24 rechazadas, cada rechazo con su motivo y su enlace de evidencia.