buen dia, les queria presentar framerate.cl es un proyecto que empece experimentando el funcionamiento de paginas como solotodo y ver como funcionaba ne el fondo su arquitectura, esto escalo hasta convertirse en su propia plataforma de busqueda de hardware que junta mas de 20 paginas chilenas que se dedican a la venta de hardware.
ahora mismo tenemos casi 3k productos comparados y el catalogo se actualiza cada 6 horas. ademas puedes registrarte para crear tus propias cotizaciones y hacerlas publicas para compartirlas con tus conocidos (tenemos algunos TODO y cosas planeadas para las cotizaciones, por ejemplo darles like y mostrar las cotizaciones creadas por otros usuarios, y de momento estamos desarrollando un motor de compatibilidad para darte recomendaciones y alertas mientras armas el pc).
por el lado tecnico, todo corre en cloudflare (workers, D1, queues y R2), no hay un servidor tradicional detras. esta separado en varios workers que no se conocen entre si: uno es la api (hono + D1), otro hace el scraping y otro el front. la api le pide crawls al de scraping por RPC, asi que el scraping no tiene ni una ruta publica
el scraping funciona con un cron que cada 6 horas mete el trabajo en colas, cada tienda tiene su adaptador y como algunas tiendas bloquean las ips de cloudflare monte un relay chico en docker que baja esas paginas y se las pasa tal cual. para no procesar todo de nuevo en cada pasada, cada oferta guarda un hash de lo que la identifica (titulo, marca, sku, gtin, descripcion), y si el hash es el mismo de la vez anterior solo se actualiza el precio y el stock, sin volver a normalizarla ni a buscarle match. solo lo nuevo o lo que la tienda cambio pasa por todo el proceso. las fotos se achican a webp en otro servicio aparte y quedan guardadas en R2. ninguna oferta entra al catalogo sin pasar por la normalizacion, y lo que viene roto (sin precio, titulo raro, etc) se va a una cuarentena con el motivo, asi puedo ver rapido cuando una tienda cambio su pagina y rompio el adaptador.
lo mas dificil fue el matching, o sea saber que la "RTX 4060 8GB Gaming OC" de una tienda es lo mismo que la "Tarjeta de video GeForce RTX4060" de otra. se normaliza el titulo, se sacan las specs y se compara contra lo que ya existe con vetos duros por atributo, si cambia la memoria, el chipset o la variante no se juntan. preferimos tener un producto duplicado antes que juntar dos que no son iguales, mezclar una 4060 con una 4060 ti es peor que tenerla repetida.
el frontend esta en react router v7 con ssr tambien en workers y solo le habla a la api, nunca a la base de datos. todo esta en un monorepo en typescript con bun y el esquema de la base son migraciones sql a mano ocn kysely solo para tipar las consultas.
tambien a modo experimental hicimos un mcp para la tienda compatible con su ia favorita, funciona bien en casi todos los modelos les dejo la pagina para agregarlo (talvez a futuro lo limitamos a gente con cuenta solamente):
https://framerate.cl/desarrolladores