Integrar un asistente conversacional con IA directamente en mi propio portfolio, con memoria persistente entre mensajes, sobre hosting compartido accedido solo por FTP — sin backend tradicional ni control total del servidor.
Construí el asistente en PHP puro (chat.php) con un frontend en
JavaScript (asistente.js), conectado a la API de Groq. Al
integrar MySQL (con sus consultas SQL) para dar memoria persistente al chat, diagnostiqué y
resolví yo misma tres problemas reales: errores de configuración del host, columnas que
faltaban en el esquema de la base de datos, y una doble lectura del input stream de
PHP que rompía las peticiones. Entendí cada fallo antes de aplicar la
corrección.
Asistente funcionando en producción, con memoria persistente en MySQL, corriendo en hosting compartido con las limitaciones que eso implica. Actualicé además su system prompt con conocimiento de COBOL, adaptándolo a mi propio objetivo profesional.
Sin backend tradicional ni acceso root al servidor, integré MySQL para que Mochi recordara la conversación entre mensajes. El reto no fue conectar la base de datos — fue depurar los fallos reales que aparecieron al hacerlo: configuración del host mal interpretada, columnas ausentes en el esquema, y una doble lectura del input stream de PHP que provocaba que las peticiones llegaran vacías o duplicadas.
Diseñé el system prompt para que Mochi se mantenga siempre dentro de su propósito: hablar sobre mí, mis proyectos y mi experiencia. Si le preguntan por algo ajeno a eso, lo dice explícitamente en vez de intentar responder cualquier cosa — una decisión pensada tanto para no desviar la conversación como para no gastar tokens de la API en preguntas fuera de contexto.
Diseñé el system prompt para que Mochi se mantenga siempre dentro de su propósito: hablar sobre mí, mis proyectos y mi experiencia. Si le preguntan por algo ajeno a eso, lo dice explícitamente en vez de intentar responder cualquier cosa — una decisión pensada tanto para no desviar la conversación como para no gastar tokens de la API en preguntas fuera de contexto.
// Leer el cuerpo de la petición UNA sola vez
// y reutilizar la variable — php://input no se
// puede leer de forma fiable más de una vez.
$raw = file_get_contents('php://input');
$body = json_decode($raw, true);
if (empty($body['messages']) || !is_array($body['messages'])) {
http_response_code(400);
echo json_encode(['error' => 'Faltan mensajes']);
exit;
}
$messages = array_slice($body['messages'], -10);
Asistente funcionando en vivo en mi propio portfolio, sobre hosting compartido, sin backend dedicado.
Conversación guardada en MySQL, con los bugs de host, esquema e input stream diagnosticados y resueltos.
System prompt actualizado con conocimiento de COBOL para apoyar mi propia búsqueda de empleo mainframe.
Frontend, email development y proyectos web desarrollados para clientes y entornos reales.