En producción · Instagram DM · Ecuador · Sistema completo In production · Instagram DM · Ecuador · Full system

Mikaela
Montenegro.
Mikaela
Montenegro.

Una artista plástica ecuatoriana manejaba su comunidad de IG a mano — DMs sin responder, escuela sin sistema, obra sin canal de venta online. Construí el bot, el dashboard y el sitio web que usa hoy.

An Ecuadorian visual artist was managing her IG community by hand — unanswered DMs, school with no system, artwork with no online sales channel. I built the bot, dashboard, and website she uses today.

500+
Conversaciones gestionadas
Conversations managed
Bot activo en IG
Active IG bot
3
Módulos en producción
Modules in production
Bot · Dashboard · Web
Bot · Dashboard · Web
RAG
Bot conoce la obra real
Bot knows real artwork
Búsqueda semántica
Semantic search
Stripe
Checkout integrado
Integrated checkout
Obras · Merch · Talleres
Art · Merch · Workshops
El problema
The problem

Una comunidad real
sin ningún sistema.

A real community
with zero systems.

Mikaela tiene seguidores activos en Instagram, alumnos en su escuela permanente y obra para vender — pero todo ocurría a mano, sin trazabilidad ni automatización.

Mikaela has active followers on Instagram, students in her permanent school, and artwork to sell — but everything was done by hand, with no traceability or automation.

01
DMs sin responder
Unanswered DMs

La bandeja de Instagram acumulaba mensajes sobre precios de obra, talleres e información general. Responder a mano era lento e inconsistente — muchos mensajes quedaban sin respuesta.

The Instagram inbox accumulated messages about artwork pricing, workshops, and general info. Replying manually was slow and inconsistent — many messages went unanswered.

02
Escuela sin control
School without control

La escuela permanente de Mikaela no tenía sistema de asistencia ni seguimiento de pagos. ¿Quién asistió? ¿Quién pagó su período? ¿Cuándo vence el siguiente ciclo? Todo estaba en la memoria o en notas.

Mikaela's permanent school had no attendance or payment tracking. Who attended? Who paid for their period? When does the next cycle expire? Everything lived in memory or scattered notes.

03
Sin canal de venta online
No online sales channel

No había forma de comprar obra, merch o inscribirse a talleres desde el sitio web. Las ventas dependían de DMs y coordinación manual de transferencias — fricción pura para el comprador.

There was no way to buy artwork, merch, or sign up for workshops from the website. Sales depended on DMs and manual transfer coordination — pure friction for the buyer.

04
Bot genérico sin contexto
Generic bot with no context

Un bot de IA estándar no conoce la obra de Mikaela, sus precios reales, su escuela ni su estilo. Se necesitaba RAG para que el bot hablara con autoridad sobre su trabajo específico.

A standard AI bot doesn't know Mikaela's artwork, real prices, school, or style. RAG was needed so the bot could speak with authority about her specific work.

La solución
The solution

Tres módulos,
un ecosistema integrado.

Three modules,
one integrated ecosystem.

Bot con RAG para los DMs, dashboard de operaciones para la escuela y las conversaciones, y sitio web público con checkout Stripe para vender obra y merch.

RAG-powered bot for DMs, operations dashboard for the school and conversations, and a public website with Stripe checkout to sell artwork and merch.

01 — Bot IG + RAG
Agente que conoce la obra de Mikaela
Agent that knows Mikaela's work

GPT-4o con sistema de RAG sobre el catálogo real de Mikaela: obra, precios, técnicas, escuela, talleres. El bot responde preguntas específicas, informa sobre obra disponible, deriva a compra y escala conversaciones complejas a Mikaela.

GPT-4o with RAG over Mikaela's real catalog: artwork, prices, techniques, school, workshops. The bot answers specific questions, informs about available work, guides to purchase, and escalates complex conversations to Mikaela.

GPT-4o RAG / pgvector Instagram Graph API Campañas por post
02 — Dashboard
Operaciones, escuela y conversaciones
Operations, school, and conversations

Panel que Mikaela abre todos los días: conversaciones con filtros de escalados/tomados, escuela permanente con asistencia por alumno y ciclos de pago, campañas de respuesta automática por post, y control de bot por conversación.

Panel Mikaela opens every day: conversations with escalated/taken filters, permanent school with per-student attendance and payment cycles, automatic response campaigns per post, and per-conversation bot control.

Vanilla JS Supabase Realtime Escuela permanente Campañas IG
03 — Web pública
Sitio + checkout Stripe para obra y merch
Website + Stripe checkout for art & merch

Sitio público de Mikaela con galería de obra reciente, sección de merch (pañuelos, totes) y exposiciones. Checkout directo con Stripe — el comprador elige, paga y listo, sin pasar por DMs.

Mikaela's public site with recent artwork gallery, merch section (scarves, totes), and exhibitions. Direct Stripe checkout — the buyer selects, pays, and done, without going through DMs.

Stripe Checkout Vercel Supabase Storage weserv.nl proxy
Qué construí
What I built

Cada parte,
desde cero.

Every part,
from scratch.

Bot de IG con RAG
IG Bot with RAG
Agente conversacional que conoce el catálogo real
Conversational agent that knows the real catalog

El bot recibe DMs en Instagram, consulta el índice de RAG sobre la obra de Mikaela (embeddings en pgvector), y responde con contexto real: precios de obras específicas, técnicas, disponibilidad, información de la escuela. Detecta cuándo escalar a Mikaela y pausa el bot por conversación cuando ella toma control. Campañas de respuesta automática activadas por post_id — cuando Mikaela publica, el bot responde a los comentarios con mensajes personalizados según la publicación.

The bot receives Instagram DMs, queries the RAG index on Mikaela's work (embeddings in pgvector), and responds with real context: specific artwork prices, techniques, availability, school info. Detects when to escalate to Mikaela and pauses the bot per conversation when she takes over. Automatic response campaigns triggered by post_id — when Mikaela posts, the bot responds to comments with messages customized per publication.

RAG sobre catálogo real Escalación inteligente Smart escalation Bot pausable por conv. Per-conv. bot pause Campañas por post_id Post_id campaigns
Dashboard — Conversaciones
Dashboard — Conversations
Panel de conversaciones con filtros y control de bot
Conversation panel with filters and bot control

Vista de todas las conversaciones activas de Instagram con búsqueda en tiempo real. Filtros por estado: Todos, Escalados (⚠ requieren atención de Mikaela) y Tomados (bot pausado, Mikaela conversando directamente). Desde cada conversación: leer el historial, responder, pausar/reactivar el bot, y marcar como resuelta.

