next-jsreactaitransparencia
Clariscore.eu Índice de transparencia para ayuntamientos (SaaS)
By Noel Barral

- Published on
- Duración
- 4 meses
- Rol
- Tech Lead & Product (Next.js 14 + Auditoría de datos)
- Stack
- Next.js 14 · TailwindCSS · PostgreSQL · Supabase · Playwright · OpenAI API

¿Por qué nace Clariscore?
Muchos ayuntamientos afirman ser “transparentes”, pero no existe un indicador operativo y continuo que mida si su portal de transparencia:
- publica lo obligatorio,
- está actualizado,
- es accesible y rastreable,
- ofrece datos abiertos reutilizables, y
- facilita la rendición de cuentas a la ciudadanía.
Clariscore es un índice vivo que audita portales municipales de forma automatizada y les asigna una puntuación 0–100, desglosada por dimensiones y evidencias verificables. Piensa en un PageSpeed de la transparencia + guía/ranquin con sello y premios.
Qué mide el Clariscore (dimensiones)
- Cumplimiento legal (publicaciones obligatorias: organización, contratos, presupuestos, actas, retribuciones…).
- Actualización (frecuencia de publicación y caducidad de la información).
- Accesibilidad (WCAG, contraste, etiquetas, PDF accesibles).
- Indexabilidad (robots, sitemap, metadatos, enlaces rotos).
- Datos abiertos (formatos reutilizables, licencias, API).
- Usabilidad/Búsqueda (navegación, buscador, tiempos de respuesta).
- Contratación y subvenciones (trazabilidad y descarga).
Cada hallazgo se respalda con evidencias (URLs, capturas, hashes) y un rationale IA explicable.
Problemas que resuelve
| Problema actual | Cómo lo soluciona Clariscore |
|---|---|
| Declaraciones genéricas de “portal cumplidor” sin pruebas | Score 0–100 con evidencias y ficha de incumplimientos por norma/categoría |
| Desactualización crónica y enlaces rotos | Monitoreo periódico + alertas y histórico temporal por indicador |
| PDFs no accesibles / datos en formatos cerrados | Auditoría de accesibilidad + validador de formato y licencia |
| Dificultad para comparar ayuntamientos | Ranking por provincia/tamaño y benchmarks por dimensión |
| Falta de incentivos para mejorar | Sello Clariscore y Premios Clariscore anuales por categoría |
| Imposible integrar resultados en sistemas externos | API/Export (JSON/CSV) y webhooks para portales municipales |
Módulos principales
| Módulo | Descripción breve | Estado |
|---|---|---|
| Crawler & Evidence | Rastreo con Playwright; captura evidencias (URL, DOM, hash, screenshot) | ✅ |
| Rules Engine | Reglas de cumplimiento por norma/categoría (checklists parametrizables) | ✅ |
| Accessibility Audit | WCAG automática (aria, contraste, headings, PDFs etiquetados) | ✅ |
| Open Data Checker | Detección de formatos, licencias, actualización y presencia de APIs | ✅ |
| Index & Links | Sitemap/robots, enlaces rotos y canonicalización | ✅ |
| AI Extractor | Extracción asistida (actas, presupuestos, contratos) con explicabilidad | 🧪 |
| Ranking & Badges | Cálculo de Clariscore global y por dimensión + emisión de Sello Clariscore | ✅ |
| Dashboard & Reports | Panel comparativo, evolución temporal y informe PDF/JSON descargable | ✅ |
| Notifications | Alertas por caída de secciones o cambios críticos | 🔄 |
| Public API | Consulta del índice, evidencias y histórico | 🔄 |
Demo del proyecto
La demo pública muestra:
- Ranking Clariscore por provincia y tamaño del municipio.
- Ficha de cada ayuntamiento con score por dimensión, evolución 90 días y evidencias.
- Checklist de cumplimiento (qué hay, qué falta y por qué).
- Simulación de impacto: “si solucionas X e Y, +12 puntos en el índice”.
Próximos pasos de la demo: publicar dataset abierto con los 50 primeros municipios y habilitar Sello Clariscore embebible.
Arquitectura técnica
graph LR;
Scheduler[[Scheduler]]
Scheduler --> Crawler[Playwright Crawler]
Crawler --> Evidence[(Storage: evidencias, capturas)]
Crawler --> Rules[Rules Engine]
Rules --> Score[Clariscore Calculator]
Crawler --> AI[AI Extractor (OpenAI)]
AI --> DB[(PostgreSQL)]
Score --> DB
Evidence --> DB
DB --> Realtime[Supabase Realtime]
Realtime --> App[Next.js 14 (App Router)]
App --> API[/Public API & Webhooks/]