Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UMA Experience · STAR, Student Team of Advanced Robotics

Programa Junior · STAR

Plataforma web del equipo STAR (Student Team of Advanced Robotics, Universidad de Málaga) para seguir el camino de los nuevos miembros de Junior a Senior: qué habilidades dominan, qué hitos han conseguido (como el acceso autónomo al taller) y qué les falta para ascender.

🌐 Web: https://star-uma.github.io/programa-junior/

La regla de oro: cada junior crea su propio perfil y puede pedir que le validen algo, pero solo un senior puede marcar una tarea como hecha u otorgar un hito. Esta regla la aplica la base de datos, así que no se puede saltar ni tocando la web. Por eso tu progreso refleja lo que de verdad sabes hacer.


Contenido


Cómo funciona el programa

Concepto Qué es
Habilidades Las 8 áreas que debe dominar un senior: soldadura, Git y GitHub, ESP32, Linux, ROS2 con C++ y Python, impresión 3D, modelado 3D y robots del equipo.
Tareas Cosas concretas y comprobables dentro de cada habilidad, por ejemplo «Soldar y crimpar los conectores del equipo».
Niveles Cada habilidad tiene 3: Básico (con supervisión), Autónomo (sin ayuda) y Avanzado (puedes enseñarlo). Completas un nivel cuando te validan todas sus tareas.
Hitos Permisos y logros que se desbloquean al cumplir requisitos: Acceso autónomo al taller, Carga de baterías LiPo, Primer PR aceptado, Proyecto junior, Primera competición…
XP y rangos Cada tarea y cada hito suman XP. Con la XP subes de rango: Tornillo → Engranaje → Servo → Sensor → Microcontrolador → Robot → Androide.
Camino a Senior La lista de requisitos para ascender y el porcentaje que llevas. Cuando la completas, coordinación revisa tu trayectoria y te asciende.

La lista completa de tareas, hitos y requisitos está en la pestaña Programa de la web, que se puede ver sin iniciar sesión.


Guía para juniors

1. Crea tu perfil

  1. Entra en la web y elige la pestaña Crear perfil.
  2. Rellena:
    • Nombre y apellido, tal y como te conoce el equipo.
    • Departamento: Software o Hardware. Se puede cambiar después.
    • Correo y contraseña (mínimo 8 caracteres).
  3. Si te llega un correo de confirmación, pulsa el enlace (mira también en spam).
  4. Entra con tu correo y contraseña. Llegarás a Mi progreso.

Tu perfil empieza de cero. El primer paso para todos es la formación en seguridad del taller: pide a un senior la charla y después solicita el hito.

2. Entiende tu perfil

  • Cabecera: tu rango y XP, y el porcentaje de tu camino a Senior.

  • Perfil de habilidades: gráfica de radar con tu nivel en cada habilidad (en cian) frente al mínimo exigido para Senior (en gris). Pasa el ratón por los puntos para ver el detalle o pulsa Ver tabla.

  • Requisitos para Senior: qué cumples ya, qué te falta y los próximos hitos a tu alcance.

  • Hitos, agrupados en Permisos, Logros y Vida de equipo. Cada uno puede estar:

    Estado Significa
    ✅ Conseguido Ya es tuyo, con la fecha y quién te lo otorgó.
    ✨ Listo para solicitar Cumples los requisitos: pídelo.
    ⏳ Solicitado Tu solicitud está esperando a un senior.
    ◌ Lo otorga un senior No tiene requisitos previos; se concede cuando corresponde (por ejemplo, tras ir a una competición).
    🔒 Bloqueado Aún te faltan requisitos. Púlsalo para ver cuáles.
  • Habilidades: despliega cada una para ver sus tareas por nivel, cuáles tienes validadas y cuáles te faltan.

  • XP acumulada y Actividad: tu evolución y el historial de todo lo validado.

3. Pide validaciones

  1. Haz la tarea en el taller con un senior o con tu mentor.
  2. En tu perfil, despliega la habilidad y pulsa Solicitar validación en la tarea.
  3. Escribe un mensaje breve: qué hiciste, cuándo y con quién. Ayuda mucho al senior que la revisa.
  4. La tarea queda marcada como Solicitud enviada. Puedes retirarla si te equivocaste.
  5. Cuando un senior la valide, aparecerá con la fecha y su nombre, y sumarás la XP.

Para los hitos es igual: pulsa sobre el hito y después Solicitar. Los hitos automáticos, como Primeros pasos o Todoterreno, se consiguen solos al cumplir los requisitos.

Preguntas frecuentes

¿Por qué no puedo marcar yo mis tareas?

Porque el progreso sirve para dar permisos reales, como entrar solo al taller o cargar baterías LiPo. Un senior tiene que haber visto que sabes hacerlo.

Me han rechazado una solicitud

