Saltar al contenido
Volver al inicio
En producción2026

Qué Pinta Salta

Cinco fuentes, un solo lugar: la agenda cultural de Salta alimentada automáticamente

El problema

La oferta de eventos de Salta vive fragmentada entre cuatro ticketeras que no se hablan entre sí y, sobre todo, entre flyers de Instagram — donde la información existe como imagen, no como dato.

Para el usuario: no hay un solo lugar donde ver qué hay esta noche. Para el organizador: su evento aparece disperso o directamente no aparece.

Cargar todo a mano no escala. Ese era el problema real.

La decisión que define el sistema

El modelo extrae.carril del modelo
El código decide.carril determinista

Gemini 2.5 Flash lee el flyer y el caption y devuelve un JSON estructurado. Pero no publica nada. La compuerta es un filtro determinista en TypeScript que valida cuatro campos por forma —título, fecha, hora, lugar— y decide si el evento sale al aire o cae a revisión humana.

Esto es deliberado. Un LLM que se equivoca con confianza es más peligroso que uno que falla. Al poner la decisión en código, el criterio es auditable, versionable y explicable — y cuando la extracción falla, el flyer no se pierde: entra a la cola de revisión con el caption original como contexto.

Cómo funciona

Fuentes estructuradasNorteTicket · VamosgobEntradaUno · AlPogoInstagramflyer + captionNormalizacióncódigo TypeScriptGemini 2.5 Flashextrae JSONCompuertafiltro deterministavalida 4 camposPublicadodedup JaccardRevisióncola humanaFuentes estructuradasNorteTicket · VamosgobEntradaUno · AlPogoNormalizacióncódigo TypeScriptInstagramflyer + captionGemini 2.5 Flashextrae JSONCompuertafiltro deterministavalida 4 camposPublicadodedup JaccardRevisióncola humana
El color acento marca el único carril donde interviene el modelo.

Abrí cualquier captura para verla a tamaño completo

Home de Qué Pinta Salta: el evento destacado de la portada es un concierto de la Orquesta Sinfónica de Salta con fecha, sala y precio, rotulado "Evento importado automáticamente desde entradauno" — el pipeline cargó la ficha entera sin intervención manual.
Grilla de categorías con el contador de eventos por sección y el interruptor "Mostrar flyers de redes", que es el carril de Instagram visto desde el lado del usuario: los eventos extraídos de flyers conviven con los de las ticketeras.
Mi Radar Salteño: configuración de las alertas por correo, con la frecuencia de envío y la casilla de destino.
Mi Radar Salteño: selección de categorías de interés y de organizadores de Instagram seguidos, que definen qué eventos entran en cada envío.

Cinco fuentes activas. Cuatro devuelven datos estructurados y se normalizan con código. Solo Instagram pasa por el LLM, porque es la única donde el dato vive como imagen.

Los eventos que aparecen en varias fuentes no se duplican: un algoritmo de similitud Jaccard acotado a mismo lugar y mismo día los fusiona, conservando todos los links de compra y el precio más bajo.

J(A,B)=|A ∩ B||A ∪ B|

Similitud de conjuntos entre títulos tokenizados, acotada a mismo lugar y mismo día.

StackNext.js 16 · TypeScript · Supabase (RLS) · Gemini 2.5 Flash · Apify · Tailwind 4 · Framer Motion · Resend · Vercel