napi/CLAUDE.md

5.5 KiB

napi.qvd.tech — Retroalimentación a Estudiantes

Estado: MVP FUNCIONAL (2026-02-22)


Contexto

Proyecto minimalista para proporcionar retroalimentación personalizada a los estudiantes de DDAW2, cerrando el bucle profesor → alumno.

El profesor (Fénix) mantiene ficheros notas.md por alumno con:

  • Tabla resumen de todas las prácticas (nota + estado)
  • Feedback detallado por práctica
  • Próximos pasos concretos

Los alumnos acceden desde cualquier dispositivo con su navegador, sin instalar nada.


Arquitectura Final

aldebaran (local)                   zzz (qu3v3d0.tech)
─────────────────                   ──────────────────
~/napi-data/                 sshfs  /var/www/napi/data/
  ├── anas/notas.md    ←──────────→   ├── anas/notas.md
  ├── pablo/notas.md                  ├── pablo/notas.md
  ├── miguel/notas.md                 ├── miguel/notas.md
  └── .../ (19 alumnos)              └── .../ (19 alumnos)

                                    /var/www/napi/
                                      ├── viewer.html   (app completa)
                                      └── marked.min.js (renderer local)

Nginx + libnginx-mod-http-auth-pam
  → auth con credenciales SFTP del alumno
  → $remote_user → sirve /var/www/napi/data/$remote_user/notas.md
  → viewer.html renderiza el .md en el navegador (marked.js local)

Stack

Componente Tecnología Dónde
Datos Ficheros notas.md (Markdown) zzz:/var/www/napi/data/
Transporte sshfs mount persistente aldebaran → zzz
Servidor web Nginx zzz
Autenticación libnginx-mod-http-auth-pam zzz
Renderer marked.min.js (local, sin CDN) + viewer.html zzz
Notificaciones (watcher nginx) Python + slixmpp → XMPP zzz

Sin backend. Sin Python para servir. Sin JSON. Sin Syncthing.


URL de Acceso

https://notas.qu3v3d0.tech

Una sola URL para todos los alumnos. Nginx usa $remote_user tras auth_pam para servir el .md correcto.

  • Alumno ingresa sus credenciales SFTP (mismas que FileZilla)
  • Ve únicamente sus propias notas
  • Refresco del navegador = actualización inmediata

Ficheros Clave en zzz

Ruta Descripción
/var/www/napi/data/$alumno/notas.md Fuente de datos por alumno
/var/www/napi/viewer.html App completa (fetch + marked.js)
/var/www/napi/marked.min.js Renderer Markdown local
/etc/nginx/sites-enabled/napi Config Nginx del servicio

www-data está en grupo shadow (necesario para auth_pam).


Ficheros Clave en aldebaran

Ruta Descripción
~/napi-data/ Mount sshfs → /var/www/napi/data/ en zzz
~/.config/systemd/user/home-fenix-napi\x2ddata.mount Unit systemd persistente
~/napi-data/_plantilla/notas.md Plantilla para alumnos nuevos
~/napi-data/README.md Documentación del proyecto

Workflow Emacs (edición)

1.  C-x C-f ~/napi-data/pablo/notas.md
2.  Editar → C-x C-s
3.  Alumno refresca navegador → cambios visibles al instante

El sshfs hace que guardar en aldebaran sea equivalente a escribir directamente en zzz.


Formato notas.md

# Notas — NombreAlumno

> 🏫 Módulo: DDAW2
> 📅 Última actualización: FECHA

## 📊 Resumen
| Práctica | Título | Nota | Estado |
| P2.3 | Nginx via SFTP | 7/10 | ✅ |
...

## P2.7 — Multi-sitio Web con Nginx
**Nota: 9/10**
[feedback personalizado]

### Criterios
| Criterio | Puntos | Estado |
...

Ver _plantilla/notas.md y cualquier alumno como referencia.


Alumnos Activos (19) — DDAW2

anas, carlos, carlosv, daniel, danieln, erick, evelin, gianfranco,
giorgio, joel, jorge, josue, juanan, juanjesus, kasandra, marius,
miguel, pablo, patrick

Credenciales SFTP en ~/EducaMadrid/DDAW2/PRACTICA2.4-despliegue-web-HTTP-y-HTTPS/README.md.


SSH / Conexión a zzz

ssh fenix@qu3v3d0.tech   # clave sin -i

fenix tiene sudo en zzz. Alumnos: grupo sftpusers, chroot /home/$user.


Añadir Alumno Nuevo

# 1. En zzz: crear usuario SFTP (ver README de P2.4 para el script completo)
sudo useradd -m -d /home/$USER -s /usr/sbin/nologin -G sftpusers,www-data $USER

# 2. En aldebaran: crear carpeta de notas
mkdir ~/napi-data/$USER
cp ~/napi-data/_plantilla/notas.md ~/napi-data/$USER/notas.md
# Editar con Emacs y personalizar

Prácticas Documentadas

Práctica Directorio local Descripción
P2.3 ~/EducaMadrid/DDAW2/PRACTICA2.3-despliegue-nginx-via-sftp/ Nginx config via SFTP + watcher inotify + XMPP
P2.4 ~/EducaMadrid/DDAW2/PRACTICA2.4-despliegue-web-HTTP-y-HTTPS/ HTTP + HTTPS con cert wildcard autofirmado
P2.5 ~/EducaMadrid/DDAW2/PRACTICA2.5-despliegue-web-bloquear-CDN-JS+servir-MD/ CSP + bloqueo CDN + marked.js local
P2.6 ~/EducaMadrid/DDAW2/PRACTICA2.6-Hextris-compresion-cache-y-mejora-de-rendimiento/ Hextris + gzip + caché
P2.7 ~/EducaMadrid/DDAW2/PRACTICA2.7-MULTI-SITIO-WEB-NGINX@zzz/ Multi-sitio: Hextris + App propia + CSP + cabeceras

Pendiente

  • Rellenar notas de pablo (P2.3 → P2.6 pendientes de detallar)
  • Considerar CSS más elaborado para viewer.html (opcional)
  • Renovar certificado SSL wildcard cuando expire (generado 2026-02-04, válido 365 días)