Habla con el senior o con tu mentor: te dirá qué falta. Cuando lo tengas, vuelve a solicitarla.

He olvidado la contraseña

En la pantalla de entrada pulsa ¿Has olvidado la contraseña? y sigue el enlace que te llegará por correo.

Quiero cambiar mi nombre o mi departamento

Pulsa Editar en tu perfil. El mentor y la fecha de ingreso solo los puede cambiar un senior.

¿Quién ve mi progreso?

Todos los miembros del equipo con cuenta pueden ver los perfiles y el progreso de los demás. Tus solicitudes pendientes solo las ves tú y los seniors. Tu correo no se muestra a nadie.


Guía para seniors

Como senior, al entrar llegas al Panel de validación:

  • Solicitudes pendientes: lo que han pedido los juniors, con su mensaje. Validar u Otorgar lo concede con fecha de hoy; Rechazar borra la solicitud.
  • Listos para otorgar: hitos que un junior ya cumple aunque no los haya pedido, y juniors listos para Senior.
  • Matriz de habilidades: el nivel de cada junior en cada habilidad y su camino a Senior, de un vistazo.

En el perfil de un junior (pestaña Juniors) puedes además:

  • Validar cualquier tarea eligiendo la fecha y añadiendo una nota, o Anular una validación.
  • Pulsar un hito para otorgarlo o revocarlo. Se puede otorgar aunque no cumpla los requisitos si coordinación lo decide; la app te avisará.
  • Editar el perfil: asignar mentor y corregir la fecha de ingreso.
  • Ascender a Senior cuando cumpla todos los requisitos. El botón aparece en su perfil.

Buenas prácticas

  • Valida solo lo que hayas visto hacer. Usa la nota para dejar contexto («Soldó el arnés del robot X»).
  • Si rechazas algo, explícale al junior en persona qué le falta: la app no envía el motivo.
  • Los permisos de la app no sustituyen a los reales: si otorgas Acceso autónomo al taller, gestiona también la llave o el acceso físico.
  • Un senior no puede validarse a sí mismo.

Coordinación y mantenimiento

Cómo se publica la web

La web se publica sola con GitHub Actions (.github/workflows/publicar.yml). En cada push a la rama main:

  1. Valida data/programa.json: que sea JSON correcto, que no haya ids repetidos y que los requisitos apunten a tareas, hitos y habilidades que existen.
  2. Copia los archivos de la web (index.html, css, js, data, assets).
  3. Configura Supabase con las variables del repositorio.
  4. Publica en GitHub Pages. Tarda alrededor de un minuto.

El progreso se ve en la pestaña Actions del repositorio. Si la validación falla, la web no se toca y sigue la versión anterior; el log indica qué corregir. En los Pull Requests solo se ejecuta la validación, así se detectan los errores antes de fusionar.

Puesta en marcha (una sola vez)

1. Subir el código a GitHub. Crea un repositorio vacío en la organización del equipo y, desde esta carpeta:

git init -b main
git add .
git commit -m "Primera versión del Programa Junior"
git remote add origin https://github.com/ORGANIZACION/REPOSITORIO.git
git push -u origin main

2. Activar GitHub Pages. En el repositorio: Settings → Pages → Build and deployment → Source: «GitHub Actions». Después, en Actions → Publicar web → Run workflow (o con cualquier push) se publica. La URL aparece en Settings → Pages y en el resumen de la ejecución. Ponla arriba en este README.

Hasta completar los pasos 3 y 4, la web funciona en modo demo: datos de ejemplo guardados solo en el navegador de cada uno, útil para enseñarla pero no para usarla de verdad.

3. Crear la base de datos en Supabase (plan gratuito):

  1. Crea un proyecto (región Europa).
  2. En SQL Editor, pega y ejecuta completo supabase/schema.sql.
  3. En Authentication → URL Configuration, pon la URL de la web como Site URL y añádela también en Redirect URLs.
  4. Correos. El servidor de correo que trae Supabase de serie solo envía unos pocos correos por hora, y únicamente a los miembros del proyecto de Supabase. Para el equipo tienes dos opciones:
    • Configurar un SMTP propio en Authentication → Emails → SMTP Settings, por ejemplo una cuenta de correo del equipo. Es lo recomendable: funcionan la confirmación de cuenta y la recuperación de contraseña.
    • O desactivar Confirm email en Authentication → Sign In / Providers → Email. Las cuentas se crean al momento, pero sin comprobar que el correo es real.
  5. Opcional: traduce los correos en Authentication → Emails → Templates, o acepta solo correos @uma.es descomentando la línea indicada en la función crear_perfil de schema.sql.

4. Conectar la web con Supabase. En Project Settings → API de Supabase copia la Project URL y la clave pública (anon o publishable). En GitHub ve a Settings → Secrets and variables → Actions → pestaña Variables y crea:

