napi/CLAUDE.md

185 lines
5.5 KiB
Markdown

# 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
```markdown
# 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
```bash
ssh fenix@qu3v3d0.tech # clave sin -i
```
`fenix` tiene sudo en zzz. Alumnos: grupo `sftpusers`, chroot `/home/$user`.
---
## Añadir Alumno Nuevo
```bash
# 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)