El autor documenta cómo dotó a su blog estático de búsqueda semántica enteramente en el cliente, sin servidor ni API externas. La motivación era cerrar la brecha entre una búsqueda por palabras clave que entiende poco y corre en cualquier sitio, y una búsqueda semántica potente pero incapaz de ejecutarse cerca de un sitio estático.
La opción evidente, ejecutar un sentence-transformer como all-MiniLM-L6-v2 mediante Transformers.js sobre WebAssembly, ronda los 23,45 MB de descarga y es excesiva para un blog con 14 entradas. La alternativa elegida es la familia model2vec (modelos "potion"): tablas estáticas obtenidas por destilación de un transformador real, donde el "forward pass" se reduce a tokenizar, buscar un vector por token, promediar y normalizar. potion-base-8M alcanza el 81 % de la calidad de MiniLM con una tabla de 29.528 tokens por 256 dimensiones en float32.
El artículo detalla después cómo se comprimió esa tabla de unos 30 MB hasta unos 4 MB cuantizándola a int8, cómo construir el índice troceando cada post en fragmentos de ~600 caracteres (clave porque el promediado diluye términos distintivos), y qué trampas evitar: una caché de embeddings que resultó innecesaria con tan pocos datos y un matiz sobre la cuantización (los stopwords emergen de la geometría de los vectores, pero una escala global bastó con una pérdida de similitud coseno agregada de 0,9998).
El proyecto sirve como guía práctica para quien quiera añadir búsqueda semántica a sitios estáticos sin infraestructura de servidor.
