Rekium Corporation · EVE Online

SISTEMA
REKIUM

Plataforma de Automatización Corporativa

VERSIÓN 3.0
ESTADO PRODUCCIÓN
FECHA 2026
n8n Baserow Alliance Auth Discord API Cloudflare Workers MariaDB Grafana Synology NAS
00

Sobre este sistema

Sistema Rekium es una plataforma de automatización integral construida desde cero para gestionar el ciclo de vida completo de los miembros de una corporación de EVE Online: desde el primer contacto en Discord hasta la auditoría con IA, pasando por reclutamiento, gestión de personajes, flotas, timers, tickets internos y dashboards analíticos. Todo el sistema usa Discord como interfaz principal — el usuario nunca abandona la app — mientras que el backend orquesta más de una docena de workflows en n8n contra Alliance Auth, Baserow y MariaDB.

Esta documentación describe la arquitectura, los flujos y las decisiones técnicas tomadas. Sirve también como muestra de mi trabajo: arquitectura distribuida, integración entre cinco plataformas heterogéneas, ingeniería de prompts y de errores, decisiones de coste cero y patrones reutilizables.

14+
Workflows n8n
7
Tablas Baserow
5
Plataformas integradas
0%
Tasa de fallos
~400
Ejecuciones / día
01

Changelog · Cambios v2.1 → v3.0

ACTUALIZACIONES MAYORES
W2 Fix crítico de campos Link. Reemplazado el nodo nativo de Baserow por HTTP Request PATCH con user_field_names=true. El nodo nativo enviaba enteros en vez del array [id] que requieren los campos Link, fallando silenciosamente. Extendido también el flujo para hacer split de todos_los_personajes (string CSV de Alliance Auth) y crear/actualizar cada personaje individualmente en la tabla Personajes con Merge de reconvergencia.
W2 Auto-vínculo Main ↔ Discord. Añadidos dos nodos que enlazan automáticamente el row de Main con el row de Discord existente. El campo Lookup ID Discord en la tabla Reclutamiento se auto-puebla al escribirse correctamente el campo Link.
F1 / F2 Sistema de pings de flota. Modal Discord con tipo de operación → INSERT en opcalendar con LAST_INSERT_ID() + embed con botones de asistencia. Categorías: PVP, ORE, ICE, Lunar, Gas, Rateo. Eventos forzados a usuario superadmin para evitar problemas de permisos; FC almacenado en campo fc.
ST1 Sistema de Structure Timers. Modal con datos del timer → publicación en canal PVP + INSERT en opcalendar con operation_type_id=14 (Estructuras PVP). FCs introducen timers desde Discord sin necesidad de abrir Alliance Auth.
M1 Auditoría semanal de charlinks. Workflow programado los lunes a las 09:00 que cruza corptools_characteraudit.active con la lista de miembros y reporta personajes sin token activo. Implementado chunking para sortear el límite de 4000 caracteres de Discord.
M2 Re-ping automático de flotas. Detecta eventos próximos (ventana 30–60 min antes del inicio) y reenvía recordatorio al canal correspondiente con la lista de asistentes confirmados.
M3 Sincronización semanal de miembros. Construido desde cero. Los lunes a las 08:00 consulta MariaDB con GROUP_CONCAT para todas las corps, sincroniza tablas Main, Personajes y Discord, y publica al canal de seguridad un resumen de altas detectadas. Filtro date_equal sobre campo Created on para identificar nuevos miembros.
Grafana Dashboard PvP en producción. KPIs + timeline + Top Killers + Top Losses, conectado directo a la base de datos de Alliance Auth. Próximos: Finanzas, Minería y Auditoría.
ESI Bulk refresh de tokens. Diagnosticado un caso de «expiración masiva» de tokens ESI que en realidad eran tokens válidos sin refrescar. Solución: script Django shell iterando sobre tokens expirados con token.refresh(), evitando pedir re-registro a 200+ miembros.
W1 Anti-duplicados reforzado. Lookup en tabla de Reclutamiento antes de crear canal: si existe ticket abierto, responde efímero sin duplicar. Botón cerrar_ticket ya disponible desde el primer mensaje, no esperando a fase de verificación.
INFRA MariaDB y Ubuntu. Repo corregido a codename noble (Ubuntu 24.04). MariaDB en 10.11.x estable. Migración a 11.8 prevista en ventana única coincidiendo con el lanzamiento de Alliance Auth v5.
02

