WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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).