- Status Observer: panel de atacantes con GeoIP (país, ciudad, ISP) sobre SQLite, timeline por hora y top de paths atacados.
- Bans permanentes (bantime -1) y autoban horario: si una IP de fuera supera el umbral, queda afuera para siempre. Solo unban manual.
- Hoy además nace este devlog: una página SSR cacheable, cero JS, cero endpoints de escritura. El contenido entra por SQL y así va a seguir.
- Blogged about it: este sitio es Go + SQLite, SSR con ETag y 304, cero JavaScript. El cert salió por TLS-ALPN porque el puerto 80 ni abre (nada de HTTP plano en esta casa).
09/09/2026
miércoles
08/09/2026
martes
- Noche de providers: migré el modelo a un provider con lista de modelos real en vez del custom_provider legacy que mostraba (0).
- Backup + rollback de la config antes de tocar, como corresponde.
07/09/2026
lunes
- Anti-DDoS ligero: fail2ban vigila access.log + los 11 logs de subdominios y actúa cuando un host pasa de 100 req/min.
- Pitfall del día: fail2ban no acepta logpath con comas (va multilínea) y no re-escanea los globs al vuelo: hay que pre-crear los logs antes de reiniciar.
05/09/2026
sábado
- Unificando el admin: nginx-manager con jails dinámicos de fail2ban, desban por jail y visor de logs por subdominio.
31/08/2026
lunes
- Semana Kafka: peleas con las ACLs del cluster, cambio de consumer group y entender el lag a fondo.
- Descubrí que el rebalanceo me freía el pipeline por un offset ignorado, no por la red.
- Mañana quiero probar striped reads en los logs.
23/08/2026
domingo
- Subí el service-hub: middleware unificado con microservicios (enchufe Tuya, PalWorld por SSH, auto-shutdown, modo mantenimiento). Cada servicio es un paquete con service.go + handler.go + descriptor OpenAPI.
- El modo mantenimiento responde 503 en lo que no debe activarse mientras hay gente jugando.
18/08/2026
martes
- Migré la voz del asistente de Whisper local a Groq (whisper-large-v3-turbo): en la Pi de 1GB el STT local no daba, en la nube va en menos de un segundo.
09/08/2026
domingo
- Kanban tipo Trello con login por usuario: sesiones con Argon2id, cookies httpOnly, rate limit en el login y aislamiento anti-IDOR.
- Tiempo real con SSE por usuario y broadcast en cada mutación.
26/07/2026
domingo
- Wifi monitor con systemd en la Raspberry Pi: el chip BCM4345 se cuelga en silencio (interface UP, red muerta). El watcher hace rmmod/modprobe solo.
- Backoff progresivo en los reintentos para no martillar el driver.
15/07/2026
miércoles
- Semana de la seguridad: dejé nginx con rate limiting + connection limits por subdominio.
- Los que escanean /.env, /.git/config y /admin/config.php ahora van a un honeypot que responde lento y tira un 408 fingido, como si el server estuviera medio muerto.
07/07/2026
martes
- Arranqué a reorganizar la infra del server de PalWorld: backups automáticos cada 12h con rsync + zip y aviso por Discord.
- El embed de estado del server que actualiza el bot cada 15s empezó a mentir: decía ON con el contenedor crasheando. Ahora el estado sale del query A2S, no del Docker.