slopmapp: el mapa de los carteles hechos con ia en cataluña

¿te gustan los carteles hechos con ia? si no, en slopmapp.cat puedes marcar dónde has visto uno.
es un mapa que abrí en septiembre. haces una foto del cartel, el punto queda donde lo has visto y el informe se ve al momento. cada informe es una foto y un punto en el mapa, sin puntuaciones ni rankings de negocios. también está es.slopmapp.com, en castellano y abierto a toda españa, pero es el mismo mapa con los mismos informes. a 6 de octubre había 38, todos en cataluña.
qué carteles hechos con ia hay en el mapa
el grupo más grande son bares, restaurantes, cafeterías y sitios de comida para llevar, 14 de los 32 informes que no son de instituciones. la clasificación es mía, a partir del nombre y la foto, porque un informe no tiene ningún campo de categoría. elegir una cuesta tiempo cuando estás en la calle con el móvil en la mano, y no cambia nada de cómo se modera o se resuelve.
los otros 6 son de instituciones públicas:
- en mollerussa, dos campañas del ayuntamiento, una sobre las cacas de perro y la otra sobre dejar muebles en la calle, y un folleto sobre patinetes. estos tres los subí yo
- en viladecavalls, el cartel oficial de la fiesta mayor. es la misma imagen que la portada del programa que publica el ayuntamiento
- en la universitat de lleida, la infografía del calendario académico y el cartel de un acto de la facultad de letras

el mapa no dice en ningún sitio que una imagen esté hecha con ia. dice que alguien ha informado de que está hecha con ia, porque detrás no hay ningún detector. la página /guia explica las pistas que se ven desde la acera, como los seis dedos o el texto que no se puede leer, y también que ninguna de ellas lo demuestra.
un catálogo, no una picota
en el documento de visión del proyecto hay una frase que decide casi todo. el tema es la imagen, nunca el propietario. un restaurante pequeño que compró un cartel barato en una imprenta no ha hecho nada malo, y el mapa no puede dar a entender lo contrario. en la práctica:
- no hay puntuaciones ni rankings de los peores negocios.
- el rojo no puede pintar nunca un negocio ni un informe, y eso no depende de la revisión de código. una regla de lint,
no-red-on-business, falla si un componente del mapa o de un informe usa una clase roja. el rojo queda para las acciones destructivas y los errores de formulario. - el negocio es contexto opcional. el punto es donde se vio el cartel, que no siempre es la puerta del negocio. desde el 5 de octubre, si eliges un negocio y no tienes ningún otro punto, el informe va al negocio, porque la mayoría de carteles están en los escaparates. el gps de la foto o un punto elegido en el mapa siempre tienen prioridad.
- desde el 20 de septiembre puedes darle me gusta a un informe y quitarlo, pero no decide nada. no cambia el estado ni el orden del feed o del mapa, que siguen siendo cronológicos. el número es público. quién lo ha dado, no.
- un negocio puede impugnar un informe sin cuenta, en /ets-el-negoci. si discute que la imagen esté hecha con ia, por defecto el informe se oculta. un solo punto vale poco, y discutirlo cuesta más.
cómo se vacía el mapa
la mayoría de mapas de cosas malas solo acumulan. este también se puede vaciar, y es la parte a la que más vueltas le di.
cualquier persona con cuenta puede responder «sí, encara hi és» (sí, sigue ahí) o «ja no hi és» (ya no está). cada persona responde una vez por informe, y la respuesta vale 90 días. cuando los «ja no hi és» superan a los «encara hi és» por dos, el informe queda resuelto. se queda en el mapa, dibujado como resuelto, porque el mapa también tiene que enseñar los carteles que ya han quitado.