Capacidades del Sistema

Pipeline Reclutamiento
Cinco etapas, tres cadenas de aprobación, archivo permanente con transcripción + captura. Anti-duplicados nativo.
🛡
Verificación Multi-personaje
Personaje principal + todos los alts de la cuenta vía MariaDB con GROUP_CONCAT, en tiempo real.
🚀
Operaciones de Flota
Pings con embeds, modal de creación, INSERT directo en opcalendar y re-ping automático antes del inicio.
Structure Timers
FCs introducen timers desde Discord sin abrir Auth. Publicación en canal PVP + entrada en calendario.
📁
Archivo Permanente
Cada ticket cerrado guarda transcripción y captura. Tres ramas paralelas: Reclutamiento, Director, IT.
🤖
Auditoría con IA
Informe automático del candidato (ISK, SP, kills, capitals) con checklist interactivo en el canal de Asuntos Internos.
🔄
Sincronización Semanal
M3 consolida miembros entre Auth y Baserow cada lunes y reporta altas nuevas al canal de seguridad.
📊
Dashboards Analíticos
Grafana sobre MariaDB: PvP en producción, Finanzas, Minería y Auditoría en construcción.
03

Stack Tecnológico

Toda la infraestructura es self-hosted en NAS y VPS propios. Cero dependencia de SaaS pago. La elección está pensada para minimizar coste recurrente sin sacrificar capacidad de orquestación ni almacenamiento estructurado.

INTERFAZ 💬 Discord Interfaz de usuario Cloudflare Worker Ed25519 + routing 🔐 Alliance Auth Auth + ESI personajes 📊 Grafana Dashboards PvP/Mining AUTOMATIZACIÓN n8n Self-hosted · NAS W0 — Router Central Dispatcha a todos los sub-workflows W1–W5 A1 / A2 IT / D1b F1 / F2 / ST1 M1 / M2 / M3 Execute Workflow Trigger waitForSubWorkflow: false ACK → Parsear body ALMACENAMIENTO Y DATOS Baserow Self-hosted · NAS Main Personajes Claim Reclutamiento Director Tickets Discord IT/Soporte 7 tablas · esquema relacional MariaDB 10.11 VPS · Alliance Auth discord_discorduser authentication_userprofile eveonline_evecharacter corptools_characteraudit opcalendar_event killtracker / moonmining Acceso vía SSH tunnel Origen para n8n y Grafana
FIG. 1 — ARQUITECTURA TÉCNICA GENERAL (v3.0)
04

Arquitectura de Enrutado (W0 Router)

Un único punto de entrada procesa todas las interacciones de Discord. El Cloudflare Worker verifica la firma Ed25519 y responde síncronamente para cumplir el SLA de 3 segundos de Discord. W0 es el dispatcher central que evalúa el custom_id y despacha al sub-workflow correcto vía executeWorkflowTrigger sin esperar respuesta. Este patrón sustituyó a 15 webhooks separados en Cloudflare Worker, simplificando enormemente el mantenimiento.

💬 Discord Botón/Menú/Modal HTTPS Cloudflare Worker Verify Ed25519 type:1 PING ACK type:9 Modal sync ctx.waitUntil(fetch n8n) W0 ROUTER Webhook Trigger Parsear custom_id Switch (15 ramas) Execute sub-workflow waitForSubWorkflow: false W1–W5 Pipeline reclutamiento A1 / A2 Gestión de personajes alt IT / D1b Tickets soporte / dirección F1 / F2 Pings y attendance de flota ST1 Structure Timers M1 / M2 / M3 Mantenimiento programado W4b Auditoría con asistente IA El custom_id del componente Discord determina el sub-workflow activado. W0 responde inmediatamente con ACK y delega trabajo asíncrono.
FIG. 2 — FLUJO DE ENRUTADO Y DESPACHO
05

Pipeline de Reclutamiento (W1–W5)

Cinco etapas en cadena con tres niveles de aprobación y tres ramas de archivo. Diseñado para que el candidato no abandone Discord en ningún momento mientras la corporación mantiene trazabilidad completa: cada paso queda registrado en Baserow y cada decisión queda firmada por su staff correspondiente.

W1 Crear Ticket Anti-duplicados Canal privado + botón cerrar W2 Verificar MariaDB GROUP_CONCAT Main + alts + Discord PATCH HTTP a Baserow W3 Formulario Modal Discord → Reclutamiento Notif. Reclutadores W4 Aprobación Recl. → A.Int. → Dir. Auditoría report → W4b checklist IA W5 Cierre del Ticket Transcript + imagen → 3 ramas paralelas Recl. + Dir. + IT W4b — Auditoría IA → A.Internos SOLICITUD IDENTIDAD DATOS DECISIÓN ARCHIVO
FIG. 3 — PIPELINE DE RECLUTAMIENTO COMPLETO
  • W1
    Crear Ticket — Anti-duplicados nativo
    Antes de crear el canal busca en la tabla de Reclutamiento si ya existe un ticket abierto para ese usuario (campo Fecha cierre vacío). Si existe, responde efímero con flags: 64 sin crear canal nuevo. Si no, crea canal privado con permisos de roles y envía mensaje de bienvenida que ya incluye el botón cerrar_ticket desde el primer momento.
  • W2
    Verificar Personaje — Main + todos los alts
    Query MariaDB con JOIN a través de authentication_userprofile.main_character_id para garantizar que se devuelve el personaje principal, no un alt. GROUP_CONCAT recupera en una sola fila todos los personajes vinculados a la cuenta. Escritura en Baserow vía HTTP PATCH (no nodo nativo) con user_field_names=true y arrays correctos para los campos Link. Splitting de la lista de personajes y creación/actualización de cada uno en la tabla Personajes.
  • W3
    Formulario de Solicitud — Modal Discord
    Abre un modal de Discord con campos personalizados. El Cloudflare Worker devuelve type: 9 síncronamente — esto no se puede delegar a n8n por el SLA de Discord. Las respuestas se guardan en la tabla de Reclutamiento y se notifica al canal del ticket.
  • W4
    Aprobación — Cadena de tres etapas
    Votación escalonada: Reclutadores → Asuntos Internos → Directores. Cada etapa solo desbloquea la siguiente cuando se aprueba. Informe de auditoría auto-publicado en el canal permanente de Asuntos Internos. W4b se activa opcionalmente para checklist interactivo con resumen del candidato extraído de MariaDB.
  • W4b
    Auditoría IA — Checklist interactivo
    Genera informe automático del candidato a partir de datos de MariaDB (ISK, SP, kills, capital ships). Los revisores completan un checklist interactivo en Discord desde el canal de Asuntos Internos. La publicación es permanente para auditoría histórica.
  • W5
    Cierre — Tres ramas paralelas según tipo de ticket
    Al pulsar el botón de cierre, W5 genera transcripción y captura. La imagen se sube vía HTTP PATCH con JSON.stringify (el nodo nativo Baserow falla con campos de archivo — doble-serializa). Tres ramas paralelas actualizan distintas tablas según origen: Reclutamiento, Director (estado → «Archivado»), IT/Soporte (estado → «Archivado»). El canal de Discord se elimina al finalizar.
06

Gestión de Personajes Alternativos (A1 / A2)

Los miembros registran personajes alternativos a través de Discord. A1 guarda el ID del ticket en la tabla Claim — campo crítico para que A2 encuentre la solicitud al aprobar o rechazar. A2 incluye una cadena completa de Claim linking en ambas ramas, garantizando trazabilidad bidireccional.