View of all active Instagram conversations with real-time search. Filters by state: All, Escalated (⚠ require Mikaela's attention) and Taken (bot paused, Mikaela conversing directly). From each conversation: read history, reply, pause/reactivate the bot, and mark as resolved.

Filtros: Todos · Escalados · Tomados Filters: All · Escalated · Taken Respuesta directa desde el dashboard Direct reply from dashboard Control de bot por conversación Per-conversation bot control
Dashboard — Escuela permanente
Dashboard — Permanent school
Control de asistencia, períodos y pagos por alumno
Per-student attendance, periods, and payment control

Módulo completo para la escuela permanente de Mikaela. Cada alumno tiene tarjeta con asistencia dot-by-dot por período (28 días / 4 clases), control de pagos por ciclo, fecha de inicio editable de cada período, y estado activo/inactivo. Al completar 4 clases en un período aparece botón para confirmar pago y habilitar el siguiente ciclo. Todos los datos persisten en Supabase — funciona desde cualquier dispositivo.

Full module for Mikaela's permanent school. Each student has a card with dot-by-dot attendance per period (28 days / 4 classes), per-cycle payment control, editable start date for each period, and active/inactive status. When 4 classes complete in a period, a button appears to confirm payment and enable the next cycle. All data persists to Supabase — works from any device.

Asistencia por punto (dot UI) Dot-by-dot attendance UI Ciclos de 28 días encadenados Chained 28-day cycles Pagos confirmables por período Per-period payment confirmation Persistencia en Supabase Supabase persistence
Dashboard — Campañas
Dashboard — Campaigns
100+ DMs gestionados el primer día de un reel
100+ DMs handled on a reel's first day

Cuando Mikaela publica en Instagram activa una campaña desde el dashboard: vincula el post_id con un mensaje personalizado. Cada persona que comenta ese post recibe automáticamente un DM del bot con el mensaje de la campaña. En el lanzamiento de un reel, más de 100 personas escribieron el primer día — el bot respondió a todas sin intervención manual. Sin el sistema, Mikaela hubiera tenido que responder cada DM a mano.

When Mikaela posts on Instagram she activates a campaign from the dashboard: links the post_id to a custom message. Everyone who comments on that post automatically receives a DM from the bot. On a reel launch, over 100 people wrote on day one — the bot handled every single message without manual intervention. Without the system, Mikaela would have had to reply to each DM by hand.

Activación por post_id Post_id activation Mensaje personalizado por campaña Custom message per campaign 100+ DMs · día 1 · sin intervención 100+ DMs · day 1 · zero manual work
Sitio web público
Public website
mikaelamontenegro.com — galería, merch y checkout
mikaelamontenegro.com — gallery, merch & checkout

Sitio público de Mikaela con galería de obra reciente, sección de exposiciones, y tienda con checkout directo vía Stripe. El comprador puede adquirir obra original, pañuelos y totes sin pasar por DMs. Las imágenes se sirven desde Supabase Storage proxeadas por weserv.nl para reducir egress al mínimo.

Mikaela's public site with recent artwork gallery, exhibitions section, and store with direct Stripe checkout. Buyers can purchase original artwork, scarves, and totes without going through DMs. Images served from Supabase Storage proxied through weserv.nl to minimize egress.

Stripe Checkout Obra original · Merch · Talleres Original art · Merch · Workshops Proxy de imágenes (weserv) Image proxy (weserv) Vercel
RAG pipeline
RAG pipeline
Búsqueda semántica sobre el universo de Mikaela
Semantic search over Mikaela's universe

Pipeline de RAG sobre el catálogo, precios, técnicas, biografía y escuela de Mikaela. Ingestión: chunks de contenido → embeddings con text-embedding-3-small → vectores en pgvector (Supabase). Query: la pregunta se embeds, se recuperan los 5 fragmentos más cercanos por similitud coseno, se pasan a GPT-4o con contexto real. El bot responde como si conociera la obra de primera mano.

RAG pipeline over Mikaela's catalog, prices, techniques, biography and school. Ingestion: content chunks → text-embedding-3-small embeddings → vectors in pgvector (Supabase). Query: question is embedded, top-5 chunks retrieved by cosine similarity, passed to GPT-4o with real context. The bot responds as if it knows the work firsthand.

pgvector + HNSW text-embedding-3-small Similitud coseno Cosine similarity Top-5 contexto dinámico Dynamic top-5 context
Resultados
Results

En producción
y creciendo.

Live
and growing.

500+
Conversaciones gestionadas por el bot
Conversations managed by the bot
3
Módulos en producción: bot · dashboard · web
Modules live: bot · dashboard · web
$0
Costo de egress de imágenes tras proxy weserv
Image egress cost after weserv proxy
Stripe
Checkout en 3 categorías: obra · merch · talleres
Checkout in 3 categories: art · merch · workshops

Sistema activo desde 2025. El bot gestiona DMs de Instagram en tiempo real, la escuela corre en Supabase como fuente de verdad, y el sitio procesa pedidos directamente vía Stripe.

System live since 2025. The bot manages Instagram DMs in real time, the school runs on Supabase as source of truth, and the site processes orders directly via Stripe.

Stack

Tecnologías
usadas.

Technologies
used.

Node.js Express GPT-4o Instagram Graph API Supabase PostgreSQL pgvector text-embedding-3-small Stripe Railway Vercel Cloudflare weserv.nl Vanilla JS