{
    "version": "https://jsonfeed.org/version/1",
    "title": "Bo Labs",
    "home_page_url": "https://www.bo-labs.com",
    "feed_url": "https://www.bo-labs.com/rss/feed.json",
    "description": "Diseño y desarrollo de páginas web excepcionales.",
    "icon": "https://www.bo-labs.com/favicon.ico",
    "author": {
        "name": "Bogdan Cristian Pușcașu"
    },
    "items": [
        {
            "id": "https://www.bo-labs.com/blog/lo-que-ahora-entiendo-sobre-webs-cms-automatizacion-y-producto",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Todo se conecta</h2>\n<p>Durante años pensé en webs, CMS, automatización y producto como piezas separadas. Ahora las veo más conectadas. Una web explica. Un CMS mantiene viva la información. Una automatización continúa la conversación. Un producto ordena operaciones.</p>\n<p>Cuando esas capas se diseñan juntas, el resultado se siente menos improvisado.</p>\n<h2>Menos stack, más criterio</h2>\n<p>No me interesa usar la tecnología más grande por defecto. Me interesa elegir lo que deja el proyecto más claro. A veces eso es Astro. A veces Next.js. A veces Payload. A veces WordPress. A veces Salesforce Marketing Cloud.</p>\n<p>La tecnología cambia. El criterio se acumula.</p>\n<h2>La dirección</h2>\n<p>Cada vez me importa más construir cosas útiles, mantenibles y con intención visual. No solo webs bonitas. Sistemas que expliquen, conviertan, editen, automaticen o ayuden a trabajar.</p>\n<p>Bo Labs va justo por ahí: diseño cuidado, código serio y menos ruido alrededor.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/lo-que-ahora-entiendo-sobre-webs-cms-automatizacion-y-producto",
            "title": "Lo que ahora entiendo sobre webs, CMS, automatización y producto",
            "summary": "Una síntesis de cómo conecto diseño, desarrollo, CMS, operaciones y automatización después de varios proyectos muy distintos.",
            "date_modified": "2026-05-15T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/dashboards-internos-claridad-antes-que-decoracion",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>La tentación visual</h2>\n<p>Es fácil diseñar un dashboard que se vea espectacular en Dribbble. Mucho más difícil es diseñar uno que alguien use ocho horas sin cansarse.</p>\n<p>Las herramientas internas tienen otra lógica. La belleza está en la densidad bien ordenada, en los estados claros y en que las acciones importantes no se escondan.</p>\n<h2>Repetición y confianza</h2>\n<p>Un dashboard interno se usa muchas veces. Por eso los patrones importan más que la sorpresa. Filtros previsibles, tablas legibles, confirmaciones claras, errores útiles y exportaciones donde toca.</p>\n<p>La interfaz tiene que volverse familiar sin volverse torpe.</p>\n<h2>Diseño silencioso</h2>\n<p>Me gusta pensar en estos productos como diseño silencioso. Si funciona, el usuario no piensa en la interfaz. Piensa en su trabajo.</p>\n<p>Eso no es falta de diseño. Es diseño bien educado.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/dashboards-internos-claridad-antes-que-decoracion",
            "title": "Dashboards internos: claridad antes que decoración",
            "summary": "Un dashboard serio no necesita impresionar en una captura. Necesita ayudar a trabajar mejor, más rápido y con menos errores.",
            "date_modified": "2026-03-18T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/drivers-management-convertir-operaciones-complejas-en-producto-usable",
            "content_html": "<p>Hay dashboards que muestran información. Y hay herramientas internas que sostienen una operación. Drivers Management pertenece a la segunda categoría.</p>\n<p>Cuando una aplicación tiene que gestionar conductores, turnos, calendarios, cuadrantes, informes, compensaciones, vacaciones, auditoría, empresas y reglas laborales, la interfaz deja de ser una capa decorativa. Se convierte en una forma de reducir errores.</p>\n<h2>Una operación no cabe en una plantilla</h2>\n<p>La tentación con un dashboard interno es empezar por componentes: tablas, filtros, cards, modales. Todo eso hace falta, pero no resuelve el problema por sí solo.</p>\n<p>El trabajo real empieza al entender qué está intentando hacer la persona usuaria. Buscar un conductor. Cambiar una empresa. Crear un turno. Revisar horas. Cerrar un periodo. Exportar datos para nómina. Ver si una compensación está pendiente. Corregir vacaciones. Cada acción tiene consecuencias.</p>\n<p>Por eso una herramienta de operación necesita conocer el dominio. No basta con &quot;CRUD de conductores&quot;. Hay PACTO, variables automáticas, festivos, jornadas, partes entregados, horas efectivas, excesos, históricos y periodos archivados.</p>\n<h2>Las reglas son el producto</h2>\n<p>En proyectos así, las reglas son más importantes que las pantallas. Una empresa cambia y eso afecta variables. Un periodo archivado no debería tocarse. Un número de turno duplicado puede provocar errores. Una búsqueda que no entiende acentos ralentiza el trabajo diario.</p>\n<p>Muchas de estas cosas parecen pequeñas hasta que se repiten cientos de veces. Ahí una mejora de UX deja de ser estética y se vuelve ahorro real.</p>\n<p>Por ejemplo: ordenar resultados por relevancia, sugerir el siguiente número de turno disponible, mostrar números ya usados, paginar días con muchos turnos o validar antes de guardar. Son detalles poco llamativos, pero cambian la confianza de la herramienta.</p>\n<h2>Informes, cierres y exportaciones</h2>\n<p>La parte de reporting también tiene mucha profundidad. No se trata solo de mostrar un gráfico. Se trata de convertir datos diarios en lectura administrativa: horas, presencia, efectivos, excesos, variables, PACTO, fijos mensuales, CP+QM, festivos, compensaciones y exportaciones.</p>\n<p>El sistema tiene que permitir filtrar, bloquear vistas, archivar periodos y reabrirlos cuando toca. Esa trazabilidad es clave porque los datos no viven solo en pantalla. Terminan en Excel, PDF, nómina, conversaciones internas y decisiones.</p>\n<p>Una exportación mal planteada puede convertir una buena app en una fuente de trabajo manual. Una exportación bien pensada ahorra horas.</p>\n<h2>Diseño que respeta la realidad</h2>\n<p>Me gustan este tipo de productos porque no permiten mucho teatro visual. Si decoras de más, molestas. Si escondes una acción importante, generas errores. Si no confirmas una operación destructiva, das miedo.</p>\n<p>El diseño tiene que ser tranquilo, denso cuando hace falta y muy claro en estados: guardado, error, sin cambios, sincronizando, archivado, pendiente, resuelto.</p>\n<p>También tiene que reconocer que la persona que lo usa quizá lo abre todos los días. No necesita sorpresa. Necesita confianza.</p>\n<h2>Cierre</h2>\n<p>Drivers Management me recuerda que una interfaz interna puede tener mucho diseño aunque no parezca espectacular. El diseño está en el orden, en las reglas, en los mensajes, en los filtros y en evitar que alguien cometa un error caro.</p>\n<p>Cuando un producto operativo ahorra tiempo y reduce incertidumbre, ya está haciendo su trabajo.</p>",
            "url": "https://www.bo-labs.com/blog/drivers-management-convertir-operaciones-complejas-en-producto-usable",
            "title": "Drivers Management: convertir operaciones complejas en producto usable",
            "summary": "Lo que cambia cuando un dashboard interno tiene que sostener turnos, conductores, informes, vacaciones, compensaciones y reglas reales.",
            "date_modified": "2026-02-11T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/ok-flows-formularios-journeys-y-salesforce-con-mas-intencion",
            "content_html": "<p>Hay formularios que solo recogen datos. Y luego están los formularios que forman parte de una campaña, de un journey, de una experiencia de cliente y de una operación de marketing real. La diferencia parece pequeña desde fuera, pero cambia todo por dentro.</p>\n<p>OK Flows nace de esa segunda idea. No como un formulario bonito con campos arrastrables, sino como una capa de interacción para equipos que trabajan con Salesforce Marketing Cloud, audiencias, Data Extensions, CloudPages, prefill, respuestas parciales y lógica de campaña.</p>\n<h2>El formulario como producto</h2>\n<p>Cuando un formulario vive dentro de una campaña, deja de ser una página aislada. Tiene que saber de dónde viene la persona, qué datos ya existen, qué se puede mostrar, qué se debe ocultar y qué ocurre después de enviar.</p>\n<p>Ahí es donde un builder plano se queda corto. No basta con añadir un input de email, un dropdown y un botón. Necesitas un editor que permita construir una experiencia, probarla, publicarla y conectarla con datos reales sin que cada campaña sea una pieza nueva hecha a mano.</p>\n<p>Por eso me interesa pensar en OK Flows como producto. Tiene una superficie de marketing, autenticación, dashboard, builder, runtime público y operación interna. Cada capa tiene su función. El editor no es lo mismo que el player. La lógica no es lo mismo que la integración. El diseño visual no es lo mismo que la entrega de datos.</p>\n<h2>Capas que importan</h2>\n<p>La parte más visible es el builder: canvas, inspector, preview, block library, edición inline, opciones, CTAs, theme y publicación. Pero lo interesante está en cómo eso se conecta con lo que ocurre debajo.</p>\n<p>Un formulario serio necesita bloques simples y bloques complejos. Campos de texto, email o teléfono, sí. Pero también hidden fields, hidden JSON, calculated fields, file upload, ranges, address, contact, availability, allocations o semantic differential cuando la campaña lo pide.</p>\n<p>También necesita lógica. No solo &quot;si respuesta A entonces muestra B&quot;, sino capacidad para simular, auditar condiciones, entender visibilidad y evitar publicar journeys rotos. En marketing automation, una condición mal planteada no es un detalle técnico: puede afectar a una audiencia completa.</p>\n<h2>Prefill sin exponer demasiado</h2>\n<p>Una de las partes más delicadas es la personalización. Es muy tentador meter datos en una URL y seguir. Pero si hay PII o información sensible, eso se vuelve peligroso rápido.</p>\n<p>Por eso la idea de prefill seguro es clave. Tokens opacos, JWT, expiración, reglas de acceso, resolución server-side y control de qué se expone al runtime. El usuario siente que la experiencia viene preparada para él, pero la campaña no va dejando datos innecesarios por el camino.</p>\n<p>Esto es justo el tipo de detalle que diferencia una demo de un sistema. La demo enseña campos precargados. El sistema piensa en seguridad, caducidad, auditoría y operación.</p>\n<h2>Salesforce Marketing Cloud no es un plugin más</h2>\n<p>Conectar con SFMC tampoco es solo &quot;enviar una respuesta&quot;. Hay Data Extensions, mappings, CloudPages, logs de entrega, payload snapshots, estados delivered/failed y, en algunos casos, audience prefill runs que preparan URLs personalizadas para campañas grandes.</p>\n<p>Ese flujo necesita ser visible para quien opera. Si algo falla, no puede quedar escondido en una consola. Hace falta saber qué se envió, cuándo, con qué mapping y hacia dónde.</p>\n<p>La integración buena no desaparece porque sea simple. Desaparece porque está bien diseñada.</p>\n<h2>Respuestas parciales y recuperación</h2>\n<p>Otro punto fuerte es aceptar que la gente abandona. En vez de tratarlo como fracaso invisible, el sistema puede capturar progreso parcial, entender dónde se pierde una persona y permitir recuperación sin romper la experiencia.</p>\n<p>Eso abre puertas interesantes para campañas largas, formularios con varios pasos o experiencias donde cada respuesta tiene valor aunque no haya submit final.</p>\n<h2>Cierre</h2>\n<p>La lección de OK Flows es sencilla: un formulario puede ser infraestructura. Puede conectar marca, datos, automatización, UX y operación. Pero para que eso funcione hay que diseñarlo como producto, no como una lista de campos.</p>\n<p>Ahí es donde me interesa trabajar: en piezas que parecen simples por fuera, pero que por dentro tienen criterio, orden y una razón clara para existir.</p>",
            "url": "https://www.bo-labs.com/blog/ok-flows-formularios-journeys-y-salesforce-con-mas-intencion",
            "title": "OK Flows: formularios, journeys y Salesforce con más intención",
            "summary": "Por qué un formulario puede ser mucho más que campos: lógica, personalización, prefill, respuestas parciales y conexión con campañas.",
            "date_modified": "2026-01-14T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/cloudpages-formularios-y-data-extensions-sin-caos",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>La landing es solo la superficie</h2>\n<p>Una CloudPage puede parecer una landing sencilla, pero debajo suele haber datos, validaciones, formularios, audiencias, estados y expectativas de campaña.</p>\n<p>Si solo se diseña la pantalla, falta la mitad del trabajo.</p>\n<h2>Datos bien encaminados</h2>\n<p>El formulario debe guardar lo que toca, con nombres claros y estructura preparada para que el equipo pueda usar esa información después.</p>\n<p>Una Data Extension mal pensada se convierte rápido en deuda. Campos ambiguos, duplicados o sin relación con el journey hacen que todo sea más frágil.</p>\n<h2>Experiencia y operación</h2>\n<p>La persona que rellena el formulario necesita claridad. El equipo necesita datos limpios. La campaña necesita continuidad.</p>\n<p>Cuando esas tres cosas encajan, una CloudPage deja de ser una página suelta y se vuelve una pieza seria del sistema.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/cloudpages-formularios-y-data-extensions-sin-caos",
            "title": "CloudPages, formularios y Data Extensions sin caos",
            "summary": "Cómo pensar una landing de SFMC para que la experiencia visible y los datos internos no se peleen.",
            "date_modified": "2025-12-17T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/emails-html-el-front-end-mas-raro-que-todavia-importa",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Un mundo aparte</h2>\n<p>Si vienes del front-end moderno, HTML email se siente como viajar en el tiempo. Tablas, estilos inline, soporte irregular, clientes caprichosos y muchas cosas que en web normal darías por hechas.</p>\n<p>Pero sigue importando. Muchísimo. Un email mal renderizado puede arruinar una campaña muy trabajada.</p>\n<h2>Diseñar con restricciones</h2>\n<p>La gracia está en aceptar el medio. No puedes depender de CSS moderno como en una app. Tienes que construir con fallbacks, probar más y pensar en clientes que interpretan el código de formas distintas.</p>\n<p>Eso obliga a ser más disciplinado: estructura simple, imágenes cuidadas, textos claros y QA real.</p>\n<h2>Pequeño, pero crítico</h2>\n<p>Un email parece una pieza pequeña, pero toca marca, datos, segmentación, conversión y confianza.</p>\n<p>Por eso me gusta tratarlo como front-end serio, aunque sea el front-end más raro de todos.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/emails-html-el-front-end-mas-raro-que-todavia-importa",
            "title": "Emails HTML: el front-end más raro que todavía importa",
            "summary": "Maquetar emails sigue siendo extraño, limitado y necesario. Y justo por eso requiere mucho cuidado.",
            "date_modified": "2025-11-19T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/salesforce-marketing-cloud-desde-el-lado-tecnico",
            "content_html": "<p>Salesforce Marketing Cloud puede parecer, desde fuera, una plataforma para enviar emails. Pero cuando trabajas dentro, entiendes rápido que la parte de envío es solo una pieza.</p>\n<p>SFMC mezcla datos, audiencias, journeys, CloudPages, Data Extensions, AMPscript, SSJS, HTML email, QA y operación. Y cuando una campaña sale a varios mercados, idiomas o segmentos, cada pequeño detalle cuenta.</p>\n<h2>La campaña como sistema</h2>\n<p>Una campaña no es un HTML suelto. Tiene assets, audiencias, reglas, fechas, variantes, enlaces, imágenes, textos legales, datos de personalización y puntos de seguimiento.</p>\n<p>Si una parte falla, el resultado puede verse afectado aunque el diseño sea bueno. Un campo mal nombrado en una Data Extension, una audiencia importada con una columna incorrecta, una condición mal escrita en AMPscript o una imagen que no carga en cierto cliente de correo pueden romper la experiencia.</p>\n<p>Por eso SFMC exige una mezcla rara de capacidades: front-end, datos, orden, paciencia y mentalidad de QA.</p>\n<h2>HTML email sigue siendo especial</h2>\n<p>El email HTML es probablemente el front-end más extraño que sigue siendo crítico. Muchas reglas modernas no aplican. Hay que pensar en tablas, estilos inline, clientes con soporte irregular y fallbacks.</p>\n<p>Eso cambia la forma de trabajar. No puedes confiar solo en que &quot;en mi navegador se ve bien&quot;. Hay que revisar render, mobile, desktop, dark mode si aplica, pesos de imagen, enlaces, tracking y consistencia con la marca.</p>\n<p>Es un trabajo menos glamuroso que una landing moderna, pero en términos de negocio puede ser igual o más importante.</p>\n<h2>CloudPages y formularios</h2>\n<p>Las CloudPages conectan la parte visible con la operación. Una landing puede capturar datos, mostrar contenido personalizado, validar respuestas y enviar información a una Data Extension.</p>\n<p>Pero para que eso funcione bien, hay que pensar en estructura. Qué campos se guardan, cómo se nombran, qué pasa si falta un dato, cómo se relaciona con el journey, qué verá el usuario después y qué necesita revisar el equipo.</p>\n<p>Una CloudPage sencilla por fuera puede tener bastante lógica por dentro.</p>\n<h2>AMPscript, SSJS y datos</h2>\n<p>AMPscript suele aparecer cuando necesitas personalización, condiciones, lectura o escritura de datos. SSJS puede ayudar cuando la lógica se vuelve más compleja. Ninguno debería usarse como una bolsa de trucos.</p>\n<p>Me gusta separar mentalmente markup, datos y reglas. Si todo está mezclado, mantener una campaña se vuelve doloroso. Si hay orden, la pieza puede evolucionar, duplicarse para otro mercado o ajustarse sin miedo.</p>\n<h2>QA como parte del trabajo</h2>\n<p>En marketing automation, QA no es una fase decorativa. Es parte del desarrollo. Revisar enlaces, imágenes, variantes, textos, audiencias, datos y comportamiento no es opcional.</p>\n<p>El usuario no ve el esfuerzo. Solo ve si el email llega bien, si la landing carga, si el formulario funciona y si la experiencia tiene sentido.</p>\n<h2>Cierre</h2>\n<p>SFMC me interesa porque obliga a conectar tecnología con operación real. No basta con construir algo bonito. Tiene que enviarse bien, guardar datos bien, integrarse bien y poder ser usado por equipos que van rápido.</p>\n<p>Cuando eso ocurre, marketing automation deja de ser una caja complicada y se convierte en una infraestructura que sostiene campañas con más confianza.</p>",
            "url": "https://www.bo-labs.com/blog/salesforce-marketing-cloud-desde-el-lado-tecnico",
            "title": "Salesforce Marketing Cloud desde el lado técnico",
            "summary": "SFMC no es solo enviar emails: es datos, audiencias, CloudPages, AMPscript, journeys, QA y operación.",
            "date_modified": "2025-10-22T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/marketing-automation-la-web-no-acaba-en-el-clic",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Después del botón</h2>\n<p>Muchas webs se obsesionan con el botón. “Contacta”, “descarga”, “regístrate”. Pero la pregunta importante viene después: ¿qué pasa cuando alguien hace clic?</p>\n<p>Ahí empieza el terreno de marketing automation. Formularios, CRM, emails, journeys, segmentación, datos y seguimiento.</p>\n<h2>La web como parte del flujo</h2>\n<p>Una landing no debería vivir aislada. Si capta un lead, ese dato tiene que llegar bien a algún sitio. Si promete una respuesta, el sistema debe sostenerla. Si personaliza una experiencia, la fuente de datos debe ser fiable.</p>\n<p>La web se vuelve más útil cuando conecta con lo que ocurre después.</p>\n<h2>Diseño y automatización</h2>\n<p>Para mí, esto une dos mundos: la experiencia visible y la operación invisible. El usuario siente claridad. El equipo recibe datos ordenados.</p>\n<p>Ahí una web deja de ser una página y empieza a ser infraestructura comercial.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/marketing-automation-la-web-no-acaba-en-el-clic",
            "title": "Marketing automation: la web no acaba en el clic",
            "summary": "Una web puede ser el inicio de un sistema: captación, formularios, CRM, emails, journeys y seguimiento.",
            "date_modified": "2025-09-24T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/de-pagina-bonita-a-sistema-mantenible",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>El día dos importa</h2>\n<p>Una página puede verse muy bien el día de entrega y aun así ser difícil de mantener. Pasa cuando todo está hecho a medida sin patrón, cuando cada sección inventa sus reglas y cuando tocar un texto rompe el layout.</p>\n<p>La web real empieza el día dos, cuando hay que cambiar algo.</p>\n<h2>Componentes y límites</h2>\n<p>Un sistema mantenible no tiene por qué ser enorme. Puede ser simplemente una colección clara de componentes, estilos consistentes, tokens básicos y reglas para contenido variable.</p>\n<p>Los límites ayudan. Si un botón tiene tres variantes, se usa con criterio. Si tiene veinte, nadie sabe cuál toca.</p>\n<h2>Belleza que aguanta</h2>\n<p>La buena interfaz no es solo la que se ve bien en una captura. Es la que sigue funcionando cuando cambian textos, imágenes, idiomas y necesidades.</p>\n<p>Eso es craft menos visible, pero más importante.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/de-pagina-bonita-a-sistema-mantenible",
            "title": "De página bonita a sistema mantenible",
            "summary": "La diferencia entre una web que se ve bien el día uno y una web que puede crecer sin romperse.",
            "date_modified": "2025-08-27T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/disenar-servicios-web-como-paquetes-no-como-listas-sueltas",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Una lista no vende criterio</h2>\n<p>“Diseño web, desarrollo, SEO, mantenimiento” puede ser correcto, pero no explica mucho. Una lista de capacidades no ayuda al cliente a imaginar qué compra ni cómo será trabajar contigo.</p>\n<p>Un paquete de servicio, en cambio, ordena la promesa: qué problema resuelve, qué incluye, qué no incluye y qué resultado esperar.</p>\n<h2>El alcance da calma</h2>\n<p>Cuando el servicio tiene proceso, entregables y límites, la conversación cambia. Ya no todo es abstracto. El cliente entiende fases, tiempos y tipo de decisión.</p>\n<p>Eso no significa hacer ofertas rígidas. Significa poner suelo bajo los pies.</p>\n<h2>Servicios como producto</h2>\n<p>Me gusta diseñar servicios como si fueran pequeños productos: nombre claro, intención, estructura y experiencia.</p>\n<p>La web no solo muestra lo que haces. También enseña cómo piensas.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/disenar-servicios-web-como-paquetes-no-como-listas-sueltas",
            "title": "Diseñar servicios web como paquetes, no como listas sueltas",
            "summary": "Un servicio se entiende mejor cuando tiene promesa, alcance, proceso, entregables y límites claros.",
            "date_modified": "2025-07-30T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/por-que-no-todo-necesita-un-formulario-de-contacto",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>El formulario por defecto</h2>\n<p>Durante años hemos puesto formularios de contacto casi por reflejo. Nombre, email, mensaje, botón. Pero no siempre es lo mejor.</p>\n<p>En muchos portfolios o servicios profesionales, la persona quiere escribir directamente, abrir el correo, ver disponibilidad o entender qué pasará después.</p>\n<h2>Menos fricción</h2>\n<p>Un formulario malo parece simple pero añade dudas: ¿ha llegado?, ¿quién lo lee?, ¿cuándo responden?, ¿puedo adjuntar algo? Un enlace de email bien presentado puede ser más claro.</p>\n<p>La clave es diseñar la página de contacto como una invitación, no como un trámite.</p>\n<h2>Cuándo sí usaría formulario</h2>\n<p>Lo usaría si necesitas datos estructurados, cualificar leads, automatizar respuestas o conectar con CRM. Si no, quizá el formulario solo estorba.</p>\n<p>Quitar una pieza también puede ser diseño.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/por-que-no-todo-necesita-un-formulario-de-contacto",
            "title": "Por qué no todo necesita un formulario de contacto",
            "summary": "A veces quitar el formulario mejora la experiencia: menos fricción, más claridad y contacto directo cuando tiene sentido.",
            "date_modified": "2025-07-02T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/seo-tecnico-para-portfolios-y-webs-pequenas",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>SEO no empieza con trucos</h2>\n<p>En una web pequeña, el SEO técnico muchas veces es sentido común bien aplicado. Títulos claros, descripciones honestas, URLs limpias, contenido entendible y una web que carga rápido.</p>\n<p>No hace falta fingir que cada portfolio compite con un medio gigante. Pero sí hace falta no bloquearse a uno mismo.</p>\n<h2>La base invisible</h2>\n<p>Sitemap, robots, canonical, Open Graph, imágenes sociales, etiquetas correctas y estructura semántica. Son cosas poco vistosas, pero cuando faltan se nota.</p>\n<p>También importa que cada página tenga una intención. Home, servicios, trabajos, sobre mí, contacto y blog no deberían repetir el mismo mensaje.</p>\n<h2>Contenido que ayuda</h2>\n<p>El blog puede reforzar autoridad si habla de problemas reales. No hace falta publicar por publicar. Mejor piezas concretas sobre decisiones, procesos y aprendizajes.</p>\n<p>El SEO bueno no es ruido. Es claridad indexable.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/seo-tecnico-para-portfolios-y-webs-pequenas",
            "title": "SEO técnico para portfolios y webs pequeñas",
            "summary": "Lo básico que una web pequeña debería tener bien resuelto: metadatos, estructura, sitemap, robots, rendimiento y contenido útil.",
            "date_modified": "2025-06-04T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/keystatic-para-webs-estaticas-edicion-simple-sin-perder-rendimiento",
            "content_html": "<p>Hay un punto medio muy interesante entre una web completamente estática y un CMS grande con base de datos, usuarios, servidor, roles complejos y mantenimiento extra.</p>\n<p>Ese punto medio es justo donde Keystatic puede tener sentido: contenido en archivos, edición visual, control por Git y una web que sigue pudiendo ser rápida, estática y fácil de desplegar.</p>\n<h2>El problema real</h2>\n<p>Muchos proyectos pequeños no necesitan un CMS enorme. Necesitan editar páginas, servicios, proyectos, artículos, imágenes y algunos textos globales. Nada más.</p>\n<p>Pero tampoco es cómodo pedir al cliente que edite JSON o MDX a mano. Ahí aparece la necesidad de una interfaz de edición, aunque el proyecto no justifique montar una arquitectura pesada.</p>\n<p>Keystatic resuelve bien esa tensión: permite tener contenido estructurado, editable desde un panel, pero guardado en el repositorio. Eso significa que el contenido forma parte del código, tiene historial y dispara despliegues como cualquier otro cambio.</p>\n<h2>Contenido versionado</h2>\n<p>Me gusta mucho la idea de que el contenido viva en Git. No para todos los casos, pero sí para portfolios, webs corporativas, blogs pequeños y proyectos donde el contenido cambia con calma.</p>\n<p>Tener contenido versionado permite revisar cambios, volver atrás, entender qué se modificó y no depender de una base de datos para algo que puede ser estático.</p>\n<p>También encaja bien con una filosofía de rendimiento: si el sitio puede generarse en build time, no hay necesidad de consultar un servidor por cada visita.</p>\n<h2>La edición debe estar diseñada</h2>\n<p>La parte delicada es configurar bien el CMS. Si metes todo en una colección gigante, el editor se vuelve incómodo. Si separas demasiado, se vuelve burocrático.</p>\n<p>Lo que funciona mejor es pensar en cómo editará realmente la persona: páginas por separado, navegación, shared UI, proyectos, servicios, blog, SEO y contenido repetible. Cada cosa en su sitio.</p>\n<p>Un buen CMS no solo guarda datos. Reduce ansiedad. La persona entra, sabe dónde tocar y entiende qué va a cambiar.</p>\n<h2>Static no significa rígido</h2>\n<p>A veces se confunde web estática con web inmóvil. No es así. Una web estática puede tener blog, proyectos, imágenes, SEO, idiomas, RSS, sitemap y contenido editable. Lo que cambia es cuándo se construye: en deploy, no en cada request.</p>\n<p>Eso suele ser ideal para portfolios y webs de servicios: muy rápido para el usuario, sencillo de hospedar y con menos piezas que vigilar.</p>\n<h2>Límites claros</h2>\n<p>Keystatic no lo usaría para todo. Si necesitas permisos editoriales avanzados, workflows complejos, miles de registros, búsquedas internas enormes o contenido en tiempo real, probablemente miraría Payload, Sanity, WordPress, Supabase u otra opción.</p>\n<p>Pero para una web que quiere ser editable sin perder performance, me parece una herramienta muy honesta.</p>\n<h2>Cierre</h2>\n<p>La gracia de Keystatic está en no sobreactuar. Da edición donde hace falta, mantiene el contenido cerca del repo y permite que la web siga siendo ligera.</p>\n<p>Para mí, esa es una buena dirección: autonomía para el cliente, control para el proyecto y menos infraestructura cuando no aporta valor.</p>",
            "url": "https://www.bo-labs.com/blog/keystatic-para-webs-estaticas-edicion-simple-sin-perder-rendimiento",
            "title": "Keystatic para webs estáticas: edición simple sin perder rendimiento",
            "summary": "Una forma ligera de dar edición de contenido a una web estática sin convertirla en una aplicación pesada.",
            "date_modified": "2025-05-07T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/que-debe-poder-editar-un-cliente-en-su-cms",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Editar todo no siempre es mejor</h2>\n<p>Cuando un cliente pide “quiero editarlo todo”, lo entiendo. Nadie quiere depender de un desarrollador para cambiar un texto. Pero abrirlo todo sin criterio puede convertir la web en una zona frágil.</p>\n<p>Un CMS útil no da libertad infinita. Da autonomía segura.</p>\n<h2>Qué abriría</h2>\n<p>Abriría textos, imágenes, servicios, proyectos, artículos, SEO básico, CTAs, FAQs y datos que cambian con frecuencia. También estructuras repetibles donde el cliente entiende el patrón.</p>\n<p>Protegería layout crítico, componentes delicados, lógica, relaciones complejas y estilos que sostienen la identidad visual.</p>\n<h2>Buen CMS, buena experiencia</h2>\n<p>El editor también es producto. Si el cliente entra y entiende qué tocar, el proyecto vive mejor. Si entra y todo parece un panel técnico, acabará volviendo al WhatsApp.</p>\n<p>La mejor edición es la que no da miedo.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/que-debe-poder-editar-un-cliente-en-su-cms",
            "title": "Qué debe poder editar un cliente en su CMS",
            "summary": "No todo debería estar abierto en un CMS. La clave está en dar autonomía donde aporta valor y proteger la experiencia donde hace falta.",
            "date_modified": "2025-04-09T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/modelar-contenido-bien-evita-dolores-despues",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>El CMS no es el modelo</h2>\n<p>Instalar un CMS es fácil. Modelar contenido bien no tanto. La diferencia se nota meses después, cuando el cliente intenta editar algo y todo depende de hacks, campos ambiguos o bloques que sirven para demasiadas cosas.</p>\n<p>Un buen modelo de contenido define límites. Qué es una página, qué es un servicio, qué es una ruta, qué es una tarjeta, qué se reutiliza y qué no.</p>\n<h2>Pensar en relaciones</h2>\n<p>Cuando el contenido tiene relaciones reales, conviene respetarlas. Una ruta no debería duplicar paradas en texto si las paradas existen como entidad. Un proyecto no debería esconder su stack en una descripción si luego quieres filtrarlo o mostrarlo bien.</p>\n<p>Esa estructura permite que el diseño sea más limpio y que el CMS sea menos peligroso.</p>\n<h2>Editar sin romper</h2>\n<p>El objetivo no es que todo sea editable. El objetivo es que lo importante sea editable sin romper la experiencia.</p>\n<p>Ese matiz cambia todo.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/modelar-contenido-bien-evita-dolores-despues",
            "title": "Modelar contenido bien evita dolores después",
            "summary": "El contenido editable no empieza en el editor, empieza en cómo decides separar entidades, campos y relaciones.",
            "date_modified": "2025-03-12T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/gtfs-rutas-y-horarios-cuando-una-web-deja-de-ser-solo-una-web",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Datos que tienen forma</h2>\n<p>Una web de transporte no puede tratar rutas y horarios como párrafos sueltos. Una línea tiene sentidos, paradas, trayectos, salidas, fechas especiales y mapas.</p>\n<p>Cuando ese contenido vive como texto, mantenerlo se vuelve frágil. Cuando vive como datos, la web puede empezar a razonar.</p>\n<h2>GTFS como punto de partida</h2>\n<p>GTFS ayuda porque trae una estructura común para rutas, trips, stop_times, calendar y stops. Pero importarlo no basta. Hay que convertirlo en un modelo que el CMS pueda editar y el usuario pueda entender.</p>\n<p>Eso implica deduplicar trayectos, agrupar horarios, respetar sentidos y conservar datos originales para poder revisar.</p>\n<h2>La web como interfaz de datos</h2>\n<p>En este tipo de proyecto, la web pública es solo la punta. Debajo hay una capa de contenido estructurado que permite mostrar horarios, próximos buses y paradas sin escribirlo todo a mano.</p>\n<p>Ahí es donde una web empieza a parecer producto.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/gtfs-rutas-y-horarios-cuando-una-web-deja-de-ser-solo-una-web",
            "title": "GTFS, rutas y horarios: cuando una web deja de ser solo una web",
            "summary": "Qué cambia cuando una web pública tiene que mostrar datos reales de transporte, horarios, paradas y recorridos.",
            "date_modified": "2025-02-12T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/payload-cms-con-postgresql-cuando-el-contenido-necesita-estructura-real",
            "content_html": "<p>Hay un punto en algunos proyectos donde &quot;necesitamos un CMS&quot; deja de significar &quot;necesitamos editar textos&quot;. Empieza a significar otra cosa: necesitamos administrar información estructurada, relaciones, estados, medios, SEO, formularios y datos que tienen que vivir conectados.</p>\n<p>Ahí Payload CMS con PostgreSQL empieza a tener mucho sentido.</p>\n<h2>Cuando el contenido deja de ser texto</h2>\n<p>Una página corporativa sencilla puede vivir perfectamente con un CMS ligero o incluso con contenido en archivos. Pero si el proyecto tiene rutas, paradas, trayectos, horarios, avisos, tarifas, formularios, medios y páginas editables, el contenido ya no es una colección de párrafos.</p>\n<p>Es un sistema.</p>\n<p>En un proyecto como Flarrea Postgre, una ruta no es solo un título. Tiene lineCode, slug, mapas, sentidos, paradas, schedules, fechas especiales y salidas. Una parada tiene código, zona, municipio, coordenadas y datos de origen. Un trayecto tiene paradas en orden, sentido y relación con una línea.</p>\n<p>Eso no debería vivir escondido dentro de rich text.</p>\n<h2>Payload como panel de producto</h2>\n<p>Payload me gusta porque no se siente como una caja externa que tienes que doblar para que encaje. Vive cerca del código, permite definir colecciones, globals, bloques, permisos, campos, hooks y relaciones con bastante control.</p>\n<p>Eso hace que el admin pueda diseñarse como parte del producto. No solo &quot;aquí editas contenido&quot;, sino &quot;aquí gestionas lo que la web necesita para funcionar&quot;.</p>\n<p>Si además usas PostgreSQL, el modelo gana peso real. Las relaciones importan. Las migraciones importan. La estructura no depende de documentos sueltos difíciles de razonar. Para proyectos con datos relacionales, eso es una ventaja muy clara.</p>\n<h2>El importador también es producto</h2>\n<p>En Flarrea, una parte interesante fue la importación GTFS. Leer stops, routes, trips, stop_times, calendar y calendar_dates. Convertirlos en rutas, paradas, trayectos y horarios agrupados. Deduplicar patrones para no crear un trayecto por cada viaje. Guardar raw data cuando conviene auditar.</p>\n<p>Eso no es simplemente un script técnico. Es una decisión de producto, porque define cómo el equipo podrá mantener esa información después.</p>\n<p>Un importador mal pensado solo mueve datos. Uno bien pensado traduce una fuente externa a un modelo editorial y operativo usable.</p>\n<h2>Bloques editables sin perder estructura</h2>\n<p>La otra capa está en el layout builder. Páginas, avisos, bloques de contenido, media, CTA, tarifas, horarios, formularios. El cliente necesita autonomía, pero no debería poder romper todo el sistema visual en cada edición.</p>\n<p>Por eso los bloques son importantes. Dan libertad dentro de límites. Permiten componer páginas sin convertir cada página en una selva distinta.</p>\n<p>Este es un equilibrio delicado: suficiente control para que el cliente pueda publicar, suficientes límites para que la web siga pareciendo diseñada.</p>\n<h2>Cierre</h2>\n<p>Payload con PostgreSQL me parece especialmente interesante cuando el CMS no es un accesorio, sino parte del producto. Cuando el contenido tiene forma, relaciones y consecuencias.</p>\n<p>La clave sigue siendo la misma: modelar bien. Si las entidades están claras, el admin se vuelve cómodo, la web se vuelve más mantenible y el proyecto puede crecer sin convertirse en una colección de apaños.</p>",
            "url": "https://www.bo-labs.com/blog/payload-cms-con-postgresql-cuando-el-contenido-necesita-estructura-real",
            "title": "Payload CMS con PostgreSQL: cuando el contenido necesita estructura real",
            "summary": "Por qué Payload y PostgreSQL encajan en proyectos donde el contenido deja de ser texto y empieza a ser sistema.",
            "date_modified": "2025-01-15T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/como-convertir-un-portfolio-en-una-herramienta-comercial",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>Más que una galería</h2>\n<p>Un portfolio que solo enseña capturas deja demasiado trabajo al visitante. La persona ve algo bonito, pero no siempre entiende qué problema resolviste, qué decisiones tomaste o por qué debería confiar.</p>\n<p>Un portfolio comercial tiene que hacer más: explicar contexto, proceso, resultados y criterio.</p>\n<h2>Profundidad antes que cantidad</h2>\n<p>Prefiero pocos proyectos bien contados que muchos logos sin historia. Un caso con detalle permite mostrar cómo piensas, no solo cómo decoras.</p>\n<p>Ahí entran las capas: reto, solución, stack, decisiones, limitaciones, aprendizaje y resultado. Eso convierte una pieza visual en prueba de capacidad.</p>\n<h2>El siguiente paso</h2>\n<p>El portfolio debe llevar a una conversación natural. No hace falta presionar. Hace falta que la persona piense: esta persona entiende problemas parecidos al mío.</p>\n<p>Cuando eso pasa, la web deja de ser escaparate y empieza a trabajar.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/como-convertir-un-portfolio-en-una-herramienta-comercial",
            "title": "Cómo convertir un portfolio en una herramienta comercial",
            "summary": "Un portfolio no debería ser solo una galería: debería explicar valor, proceso, criterio y motivos para iniciar una conversación.",
            "date_modified": "2024-12-04T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/diseno-apple-like-aplicado-a-portfolios-pequenos",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>No es copiar Apple</h2>\n<p>Cuando digo Apple-like no pienso en poner fondos blancos, cards grandes y frases minimalistas porque sí. Pienso en una forma de ordenar: foco, aire, jerarquía, detalle y calma.</p>\n<p>Un portfolio pequeño puede beneficiarse mucho de eso. No necesita parecer una agencia enorme. Necesita que el trabajo se entienda y que la persona detrás parezca confiable.</p>\n<h2>Menos piezas, mejor usadas</h2>\n<p>El truco está en reducir elementos y hacer que cada uno pese. Un buen titular, una imagen real, una tarjeta con contenido útil, botones consistentes y espacios que dejen respirar.</p>\n<p>Si todo quiere llamar la atención, nada la tiene. Apple suele ganar porque sabe cuándo callarse.</p>\n<h2>Aplicado a un portfolio</h2>\n<p>Para un portfolio, eso significa presentar pocos proyectos pero con profundidad, explicar decisiones y cuidar el ritmo visual.</p>\n<p>El objetivo no es verse caro. Es verse claro, serio y difícil de improvisar.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/diseno-apple-like-aplicado-a-portfolios-pequenos",
            "title": "Diseño Apple-like aplicado a portfolios pequeños",
            "summary": "Qué significa tomar inspiración de Apple sin copiarlo: claridad, aire, foco, imágenes honestas y jerarquía tranquila.",
            "date_modified": "2024-11-06T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/performance-web-menos-peso-mas-intencion",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>La velocidad también se diseña</h2>\n<p>Performance no empieza cuando abres Lighthouse. Empieza antes: en cuántas cosas decides cargar, cuántas fuentes usas, cuántas animaciones son necesarias y cuánto peso visual metes en una página.</p>\n<p>Una web rápida suele tener una cosa en común: intención. No intenta hacerlo todo a la vez.</p>\n<h2>Menos peso no significa menos calidad</h2>\n<p>A veces se confunde ligereza con pobreza visual. No tiene por qué. Una interfaz puede sentirse premium con buenas decisiones de espacio, tipografía, imagen y movimiento mínimo.</p>\n<p>Lo caro no debería ser el ruido. Lo caro debería ser la claridad.</p>\n<h2>Performance como respeto</h2>\n<p>Una web ligera respeta tiempo, batería, conexión y paciencia. También reduce mantenimiento y hace que el proyecto sea más fácil de cuidar.</p>\n<p>Para mí, optimizar no es recortar por recortar. Es dejar solo lo que ayuda.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/performance-web-menos-peso-mas-intencion",
            "title": "Performance web: menos peso, más intención",
            "summary": "Rendimiento no es solo una métrica técnica: es claridad, respeto por el usuario y mejor mantenimiento.",
            "date_modified": "2024-10-09T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/nextjs-astro-o-wordpress-como-elegir-sin-casarte-con-el-stack",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>No hay stack ganador para todo</h2>\n<p>Next.js, Astro y WordPress pueden ser buenas elecciones. También pueden ser malas si se eligen por moda, costumbre o miedo.</p>\n<p>La tecnología correcta depende de cómo vive el proyecto: quién edita, cuántas veces cambia, qué tan interactivo es, qué rendimiento necesita y quién lo mantendrá después.</p>\n<h2>Mi regla rápida</h2>\n<p>Si es una web de contenido, ligera y con pocas interacciones, miro Astro. Si necesita aplicación, datos dinámicos o una experiencia React más rica, miro Next.js. Si el cliente necesita edición familiar y el proyecto encaja, WordPress sigue siendo válido.</p>\n<p>Y si hay contenido estructurado serio, puede entrar Payload, Keystatic u otro CMS según el caso.</p>\n<h2>Elegir es renunciar</h2>\n<p>Una buena decisión técnica también dice no. No todo necesita servidor. No todo necesita CMS. No todo necesita React. Pero tampoco todo debe ser estático.</p>\n<p>El oficio está en ajustar la herramienta al problema real.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/nextjs-astro-o-wordpress-como-elegir-sin-casarte-con-el-stack",
            "title": "Next.js, Astro o WordPress: cómo elegir sin casarte con el stack",
            "summary": "Una forma práctica de elegir tecnología según contenido, edición, rendimiento, mantenimiento y crecimiento real del proyecto.",
            "date_modified": "2024-09-11T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/headless-cms-explicado-sin-vender-humo",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>La idea simple</h2>\n<p>Un CMS headless separa el lugar donde editas contenido del lugar donde se muestra. El CMS guarda y organiza. El front-end decide cómo presentar.</p>\n<p>Eso puede ser muy potente, pero no es magia. Si el proyecto no necesita esa separación, puede ser solo otra capa que mantener.</p>\n<h2>Cuándo tiene sentido</h2>\n<p>Tiene sentido cuando hay varios canales, contenido complejo, necesidad de rendimiento alto o una experiencia visual que no quieres limitar a una plantilla.</p>\n<p>También cuando el cliente necesita autonomía editorial pero el front-end debe sentirse premium, rápido y muy controlado.</p>\n<h2>La parte que se suele olvidar</h2>\n<p>Un headless CMS exige modelar bien el contenido. Si solo replicas campos sin pensar, no ganas mucho. El valor está en convertir contenido en piezas claras, reutilizables y fáciles de componer.</p>\n<p>La tecnología ayuda. El criterio decide.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/headless-cms-explicado-sin-vender-humo",
            "title": "Headless CMS explicado sin vender humo",
            "summary": "Qué significa realmente usar un CMS headless, cuándo aporta valor y cuándo solo añade una capa innecesaria.",
            "date_modified": "2024-08-14T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/wordpress-si-pero-no-siempre-como-web-completa",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>WordPress no es el enemigo</h2>\n<p>He trabajado mucho con WordPress y no me interesa vender la idea de que está muerto. No lo está. Sigue siendo una herramienta muy cómoda para editar contenido, gestionar usuarios y resolver webs con rapidez.</p>\n<p>El problema aparece cuando se usa por inercia. Cuando una web sencilla acaba con tema pesado, diez plugins y una experiencia lenta solo porque era lo conocido.</p>\n<h2>La pregunta correcta</h2>\n<p>La pregunta no es “WordPress sí o no”. La pregunta es qué papel debe jugar. Puede ser la web completa, puede ser solo el CMS, o puede que no haga falta.</p>\n<p>En algunos proyectos, WordPress completo tiene sentido. En otros, usarlo headless permite mantener la edición familiar y construir un front-end más rápido y controlado.</p>\n<h2>Elegir con criterio</h2>\n<p>Me gusta pensar en WordPress como una herramienta, no como una identidad. Si aporta autonomía al cliente y no penaliza la experiencia, perfecto. Si añade peso sin necesidad, toca buscar otra base.</p>\n<p>El stack debe servir al proyecto, no al revés.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/wordpress-si-pero-no-siempre-como-web-completa",
            "title": "WordPress sí, pero no siempre como web completa",
            "summary": "WordPress sigue siendo útil, pero conviene decidir si debe ser todo el sistema o solo la capa editorial.",
            "date_modified": "2024-07-17T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/por-que-una-buena-web-empieza-antes-del-diseno",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>El diseño no es el primer paso</h2>\n<p>A veces se empieza una web preguntando por colores, referencias o animaciones. Todo eso importa, pero llega después. Antes hay que saber qué tiene que conseguir la web.</p>\n<p>Una web puede ser bonita y fallar si no sabe explicar el negocio. Puede tener buenos componentes y aun así no guiar al usuario. Por eso me gusta empezar ordenando objetivos, público, contenido y fricciones.</p>\n<h2>La estructura manda</h2>\n<p>Cuando la estructura está clara, el diseño respira mejor. Sabes qué secciones sobran, qué mensaje debe ir primero y dónde tiene sentido pedir una acción.</p>\n<p>El buen diseño no tapa falta de estrategia. La expone. Si el contenido está confuso, una interfaz elegante solo hace que el problema parezca más caro.</p>\n<h2>Diseñar con intención</h2>\n<p>Para mí, diseñar una web es construir una conversación. La persona llega con una duda, una necesidad o una intuición. La web debe acompañar sin ponerse en medio.</p>\n<p>Ahí empieza todo: no en el color, sino en el orden.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/por-que-una-buena-web-empieza-antes-del-diseno",
            "title": "Por qué una buena web empieza antes del diseño",
            "summary": "Antes de elegir colores o bloques, una web necesita objetivos claros, contenido ordenado y una idea honesta de lo que debe conseguir.",
            "date_modified": "2024-06-19T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/astro-para-webs-pequenas-rapidez-foco-y-menos-mantenimiento",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>No todo necesita una app</h2>\n<p>Hay proyectos que no necesitan una aplicación completa. Necesitan páginas rápidas, contenido claro y una base que no se vuelva pesada en seis meses. Ahí Astro tiene mucho sentido.</p>\n<p>Me gusta especialmente para webs corporativas, servicios locales, portfolios y sitios donde el contenido es el centro. Entrega HTML rápido, deja usar componentes cuando hacen falta y evita cargar JavaScript por costumbre.</p>\n<h2>Menos complejidad también es una decisión</h2>\n<p>Elegir una herramienta más ligera no es quedarse corto. Muchas veces es justo lo contrario: entender el problema y no meter más sistema del necesario.</p>\n<p>Si una web tiene pocas interacciones, buena parte del trabajo está en estructura, copy, SEO, imágenes, responsive y velocidad. Astro deja centrarse en eso sin pelear con capas de aplicación que no aportan valor.</p>\n<h2>Dónde lo usaría</h2>\n<p>Lo usaría cuando el cliente necesita presencia clara, mantenimiento bajo y rendimiento alto. También cuando el contenido cambia poco o puede gestionarse desde una capa simple.</p>\n<p>Para mí, la pregunta no es si una tecnología es más moderna. La pregunta es si hace el proyecto más claro, más rápido y más fácil de mantener.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/astro-para-webs-pequenas-rapidez-foco-y-menos-mantenimiento",
            "title": "Astro para webs pequeñas: rapidez, foco y menos mantenimiento",
            "summary": "Por qué Astro encaja tan bien en webs corporativas pequeñas, portfolios y proyectos donde el contenido pesa más que la app.",
            "date_modified": "2024-05-22T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/una-web-local-no-necesita-ser-grande-necesita-ser-clara",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>El error típico</h2>\n<p>Muchas webs locales intentan parecer grandes a base de añadir secciones, efectos y frases genéricas. El resultado suele ser lo contrario: más ruido, menos confianza y un usuario que no encuentra lo básico.</p>\n<p>Para una empresa de reformas, un taller, una clínica o cualquier servicio local, la web tiene una misión bastante concreta: explicar qué haces, dónde trabajas, por qué confiar y cómo contactar.</p>\n<h2>Claridad antes que espectáculo</h2>\n<p>La estructura importa más que el adorno. Servicios claros, texto directo, llamadas a contacto visibles y una experiencia móvil que no obligue a pelearse con la pantalla. Eso ya cambia mucho.</p>\n<p>También importa la velocidad. Si alguien llega desde Google con una necesidad inmediata, cada segundo de carga y cada bloque confuso restan.</p>\n<h2>La web como herramienta</h2>\n<p>Una web local bien hecha no tiene que ganar premios visuales. Tiene que trabajar todos los días. Tiene que responder preguntas, filtrar mejor a los clientes y dar una sensación de profesionalidad honesta.</p>\n<p>Eso para mí es diseño con intención: menos postureo, más utilidad.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/una-web-local-no-necesita-ser-grande-necesita-ser-clara",
            "title": "Una web local no necesita ser grande, necesita ser clara",
            "summary": "Qué debería resolver una web para un negocio local: confianza, servicios entendibles, velocidad y contacto sin fricción.",
            "date_modified": "2024-04-24T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/lo-que-aprendi-recreando-una-landing-saas-como-linear",
            "content_html": "<p>Hay temas que parecen puramente técnicos hasta que los bajas a una decisión real de proyecto. Ahí es donde se vuelven interesantes.</p>\n<h2>No era copiar Linear</h2>\n<p>Recrear una landing como Linear no va de copiar una estética oscura y ya. Va de entender por qué todo parece estar en su sitio: el tamaño de los textos, la distancia entre bloques, el silencio visual, los estados, los detalles mínimos que hacen que una interfaz parezca rápida incluso antes de tocarla.</p>\n<p>Cuando una página SaaS funciona bien, no te grita. Te ordena la cabeza. Te dice qué hace el producto, por qué importa y qué puedes hacer después sin llenar la pantalla de ruido.</p>\n<h2>Lo difícil está en el ritmo</h2>\n<p>La parte más interesante fue trabajar el ritmo. Una landing premium no es una suma de tarjetas bonitas. Es una secuencia: primero promesa, luego prueba visual, luego argumentos, luego confianza. Si el orden falla, el diseño puede estar bien ejecutado y aun así sentirse vacío.</p>\n<p>También aprendí que los pequeños movimientos tienen que tener una razón. Una transición suave puede elevar una interfaz. Una animación gratuita puede romperla.</p>\n<h2>La lección útil</h2>\n<p>Este tipo de ejercicio me sirve para proyectos reales porque entrena criterio. Cuando diseño una web para un cliente, no quiero llenar secciones porque toca. Quiero saber qué debe sentir el usuario en cada paso.</p>\n<p>Una web seria no necesita parecer compleja. Necesita parecer inevitable: clara, rápida, bien compuesta y difícil de mejorar quitando cosas.</p>\n<h2>Cierre</h2>\n<p>Al final, casi todo vuelve a lo mismo: construir con intención, quitar ruido y dejar una base que alguien pueda usar, entender y mantener.</p>",
            "url": "https://www.bo-labs.com/blog/lo-que-aprendi-recreando-una-landing-saas-como-linear",
            "title": "Lo que aprendí recreando una landing SaaS como Linear",
            "summary": "Una mirada práctica a lo que enseña reconstruir una landing SaaS premium: ritmo visual, jerarquía, detalle y criterio de producto.",
            "date_modified": "2024-03-28T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/recreando-landing-page-linear-app",
            "content_html": "<p><a href=\"https://bogdan-linear-exercise.vercel.app/\">Live Demo Aqui</a></p>\n<h2>Introducción:</h2>\n<p>Recrear la página de inicio de <strong>Linear.app</strong> ha sido un desafío emocionante. En este artículo, te guiaré a través del\nproceso de reconstrucción utilizando <strong>Next JS, Tailwind CSS, TypeScript, ESLint, Prettier, Husky y PostCSS</strong>.\nPrepárate mientras exploramos el mundo de las herramientas y técnicas modernas del <strong>desarrollo web.</strong></p>\n<h2>El Stack:</h2>\n<p>Para este proyecto, opté por <strong>Next JS</strong> como el framework de <strong>React</strong>. Sus capacidades de renderizado del lado del\nservidor y su integración perfecta con <strong>TypeScript</strong> lo convierten en una excelente elección. <strong>Tailwind CSS</strong>, con su enfoque basado en utilidades,\nse encargará del estilo, asegurando que logremos una precisión perfecta en los píxeles. <strong>ESLint y Prettier</strong> mantendrán nuestro código limpio y\nlibre de errores, mientras que <strong>Husky</strong> se asegurará de que nuestros commits cumplan con los estándares predefinidos.\nPor último, <strong>PostCSS</strong> manejará cualquier necesidad adicional de estilo.</p>\n<pre class=\"language-js\"><code class=\"language-js code-highlight\"><span class=\"code-line\">\n</span><span class=\"code-line\">type <span class=\"token maybe-class-name\">FeaturesProps</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">children</span><span class=\"token operator\">:</span> <span class=\"token maybe-class-name\">React</span><span class=\"token punctuation\">.</span><span class=\"token property-access\"><span class=\"token maybe-class-name\">ReactNode</span></span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">color</span><span class=\"token operator\">:</span> string<span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">colorDark</span><span class=\"token operator\">:</span> string<span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span><span class=\"code-line\"><span class=\"token keyword module\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\"><span class=\"token maybe-class-name\">Features</span></span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> children<span class=\"token punctuation\">,</span> color<span class=\"token punctuation\">,</span> colorDark <span class=\"token punctuation\">}</span><span class=\"token operator\">:</span> <span class=\"token maybe-class-name\">FeaturesProps</span></span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> ref<span class=\"token punctuation\">,</span> inView <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">useInView</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">threshold</span><span class=\"token operator\">:</span> <span class=\"token number\">0.2</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">triggerOnce</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span></code></pre>\n<h2>El Proceso de desarrollo:</h2>\n<p>Inicialicé un nuevo proyecto de Next JS e instalé las dependencias necesarias.\nCon Tailwind CSS configurado y TypeScript listo, creé la estructura básica de la página de inicio.</p>\n<p>Descomponer la página de inicio de Linear.app en componentes reutilizables fue crucial.\nDesde la sección de héroe hasta los aspectos más destacados de las funciones, cada componente fue meticulosamente elaborado para reflejar el diseño original.</p>\n<pre class=\"language-js\"><code class=\"language-js code-highlight\"><span class=\"code-line\"><span class=\"token keyword module\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\"><span class=\"token maybe-class-name\">HeroImage</span></span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\"> <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> ref<span class=\"token punctuation\">,</span> inView <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">useInView</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">threshold</span><span class=\"token operator\">:</span> <span class=\"token number\">0.8</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">triggerOnce</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\"> <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>lines<span class=\"token punctuation\">,</span> setLines<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> useState<span class=\"token operator\">&lt;</span><span class=\"token maybe-class-name\">Line</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token operator\">&gt;</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\"> <span class=\"token keyword\">const</span> timeoutRef <span class=\"token operator\">=</span> useRef<span class=\"token operator\">&lt;</span><span class=\"token maybe-class-name\">ReturnType</span><span class=\"token operator\">&lt;</span><span class=\"token keyword\">typeof</span> setTimeout<span class=\"token operator\">&gt;</span> <span class=\"token operator\">|</span> <span class=\"token keyword null nil\">null</span><span class=\"token operator\">&gt;</span><span class=\"token punctuation\">(</span><span class=\"token keyword null nil\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span><span class=\"code-line\"> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">removeLine</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> string</span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">   <span class=\"token function\">setLines</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">prev</span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> prev<span class=\"token punctuation\">.</span><span class=\"token method function property-access\">filter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">line</span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> line<span class=\"token punctuation\">.</span><span class=\"token property-access\">id</span> <span class=\"token operator\">!==</span> id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\"> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n</span></code></pre>\n<p>El enfoque basado en utilidades de Tailwind CSS me permitió estilizar los componentes rápidamente.\nSu amplio conjunto de clases de utilidad facilitó la obtención del diseño y diseño deseados.</p>\n<p>Aunque el enfoque era principalmente en el desarrollo frontend, agregar interactividad donde fuera necesario fue esencial. Ya sea animaciones de desplazamiento suaves o menús de navegación receptivos, JavaScript impulsó estas funcionalidades.</p>\n<p>ESLint y Prettier jugaron un papel importante en mantener la consistencia del código e identificar posibles problemas desde el principio. Con su ayuda, me aseguré de que la base de código cumpliera con las mejores prácticas y estándares de codificación.</p>\n<h2>Entonces:</h2>\n<p><a href=\"mailto:bogdan@puscasu.es\">Contáctame</a> para transformar tu sitio web y llevarlo al siguiente nivel.</p>",
            "url": "https://www.bo-labs.com/blog/recreando-landing-page-linear-app",
            "title": "Recreando Linear.app",
            "summary": "Recrear la página de inicio de Linear.app ha sido un desafío emocionante. En este artículo, te guiaré a través del proceso de reconstrucción utilizando Next JS, Tailwind CSS, TS, etc..",
            "date_modified": "2024-03-03T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/explorando-wordpress-en-la-era-headless-ventajas-y-guia-de-implementacion",
            "content_html": "<h2>Introducción:</h2>\n<p>En la era moderna, la presencia digital se ha vuelto imprescindible para empresas,\nemprendedores y creadores de contenido. <strong>WordPress</strong>, como uno de los <strong>sistemas de gestión\nde contenido (CMS)</strong> más populares y utilizados en el mundo, facilita la creación y\nel mantenimiento de <strong>sitios web</strong>.</p>\n<h2>Impacto Medioambiental de los Sitios Web:</h2>\n<p>Los sitios web, a pesar de ser entidades digitales, tienen una huella ambiental tangible.\n<strong>El impacto medioambiental de un sitio web</strong> se origina principalmente de dos fuentes: el consumo de\nenergía y la infraestructura necesaria para mantenerlo en línea.</p>\n<ul>\n<li><strong>Consumo de Energía:</strong>\nCada sitio web está alojado en un <strong>servidor que requiere electricidad</strong> para funcionar.\nEsta energía puede provenir de <strong>fuentes renovables</strong> o no renovables.</li>\n</ul>\n<p>La elección de un <strong>hosting que utilice energías limpias</strong> puede disminuir significativamente la <strong>huella de carbono de un sitio web</strong>.\nSin embargo, muchos proveedores de hosting aún dependen de fuentes de energía que contribuyen a las <strong>emisiones de gases de efecto invernadero.</strong></p>\n<ul>\n<li><strong>Infraestructura de Servidores:</strong>\nLos servidores no solo consumen energía para operar, sino también para mantenerse refrigerados. Los centros de datos, donde se alojan estos servidores, son conocidos por su <strong>alto consumo energético</strong>, necesario para prevenir el <strong>sobrecalentamiento de los equipos</strong>.\nAdemás, la producción y el desecho de estos equipos tecnológicos tienen sus propios impactos ambientales, incluyendo el uso de materiales raros y la generación de residuos electrónicos.</li>\n</ul>\n<p>En este contexto, el <strong>uso generalizado de WordPress</strong>, que potencia aproximadamente el <strong>40% de los sitios web en Internet</strong>, merece una evaluación cuidadosa en términos de su contribución al <strong>impacto medioambiental global</strong>.</p>\n<h2>WordPress y su Huella Ecológica:</h2>\n<p><strong>WordPress</strong>, siendo una de las plataformas de gestión de contenido más populares, tiene un <strong>impacto significativo en el medio ambiente</strong>.\nSu huella ecológica se puede analizar desde varias perspectivas:</p>\n<h3>Infraestructura y Hosting</h3>\n<p>Aunque WordPress como software es relativamente ligero, la <strong>huella ecológica de un sitio de WordPress</strong> depende en gran medida del servicio de hosting elegido.</p>\n<p>Muchos sitios de WordPress están alojados en servidores compartidos, que a menudo <strong>no utilizan energías renovables</strong>.</p>\n<p>Esto se traduce en un <strong>alto consumo de energía no sostenible</strong> para mantener estos sitios en funcionamiento.\nAdemás, la <strong>popularidad de WordPress</strong> significa que hay una gran cantidad de servidores dedicados exclusivamente a alojar estos sitios, lo que incrementa su <strong>impacto ambiental</strong>.</p>\n<h3>Plugins y Temas</h3>\n<p>Una de las características más atractivas de <strong>WordPress</strong> es su flexibilidad, permitiendo a los usuarios añadir funcionalidades a través de plugins y personalizar la apariencia con temas.\nSin embargo, esta personalización puede llevar a <strong>un uso excesivo de recursos</strong>.</p>\n<p>Los plugins y temas mal codificados o innecesarios pueden aumentar significativamente la carga de los servidores, resultando en <strong>un mayor consumo de energía</strong>.\nAdemás, la actualización constante de estos complementos implica un ciclo continuo de desarrollo y despliegue, que a su vez tiene su propia <strong>huella de carbono</strong>.</p>\n<h3>Eficiencia Energética Comparada</h3>\n<p>En comparación con otras plataformas de gestión de contenido, <strong>WordPress puede no ser siempre la opción más eficiente</strong> desde el punto de vista energético.\nPlataformas más ligeras o diseñadas con una mayor eficiencia energética en mente pueden representar alternativas más sostenibles, especialmente para sitios web con requisitos menos complejos.</p>\n<p>En resumen, la omnipresencia de WordPress en la web contribuye de manera significativa al consumo de energía y a la huella de carbono asociada con el funcionamiento de los sitios web.\nEsta huella se ve exacerbada por prácticas como el uso de servidores no ecológicos, y la implementación de plugins y temas que aumentan la carga del servidor.</p>\n<h2>Consecuencias Medioambientales de la Sobreutilización de WordPress:</h2>\n<p>La elección de WordPress para alimentar sitios web simples puede compararse a <em>utilizar un cohete para ir a comprar el pan</em>.\nEs un &quot;overkill&quot; en términos de tecnología y recursos para una tarea que requiere mucho menos.</p>\n<h3>Uso Ineficiente para Sitios Web Simples</h3>\n<p><strong>Utilizar WordPress</strong> para una simple página de aterrizaje o un sitio web de pocas páginas <strong>es un exceso</strong> comparado con las necesidades reales del sitio.\n<em>Es como llevar un camión de 18 ruedas para transportar una sola caja</em>. <strong>WordPress</strong>, con sus numerosas funcionalidades, está diseñado para sitios web con contenido dinámico y complejo.\nEn casos donde el contenido cambia poco y las necesidades son básicas, el uso de WordPress resulta en un <strong>desperdicio de recursos computacionales y energéticos</strong>.</p>\n<h3>Impacto de la Sobreutilización</h3>\n<p><strong>La sobreutilización de WordPress</strong> para sitios sencillos conlleva un uso excesivo de energía. Cada instalación de WordPress necesita mantenimiento regular, lo que implica un <strong>uso continuo</strong> de recursos y actividades de desarrollo que incrementan la huella de carbono.\n<em>Esto es comparable a encender todas las luces de una casa para leer un libro en una habitación.</em></p>\n<h3>Alternativas para Sitios Web Simples</h3>\n<p>Para sitios web que no requieren la complejidad de WordPress, hay alternativas más adecuadas y ecológicas. Los constructores de sitios web estáticos o las plataformas de hosting especializadas en eficiencia energética pueden ser soluciones más sostenibles. Estas alternativas, al ser más ligeras y menos demandantes en recursos, son como usar una bicicleta en lugar de un coche deportivo para un recorrido corto.</p>\n<p>En conclusión, <strong>el uso de WordPress</strong> para sitios web sencillos es una elección que <strong>impacta negativamente en el medio ambiente</strong>, similar a usar herramientas o vehículos excesivamente potentes para tareas simples.\nLa consideración de alternativas más eficientes y respetuosas con el medio ambiente es crucial en estos casos.</p>\n<h2>Alternativas y Soluciones</h2>\n<p>Dada la importancia de <strong>minimizar el impacto medioambiental de los sitios web</strong>, es crucial explorar <strong>alternativas a WordPress</strong>, especialmente para sitios que no requieren su nivel de complejidad.\nA continuación, se presentan algunas <strong>opciones más sostenibles</strong>:</p>\n<h3>Constructores de Sitios Web Estáticos</h3>\n<p>Los generadores de sitios estáticos como Astro, NextJS o Gatsby ofrecen una forma eficiente de crear sitios web.\nAl no requerir una base de datos o procesamiento intensivo del servidor, estos sitios <strong>consumen menos recursos</strong>, reduciendo su <strong>huella de carbono</strong>.\nSon ideales para sitios con contenido que no cambia frecuentemente.</p>\n<h3>Hosting Ecológico</h3>\n<p>Elegir un proveedor de hosting que utilice <strong>energías renovables</strong> puede tener un impacto significativo en la reducción de la <strong>huella de carbono de un sitio web</strong>.\nEstos proveedores se centran en la sostenibilidad, utilizando fuentes de energía más limpias y eficientes.\nOptimización y Mantenimiento</p>\n<p>Para los sitios que <strong>deben usar WordPress</strong>, es esencial optimizarlos.\nEsto incluye elegir temas y plugins eficientes, minimizar el uso de recursos y mantener el sitio actualizado y seguro. La optimización puede reducir la cantidad de energía necesaria para ejecutar y mantener el sitio.</p>\n<h3>Educación y Conciencia</h3>\n<p>Fomentar la conciencia sobre el impacto medioambiental de las tecnologías web es crucial.\nEducar a los desarrolladores, diseñadores y propietarios de sitios web sobre prácticas sostenibles puede llevar a <strong>decisiones más informadas y ecológicas</strong>.</p>\n<p>Implementar estas alternativas y estrategias puede marcar una diferencia significativa en <strong>la reducción del impacto medioambiental de los sitios web</strong>.\nEs un paso hacia <strong>un internet más sostenible</strong> y <strong>respetuoso con el medio ambiente</strong>.</p>\n<h2>Conclusión</h2>\n<p>La era digital, aunque invisible a simple vista, tiene un <strong>impacto significativo en el medio ambiente</strong>. El <strong>uso excesivo</strong> y a menudo <strong>innecesario</strong> de plataformas como <strong>WordPress</strong> para sitios web sencillos contribuye a este problema.\nEs comparable a utilizar herramientas excesivamente potentes para tareas sencillas, resultando en un consumo innecesario de energía y un aumento de la huella de carbono.</p>\n<p>Sin embargo, existen <strong>alternativas más sostenibles y eficientes energéticamente</strong>. Optar por <strong>generadores de sitios estáticos</strong> para proyectos más simples, elegir proveedores de hosting ecológicos, y educar a la comunidad web sobre prácticas sostenibles, son pasos fundamentales hacia un internet más respetuoso con el medio ambiente. La conciencia y la acción en este ámbito pueden llevar a un cambio significativo y necesario.</p>\n<p>Es esencial que desarrolladores, diseñadores y propietarios de sitios web consideren el <strong>impacto medioambiental de sus decisiones tecnológicas</strong> y opten por soluciones que equilibren las necesidades funcionales con la <strong>responsabilidad ecológica</strong>.</p>\n<h2>Entonces:</h2>\n<p>¿Estás listo para pasar tu website a una <strong>arquitectura verde y amigable con el medio ambiente</strong>?<br/>\n<a href=\"mailto:bogdan@puscasu.es\">Contáctame</a> para transformar tu sitio web y llevarlo al siguiente nivel.</p>",
            "url": "https://www.bo-labs.com/blog/explorando-wordpress-en-la-era-headless-ventajas-y-guia-de-implementacion",
            "title": "Wordpress overkill",
            "summary": "En la era moderna, la presencia digital se ha vuelto imprescindible para empresas, emprendedores y creadores de contenido. WordPress, como uno de los sistemas de gestión de con...",
            "date_modified": "2024-01-31T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/un-vistazo-al-futuro-las-emocionantes-innovaciones-en-desarrollo-web-para-2024",
            "content_html": "<p>¿Que espero yo en 2024?</p>\n<ol>\n<li>\n<h2>WebAssembly (Wasm)</h2>\n</li>\n<li>\n<h2>UI Basada en Servidor</h2>\n</li>\n<li>\n<h2>Aplicaciones Web Progresivas (PWA)</h2>\n</li>\n<li>\n<h2>Optimización de Búsqueda por Voz</h2>\n</li>\n<li>\n<h2>Chatbots de IA</h2>\n</li>\n<li>\n<h2>Realidad Aumentada (RA)</h2>\n</li>\n<li>\n<h2>Multiexperiencia</h2>\n</li>\n</ol>",
            "url": "https://www.bo-labs.com/blog/un-vistazo-al-futuro-las-emocionantes-innovaciones-en-desarrollo-web-para-2024",
            "title": "2024",
            "summary": "Como apasionado del desarrollo web, no puedo evitar compartir mi entusiasmo por las tendencias y avances que están perfilando nuestro futuro digital...",
            "date_modified": "2024-01-09T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/maximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro",
            "content_html": "<p>En el dinámico mundo del desarrollo web, la combinación de un CMS sin cabeza (Headless CMS) con frameworks modernos como Next.js y Astro está revolucionando la forma en que creamos y gestionamos contenido en línea.</p>\n<p><span class=\"relative my-8 block aspect-[16/10] overflow-hidden rounded-[1.35rem] bg-muted\"><img alt=\"\" loading=\"lazy\" decoding=\"async\" data-nimg=\"fill\" class=\"object-cover\" style=\"position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url(&quot;data:image/svg+xml;charset=utf-8,%3Csvg xmlns=&#x27;http://www.w3.org/2000/svg&#x27; %3E%3Cfilter id=&#x27;b&#x27; color-interpolation-filters=&#x27;sRGB&#x27;%3E%3CfeGaussianBlur stdDeviation=&#x27;20&#x27;/%3E%3CfeColorMatrix values=&#x27;1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1&#x27; result=&#x27;s&#x27;/%3E%3CfeFlood x=&#x27;0&#x27; y=&#x27;0&#x27; width=&#x27;100%25&#x27; height=&#x27;100%25&#x27;/%3E%3CfeComposite operator=&#x27;out&#x27; in=&#x27;s&#x27;/%3E%3CfeComposite in2=&#x27;SourceGraphic&#x27;/%3E%3CfeGaussianBlur stdDeviation=&#x27;20&#x27;/%3E%3C/filter%3E%3Cimage width=&#x27;100%25&#x27; height=&#x27;100%25&#x27; x=&#x27;0&#x27; y=&#x27;0&#x27; preserveAspectRatio=&#x27;none&#x27; style=&#x27;filter: url(%23b);&#x27; href=&#x27;data:image/svg+xml,%3Csvg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 16 10&quot;%3E%3Cdefs%3E%3ClinearGradient id=&quot;g&quot; x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;1&quot; y2=&quot;1&quot;%3E%3Cstop stop-color=&quot;%23f5f5f7&quot;/%3E%3Cstop offset=&quot;0.5&quot; stop-color=&quot;%23dbeafe&quot;/%3E%3Cstop offset=&quot;1&quot; stop-color=&quot;%23e8e8ed&quot;/%3E%3C/linearGradient%3E%3Cfilter id=&quot;b&quot;%3E%3CfeGaussianBlur stdDeviation=&quot;1.25&quot;/%3E%3C/filter%3E%3C/defs%3E%3Crect width=&quot;16&quot; height=&quot;10&quot; fill=&quot;url(%23g)&quot;/%3E%3Ccircle cx=&quot;4&quot; cy=&quot;3&quot; r=&quot;4&quot; fill=&quot;%23ffffff&quot; opacity=&quot;0.45&quot; filter=&quot;url(%23b)&quot;/%3E%3Ccircle cx=&quot;12&quot; cy=&quot;7&quot; r=&quot;5&quot; fill=&quot;%230071e3&quot; opacity=&quot;0.16&quot; filter=&quot;url(%23b)&quot;/%3E%3C/svg%3E&#x27;/%3E%3C/svg%3E&quot;)\" sizes=\"(min-width: 768px) 672px, 100vw\" srcSet=\"/_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=640&amp;q=75 640w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=750&amp;q=75 750w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=828&amp;q=75 828w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=3840&amp;q=75 3840w\" src=\"/_next/image?url=%2Fcms%2Fblog%2Fmaximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro%2Fankle-band3.jpg&amp;w=3840&amp;q=75\"/></span></p>\n<p>Esta poderosa sinergia ofrece una flexibilidad sin precedentes, un rendimiento mejorado y una experiencia de usuario optimizada. En este artículo, exploraremos las ventajas clave de esta integración.</p>\n<pre class=\"language-js\"><code class=\"language-js code-highlight\"><span class=\"code-line\"><span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">fetchGraphQL</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">query</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">  <span class=\"token keyword control-flow\">return</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span>\n</span><span class=\"code-line\">    <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">https://graphql.contentful.com/content/v1/spaces/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>process<span class=\"token punctuation\">.</span><span class=\"token property-access\">env</span><span class=\"token punctuation\">.</span><span class=\"token constant\">CONTENTFUL_SPACE_ID</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">    <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">      <span class=\"token literal-property property\">method</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;POST&quot;</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">      <span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">        <span class=\"token string-property property\">&quot;Content-Type&quot;</span><span class=\"token operator\">:</span> <span class=\"token string\">&quot;application/json&quot;</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">        <span class=\"token literal-property property\">Authorization</span><span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Bearer </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>process<span class=\"token punctuation\">.</span><span class=\"token property-access\">env</span><span class=\"token punctuation\">.</span><span class=\"token constant\">CONTENTFUL_ACCESS_TOKEN</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token known-class-name class-name\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token method function property-access\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> query <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">    <span class=\"token punctuation\">}</span>\n</span><span class=\"code-line\">  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token method function property-access\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">response</span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> response<span class=\"token punctuation\">.</span><span class=\"token method function property-access\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\"><span class=\"token punctuation\">}</span>\n</span></code></pre>\n<h2>Flexibilidad en el Diseño y Desarrollo:</h2>\n<p>Un <strong>Headless CMS</strong> separa el contenido del diseño frontend, permitiendo a los desarrolladores utilizar cualquier framework o tecnología para la presentación.</p>\n<p>Con Next.js, se puede aprovechar el renderizado del lado del servidor para <strong>sitios web dinámicos</strong> y con Astro, para <strong>sitios estáticos</strong> de alto rendimiento. Esta flexibilidad permite a los equipos elegir la mejor herramienta para cada proyecto, sin estar limitados por las restricciones del CMS.</p>\n<h2>Mejora del Rendimiento Web:</h2>\n<p>El uso de un <strong>Headless CMS</strong> con Next.js o Astro contribuye significativamente a un <strong>rendimiento web mejorado</strong>. Al servir contenido a través de una API y generar páginas estáticas o server-side renderizadas, se reduce el tiempo de carga, mejorando la experiencia del usuario y la <strong>visibilidad en motores de búsqueda</strong>.</p>\n<p>Astro, en particular, está diseñado para entregar <strong>sitios extremadamente rápidos</strong>, optimizando automáticamente la carga de JavaScript.</p>\n<h2>Escala y Seguridad Mejoradas:</h2>\n<p>Un <strong>Headless CMS</strong>, al estar desacoplado del frontend, ofrece una mayor <strong>seguridad y escalabilidad</strong>.</p>\n<p>Los riesgos de seguridad asociados con los CMS tradicionales, como los ataques de inyección de SQL, se minimizan.</p>\n<p>Además, la escalabilidad se maneja más eficientemente, ya que el contenido y la presentación se pueden escalar independientemente.</p>\n<h2>Experiencia de Usuario Personalizada y Dinámica:</h2>\n<p>La combinación de un <strong>Headless CMS</strong> con Next.js permite crear experiencias de usuario altamente personalizadas y dinámicas.</p>\n<p>Next.js facilita la creación de aplicaciones web interactivas con datos en tiempo real, mientras que el Headless CMS proporciona el contenido. Esto resulta en sitios web más atractivos y funcionales, mejorando la retención y conversión de usuarios.</p>\n<h2>Gestión de Contenido Simplificada y Eficiente:</h2>\n<p>Un <strong>Headless CMS</strong> proporciona una interfaz centralizada para la gestión de contenido, independientemente del número de canales o plataformas.</p>\n<p>Esto simplifica la tarea de los creadores de contenido, permitiéndoles publicar y actualizar contenido de manera eficiente, sin preocuparse por los detalles técnicos del frontend.</p>\n<h2>Conclusión:</h2>\n<p>La combinación de un <strong>Headless CMS</strong> con frameworks como Next.js y Astro representa una evolución en el desarrollo web. Ofrece una mayor flexibilidad, mejora del rendimiento, seguridad, escalabilidad, y una experiencia de usuario más rica.</p>\n<p>Para desarrolladores y empresas que buscan estar a la vanguardia, esta integración es una estrategia poderosa y futurista.</p>\n<p>¿Estás listo para pasar a <strong>headless</strong>?<br/>\n<a href=\"mailto:bogdan@puscasu.es\">Contáctame</a> para transformar tu sitio web y llevarlo al siguiente nivel.</p>",
            "url": "https://www.bo-labs.com/blog/maximizando-la-flexibilidad-y-rendimiento-web-las-ventajas-de-combinar-headless-cms-con-nextjs-y-astro",
            "title": "Headless CMS con Next.js y Astro",
            "summary": "En el dinámico mundo del desarrollo web, la combinación de un CMS sin cabeza (Headless CMS) con frameworks modernos como Next.js y Astro está revolucionando...",
            "date_modified": "2023-12-29T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/analisis-del-impacto-medioambiental-de-los-sitios-web-de-wordpress",
            "content_html": "<h2>Introducción:</h2>\n<p><strong>WordPress</strong>, conocido tradicionalmente como un sistema de gestión de contenidos (CMS) completo, ha evolucionado.\nHoy en día, su uso como un <strong>Headless CMS</strong> está ganando popularidad, ofreciendo a los desarrolladores mayor\nflexibilidad, y a los usuarios finales, experiencias digitales más ricas.\nEn este artículo, exploraremos las ventajas de usar <strong>WordPress como un Headless CMS</strong>,\nel proceso de implementación y proporcionaremos un ejemplo de código para empezar.</p>\n<h2>Ventajas de Usar WordPress Como Headless CMS:</h2>\n<ul>\n<li>Flexibilidad en el Desarrollo Frontend:\nAl utilizar WordPress como Headless CMS, se separa la gestión de contenido del frontend.\nEsto significa que los desarrolladores pueden usar cualquier tecnología de su elección para el frontend, como React, Vue o Angular, proporcionando una total libertad para crear experiencias de usuario únicas.</li>\n<li>Mejora del Rendimiento y la Seguridad:\nAl servir contenido a través de una API, WordPress Headless puede mejorar significativamente el rendimiento del sitio.\nAdemás, al no exponer directamente el backend de WordPress, se refuerza la seguridad del sitio web.</li>\n<li>Optimización para Múltiples Canales:\nWordPress Headless permite que el contenido se distribuya a través de varios canales, no solo a sitios web, sino también a aplicaciones móviles, dispositivos IoT, y más, desde una única fuente de contenido.</li>\n</ul>\n<h2>Proceso de Implementación:</h2>\n<ul>\n<li>Configuración de WordPress:\nInstala y configura una instancia de WordPress normal. Esto servirá como el backend y el sistema de gestión de contenidos.</li>\n<li>Habilitación de la API REST:\nPor defecto, WordPress viene con una API REST que permite acceder al contenido a través de peticiones HTTP. Asegúrate de que esta API esté habilitada y funcione correctamente.</li>\n<li>Desarrollo del Frontend Independiente:\nDesarrolla el frontend usando tu tecnología preferida. Este frontend consumirá el contenido del backend de WordPress a través de la API REST.</li>\n</ul>\n<h2>Ejemplo con ReactJS:</h2>\n<pre class=\"language-js\"><code class=\"language-js code-highlight\"><span class=\"code-line\">\n</span><span class=\"code-line\"><span class=\"token keyword\">function</span> <span class=\"token function\"><span class=\"token maybe-class-name\">WordPressPost</span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>post<span class=\"token punctuation\">,</span> setPost<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token keyword null nil\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span><span class=\"code-line\">  <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token arrow operator\">=&gt;</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">    <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">&#x27;https://tuwordpress.com/wp-json/wp/v2/posts/1&#x27;</span><span class=\"token punctuation\">)</span>\n</span><span class=\"code-line\">      <span class=\"token punctuation\">.</span><span class=\"token method function property-access\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">response</span> <span class=\"token arrow operator\">=&gt;</span> response<span class=\"token punctuation\">.</span><span class=\"token method function property-access\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n</span><span class=\"code-line\">      <span class=\"token punctuation\">.</span><span class=\"token method function property-access\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token arrow operator\">=&gt;</span> <span class=\"token function\">setPost</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span><span class=\"code-line\">  <span class=\"token keyword control-flow\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>post<span class=\"token punctuation\">)</span> <span class=\"token keyword control-flow\">return</span> <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">&gt;</span><span class=\"token maybe-class-name\">Cargando</span><span class=\"token spread operator\">...</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">&gt;</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span><span class=\"code-line\">  <span class=\"token keyword control-flow\">return</span> <span class=\"token punctuation\">(</span>\n</span><span class=\"code-line\">    <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">&gt;</span>\n</span><span class=\"code-line\">      <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">&gt;</span><span class=\"token punctuation\">{</span>post<span class=\"token punctuation\">.</span><span class=\"token property-access\">title</span><span class=\"token punctuation\">.</span><span class=\"token property-access\">rendered</span><span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">&gt;</span>\n</span><span class=\"code-line\">      <span class=\"token operator\">&lt;</span>div dangerouslySetInnerHTML<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">__html</span><span class=\"token operator\">:</span> post<span class=\"token punctuation\">.</span><span class=\"token property-access\">content</span><span class=\"token punctuation\">.</span><span class=\"token property-access\">rendered</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">&gt;</span>\n</span><span class=\"code-line\">    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">&gt;</span>\n</span><span class=\"code-line\">  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\"><span class=\"token punctuation\">}</span>\n</span><span class=\"code-line\">\n</span><span class=\"code-line\"><span class=\"token keyword module\">export</span> <span class=\"token keyword module\">default</span> <span class=\"token maybe-class-name\">WordPressPost</span><span class=\"token punctuation\">;</span>\n</span><span class=\"code-line\">\n</span></code></pre>\n<p>Este código es un componente React simple que carga y muestra un post de WordPress usando la API REST de WordPress.</p>\n<h2>Conclusión:</h2>\n<p>WordPress como Headless CMS ofrece una combinación potente de flexibilidad, rendimiento, seguridad y capacidad de integración multiplataforma.</p>\n<p>Al desacoplar el backend y el frontend, abre un nuevo mundo de posibilidades para los desarrolladores y una experiencia mejorada para los usuarios.</p>\n<p>¿Estás listo para pasar a <strong>headless</strong>?<br/>\n<a href=\"mailto:bogdan@puscasu.es\">Contáctame</a> para transformar tu sitio web y llevarlo al siguiente nivel.</p>",
            "url": "https://www.bo-labs.com/blog/analisis-del-impacto-medioambiental-de-los-sitios-web-de-wordpress",
            "title": "Wordpress Headless",
            "summary": "WordPress, conocido tradicionalmente como un sistema de gestión de contenidos (CMS) completo, ha evolucionado. Hoy en día, su uso como un Headless CMS está ganando popularidad...",
            "date_modified": "2023-11-10T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        },
        {
            "id": "https://www.bo-labs.com/blog/tendencias-en-el-diseno-y-desarrollo-web",
            "content_html": "<h2>Introducción:</h2>\n<p>En un mundo donde la tecnología avanza a pasos agigantados, el campo del diseño y <strong>desarrollo web</strong> no se queda atrás.\nCada año, emergen nuevas tendencias que transforman la manera en que interactuamos con los <strong>sitios web</strong>.</p>\n<pre class=\"language-js\"><code class=\"language-js code-highlight\"><span class=\"code-line\"><span class=\"token keyword module\">export</span> <span class=\"token keyword\">const</span> meta <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">autor</span><span class=\"token operator\">:</span> <span class=\"token string\">&#x27;Bogdan Pușcașu&#x27;</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">fecha</span><span class=\"token operator\">:</span> <span class=\"token string\">&#x27;14-07-2023&#x27;</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">&#x27;Tendencias ascendentes en el diseño y desarrollo web&#x27;</span><span class=\"token punctuation\">,</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">descripción</span><span class=\"token operator\">:</span>\n</span><span class=\"code-line\">    <span class=\"token string\">&#x27;En un mundo donde la tecnología avanza a pasos agigantados...[]&#x27;</span>\n</span><span class=\"code-line\">    <span class=\"token punctuation\">}</span>\n</span></code></pre>\n<p>En este artículo, exploraremos las tendencias más innovadoras en <strong>diseño web</strong> para el año 2024,\nesenciales para cualquier <a href=\"https://bo-labs.com\">diseñador y desarrollador web</a> que busque mantenerse al frente en esta industria dinámica.</p>\n<h2>Minimalismo y Espacios Blancos:</h2>\n<p>El minimalismo, una tendencia eterna en el diseño web, continúa evolucionando. Este año, veremos sitios que adoptan un enfoque aún más simplificado, con amplios espacios blancos. Estos espacios no solo mejoran la legibilidad, sino que también crean una experiencia visualmente relajante para el usuario. El diseño web minimalista enfatiza en lo esencial, eliminando elementos superfluos que puedan distraer al usuario.</p>\n<h2>Diseño Responsivo y Móvil-Primero:</h2>\n<p>Con el creciente uso de dispositivos móviles para acceder a internet, el enfoque móvil-primero en el desarrollo web se ha vuelto crucial. Un diseño web responsivo asegura que el contenido se vea y funcione perfectamente en todos los dispositivos. Este año, los diseñadores y desarrolladores web deben priorizar la adaptabilidad y la fluidez del diseño en diferentes tamaños de pantalla, garantizando así una experiencia de usuario óptima.</p>\n<h2>Integración de Inteligencia Artificial y Chatbots:</h2>\n<p>La inteligencia artificial (IA) está redefiniendo las interacciones en línea. Los chatbots, impulsados por IA, se están convirtiendo en un elemento común en muchos sitios web. Ofrecen una interacción inmediata con los usuarios, respondiendo a consultas y mejorando la experiencia del cliente. Esta integración no solo mejora la eficiencia sino que también añade un toque personalizado al sitio web.</p>\n<pre class=\"language-js\"><code class=\"language-js code-highlight\"><span class=\"code-line\"> \n</span><span class=\"code-line\"><span class=\"token comment\">// Create an OpenAI API client (that&#x27;s edge friendly!)</span>\n</span><span class=\"code-line\"><span class=\"token keyword\">const</span> openai <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">OpenAI</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n</span><span class=\"code-line\">  <span class=\"token literal-property property\">apiKey</span><span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span><span class=\"token property-access\">env</span><span class=\"token punctuation\">.</span><span class=\"token constant\">OPENAI_API_KEY</span>\n</span><span class=\"code-line\"><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n</span></code></pre>\n<h2>Animaciones y Microinteracciones:</h2>\n<p>Las animaciones son una poderosa herramienta para captar la atención del usuario.<br/>\nEste año, veremos una mayor implementación de microinteracciones: pequeñas animaciones que ocurren cuando un usuario interactúa con un elemento del sitio.<br/>\nEstas microinteracciones mejoran la usabilidad y hacen que la navegación sea más intuitiva y agradable.\\</p>\n<h2>Seguridad Web y Cumplimiento de Normativas:</h2>\n<p>En un mundo donde la seguridad de los datos es primordial, el diseño y desarrollo web seguro es más importante que nunca. Los diseñadores web deben asegurarse de que sus sitios cumplan con las normativas vigentes, como el GDPR. Implementar prácticas de seguridad robustas no solo protege a los usuarios, sino que también mejora la confianza y la credibilidad del sitio.</p>\n<h2>Uso de Colores Vibrantes y Esquemas de Colores Audaces:</h2>\n<p>Los colores juegan un papel crucial en el diseño web. Este año, esperamos ver una paleta de colores más atrevida y vibrante en los sitios web. Los esquemas de colores audaces y expresivos pueden ayudar a que un sitio web destaque y transmita su mensaje de manera más eficaz.</p>\n<h3>Conclusión:</h3>\n<p>Mantenerse al día con estas tendencias emergentes en diseño y desarrollo web no solo es esencial para crear sitios atractivos y funcionales, sino también para ofrecer una experiencia de usuario excepcional. Como diseñadores y desarrolladores, es nuestro deber integrar estas innovaciones en nuestros proyectos, asegurando que nuestros sitios no solo sean estéticamente agradables, sino también eficientes y seguros.</p>\n<p>¿Estás buscando actualizar tu sitio web con las últimas tendencias de diseño?<br/>\n<a href=\"mailto:bogdan@puscasu.es\">Contáctame</a> para transformar tu sitio web y llevarlo al siguiente nivel.</p>",
            "url": "https://www.bo-labs.com/blog/tendencias-en-el-diseno-y-desarrollo-web",
            "title": "Tendencias ascendentes en el diseño y desarrollo web",
            "summary": "En un mundo donde la tecnología avanza a pasos agigantados, el campo del diseño y desarrollo web no se queda atrás. Cada año, emergen nuevas tendencias que... ",
            "date_modified": "2023-07-14T00:00:00.000Z",
            "author": {
                "name": "Bogdan Cristian Pușcașu"
            }
        }
    ]
}