Framework abierto · LLM local · MIT

Tu sitio se convierte en un chat que atiende de verdad

transformsite lee todo el sitio y tu base de conocimiento y pone, en lugar de los formularios, un agente de conversación en WhatsApp, Telegram, correo o widget. Responde citando la fuente, dice "no sé" cuando no sabe y ejecuta servicios como agendar una cita, abrir un ticket o enviar al sistema antiguo.

Banner: tu sitio se vuelve chat — respuestas con fuente, servicios en YAML, WhatsApp y Telegram
Qué es

El sitio es la fuente de verdad; la conversación es el canal

La idea viene de America.gov (2026), que reunió cerca de 29 mil sitios del gobierno estadounidense en un único punto de entrada conversacional. transformsite es la versión abierta y simple de esa idea para empresas, escuelas y organismos públicos.

Los seis pilares de transformsite: respuestas con fuente, servicios en YAML, WhatsApp y Telegram, formulario que se vuelve conversación, panel y traspaso a humano, LLM local

📚 Responde con fuente

Todo el sitio, más PDF y documentos, se convierte en un índice de búsqueda híbrida (palabras + significado). Cada respuesta trae el enlace de la página usada. Sin fuente, el bot dice "no sé" y ofrece pasar con el equipo.

🧩 Servicio = un archivo YAML

Agendar, contacto, duplicado de factura… Declaras los datos a recopilar, la confirmación y la acción. El motor conversa: acepta todo en una frase, correcciones, dudas a mitad de camino, cancelar y retomar días después.

🔒 Local y con LGPD

LLM en Ollama (o Claude Code / Codex con tu suscripción), índice en un archivo SQLite, datos personales enmascarados en los logs, retención configurable, código por correo antes de un dato sensible.

Cómo funciona

Del sitio heredado a la atención por conversación

Seis fases, cada una con su propio comando y un criterio de terminado medido.

inventory→ ingest→ respuestas con fuente→ servicios YAML→ canales→ convert→ panel + métricas

F0–F1 · Conocer y responder

inventory lista páginas y formularios. ingest lee el sitio (sitemap, enlaces, robots.txt) y los documentos locales. El RAG responde solo con fragmentos y cita la fuente.

F2–F3 · Servicios y canales

Máquina de slots con tipos validados (CPF, correo, teléfono, CEP, fecha y hora en portugués), agenda local, tickets. El mismo motor atiende Telegram, WhatsApp (Evolution o Cloud API), correo y widget.

F4–F6 · Legado, operación, deploy

convert transforma un formulario HTML/PDF en un servicio, que sigue enviando al sistema antiguo. Panel para tomar conversaciones, aprobar servicios y ver métricas. Docker y VPS listos.

Requisitos previos

Lo que necesitas

Python 3.11+ y un LLM. Con GPU, lo habitual es un modelo local; sin GPU, usa un modelo más pequeño o tu suscripción.

Python + transformsite

Instala la CLI transformsite.

# pipx (recomendado)
pipx install git+https://github.com/inematds/transformsite

Ollama (LLM local)

Modelo de chat + embeddings bge-m3. Sin GPU: qwen2.5:7b.

ollama pull qwen3.6:35b-a3b
ollama pull bge-m3

O: tu suscripción (experimental)

En transformsite.yaml, usa Claude Code o Codex CLI ya iniciados, sin clave de API.

# transformsite.yaml
llm:
  provider: claude_cli   # o codex_cli
Guía de uso · paso a paso

De cero al bot respondiendo en 7 pasos

Comandos reales, los mismos usados en el piloto con el sitio inema.club.

1

Crea el proyecto

Genera la configuración, dos servicios de ejemplo (agendar y contacto), una herramienta de ejemplo, los escenarios de prueba y un token aleatorio para el panel.

transformsite init meubot --org "Minha Empresa" --url https://www.minhaempresa.com.br --contact atendimento@minhaempresa.com.br
cd meubot
2

Haz el inventario del sitio (Fase 0)

Rastrea el sitio y guarda inventario/paginas.csv e inventario/formularios.csv, con los formularios ordenados por prioridad (agendamiento y contacto primero).

transformsite inventory --sitemap https://www.minhaempresa.com.br/sitemap.xml   # inema.club: 387 páginas
3

Convierte el sitio en base de conocimiento (Fase 1)

Lee todo el sitio y los documentos de docs/ (md, pdf), los divide en fragmentos y calcula embeddings locales. Al volver a ejecutarlo solo se reprocesan las páginas que cambiaron.

transformsite ingest        # inema.club: 386 páginas → 1.512 fragmentos en 249 s
transformsite ask "Preciso saber programar para fazer o curso CAIP?"
4

Declara los servicios (Fase 2)

Edita services/*.yaml: datos a recopilar, confirmación, acción y respuesta. Las herramientas propias van en tools/*.py. Valida antes de subir.

# services/agendar.yaml (fragmento)
slots:
  - {name: nome,  type: text,  prompt: "Qual é o seu nome?"}
  - {name: email, type: email, prompt: "Qual e-mail para o convite?"}
  - name: data_hora
    type: datetime
    options_from: tool:agenda.slots_livres
action: {tool: agenda.criar_evento, idempotency_key: "{session_id}:{data_hora}"}

transformsite validate      # 0 error(es)
5

Mide antes de publicar

Ejecuta las preguntas de prueba y los guiones de conversación. golden genera un borrador de preguntas a partir de tu propia base para que lo revises.

transformsite golden --n 50                # borrador → revisa → tests/golden.jsonl
transformsite eval --golden tests/golden.jsonl   # cita válida, "no sé", inyección
transformsite eval --scenarios tests/cenarios --real-llm   # 13/13 en el piloto
6

Activa los canales (Fases 3 a 5)

El widget web ya viene activado. Telegram, WhatsApp y correo se activan con las claves en el .env. En el panel /admin, un agente toma una conversación (el bot calla) y la devuelve al terminar.

transformsite serve --port 8000
# en tu sitio:
<script src="https://SEU_DOMINIO/widget.js"></script>
# formulario antiguo → servicio (nace review: pending)
transformsite convert https://www.minhaempresa.com.br/contato
7

Publica en un VPS

Un comando instala Docker y levanta app + Ollama + Evolution API (WhatsApp) + Caddy con HTTPS automático.

curl -fsSL https://raw.githubusercontent.com/inematds/transformsite/main/deploy/vps/install.sh | sudo bash -s -- \
  --domain bot.suaempresa.com.br --site https://www.suaempresa.com.br --whatsapp
Ejemplos

Piloto: INEMA.CLUB

El sitio inema.club (cursos, guías, eventos y base de conocimiento) fue el primero en volverse chat. Resultado medido con 73 preguntas de prueba y el LLM local: 92,6% de las respuestas con fuente válida, 100% de "no sé" en las preguntas fuera de alcance, 100% de los intentos de inyección bloqueados y latencia p95 de 2,6 s.

Widget de chat respondiendo sobre un curso de INEMA.CLUB con el enlace de la fuente
Widget en el sitio: la respuesta viene con la página usada como fuente.
Panel administrativo de transformsite en la pantalla de métricas
Panel /admin: métricas (resolución sin humano, traspaso, citas, latencia), además de conversaciones, cola, servicios y base.
Roadmap

Hacia dónde va

La v1 entrega las seis fases. La v2 empaqueta todo en una imagen Docker lista.

v1 ✅
Framework completoInventario, base con fuente, servicios YAML, Telegram/WhatsApp/correo/web, conversor de formularios, panel, métricas, deploy en VPS.
v2
Bot listo en una imagentransformsite bake: tras traer toda la base y definir los servicios, genera una imagen Docker con índice, servicios y manifiesto de entrega. Un docker run y está en el aire.
v3
Transacciones e identidadLogin del sistema heredado y gov.br, adjuntos y OCR, PDF rellenado, audio de WhatsApp con Whisper local.
v4
Escala y varios clientesPostgres + pgvector, colas, vLLM, varios bots por instalación, evaluación continua en cada nueva lectura del sitio.