DATASHEETVENTICINQUE, MAUROFrontend · Full-Stack

Rev. 2026.08supersedes 2025.11

Español

Copied

A-05

Madernoa

Materiales para arquitectura y construcción del NOA. Landing en Astro, bot de WhatsApp y un servidor MCP que le da el catálogo al bot.

This sheet is not translated yet. Shown in Spanish.

Specification
ClientMadernoa · Tucumán
Typefreelance
PlatformAstro · Cloudflare
Year2026
RoleFull-stack, end to end
StackAstro 5 · CSS nativo (oklch) · Cloudflare Workers · Supabase Postgres · Hyperdrive · pg_trgm · Zod
Commits landing32 commits
Commits MCP46 commits

Live site →

Screenshot of the Madernoa interface, at madernoa.com
FIG A-05madernoa.com1440×9002026-08-18

Contexto

Madernoa vende materiales de construcción en el norte argentino. Necesitaba dos cosas que suelen tratarse por separado: presencia web propia y un bot de WhatsApp que sepa responder por precio y stock sin que alguien copie y pegue de una planilla.

Opciones

Para el bot, lo habitual es cargarle un PDF del catálogo o pegarle el listado en el prompt. Funciona el primer día y envejece mal: el precio cambia y el bot sigue afirmando el viejo, con la misma seguridad.

Decisión

Separar la landing del dato. La landing es Astro 5 con CSS nativo y oklch, sin framework de estilos: es una landing, no necesita 40 KB de utilidades.

El catálogo va aparte, en Postgres sobre Supabase, y se expone al bot como un servidor MCP corriendo en un Cloudflare Worker. El bot no tiene el catálogo adentro: lo consulta. Cuando cambia un precio en la planilla, el bot responde el precio nuevo sin que nadie toque el bot.

Dos detalles de base de datos que hacen la diferencia en búsqueda en español: unaccent para que «cemento» encuentre «Cemento», y pg_trgm para que un nombre mal escrito igual encuentre el producto. Entre el Worker y Postgres va Hyperdrive, porque abrir una conexión nueva por consulta desde el edge es caro.

Verificación

madernoa.com responde 200. La ingesta es un script de Node que lee el Excel del cliente y lo normaliza; los tipos y los esquemas Zod son compartidos entre los paquetes del monorepo.

Consecuencias

Son tres piezas en vez de una, y hay que saber cuál falló cuando algo no responde. A cambio, el dato tiene un solo dueño y el bot no puede mentir por estar desactualizado.

← Archive