Variable Valor
SUPABASE_URL https://xxxxxxxx.supabase.co
SUPABASE_ANON_KEY la clave pública (anon / publishable)

Van en Variables y no en Secrets porque esa clave es pública por diseño: la seguridad la ponen las políticas de la base de datos. Nunca uses la clave service_role o secret. Vuelve a lanzar el workflow para que la web se publique ya conectada.

5. Nombrar al primer senior. Regístrate en la web y ejecuta en el SQL Editor de Supabase, con tu correo:

update public.perfiles set rol = 'senior', senior_desde = current_date
 where id = (select id from auth.users where email = 'tu-correo@uma.es');

Pide a los demás seniors actuales que se registren y repite la consulta con sus correos. A partir de ahí, los nuevos ascensos se hacen desde la propia web.

Cambiar el programa

Todo el contenido (habilidades, tareas, hitos, rangos y requisitos para Senior) está en data/programa.json. Para cambiarlo basta con editar ese fichero, mejor mediante Pull Request para que coordinación lo revise y la validación lo compruebe antes de publicar.

Tipos de requisito disponibles para los hitos y para el ascenso a Senior:

{ "habilidad": "soldadura", "nivel": 1 }                   // nivel mínimo (1, 2 o 3) en una habilidad
{ "tarea": "rob-1b" }                                      // una tarea concreta validada
{ "hito": "seguridad" }                                    // otro hito conseguido
{ "habilidadesConNivel": { "nivel": 2, "cantidad": 3 } }   // nivel X en al menos N habilidades
{ "algunoDe": [ { "hito": "a" }, { "hito": "b" } ] }       // cualquiera de varias opciones
{ "tareasCompletadas": 10 }                                // número total de tareas validadas
  • Cualquier requisito admite "texto" para cambiar cómo se muestra.
  • Un hito con "aprobacion": false se consigue automáticamente; con true, lo otorga un senior.
  • Si añades o quitas una habilidad, actualiza también "cantidad": 8 en los requisitos que piden «todas las habilidades».

⚠️ No cambies el id de una tarea o un hito que ya se esté usando. El progreso guardado apunta a esos ids. Cambiar nombres, descripciones o XP sí es seguro.

Gestionar personas

  • Nombrar senior a mano: la consulta del paso 5.
  • Dar de baja a alguien: en Supabase, Authentication → Users → Delete user. Se borran su perfil y todo su progreso, y no se puede deshacer.

Desarrollo en local

No hace falta compilar nada; solo servir la carpeta por HTTP (abrir index.html con doble clic no funciona). En Windows, sin instalar nada:

powershell -ExecutionPolicy Bypass -File serve.ps1

En Linux o macOS:

python3 -m http.server 8080

Abre http://localhost:8080. En local js/config.js está vacío, así que la app arranca en modo demo: eliges un usuario de ejemplo (junior o senior) y pruebas todo sin tocar la base de datos real. Restablecer datos vuelve al estado inicial.

Para comprobar el programa antes de subirlo, si tienes Node.js:

node scripts/validar-programa.mjs

Estructura del proyecto

index.html                  Página única de la aplicación
css/styles.css              Estilos (colores del equipo, modo claro y oscuro, móvil)
js/app.js                   Arranque, sesión y navegación
js/model.js                 Cálculo de niveles, hitos, XP y camino a Senior
js/charts.js                Radar de habilidades y gráfica de XP (SVG, sin librerías)
js/views/                   Pantallas: perfil, panel de seniors, equipo, programa y acceso
js/store/supabase.js        Acceso a los datos reales
js/store/demo.js            Datos del modo demo (en el navegador)
js/config.js                Configuración de Supabase (vacía en el repo; la rellena GitHub Actions)
data/programa.json          ← El programa: habilidades, tareas, hitos y requisitos
data/demo.json              Personas y progreso de ejemplo del modo demo
assets/                     Logo, banner y favicon
supabase/schema.sql         Tablas, triggers y políticas de seguridad de la base de datos
scripts/                    Validación del programa y configuración para publicar
.github/workflows/          Publicación automática en GitHub Pages
serve.ps1                   Servidor local para Windows

Seguridad y datos

  • Qué se guarda: nombre, departamento, rol, mentor y fechas de cada persona, y qué tareas e hitos le validaron, quién y cuándo. El correo y la contraseña los gestiona Supabase Auth y no se muestran en la web.
  • Quién puede escribir: las políticas RLS de schema.sql solo dejan crear, modificar o borrar progreso a los seniors, nunca sobre sí mismos. Un junior solo puede editar su nombre y departamento, y crear o retirar sus propias solicitudes. El rol, el mentor y las fechas solo los cambia un senior.
  • Quién puede leer: cualquier miembro con cuenta ve los perfiles y el progreso del equipo. Las solicitudes solo las ven su autor y los seniors. Sin cuenta solo se ve la página del programa.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages