Social Bot Scheduler
v4.10.0 · laboratorio 100% local

Un contrato, 19 integraciones, 18 motores de datos

Social Bot Scheduler es una matriz tecnológica: en cada caso un emisor publica un post, n8n hace de puente y un receptor escrito en otro lenguaje lo persiste en un motor de datos distinto. Mismo JSON, mismos guardrails, 20 combinaciones que se levantan una a una con un solo comando.

19/20 casos operativos 18 motores de datos 18 lenguajes y frameworks Docker Compose por perfiles MIT
20casos definidos
19operativos con Docker
18motores de datos
18lenguajes y frameworks
8080+idfórmula de puertos

Cómo funciona

El emisor no sabe nada del receptor: publica contra un webhook de n8n y ahí termina su responsabilidad. El workflow aplica los guardrails y entrega al receptor, que persiste en su propio motor. Cambiar de lenguaje o de base de datos no cambia el contrato.

Emisor Python, Go, Rust, Zig, Swift, F#, Elixir, Java... n8n webhook + workflow idempotencia, reintentos, circuit breaker, DLQ Receptor HTTP POST /webhook puerto 8080 + id Motor de datos SQL, NoSQL, grafo, vectorial, columnar... Mismo contrato JSON en los 19 casos: cambia el lenguaje y el motor, no la interfaz.

Qué demuestra

Tres cosas que suelen quedarse en la teoría y aquí se ejecutan.

Integración políglota real

18 lenguajes y frameworks conviviendo con 18 motores bajo el mismo contrato JSON: relacional, documental, clave-valor, columnar, grafo, vectorial, series temporales, bitemporal y streaming.

Guardrails de resiliencia

No es un «hola mundo» con webhook: cada caso comparte las mismas defensas.

  • Idempotencia por clave de evento
  • Reintentos con backoff
  • Circuit breaker en el emisor
  • Dead letter queue para lo que no entra

Seguridad runtime

Todo escucha en 127.0.0.1, sin secretos en el repositorio, imágenes fijadas por versión y escaneo de contenedor y dependencias en cada push.

La matriz de casos

Cada tarjeta es una carpeta autocontenida en cases/ con emisor, receptor, workflow de n8n y su documentación. El puerto sale siempre de la fórmula 8080 + id, así que nunca colisionan.

01 operativo :8081 · --profile case01

Python → n8n → PHP

Pythonn8nPHPMySQL

Integración de bot Python con dashboard PHP Vanilla

02 operativo :8082 · --profile case02

Python → n8n → Go

Pythonn8nGoMariaDB

Integración de bot Python con dashboard escrito en Go (Gin)

03 operativo :8083 · --profile case03

Go → n8n → Node.js

Gon8nNode.jsPostgreSQL

Integracion de emisor en Go con destino Node.js

04 operativo :8084 · --profile case04

Node.js → n8n → FastAPI

Node.jsn8nPythonSQLite

Integración de Node.js con backend Python FastAPI

05 operativo :8085 · --profile case05

Laravel → n8n → React

PHPn8nReactMongoDB

Integracion de comando Laravel con frontend React

06 operativo :8086 · --profile case06

Go → n8n → Symfony

Gon8nPHPRedis

Integración de emisor Go con framework Symfony

07 operativo :8087 · --profile case07

Rust → n8n → Ruby

Rustn8nRubyCassandra

Integración de alta performance Rust con Ruby Sinatra

08 operativo :8088 · --profile case08

C# → n8n → Flask

C#n8nPythonSQL Server

Integración de .NET con microservicio Flask

09 operativo :8089 · --profile case09

Python → n8n → FastAPI Gateway

Pythonn8nPythonDuckDB

Integracion de bot Python con Integration Gateway en FastAPI, autenticacion por X-API-Key y persistencia DuckDB

10 operativo :8090 · --profile case10

Java (Spring Boot) → n8n → Kotlin (Ktor) + PostgreSQL

Javan8nKotlinPostgreSQL

Cobertura JVM: emisor Spring Boot (MVC bloqueante) y receptor Ktor (no-bloqueante con corrutinas) persistiendo en PostgreSQL.

11 operativo :8091 · --profile case11

Elixir → n8n → Erlang (Cowboy) + Mnesia

Elixirn8nErlangMnesia

Modelo de actores BEAM: emisor Elixir y receptor Erlang/Cowboy con persistencia Mnesia embebida en el runtime.

12 operativo :8092 · --profile case12

Python (LLM) → n8n → FastAPI RAG + pgvector

Pythonn8nPythonpgvector

Pipeline RAG: el receptor FastAPI embebe cada post (vector 256d) en pgvector y expone busqueda semantica por similitud coseno (/search).

13 operativo :8093 · --profile case13

Node.js + Kafka → n8n → Go consumer → ClickHouse

Node.jsn8nGoClickHouse

Event streaming con Kafka (KRaft) + sink columnar ClickHouse. El receiver Go produce en /webhook y una goroutine consumer proyecta los eventos en ClickHouse (CQRS).

14 operativo :8094 · --profile case14

Next.js → n8n → Supabase (Postgres + RLS)

Node.jsn8nNode.jsPostgreSQL

Caso BaaS: nucleo de Supabase (Postgres + PostgREST + Row Level Security). Next.js emite; el receiver persiste via PostgREST gobernado por politicas RLS del rol web_anon.

15 operativo :8095 · --profile case15

Go (gRPC server) → n8n → Python (gRPC client) + CockroachDB

Gon8nPythonCockroachDB

Protocolo binario gRPC (servidor Go + cliente Python) sobre CockroachDB. El receiver Python traduce el contrato REST del laboratorio a llamadas gRPC unary contra el servidor Go.

16 operativo :8096 · --profile case16

Apollo GraphQL → n8n → Hasura (TimescaleDB)

Node.jsn8nNode.jsTimescaleDB

Emisor Apollo GraphQL (schema-first) que reenvia posts vencidos a n8n; un micro-receiver traduce REST a mutaciones/queries GraphQL sobre Hasura + TimescaleDB (database-first).

17 operativo :8097 · --profile case17

Rust (MQTT) → n8n → Node (sub) → InfluxDB

Rustn8nNode.jsInfluxDB

Patron pub/sub IoT: emisor Rust publica en Mosquitto, un subscriber Node persiste en InfluxDB; el receiver REST reinyecta la entrega de n8n en el mismo bus MQTT.

18 operativo :8098 · --profile case18

Zig → n8n → Crystal (Kemal) + Neo4j

Zign8nCrystalNeo4j

Lenguajes emergentes: emisor Zig (sin GC) y receptor Crystal/Kemal que persiste nodos (:Post) en el grafo Neo4j via su API HTTP transaccional (Cypher).

19 pendiente :8099 · --profile case19

F# (.NET) → n8n → Clojure (Ring) + XTDB

F#n8nClojureXTDB

Paradigma funcional puro multi-runtime: emisor F# (.NET) y receptor Clojure/Ring con XTDB bitemporal embebido in-process (sin contenedor de BD).

20 operativo :8100 · --profile case20

Swift → n8n → Dart (Shelf) + Firestore emulator

Swiftn8nDartFirestore

Stack mobile-backend server-side: emisor Swift (Linux) y receptor Dart/Shelf que persiste en el emulador de Firestore (Firebase Emulator Suite) via REST.

Quickstart

Diseñado para ejecutarse solo en local. El modo por defecto no expone nada fuera de localhost.

1 · Núcleo seguro

bash
cp .env.example .env
docker compose up -d

Levanta n8n en :5678 y el Master Dashboard en :8080.

2 · Un caso concreto

bash
docker compose --profile case12 up -d
curl http://localhost:8092/health

Cada perfil arrastra su receptor y su motor de datos, y nada más.

Documentación

Todo el material del repositorio, publicado como páginas HTML navegables.

Índice completo de documentación