OpenTrailPaper
Open-source bike computer firmware for the LilyGO T5S3 4.7" E-Paper PRO, with offline maps, GPX routes, FIT recording and Bluetooth sensors.
Plataforma de gestión de ligas deportivas educativas con soporte offline
Translation pending
Sports & fitnessTypeScript · PythonGitHub @edumind-esOnlineOwner 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
🏆 Sistema de gestión de ligas deportivas escolares - Liga EDUmind
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Gestión de ligas deportivas escolares donde no solo puntúa el marcador. Cada partido reparte puntos por juego limpio, por el arbitraje del alumnado y por el comportamiento de la grada, y la clasificación se lee por Los Cinco Mundos. Backend en FastAPI, frontend en React (PWA con modo offline), con vistas públicas para proyectar en el aula o el pabellón. El objetivo pedagógico es que ganar el partido no baste para ganar la liga.Read the full README ↗
Gestión de ligas deportivas escolares donde no solo puntúa el marcador. Cada partido reparte puntos por juego limpio, por el arbitraje del alumnado y por el comportamiento de la grada, y la clasificación se lee por Los Cinco Mundos. Backend en FastAPI, frontend en React (PWA con modo offline), con vistas públicas para proyectar en el aula o el pabellón.
El objetivo pedagógico es que ganar el partido no baste para ganar la liga.
Sitio: https://liga.edumind.es · Versión 3.0.1 · CHANGELOG · Decisiones · Privacidad · Créditos
En corto: el alumnado no tiene cuenta ni tabla; sin analítica; al abrir la app no se conecta con ningún tercero. El servidor guarda ligas, equipos, partidos, evaluaciones y fichas (sin nombre de alumno); el navegador guarda una copia offline y las preferencias de accesibilidad. Servicios opcionales del servidor: correo SMTP (fichas al docente), webhook de Discord (propuestas de deporte) y Nextcloud (copia de PDFs). Detalle completo, plazos y variables en PRIVACY.md.
Para usar la liga en un centro sin depender de ningún servidor externo: un solo comando levanta base de datos, backend, worker de correo y frontend en cualquier equipo con Docker, accesible desde las tablets y pantallas de la red del centro. Los datos del alumnado no salen de ese equipo.
git clone https://github.com/edumind-es/liga-de-valores.git
cd liga-de-valores
./scripts/instalar_aula.sh
El instalador genera credenciales locales, aplica las migraciones y ofrece crear el usuario administrador. Guía completa (Windows, copias de seguridad, actualizaciones, qué funciona sin internet): docs/instalacion-aula.md.
Frontend:
cd frontend
npm ci
npm run dev # o npm run build
Backend:
cd backend
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload
Copia .env.example a .env en backend/ y frontend/ y rellénalos. Los valores del ejemplo son marcadores: genera secretos nuevos para cualquier despliegue real. También hay docker-compose.yml (backend, worker de correo, PostgreSQL, Redis y frontend).
cd backend && pytest # 127 pruebas (pytest-asyncio, SQLite en memoria)
cd frontend && npm run test:run # 7 pruebas Vitest + Testing Library
cd frontend && npm run lint
La integración continua (.github/workflows/ci-cd.yml) compila el frontend, comprueba el backend, valida que las migraciones de Alembic sean seguras y con una sola cabeza, y pasa pip-audit, bandit y Trivy sobre la imagen.
Mapa de carpetas
backend/app/api/v1/ — un fichero por recurso de la API (ligas.py, partidos.py, public.py para el acceso por PIN, tools.py para las fichas, tipos_deporte.py, criterios.py…).backend/app/models/ y schemas/ — tablas SQLAlchemy y esquemas Pydantic.backend/app/services/ — lógica: clasificación (clasificacion_service.py), PDF (pdf_generator.py), correo, Discord, Nextcloud, limpieza de fichas, PIN, códigos anónimos.backend/app/core/mundos.py — Los Cinco Mundos y el mapeo pedagógico por defecto.backend/alembic/versions/ — migraciones; el catálogo de deportes vive aquí.frontend/src/ — pantallas en pages/, componentes en components/, offline en lib/offline/, idiomas en i18n/locales/. Ver frontend/README.md.Añadir un deporte
backend/alembic/versions/011_add_new_sports.py con una revisión nueva (revises = la cabeza actual, alembic heads).tipos_deporte: nombre, codigo (único, sin espacios), tipo_marcador (goles, sets, puntos, tries o carreras), permite_empate, config (JSON con las reglas del marcador: puntos_para_ganar, sets_para_ganar, botones_puntuacion, tiempo_posesion_segundos…), icono, descripcion y categoria (alternativo, popular, tradicional, convencional). Usa ON CONFLICT (codigo) DO UPDATE para que sea idempotente.alembic upgrade head. El frontend lee el catálogo de la API: no hay que tocarlo. Si el deporte necesita un marcador distinto a los cinco tipos existentes, el componente está en frontend/src/pages/Partidos/./proponer-deporte.Cambiar los criterios de valores o los mundos
Ligas → Gestión de criterios) o desde plantillas (GET /api/v1/criterios/plantillas, definidas en backend/app/api/v1/criterios.py); cada criterio lleva nombre, descripción, escala y mundo.backend/app/core/mundos.py, pensado para cambiarse sin tocar nada más.Añadir un idioma: copia frontend/src/i18n/locales/es.json con el código nuevo y regístralo en frontend/src/i18n/index.ts.
Desactivar servicios opcionales: deja vacías DISCORD_WEBHOOK_URL o NEXTCLOUD_*; el SSO se apaga con VITE_AUTHENTIK_ENABLED=false; el correo necesita MAIL_* (sin él, las fichas no llegan al docente).
Estilo: colores solo a través de tokens CSS de frontend/src/index.css; tipografías en local; nada de CDN al abrir la app.
Este recurso se ha desarrollado con vibe coding con asistencia de IA (Claude Code y ChatGPT), según la política de IA de EDUmind. Lo que ha comprobado el autor:
/ejemplo-didactico) se organizó con IA y fue supervisada por el autor; avisa de que conviene contrastar las referencias curriculares con el decreto vigente.Se puede colaborar sin programar: contar cómo te ha ido en clase, reportar un fallo, revisar los textos o traducir. Todo el proyecto está en español. Empieza por CONTRIBUTING.md y el código de conducta.
¿Un fallo de seguridad? No abras un issue público: ver SECURITY.md.
Este repositorio es una release saneada para revisión y auditoría: no incluye secretos, configuración de despliegue ni datos de aula. Ver OPEN_SOURCE_RELEASE.md.
Licencia doble AGPL-3.0-or-later o EUPL-1.2, a elección de quien la reutilice. Ver LICENSE, COPYRIGHT, AUTHORS y NOTICE. El material de terceros (tipografías OFL, pictogramas ARASAAC CC BY-NC-SA, librerías) está inventariado en CREDITS.md.
EDUmind® es marca registrada en España (OEPM). El código es libre; la marca y los logotipos no se ceden con él — ver TRADEMARKS.md.
Por Luis Vilela Acuña — maestro de Educación Física · EDUmind®.