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)