A1 — Registrar Alt
Miembro solicita registrar un alt. A1 verifica en Alliance Auth, crea el registro en la tabla Claim guardando el ID de ticket Discord — este campo es esencial para que A2 encuentre la solicitud. Crea ticket privado y notifica al staff.
A2 — Aprobar / Rechazar Alt
Cadena de Claim linking en ambas ramas (aprobación y rechazo):
1. Buscar Discord director en tabla Discord
2. HTTP GET a Claim filtrando por Main link row ID
3. Actualizar el ticket Director correspondiente
Notificación al miembro con resultado.
07

Sistema de Tickets IT y Director

Ambos tipos de ticket incluyen menú desplegable de selección de tipo antes de crear el canal, sistema de claim para asignación de staff, y se archivan en W5 actualizando estado a «Archivado» en sus respectivas tablas.

IT1 + IT1b — Ticket de Soporte
Tipos: Ayuda Discord · Ayuda Auth · Petición/Sugerencia · Ayuda externa
Roles: Rekium IT

Un IF node distingue si la interacción es un nuevo claim de staff o una selección de tipo, manteniendo IT1 e IT1b como un único punto de entrada.
D1b — Ticket de Director
Tipos: Consulta · Petición/Sugerencia · Queja · Reportar/Seguridad
Roles: Director, CEO

Cadena completa de Claim linking: Discord → Claim filtrando por Main row ID → actualización de Director Tickets.
08

Operaciones de Flota (F1 / F2)

F1 abre un modal Discord con tipo de operación predefinido. F2 procesa la respuesta, hace INSERT en la tabla opcalendar de Alliance Auth con LAST_INSERT_ID() para recuperar el ID del evento, y publica un embed con botones de asistencia. Categorías soportadas: PVP, ORE, ICE, Lunar, Gas, Rateo. Los eventos se fuerzan al usuario superadmin para evitar problemas de permisos; el FC real queda almacenado en el campo fc.

FC Selecciona tipo de operación F1 Modal Fleet Custom_id encoding tipo en custom_id type:9 desde Worker F2 Procesa modal INSERT opcalendar LAST_INSERT_ID() Embed + botones asist. user_id forzado Discord embed Asistencia ✓ / ✗ / ? Botones interactivos Alliance Auth opcalendar_event M2 Re-ping 30-60min antes del evento
FIG. 4 — FLUJO DE FLEET PINGS Y RE-PING AUTOMÁTICO
NOTA TÉCNICA
Como las interacciones de Discord no encadenan estado entre sí, el custom_id del modal codifica el tipo de operación seleccionado en F1 — única manera de que F2 sepa qué categoría asignar al evento.
09

Sistema de Structure Timers (ST1)

Permite a los FCs introducir timers de estructuras directamente desde Discord, sin necesidad de abrir Alliance Auth. Un modal recoge los datos del timer; ST1 publica un mensaje en el canal PVP y simultáneamente inserta el evento en opcalendar con la categoría adecuada — quedando integrado con el resto del calendario corporativo.

  • 1
    Trigger desde modal Discord
    El FC pulsa un botón en el canal de timers. Cloudflare Worker responde con type: 9 y abre un modal con campos: estructura, sistema, fecha/hora, tipo de timer (armor/hull/anchor).
  • 2
    Validación y publicación
    ST1 valida el formato de fecha (debe ser YYYY-MM-DD estricto, sin prefijo =) y publica un embed enriquecido en el canal PVP con countdown.
  • 3
    Inserción en opcalendar
    INSERT directo en MariaDB con categoría «Estructuras PVP» y visibilidad PVP. El evento aparece automáticamente en el calendario corporativo del Auth y se dispara el resto de integraciones aguas abajo.
10

Workflows de Mantenimiento (M1 / M2 / M3)

Tres workflows programados que mantienen el ecosistema saneado sin intervención manual: auditoría de tokens ESI, recordatorios de flota y sincronización semanal de miembros entre Alliance Auth y Baserow.

🔍
M1 · Charlink Audit
Lunes 09:00. Cruza corptools_characteraudit.active con miembros activos. Reporta personajes sin token válido. Mensajes >4000 chars se chunkan automáticamente.
📣
M2 · Re-ping Flota
Detecta eventos próximos en ventana de 30–60 min antes del inicio. Reenvía recordatorio al canal del evento con asistentes confirmados.
🔄
M3 · Sync Semanal
Lunes 08:00. GROUP_CONCAT sobre las dos corps de la alianza, sincroniza Main + Personajes + Discord, publica resumen de altas en canal de seguridad.
SUTILEZA TÉCNICA — M3
El filtro date_equal sobre el campo Created on de Baserow requiere usar la API directa, ya que el nodo nativo de n8n no soporta filtros sobre tipos created_on. Implementado vía HTTP Request GET con query string filter__created_on__date_equal.
11

Dashboards Analíticos · Grafana

Grafana conectado directamente a MariaDB de Alliance Auth (read-only) provee dashboards en vivo sobre la actividad de la corporación. El primero ya está en producción; los siguientes están en construcción a medida que se valida el esquema real de cada módulo.

DASHBOARDESTADOFUENTESVISUALIZACIONES
PvP Producción killtracker_* KPIs · Timeline kills/losses · Top Killers · Top Losses
Finanzas En diseño wallet · bounties ISK por miembro · Bounties acumulados · Series temporales
Minería En diseño moonmining_* Leaderboard mensual · Histórico extracción · Composición de ore
Auditoría En diseño characteraudit · userprofile Charlinks fallidos · Miembros sin actividad · Tokens vencidos
12

Estructura de Datos Baserow

Siete tablas con relaciones bidireccionales modelan todo el dominio. Las relaciones se mantienen mediante campos Link y Lookup; las escrituras de Link usan arrays de IDs y nunca enteros sueltos — el nodo nativo de Baserow falla silenciosamente con esto.

REGLA CRÍTICA — LOOKUP FIELDS
Los campos Lookup son de solo lectura. Incluirlos en operaciones PATCH o PUT produce errores 400. Siempre referenciarlos solo en lectura.
MAIN
Personajes principales
Nombretexto
Discord IDtexto
Estadoselect
→ Personajeslink
→ Discordlink
Fecha creacióncreated_on
PERSONAJES
Alts y mains
Character Nametexto
Character IDtexto
Corporationtexto
Alliancetexto
→ Mainlink
CLAIM
Solicitudes alts
Tiposelect
Estadoselect
→ Ticket linklink
Nº Ticket Discordnúmero
→ Discord Stafflink
RECLUTAMIENTO
Tickets W1–W5
Transcriptarchivo
Capturaimagen
Estado / Faseselect
Fecha cierrefecha
ID Discordlookup
→ Main + Discordlink
DIRECTOR TICKETS
Consultas dirección
Tipo Ticketselect
Estado → Archivadoselect
Asuntotexto
Transcript textotexto largo
Transcriptarchivo
→ Claimlink
DISCORD
Cuentas Discord
Discord IDtexto
Usernametexto
Rolestexto
→ Mainlink
IT / SOPORTE
Tickets técnicos
Tipo Ticketselect
Discord Row IDnúmero
→ Mainlink
Estado → Archivadoselect
Transcriptarchivo
→ Claimlink
13

Roles y Permisos Discord

ROLACCESOFUNCIONES PRINCIPALES
CEO Total Acceso completo a todos los tickets y configuración del sistema
Director Alto Tickets de dirección, aprobación final de reclutamiento, cierre de tickets
Reclutadores Medio Pipeline W1–W5, primera votación de candidatos, cierre de tickets propios
Asuntos Internos Medio Notificaciones de aprobación intermedia, W4b auditoría con IA, canal permanente
Rekium IT Técnico Tickets IT/Soporte, claim de tickets técnicos
Miembros Básico Abrir tickets IT/Director, registrar alts, responder a flotas
14

Inventario Completo de Workflows n8n