por qué dos lo explica el comentario que acompaña a la constante:
// how far the people saying gone have to outnumber the people saying present
// before a visible entry turns resolved. one person is a mistake or a grudge,
// not a fact about the street; two is the smallest number that is a small
// crowd rather than a single say-so.
export const RESOLUTION_THRESHOLD = 2;
funciona en los dos sentidos. un «encara hi és» después de resolverlo puede volver a abrirlo, sin ningún moderador. con dos cuentas se puede hacer trampa, y está asumido. el premio es un punto dibujado como resuelto, no borrado, y construir defensas contra eso en un mapa de carteles no compensa.
una foto nueva del mismo cartel vale más que cualquier respuesta, y cuando llega, todas las anteriores dejan de contar. y un informe que nadie ha visto en 90 días se lee como caducado. eso no se guarda en ningún sitio. la api lo calcula cada vez que sirve el informe, a partir de la última fecha en que alguien lo vio, así que no hay ninguna tarea programada ni ningún cambio de estado que deshacer. la idea del reloj de 90 días viene de la app streetcomplete y de la etiqueta check_date de openstreetmap, y los dos botones vienen de waze.
eso es la teoría. a 8 de octubre, ninguno de los 38 informes está resuelto, y solo uno tiene un «ja no hi és».
las fotos, sin la ubicación de casa
las fotos del móvil llevan la posición gps en los metadatos. la api no guarda el original. lo descodifica, lo gira según la orientación y lo vuelve a codificar a 320, 640 y 1.280 píxeles, en avif y en webp. como rehace los píxeles, el exif desaparece con más garantías que editándolo con una librería, y un original de 4 a 8 mb no se puede filtrar si no existe. las seis versiones suman unos 180 kb.
el botón «on soc ara» (dónde estoy ahora) solo aparece mientras la foto es reciente, de hace menos de cinco minutos, para que un borrador abierto en casa horas después no coja la posición de casa. las caras no se difuminan. la pantalla de subida pide que fotografíes el cartel y no a la gente, y es una limitación conocida. tampoco hay ningún filtro automático de contenido. para publicar hace falta una cuenta, y la cola de moderación se lee cada día.
saber de dónde viene la gente
la mayoría de visitas han llegado desde reddit, y suelen ir a un informe concreto que alguien ha enlazado allí, no al mapa. lo que circula es el informe, y a menudo por canales que no dicen de dónde viene la visita: un enlace pegado en whatsapp no envía referrer.
los enlaces que se comparten desde el mapa llevan parámetros utm. sin utm_source=share, esas visitas saldrían como directas. los correos que envié a ilustradores llevan una dirección corta, /i, que añade los parámetros al redirigir. un enlace con un texto visible que lleva a otra url tiene la forma de un correo de phishing, y los filtros lo puntúan así.
tres errores que no avisaban
a mediados de septiembre, los informes enviados desde iphone llegaban vacíos. webkit guarda un Blob en indexeddb como una referencia al fichero que ha escrito la cámara, no como una copia. cuando ios borra ese fichero, el registro sigue ahí e incluso el tamaño se lee bien, pero el contenido vuelve vacío. chromium copia los bytes, y por eso no fallaba en ningún sitio donde lo probaba. ahora la cola guarda un ArrayBuffer.
el 1 de octubre reduje el formulario de informe a dos pantallas, la de la cámara y la de enviar. hasta el 3 de octubre, la analítica contó tres fotos añadidas y ningún «envia» (enviar), cuando las dos semanas anteriores se habían enviado 13 informes de 20 fotos. sin punto, el botón quedaba desactivado y nada decía por qué. lo hice siempre clicable, con un mensaje que decía qué faltaba, y la noche del 4 dos sesiones desde iphone lo pulsaron 18 veces sin abrir nunca el mapa. ahora es el propio botón el que abre el mapa.
cada merge a main recreaba todos los contenedores, y durante un minuto la web respondía con errores 5xx. el 13 de septiembre googlebot pasó por /cerca (la página de búsqueda) a los 48 segundos de una de esas ventanas. coolify no hace despliegues graduales de un servicio compose, así que ahora los despliegues de una misma mañana se agrupan en el último. además, el paso de deploy no da nada por bueno hasta que /health responde con el sha del commit que acaba de construir. el webhook de coolify responde antes de recrear nada, y una comprobación de «responde algo» habría pasado contra la versión que se estaba sustituyendo.
lo que el mapa no enseña
la mayoría de informes están en lleida, 21 de los 38, y 14 los he subido yo, 10 en la ciudad de lleida y 4 en mollerussa. el mapa enseña dónde hay alguien mirando, no dónde hay más.
el primer commit del proyecto, del 6 de septiembre, ya decía que el riesgo no era técnico, sino un mapa frío. un mapa de cataluña con cuarenta puntos parece abandonado, y nadie vuelve a informar en una sala vacía. un mes después, tenía 38.