[{"data":1,"prerenderedAt":350},["ShallowReactive",2],{"latest-es":3,"projects-es":104},[4],{"id":5,"title":6,"body":7,"date":92,"description":93,"extension":94,"meta":95,"navigation":96,"path":97,"seo":98,"stem":99,"tags":100,"__hash__":103},"blog_es\u002Fblog\u002Fhola-kcode.md","Lanzo kcode, mi estudio de desarrollo",{"type":8,"value":9,"toc":84},"minimark",[10,14,21,26,29,32,36,39,55,58,62,65,69,78,81],[11,12,13],"p",{},"Durante más de cuatro años he trabajado para empresas construyendo productos digitales. Empecé escribiendo código, fui asumiendo más responsabilidades y, con el tiempo, me tocó liderar equipos: coordinar personas, ordenar prioridades y asegurarme de que lo que construíamos resolviera un problema real.",[11,15,16,17],{},"Esa etapa me enseñó casi todo lo que sé. Hoy empiezo una nueva: ",[18,19,20],"strong",{},"lanzo kcode, mi propio estudio de desarrollo.",[22,23,25],"h2",{"id":24},"por-qué-ahora","Por qué ahora",[11,27,28],{},"Liderar equipos me mostró que la parte más difícil de un proyecto casi nunca es el código. Es entender bien qué se necesita, decidir qué construir primero y mantener a todos en la misma página. Quiero llevar esa forma de trabajar directamente a los negocios que la necesitan, sin capas de por medio.",[11,30,31],{},"Emprender también es un reto personal. Implica vender, decidir y responder por cada entrega. Es justo el tipo de reto que estaba buscando.",[22,33,35],{"id":34},"qué-hace-kcode","Qué hace kcode",[11,37,38],{},"Me enfoco en dos tipos de proyectos:",[40,41,42,49],"ul",{},[43,44,45,48],"li",{},[18,46,47],{},"MVPs",", para validar una idea con un producto real en semanas, no meses.",[43,50,51,54],{},[18,52,53],{},"Aplicaciones web a medida",": sistemas internos, dashboards y paneles que reemplazan las hojas de cálculo.",[11,56,57],{},"La forma de trabajar es simple. Empezamos con una llamada para entender tu problema. Después te envío una propuesta con alcance, plazos y precio cerrado. Trabajamos en sprints semanales con demos, para que veas avances reales cada semana. Y al final entrego con deploy, documentación y 30 días de soporte. En todo el proceso trabajas directo conmigo, la persona que escribe el código.",[22,59,61],{"id":60},"qué-vas-a-encontrar-en-este-blog","Qué vas a encontrar en este blog",[11,63,64],{},"Voy a escribir sobre lo que construyo: decisiones técnicas, errores, lo que funcionó y lo que no. También sobre el lado menos visible de emprender un estudio desde Guatemala.",[22,66,68],{"id":67},"hablemos","Hablemos",[11,70,71,72,77],{},"Si tienes una idea o un proceso que quieres automatizar, ",[73,74,76],"a",{"href":75},"\u002F#agendar","agenda una llamada",". Son 30 minutos, sin compromiso.",[11,79,80],{},"Gracias por leer el primer post. Esto apenas empieza.",[11,82,83],{},"— Kevin",{"title":85,"searchDepth":86,"depth":86,"links":87},"",2,[88,89,90,91],{"id":24,"depth":86,"text":25},{"id":34,"depth":86,"text":35},{"id":60,"depth":86,"text":61},{"id":67,"depth":86,"text":68},"2026-10-12","Después de años creciendo dentro de empresas hasta liderar equipos, empiezo un nuevo reto: construir software a medida con mi propio estudio.","md",{},true,"\u002Fblog\u002Fhola-kcode",{"title":6,"description":93},"blog\u002Fhola-kcode",[101,102],"kcode","emprendimiento","8aT-dF0tpw7UxdfO0DC9MjVl_k7K0LWsx5LRMl2WcFQ",[105,201,281],{"id":106,"title":107,"backendRepo":108,"body":109,"cover":184,"demo":185,"description":85,"extension":94,"meta":186,"navigation":96,"order":187,"path":188,"repo":189,"seo":190,"stack":191,"stem":198,"summary":199,"__hash__":200},"projects_es\u002Fproyectos\u002Frevenew.md","Revenew","https:\u002F\u002Fgithub.com\u002FKevin-Curruchich\u002Fai-sales-assistant",{"type":8,"value":110,"toc":179},[111,115,118,122,125,172,176],[22,112,114],{"id":113},"problema","Problema",[11,116,117],{},"Un negocio que vende de forma recurrente necesita saber rápido cuándo compró cada cliente, cuándo es probable que vuelva y a quién llamar esta semana. Esa información suele vivir en hojas de cálculo que no avisan de nada.",[22,119,121],{"id":120},"solución","Solución",[11,123,124],{},"Una SPA en React y TypeScript que consume una API propia (FastAPI y PostgreSQL, con el agente en LangGraph y Claude), donde se calculan las estimaciones de próxima compra. Algunas decisiones clave:",[40,126,127,133,139,145,156,162],{},[43,128,129,132],{},[18,130,131],{},"Módulos por funcionalidad"," (clientes, productos, compras, ventas, caja, seguimiento, calendario, dashboard y agente), cada uno con su dominio, acciones, hooks y páginas.",[43,134,135,138],{},[18,136,137],{},"TanStack Query para el estado del servidor:"," registrar una venta mueve stock y estimaciones, así que se refrescan productos, clientes, dashboard, seguimientos y calendario a la vez.",[43,140,141,144],{},[18,142,143],{},"Filtros, paginación y fechas en la URL",", para compartir cualquier vista.",[43,146,147,150,151,155],{},[18,148,149],{},"Agente de ventas con IA:"," los cambios que propone (ventas, compras, movimientos de caja, cobros) llegan como tarjetas que el usuario aprueba, corrige o cancela antes de ejecutarse. Las respuestas llegan en streaming (SSE con ",[152,153,154],"code",{},"fetch",", porque el pedido es un POST con body), y el parser y el estado del chat son funciones puras con tests.",[43,157,158,161],{},[18,159,160],{},"Fechas en la zona horaria local:"," convertir a UTC hacía que las ventas de después de las 6 p. m. en Guatemala cayeran en el día siguiente.",[43,163,164,167,168,171],{},[18,165,166],{},"CI en cada PR"," (lint, typecheck, tests) y deploy automático a Firebase Hosting al mergear a ",[152,169,170],{},"main",".",[22,173,175],{"id":174},"resultado","Resultado",[11,177,178],{},"En desarrollo activo, con releases versionadas y CHANGELOG (v0.14.0). El flujo completo funciona: clientes, inventario, ventas con varios ítems, caja, seguimiento con filtros (7\u002F14\u002F30 días y atrasados), calendario, dashboard y agente con confirmaciones.",{"title":85,"searchDepth":86,"depth":86,"links":180},[181,182,183],{"id":113,"depth":86,"text":114},{"id":120,"depth":86,"text":121},{"id":174,"depth":86,"text":175},null,"https:\u002F\u002Frevenew-95e3a.web.app\u002F",{},1,"\u002Fproyectos\u002Frevenew","https:\u002F\u002Fgithub.com\u002FKevin-Curruchich\u002Frevenew",{"title":107,"description":85},[192,193,194,195,196,197],"React","TypeScript","TanStack Query","Tailwind CSS","Zod","Firebase","proyectos\u002Frevenew","Panel para negocios con ventas recurrentes: estima cuándo vuelve a comprar cada cliente y a quién dar seguimiento, sin hojas de cálculo.","Pl8pNb3a_BRh8WYpAc9cPvr0d0yHHrQN2vmhcmR4ssI",{"id":202,"title":203,"backendRepo":184,"body":204,"cover":184,"demo":266,"description":85,"extension":94,"meta":267,"navigation":96,"order":86,"path":268,"repo":269,"seo":270,"stack":271,"stem":278,"summary":279,"__hash__":280},"projects_es\u002Fproyectos\u002Fmapmytrip.md","MapMyTrip",{"type":8,"value":205,"toc":261},[206,208,211,213,224,256,258],[22,207,114],{"id":113},[11,209,210],{},"Organizar un viaje o una salida en grupo obliga a saltar entre buscadores, Google Maps y chats. Cada persona tiene su presupuesto y sus gustos, y nadie sabe si un lugar estará abierto a la hora planeada o si las distancias tienen sentido. Las sugerencias genéricas de una IA suelen inventar lugares o armar horarios imposibles.",[22,212,121],{"id":120},[11,214,215,216,219,220,223],{},"Dos flujos: ",[18,217,218],{},"Trips"," genera un itinerario por días a partir de un prompt, y ",[18,221,222],{},"planes de grupo"," permite que cada participante se una por link sin crear cuenta, indique su presupuesto y preferencias, y vote entre 3 planes que propone la IA. Algunas decisiones clave:",[40,225,226,232,238,244,250],{},[43,227,228,231],{},[18,229,230],{},"Lugares reales, no inventados:"," la generación es un grafo de LangGraph que busca en Google Places y le pasa al modelo distancias y horarios de apertura. Después, el código revisa el plan (lugares cerrados a esa hora, repetidos, demasiado lejos o fuera de presupuesto), lo repara cuando puede y calcula traslados reales con Routes API.",[43,233,234,237],{},[18,235,236],{},"Evals reproducibles:"," escenarios fijos calificados en código y con un modelo más grande, con trazas en LangSmith. Los cambios de prompt o de modelo se comparan con datos, no con intuición.",[43,239,240,243],{},[18,241,242],{},"Lugares curados:"," además de Google, un panel de admin para lugares propios, con una marca de aliado para negocios que pagan.",[43,245,246,249],{},[18,247,248],{},"Arquitectura:"," Nuxt 4 con layers por dominio. La clave de Places nunca llega al navegador, las entradas se validan con Zod, el login usa Google OAuth y las imágenes para compartir en WhatsApp se generan en el servidor.",[43,251,252,255],{},[18,253,254],{},"Versionado con release-please"," y Conventional Commits.",[22,257,175],{"id":174},[11,259,260],{},"Proyecto en beta (v0.4.0). Funcionan la generación de itinerarios, los planes de grupo con votación y cierre, el panel de admin de lugares y las evals. En desarrollo: un panel de lugar con fotos, reseñas y horario, en dos columnas en escritorio y como hoja inferior en móvil.",{"title":85,"searchDepth":86,"depth":86,"links":262},[263,264,265],{"id":113,"depth":86,"text":114},{"id":120,"depth":86,"text":121},{"id":174,"depth":86,"text":175},"https:\u002F\u002Fmap-my-trip-296321264526.us-central1.run.app\u002F",{},"\u002Fproyectos\u002Fmapmytrip","https:\u002F\u002Fgithub.com\u002FKevin-Curruchich\u002Fmap-my-trip",{"title":203,"description":85},[272,273,274,275,276,277],"Nuxt 4","Nuxt UI","LangGraph","Google Maps Platform","Postgres","Cloud Run","proyectos\u002Fmapmytrip","Planificación de viajes y salidas en grupo con IA: itinerarios con lugares reales de Google Maps y planes que el grupo vota.","mDFNeR9_p_uekWvBQOhYTny338QaIHu9ZIo7GuZoZYA",{"id":282,"title":283,"backendRepo":184,"body":284,"cover":184,"demo":338,"description":85,"extension":94,"meta":339,"navigation":96,"order":340,"path":341,"repo":342,"seo":343,"stack":344,"stem":347,"summary":348,"__hash__":349},"projects_es\u002Fproyectos\u002Fpunto-de-equilibrio.md","Punto de Equilibrio",{"type":8,"value":285,"toc":333},[286,288,291,293,296,328,330],[22,287,114],{"id":113},[11,289,290],{},"La clínica necesitaba presencia web para captar pacientes en su zona: explicar sus servicios (rehabilitación deportiva, terapia manual, recuperación funcional), generar confianza con testimonios y preguntas frecuentes, y permitir reservar sin llamar. Además, su app requería páginas públicas de términos y condiciones y de eliminación de cuenta.",[22,292,121],{"id":120},[11,294,295],{},"Una SPA en React y Vite organizada por secciones (hero, servicios, testimonios, preguntas frecuentes y llamado a la acción). Algunas decisiones clave:",[40,297,298,304,310,316,322],{},[43,299,300,303],{},[18,301,302],{},"Reservas sin backend:"," la agenda de Google Calendar va embebida en un diálogo propio, así que no hubo que construir un sistema de citas.",[43,305,306,309],{},[18,307,308],{},"Rutas legales sin router:"," un switch simple sobre la URL, y cada página actualiza su título, descripción y canonical.",[43,311,312,315],{},[18,313,314],{},"SEO local:"," metadatos para Guatemala, Open Graph, datos estructurados de schema.org, sitemap y robots.",[43,317,318,321],{},[18,319,320],{},"Rendimiento antes que efectos:"," se quitó el mapa (Leaflet) y se simplificaron las animaciones. Luego se agregó movimiento más liviano, con hooks propios de aparición y parallax que respetan la preferencia de reducir movimiento.",[43,323,324,327],{},[18,325,326],{},"Despliegue continuo:"," cada merge sale a producción en Firebase Hosting con GitHub Actions, y cada PR tiene su vista previa.",[22,329,175],{"id":174},[11,331,332],{},"En producción con dominio propio y despliegue continuo.",{"title":85,"searchDepth":86,"depth":86,"links":334},[335,336,337],{"id":113,"depth":86,"text":114},{"id":120,"depth":86,"text":121},{"id":174,"depth":86,"text":175},"https:\u002F\u002Fpunto-de-equilibrio.com\u002F",{},3,"\u002Fproyectos\u002Fpunto-de-equilibrio","https:\u002F\u002Fgithub.com\u002FKevin-Curruchich\u002Fpunto-de-equilibrio-landing",{"title":283,"description":85},[192,193,345,195,197,346],"Vite","GitHub Actions","proyectos\u002Fpunto-de-equilibrio","Sitio de una clínica de fisioterapia a domicilio en Tecpán, Guatemala: presenta sus servicios y permite agendar una evaluación sin salir de la página.","08JSVXP1tx9nNHMqYaLic8hLGAaD3niMvPS0g22Dy-w",1791866599944]