WORKFLOWTRIGGERDESCRIPCIÓNESTADO
W0 Router Webhook (todas) Dispatcher central — parsea custom_id y despacha a todos los sub-workflows Producción
W1 Botón: solicitud Anti-duplicados + canal privado + bienvenida con botón cerrar incluido Producción
W2 Botón: verificar Main + GROUP_CONCAT alts vía MariaDB · HTTP PATCH a Baserow · split de personajes Producción
W3 Botón: formulario Modal Discord (type:9 desde CF Worker) → guarda en Reclutamiento Producción
W4 Botón: aprobar/rechazar Votación 3 etapas + informe auditoría → canal Asuntos Internos Producción
W4b Botón: auditoría Checklist interactivo + informe IA con datos MariaDB Validando
W5 Botón: cerrar ticket Transcript + imagen vía HTTP PATCH · 3 ramas paralelas de archivo Producción
A1 Botón: registrar alt Verify Alliance Auth + Claim con ID de ticket Discord guardado Producción
A2 Botón: claim alt Claim linking chain en ambas ramas (aprobación y rechazo) Producción
IT1 + IT1b Select menú + claim Ticket IT con tipo desde menú · IF node distingue claim vs selección Producción
D1b Select menú + claim Ticket Director con tipo · Claim linking chain Discord → Claim → Director Producción
F1 / F2 Select + Modal Pings de flota · INSERT opcalendar · embed con botones de asistencia Producción
ST1 Modal: timer Structure timers en canal PVP + INSERT opcalendar categoría 14 Producción
M1 Cron: Lun 09:00 Auditoría semanal de charlinks · chunking automático para Discord Producción
M2 Cron: cada 15 min Re-ping de flota en ventana 30–60 min antes del evento Producción
M3 Cron: Lun 08:00 Sync semanal de miembros · resumen altas a canal seguridad Producción
15

Lecciones Técnicas Clave

Aprendizajes condensados a lo largo de 18+ meses de iteración en producción. Cada uno surgió de un bug real y una vez identificado dejó de morder.

  • FILE
    Campos de archivo Baserow — HTTP PATCH obligatorio
    El nodo nativo Baserow doble-serializa los campos de archivo y los rompe sin error visible. Siempre usar HTTP PATCH con user_field_names=true y JSON.stringify en el body. Nunca usar el nodo Baserow para campos de tipo file.
  • LINK
    Campos Link — arrays de IDs, nunca enteros
    El nodo nativo Baserow envía enteros para campos Link. Baserow espera arrays [id]. La escritura falla silenciosamente: el row se actualiza, pero el campo Link queda vacío. Solución: HTTP PATCH con user_field_names=true enviando arrays explícitamente.
  • SQL
    MariaDB — JOIN correcto para personaje principal
    El JOIN debe pasar por authentication_userprofile.main_character_id para garantizar que se devuelve el personaje principal y no un alt cualquiera. GROUP_CONCAT es esencial para evitar problemas de múltiples filas en n8n. El campo discord_discorduser.uid es bigint y requiere CAST(... AS UNSIGNED).
  • ACK
    Contexto tras nodo ACK Discord
    Después del nodo ACK en sub-workflows, $json apunta a la respuesta del PATCH, no al payload original. Todos los nodos posteriores deben referenciar $('Parsear body').item.json explícitamente.
  • CF
    Modales — Cloudflare Worker responde síncronamente
    La apertura de modales (type: 9) debe devolverse directamente desde el Worker. No se puede delegar a n8n por el SLA de 3 segundos de Discord. Usar ctx.waitUntil() para reenviar el payload a n8n tras responder.
  • PERM
    Discord — READ_MESSAGE_HISTORY es esencial
    El permiso READ_MESSAGE_HISTORY (65536) es obligatorio para que mensajes ya publicados sean visibles a usuarios que se incorporen al canal. Sin él, los pings de flota no se ven cuando alguien entra después. El allow value correcto es 117760, no 52224.
  • FK
    MariaDB — FK chains complejas
    Para limpiezas con múltiples constraints encadenadas, el patrón fiable es SET FOREIGN_KEY_CHECKS = 0 / DELETE / SET FOREIGN_KEY_CHECKS = 1. Más rápido y predecible que reordenar borrados manualmente.
  • ESI
    Tokens ESI — refresh masivo sin re-registro
    Tokens marcados como expirados a menudo no están revocados, solo necesitan refresh. Iterar en Django shell con token.refresh() reactiva cientos de tokens sin pedir re-registro a los miembros. El comando esi_refresh_tokens de management no existe en todas las versiones de Auth.
  • SYS
    MariaDB — Codename del repo debe coincidir con Ubuntu
    El repo de MariaDB debe usar el codename correcto de Ubuntu (noble para 24.04, no jammy). Un mismatch causó que el paquete se desinstalara durante una actualización y el servicio fallara con dependencias de libaio1.
  • DISC
    Discord — Mensajes >4000 chars requieren chunking
    La API rechaza con 400 cualquier content mayor de 4000 caracteres. Para mensajes generados (auditorías, listados de miembros), implementar chunking que respete saltos de línea y separadores semánticos.
