WallpaperMachine
The wallpapers you love. A new home on your Mac.
Madrid, mejor en compañía. Planes y actividades con datos abiertos de la Comunidad de Madrid.
Translation pending
LifestyleTypeScript · PLpgSQLGitHub @irenepptOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Madrid, mejor en compañía. App web (PWA, instalable en el móvil) de planes y actividades para combatir la soledad y crear comunidad en la Comunidad de Madrid, construida sobre datos abiertos.
Proyecto para el datathon DataMad 2026. 🔗 https://mimad.vercel.app
Cada plan, sitio y recomendación sale de un dataset público, y cada pantalla dice de cuál («Fuente: …», con enlace a su ficha).
| Perfil | Qué encuentra |
|---|---|
| Jóvenes y adultos (versión por defecto) | Planes cerca de casa ordenados por gustos y cercanía, filtros (gratis, accesible, cerca, por día, por intereses), mapa de planes y sitios, agenda, asistente con IA y Acompañamiento para vincularse con un familiar mayor y recomendarle planes. |
| Personas mayores, dependientes o con discapacidad (versión simplificada) | Botones grandes, un paso por pantalla, textos cortos, lectura en voz alta, «Necesito ayuda» siempre visible, «Pedir consejo» con tres toques y los planes que le recomienda su familia. Se activa con un interruptor y queda guardada en el perfil. |
| Personas extranjeras | Interruptor «Recién llegados» con las actividades de los CEPI (aprender español, trámites, empleo, convivencia), filtro «Idiomas», la app en 8 idiomas y los planes traducidos. |
| Entidades y organizaciones | Cuenta de entidad para publicar planes (con su foto), ver cuántas personas se apuntan y enviarles avisos. Se verifican cruzando su NIF con el Registro de centros de atención social. |
| Inicio | Asistente con IA | Acompañamiento | Versión simplificada | Pedir consejo | Mapa sencillo |
|---|---|---|---|---|---|
Todas las capturas, en docs/capturas/.
| Dataset | Organismo | Para qué | Actualización |
|---|---|---|---|
| Registro de centros de atención social | Comunidad de Madrid | Hogares y clubes de mayores y centros de día en el mapa; verificar el NIF de las entidades | Semanal |
| Actividades de los CEPI | Comunidad de Madrid | «Recién llegados» e «Idiomas» (personas extranjeras) | Semanal |
| Talleres de envejecimiento activo | Comunidad de Madrid | Talleres para mayores en toda la región | Mensual |
| Agenda de actividades y eventos | Ayuntamiento de Madrid | La mayoría de los planes | Diaria |
| Agenda turística (esmadrid.com) | Ayuntamiento de Madrid | Planes con foto; también da foto a los planes repetidos de la agenda | Diaria |
| Centros municipales de mayores | Ayuntamiento de Madrid | Sitios para mayores en el mapa | Semanal |
| Juntos contra la soledad | Ayuntamiento de Madrid | Talleres semanales contra la soledad | Semanal |
supabase/migrations/20261014000002_cepi_centros.sql) a partir de la web de la Comunidad de Madrid, con coordenadas de OpenStreetMap. Tampoco trae día ni tipo: en la app se dice «Durante octubre · pregunta en el centro el día y la hora», y el tipo (español, trámites…) se deduce del título.src/data/codigos-postales.json, se regenera con npm run codigos-postales). «Dónde estoy ahora» y «Ver planes en otra zona» solo se guardan en una cookie del móvil durante 3 horas.Los datasets que MiMad construye a partir de los datos abiertos (planes unificados, lugares, direcciones de los CEPI y centros de los códigos postales), en CSV y JSON con su diccionario de datos, bajo licencia CC BY 4.0:
datos/ · se regeneran con npm run exportar-datosda_*: una por dataset, tal como llega (solo lectura para la app).v_eventos y v_lugares: unifican todas las fuentes con las mismas columnas (título, fechas, lugar, coordenadas, gratis, accesibilidad, público, foto…), así la app consulta un solo sitio.mm_*: perfiles, inscripciones, vínculos de acompañamiento, recomendaciones, notificaciones, entidades y sus planes.npm run comprobar con usuarios de prueba reales.scripts/ingest descarga cada fuente, la normaliza (coordenadas UTM → lat/lon, HTML → texto, fechas…) y la guarda. Lo ejecuta GitHub Actions (.github/workflows/ingest.yml, horas en UTC): agenda cada día a las 04:00, agenda turística a las 04:30, atención social los domingos, CEPI / centros de mayores / Juntos contra la soledad los lunes y talleres el día 1 de cada mes. Si una fuente falla, se conservan los datos anteriores y el error queda en da_fuentes.Solo en el servidor (la clave nunca llega al navegador) y solo con la sesión iniciada; con límite de uso por persona y hora.
/asistente) y «Pedir consejo» (versión simplificada): se buscan planes reales cerca de la persona y Claude elige de esa lista los que mejor encajan y explica por qué. No puede inventar planes: solo puede devolver ids de la lista. Lo que se pide manda sobre los gustos del perfil (si le gusta la música y pide deporte, recomienda deporte). Sin clave o si falla, elige con reglas sencillas.ANTHROPIC_MODEL solo admite Haiku o Sonnet. Los textos fijos de la app se tradujeron una vez con Sonnet y están en el repositorio.Junto a la campana se elige idioma: español, inglés, francés, árabe, rumano, chino, ucraniano, portugués o alemán. Los textos fijos de la versión por defecto están en src/lib/i18n/mensajes.json, con el texto en español como clave (t("Gratis") → «Free»). Al añadir textos nuevos con t("…"), npm run traducir-textos los encuentra en el código y traduce solo lo nuevo (necesita ANTHROPIC_API_KEY).
Necesitas Node.js 20+ y un proyecto gratuito de Supabase (mejor en una región de Europa).
Instala las dependencias: npm install
En Supabase → SQL Editor, ejecuta en este orden los archivos de supabase/migrations/ (cada uno crea sus tablas con sus permisos y reglas de seguridad):
| Archivo | Qué crea |
|---|---|
20261014000001_datos_abiertos.sql | Tablas da_* de los datasets y da_fuentes |
20261014000002_cepi_centros.sql | Direcciones de los 8 CEPI |
20261014000003_vistas.sql | Vistas unificadas v_eventos y v_lugares (con el filtro de privacidad) |
20261014000004_permisos_carga.sql | Permisos del script de carga |
20261015000001_tablas_app.sql | Perfiles, inscripciones, vínculos, recomendaciones, notificaciones |
20261015000002_registro_completo.sql | Datos del registro (casa, intereses, versión simplificada) |
20261016000001_limites.sql | Límites de longitud en lo que escribe la gente |
20261016000002_contar_inscritos.sql | Contador de personas apuntadas |
20261016000003_codigos_vinculo.sql | Códigos de invitación de Acompañamiento más seguros |
20261016000004_perfil.sql | Interruptor de avisos y «Borrar mi cuenta» |
20261016000005_fotos_perfil.sql | Fotos de perfil (Storage) |
20261016000006_notificaciones.sql | Avisos dentro de la app (los crea la base de datos) |
20261016000007_entidades.sql | Cuentas de entidad y sus planes |
20261016000008_mensajes_entidad.sql | Mensajes de la entidad a las personas apuntadas |
20261017000001_fotos_planes.sql | Fotos de los planes de las entidades y de la agenda turística |
20261018000001_fecha_inscripcion.sql | Día elegido al apuntarse a un plan de varios días |
Copia .env.example como y rellena los valores (Supabase → Project Settings → API). La clave de Claude (, de ) es opcional: sin ella, el asistente usa reglas y no hay traducción de planes.
| Comando | Qué hace |
|---|---|
npm run dev | App en local |
npm run build | Compila (comprueba tipos y lint) |
npm run ingest | Carga todas las fuentes de datos abiertos (o las que se pasen: npm run ingest -- agenda_madrid) |
npm run comprobar | Verifica los datos y las reglas de seguridad |
npm run traducir-textos | Traduce los textos fijos nuevos (-- --lista solo los enseña) |
npm run codigos-postales | Regenera el centro de cada código postal |
npm run exportar-datos | Exporta los datasets de MiMad a datos/ (CSV, JSON y diccionario) |
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY y, si quieres IA, ANTHROPIC_API_KEY (y opcionalmente ANTHROPIC_MODEL). La clave SUPABASE_SERVICE_ROLE_KEY no va en Vercel. vercel.json fija la región dub1: cámbiala si tu Supabase está en otra región. Cada git push a main se publica solo.SUPABASE_URL y SUPABASE_SERVICE_ROLE_KEY. También se puede lanzar a mano desde la pestaña Actions.src/app/(app)/ versión por defecto (Inicio, mapa, detalle, agenda, perfil, asistente, entidades…)
src/app/simple/ versión simplificada
src/app/api/ rutas de servidor (asistente, traducción)
src/components/ componentes compartidos
src/lib/ consultas a los datos, IA, traducciones (i18n), formato de fechas…
scripts/ingest/ carga de los datos abiertos
supabase/migrations/ base de datos, permisos y reglas de seguridad
public/ iconos, fotos por tipo de plan, banderas y service worker (sw.js)
Código bajo licencia MIT.
public/fotos-por-tipo/): Pexels, con su licencia de uso libre. Las fotos de la Agenda turística son de esmadrid.com y se indican en cada plan..env.localANTHROPIC_API_KEYCarga los datos abiertos: npm run ingest (npm run ingest -- --prueba descarga sin guardar).
Comprueba datos y permisos: npm run comprobar (crea usuarios de prueba, intenta saltarse cada regla de seguridad y los borra al final).
Arranca la app: npm run dev y abre http://localhost:3000 (mejor en el modo móvil del navegador, a 430 px de ancho).