16

Stack de Competencias Demostradas

Resumen de las habilidades técnicas aplicadas en este sistema. Cada bloque representa un dominio donde he ido del «no sé qué es» al «lo tengo en producción y lo mantengo».

Automatización · Orquestación
  • n8n self-hosted en NAS
  • 14+ workflows en producción
  • Patrón router único + sub-workflows
  • Triggers: webhook, cron, manual
  • Workflow supervisor con Error Trigger
Integración Discord
  • Bot custom vía Interactions API
  • Botones, select menus, modales
  • Verificación Ed25519 en CF Worker
  • Embeds, mentions, ephemeral
  • Permisos avanzados de canal
Bases de Datos
  • MariaDB 10.11 administración
  • SSH tunnel desde n8n
  • Queries con JOIN, GROUP_CONCAT, CAST
  • Baserow API (HTTP) y nodo nativo
  • Esquema relacional con Link/Lookup
Edge Computing
  • Cloudflare Workers en producción
  • Verificación criptográfica
  • Routing y respuestas síncronas
  • ctx.waitUntil() para fetch asíncrono
  • Coste cero hasta 100k req/día
Sistemas y DevOps
  • Ubuntu 24.04 VPS bare-metal
  • Gestión de repos y dependencias
  • Synology NAS para self-hosting
  • Backups, snapshots y rolling updates
  • Django shell para Alliance Auth
Observabilidad y Datos
  • Grafana sobre MariaDB read-only
  • Dashboards: PvP, finanzas, minería, auditoría
  • KPIs y series temporales
  • Alertas y monitorización
  • Modelado de queries reutilizables
IA aplicada
  • Workflow W4b con asistente IA
  • Generación de informes automáticos
  • Checklist interactivos guiados
  • Prompt engineering para precisión
  • Integración con datos estructurados
Diseño de sistemas
  • Arquitectura distribuida 5 plataformas
  • Idempotencia y anti-duplicados
  • Decisiones coste cero / self-hosted
  • Documentación viva del sistema
  • Iteración basada en logs y bugs reales
17

Próximas Fases

📊
Grafana — Dashboards restantes
Finanzas (wallet + bounties), Minería (leaderboards moonmining) y Auditoría (charlinks + tokens). Conectados a MariaDB read-only.
🤖
W4b — Validación final
Completar con datos reales de producción: fix de mención de candidato y nombre correcto en el informe de auditoría.
Tracking de inactividad
Workflow programado que detecta miembros sin actividad en N días y propone acción al staff.
🛡
Workflow Supervisor
Phase 1 con Error Trigger nativo de n8n: monitoriza el resto de workflows y notifica fallos al canal técnico. Coste cero.
🚀
Alliance Auth v5 + MariaDB 11.8
Migración planificada en ventana única cuando Auth v5 lance. MariaDB 10.11.x se mantiene estable hasta entonces.
📦
W2 — Validación post-fix
Confirmar que el fix de campos Link y el auto-vínculo Main↔Discord funciona end-to-end con el próximo candidato real.