[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fweb-development\u002Fadmin-dashboards":167,"service-parent:\u002Fservices\u002Fweb-development\u002Fadmin-dashboards":440,"service-children:\u002Fservices\u002Fweb-development\u002Fadmin-dashboards":744,"glossary":745},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Todas las apps que entregamos llegan a Android: APIs de plataforma, ejecución en segundo plano, permisos y los requisitos de tienda que traen consigo.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","El framework de frontend en el que trabajamos cuando un producto ya es Angular: una estructura con todo incluido que encaja en apps grandes y de vida larga.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","El lenguaje en el que está escrita cada app Flutter que entregamos: null safety robusto, pattern matching de verdad y un compilador que apunta a nativo y a la web.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","El framework de Python que usamos cuando un producto necesita administración, autenticación y un modelo de datos real desde el primer día.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Cada servicio que construimos se publica como contenedor, así que lo que corre en un portátil, en CI y en producción es un solo artefacto y no tres.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","La automatización de releases móviles: firma, builds y subidas a las tiendas desde CI, no desde el portátil de un ingeniero el día del lanzamiento.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Nuestro stack móvil principal desde 2018: una base de código Dart que llega a iOS, Android, web y escritorio sin un equipo por plataforma.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Todos los proyectos que tocamos viven en Git: pull requests revisadas, CI en cada rama y un historial que sigue teniendo sentido meses después.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Nuestro lenguaje de backend para APIs en tiempo real y servicios bajo carga: binarios pequeños, compilaciones rápidas y concurrencia que sigue siendo legible.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","La nube donde corren nuestras cargas de producción: Kubernetes gestionado, almacenamiento y red, sin servidores hechos a mano que nadie quiere mantener.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","El sistema de build por el que pasa cada release de Android: product flavours, configuraciones de firma y el cableado de dependencias bajo una app Flutter.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Cómo empaquetamos un despliegue de Kubernetes: servicio, configuración, secretos e ingress como una unidad versionada que se puede promover y revertir.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","A lo que recurrimos cuando una app Flutter necesita Android de verdad por debajo: platform channels, trabajo en segundo plano e integraciones con SDK nativos.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Compartir la lógica de negocio entre iOS y Android mientras cada plataforma conserva su UI nativa: la alternativa cuando Flutter no encaja.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Cómo ejecutamos servicios en producción: despliegues con Helm, rollouts reversibles y escalado que no necesita a nadie a las 3 de la mañana.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Mensajería ligera entre servicios: publicación\u002Fsuscripción y petición\u002Frespuesta sin el peso operativo de un clúster de broker completo.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue con renderizado en servidor, enrutado y SEO resueltos: así hacemos sitios y apps web que deben ser rápidas e indexables en la primera carga.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Donde trabajamos con un backend PHP ya existente: extenderlo, integrarse con él y construir los clientes móviles y web a los que tiene que servir.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Nuestra base de datos por defecto, salvo que un producto dé una razón concreta para no usarla: del diseño del esquema al ajuste de índices.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Nuestro lenguaje para backends, trabajo con datos e integraciones de IA, incluidos los bindings de Python que publicamos para nuestras propias herramientas en Rust.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","La librería de frontend en la que trabajamos cuando un producto ya es React: componentes, hooks y el ecosistema que ha crecido a su alrededor.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Donde ponemos los datos que tienen que ser rápidos y se pueden reconstruir: cachés, sesiones, límites de tasa y las colas tras las rutas lentas de un producto.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","El lenguaje de nuestra automatización de releases móviles: lanes de Fastlane, acciones a medida y el pegamento de CI que sube builds a las tiendas.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","A donde vamos cuando importan tanto el rendimiento como la corrección: renderizado de documentos, herramientas de CLI y servicios que tienen que ser rápidos y predecibles.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","La base de datos que viaja dentro de la app: cachés locales, almacenamiento offline-first y todo lo que tiene que seguir funcionando sin red.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Un CMS headless para cuando los editores necesitan ser dueños del contenido: una administración de verdad y una API limpia, sin construirlas desde cero.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","A lo que recurrimos cuando una app Flutter necesita iOS de verdad por debajo: platform channels, integraciones con SDK nativos, widgets y App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","El framework de UI de Apple, donde construimos las superficies nativas que una app Flutter no puede tener: widgets, App Clips y extensiones.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Cómo damos estilo a cada frontend que construimos: clases de utilidad y design tokens en lugar de una hoja de estilos que solo crece y nunca se borra.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","Lo predeterminado para todo lo que escribimos para el navegador y para servicios Node: tipos que detectan errores de integración antes de llegar a una revisión.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Nuestro framework de frontend para paneles de administración, cuadros de mando y apps web que deben seguir siendo mantenibles durante años.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","El modelo de reconocimiento de voz de código abierto de OpenAI: el motor de transcripción detrás de la entrada por voz, que funciona como servicio de backend y también en el propio dispositivo.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":405,"extension":406,"footerCta":407,"headingCta":421,"image":425,"meta":429,"metaDescription":430,"metaTitle":427,"navigation":431,"ogDescription":432,"parent":433,"path":434,"seo":435,"slug":436,"stem":437,"updated":438,"__hash__":439},"services_es\u002Fservices\u002Fadmin-dashboards.md","Paneles de administración y cuadros de mando",{"type":171,"value":172,"toc":385},"minimark",[173,177,186,191,235,240,243,247,260,264,272,276,279,283,286,290,293,297,300,304,307,311,314,318,324,335,338,342,357,360,364,367,371],[174,175,176],"p",{},"El desarrollo de paneles de administración es la ingeniería de las interfaces sobre las que funciona un negocio, no de las que promociona: el cuadro de mando donde un equipo de operaciones vigila los números, el panel de configuración donde un responsable cambia lo que hace el producto, el back office donde soporte busca una cuenta y la arregla. Estas herramientas no tienen landing ni ficha en las tiendas de aplicaciones. También deciden cuántas personas hacen falta para dirigir la empresa.",[174,178,179,180,185],{},"Los construimos sobre Vue y Nuxt con TypeScript de principio a fin, sobre el mismo stack que nuestro trabajo público de ",[181,182,184],"a",{"href":183},"\u002Fservices\u002Fweb-development","desarrollo web",", pero afinados para un objetivo distinto. Una herramienta de administración se mide en minutos de operador ahorrados y en errores evitados, no en tasas de rebote, y eso cambia para qué se hace la ingeniería.",[187,188,190],"h3",{"id":189},"los-productos-que-construimos","Los productos que construimos",[192,193,194,202,208,223,229],"ul",{},[195,196,197,201],"li",{},[198,199,200],"strong",{},"Cuadros de mando de operaciones",": vistas en vivo sobre los datos con los que actúa un equipo —pedidos, sesiones, pagos, alertas—, con los filtros y desgloses que convierten un muro de filas en una decisión",[195,203,204,207],{},[198,205,206],{},"Paneles de configuración",": interfaces donde cambiar un ajuste cambia el producto: reglas de precios, feature flags, parámetros de campaña, evaluados por el backend en tiempo de ejecución",[195,209,210,213,214,218,219],{},[198,211,212],{},"Back offices para productos móviles",": la contraparte web de una app, como la interfaz de administración detrás de la ",[181,215,217],{"href":216},"\u002Fservices\u002Fwhitelabel-app-development","flota de marca blanca"," que operamos; la superficie web de cara al cliente tiene su propia página, ",[181,220,222],{"href":221},"\u002Fservices\u002Fweb-development\u002Fcompanion-web-app","apps web complementarias",[195,224,225,228],{},[198,226,227],{},"Herramientas de soporte y cuentas",": buscar a un usuario, ver lo que vio, arreglar lo que salió mal, con cada acción registrada",[195,230,231,234],{},[198,232,233],{},"Portales de comercios y socios",": el primo restringido y de cara al exterior de un panel de administración, donde un socio gestiona su propia porción de tu plataforma",[236,237,239],"h2",{"id":238},"quién-construye-tu-panel-de-administración","Quién construye tu panel de administración",[174,241,242],{},"Nuestra prueba más clara es un back office que mueve una flota real.",[187,244,246],{"id":245},"la-interfaz-de-administración-que-lanza-apps-de-marca","La interfaz de administración que lanza apps de marca",[174,248,249,250,254,255,259],{},"Para nuestra ",[181,251,253],{"href":252},"\u002Fportfolio\u002Fcashback-loyalty-platform","plataforma de cashback y fidelización",", lanzar una nueva marca de marca blanca solía ser un recado de ingeniería: configuración, identificadores de paquete, recursos de firma, metadatos de tienda, un nuevo target de CI. Lo comprimimos todo en una única aplicación Nuxt respaldada por servicios en PHP y PostgreSQL. Un responsable rellena un formulario —nombre de marca, tema, recursos, funciones— y el sistema genera el paquete de configuración, registra la app en el pipeline de ",[256,257],"term",{"slug":258},"ci-cd"," y produce builds firmadas de iOS y Android. Lanzar una marca pasó de ser una tarea de ingeniería de varios días a un formulario autogestionado, manejado por personas que no escriben código. Ese es el estándar al que sometemos las herramientas de administración: el panel acciona la maquinaria en lugar de describirla.",[187,261,263],{"id":262},"construido-por-quienes-construyen-el-backend","Construido por quienes construyen el backend",[174,265,266,267,271],{},"Un panel de administración vale lo que vale su API, y rara vez construimos lo uno sin lo otro. El mismo encargo que produjo la interfaz de administración de arriba produjo los servicios en PHP que hay detrás; el frontend en Nuxt de ",[181,268,270],{"href":269},"\u002Fportfolio\u002Fformtastic","Formtastic"," corre contra un backend de Django y Go que evolucionamos junto a él. Cuando un solo equipo es dueño de ambos lados, «el frontend necesita un endpoint para esto» es el trabajo de una mañana y no una negociación entre equipos, y las reglas de validación del panel coinciden con lo que el backend impone de verdad.",[236,273,275],{"id":274},"qué-exige-realmente-una-herramienta-de-administración","Qué exige realmente una herramienta de administración",[174,277,278],{},"Cinco preocupaciones aparecen en todo proyecto de back office. Así abordamos cada una.",[187,280,282],{"id":281},"una-autorización-que-refleja-el-organigrama","Una autorización que refleja el organigrama",[174,284,285],{},"Una pantalla de login no es control de acceso. Una herramienta de administración de verdad necesita roles —quién puede ver, quién puede editar, quién puede aprobar— impuestos en el servidor, y la interfaz se limita a reflejar lo que la API ya rechaza. Construimos el control de acceso por roles primero en la capa de API, para que una petición fabricada no pueda hacer lo que un botón oculto no permitiría.",[187,287,289],{"id":288},"formularios-que-mueven-maquinaria-real","Formularios que mueven maquinaria real",[174,291,292],{},"Cuando enviar un formulario genera configuración, mueve dinero o dispara un pipeline de build, el formulario hereda los estándares de ingeniería de la maquinaria que tiene detrás: validación que coincide con lo que impone el backend, envío idempotente para que un doble clic no pueda lanzar dos marcas y estados de fallo claros y específicos. El camino feliz es la parte fácil.",[187,294,296],{"id":295},"tablas-que-sobreviven-a-los-datos-reales","Tablas que sobreviven a los datos reales",[174,298,299],{},"Todos los paneles de administración lucen preciosos en la demo con doce filas y mueren con cincuenta mil. Paginamos en el servidor, empujamos el filtrado y la búsqueda a la base de datos, donde están los índices, y mantenemos la interacción —ordenar, filtrar, exportar— ágil con los volúmenes que tu operación va a alcanzar de verdad.",[187,301,303],{"id":302},"una-traza-de-auditoría-desde-el-primer-día","Una traza de auditoría desde el primer día",[174,305,306],{},"¿Quién cambió el porcentaje de pago, cuándo, y de qué valor a cuál? En una herramienta de administración esa pregunta es una funcionalidad más que un peritaje. Las acciones se registran con autor, marca de tiempo y valores de antes y después, porque un back office donde los cambios son anónimos se convierte en un lugar donde nadie tiene permitido cambiar nada.",[187,308,310],{"id":309},"aburrido-a-propósito","Aburrido, a propósito",[174,312,313],{},"Las herramientas internas no necesitan SEO y, en general, tampoco renderizado en servidor: una single-page app de Vue a secas detrás de un login es a menudo la decisión correcta, y lo diremos en vez de facturarte un framework que no necesitas. Donde Nuxt se gana su sitio —sus rutas de servidor haciendo de backend aparte, o superficies públicas e internas compartiendo una base de código—, lo usamos, como hicimos con la interfaz de administración de la flota. La elección es una decisión de ingeniería, explícita en la propuesta.",[236,315,317],{"id":316},"cómo-trabajamos","Cómo trabajamos",[174,319,320,323],{},[198,321,322],{},"Proyecto de alcance cerrado."," Llevamos la herramienta del mapeo de flujos de trabajo al despliegue, incluidas las partes sin glamur, como migrar los datos desde las hojas de cálculo a las que sustituye.",[174,325,326,329,330,334],{},[198,327,328],{},"Ampliación de equipo."," Nuestros ingenieros se suman a tu equipo y construyen el back office junto a tu producto: mira ",[181,331,333],{"href":332},"\u002Fservices\u002Fteam-augmentation","ampliación de equipo",".",[174,336,337],{},"En cualquiera de los dos casos, enviamos un presupuesto detallado en un plazo de dos días laborables desde que entendemos los requisitos.",[236,339,341],{"id":340},"cuánto-cuesta-un-panel-de-administración","Cuánto cuesta un panel de administración",[174,343,344,345,347,348,353,354,334],{},"Un panel de administración es una aplicación web autenticada, y se presupuesta desde los mismos niveles publicados que la página de ",[181,346,184],{"href":183},": un back office acotado —autenticación, acceso por roles, las tablas y formularios centrales— entra en el nivel de aplicación web, en ",[349,350],"service-price",{"format":351,"service":352},"full","web-development\u002Fapp",", mientras que un portal multiinquilino o un panel entretejido en una plataforma mayor se presupuesta como trabajo de nivel SaaS a partir de ",[349,355],{"format":351,"service":356},"web-development\u002Fsaas",[174,358,359],{},"Son las mismas claves que renderizan la tabla de precios del pilar, así que las dos no pueden divergir. Lo que mueve la cifra dentro del rango: cuántos roles y flujos de trabajo cubre la herramienta, cuánto backend existe ya y si el panel se limita a leer tus sistemas o los opera.",[236,361,363],{"id":362},"preguntas-frecuentes","Preguntas frecuentes",[174,365,366],{},"Dudas habituales de los equipos que encargan paneles de administración y cuadros de mando internos.",[368,369],"questions",{":items":370},"[{\"title\":\"¿Qué diferencia hay entre un panel de administración y un cuadro de mando?\",\"text\":\"Un cuadro de mando muestra: métricas en vivo, tablas, desgloses que sostienen una decisión. Un panel de administración actúa: sus formularios y controles cambian lo que hace el producto —configuración, contenido, precios, cuentas de usuario—. La mayoría de los back offices reales son ambas cosas, y la diferencia de ingeniería importa: los problemas difíciles de un cuadro de mando son las consultas y el volumen de datos, mientras que los de un panel de administración son la autorización, la validación y garantizar que un formulario enviado no pueda hacer daño. Los construimos como una sola herramienta con las dos disciplinas aplicadas.\"},{\"title\":\"¿Cuánto cuesta construir un panel de administración?\",\"text\":\"Un back office acotado —autenticación, control de acceso por roles, las tablas y formularios centrales sobre una API existente— suele costar entre 15.000 y 40.000 dólares en un plazo de uno a tres meses, el mismo nivel publicado de aplicación web que en nuestra página de desarrollo web. Un portal de socios multiinquilino o un panel que orquesta maquinaria real se presupuesta como trabajo de nivel SaaS a partir de 50.000. Lo que más mueve el coste es el número de roles y flujos de trabajo distintos, no el número de pantallas.\"},{\"title\":\"¿Construís también el backend o solo la interfaz?\",\"text\":\"Ambos, y normalmente juntos. Un panel de administración vale lo que vale su API, así que el encargo suele cubrir los endpoints, la capa de autorización y la interfaz como una sola pieza de trabajo. Para la plataforma de marca blanca que operamos, el mismo equipo construyó la interfaz de administración en Nuxt y los servicios en PHP que hay detrás, y por eso enviar un formulario allí puede generar configuración y disparar builds móviles firmadas con seguridad. Si ya tienes una API, construimos contra ella y te decimos con honestidad dónde necesita cambiar.\"},{\"title\":\"¿Vue o Nuxt para una herramienta interna?\",\"text\":\"Para una herramienta que vive por completo detrás de un login, una single-page app de Vue a secas es a menudo la respuesta honesta: nada necesita indexarse, así que el renderizado en servidor añade piezas móviles sin añadir valor. Nuxt se gana su sitio cuando sus rutas de servidor pueden hacer de backend aparte en un producto pequeño, o cuando las superficies internas y públicas comparten una base de código. Trabajamos con ambos y hacemos la elección explícita en la propuesta, en vez de recurrir por defecto a la herramienta más pesada.\"},{\"title\":\"¿Puede el personal sin perfil técnico operar las herramientas que construís?\",\"text\":\"Ese es el objetivo de diseño al que nos obligamos. La interfaz de administración que construimos para una plataforma de apps de marca blanca permite a responsables sin conocimientos de programación lanzar una app móvil completamente personalizada y lista para tienda rellenando un formulario: el sistema genera la configuración, registra el target en el pipeline de CI y produce builds firmadas. La medida de un back office es si saca al ingeniero del circuito, y diseñamos cada flujo de trabajo contra ese estándar.\"},{\"title\":\"¿Cómo mantenéis seguro un panel de administración?\",\"text\":\"Autorización impuesta en el servidor, nunca solo oculta en la interfaz; sesiones en cookies httpOnly, secure y SameSite; control de acceso por roles en la capa de API; y una traza de auditoría que registra quién cambió qué y cuándo. Las herramientas de administración concentran privilegios, y eso las convierte en un objetivo: si tienes un panel existente del que no estás seguro, nuestra auditoría de código IA revisa la autenticación, la gestión de sesiones y la exposición de datos como un encargo específico.\"}]",[174,372,373,374,378,379,382,383,334],{},"Mira ",[181,375,377],{"href":376},"\u002Fblog\u002Fwhite-label-app-platform-flutter","cómo funciona la interfaz de administración de la flota"," en el artículo sobre la plataforma, lee sobre el ",[181,380,381],{"href":216},"servicio de marca blanca"," al que pertenece o empieza por el pilar de ",[181,384,184],{"href":183},{"title":386,"searchDepth":387,"depth":387,"links":388},"",2,[389,391,395,402,403,404],{"id":189,"depth":390,"text":190},3,{"id":238,"depth":387,"text":239,"children":392},[393,394],{"id":245,"depth":390,"text":246},{"id":262,"depth":390,"text":263},{"id":274,"depth":387,"text":275,"children":396},[397,398,399,400,401],{"id":281,"depth":390,"text":282},{"id":288,"depth":390,"text":289},{"id":295,"depth":390,"text":296},{"id":302,"depth":390,"text":303},{"id":309,"depth":390,"text":310},{"id":316,"depth":387,"text":317},{"id":340,"depth":387,"text":341},{"id":362,"depth":387,"text":363},"Los back offices detrás de los productos —acceso por roles, formularios que mueven maquinaria real y tablas que siguen siendo usables a escala—, del equipo cuya interfaz de administración lanza flotas enteras de apps","md",{"heading":408,"text":409,"buttons":410},"¿Tu equipo necesita un back office mejor?","Cuéntanos qué hacen hoy tus operadores en hojas de cálculo, hilos de chat y tickets de ingeniería. Te diremos con honestidad qué partes merecen un panel de administración y qué hace falta para construirlo.",[411,417],{"to":412,"label":413,"leadingIcon":414,"color":415,"variant":416},"\u002Fcontact?intent=web-development","Agendar una consulta","lucide:message-circle","neutral","outline",{"to":252,"label":418,"color":419,"variant":420},"Ver la interfaz de administración en acción","primary","solid",[422,423],{"to":412,"label":413,"leadingIcon":414,"color":419,"variant":420},{"to":252,"label":424,"color":415,"variant":416},"Ver nuestro trabajo",{"url":426,"alt":427,"text":428},"\u002Fservices\u002Fadmin-dashboards.webp","Desarrollo de paneles de administración y cuadros de mando","El back office desde el que tu equipo dirige el negocio",{},"Paneles de administración y cuadros de mando en Vue y Nuxt: acceso por roles, auditoría y back offices que opera personal no técnico. Precios publicados.",true,"Back offices que mueven operaciones reales, construidos por el equipo cuya interfaz de administración permite a un responsable lanzar apps móviles de marca sin un ingeniero de por medio.","web-development","\u002Fservices\u002Fweb-development\u002Fadmin-dashboards",{"title":169,"description":405},"admin-dashboards","services\u002Fadmin-dashboards","2026-09-05","jNapXykebn01pWYdAeLHYGnKaKtJjtqBQirIveKb6ak",{"id":441,"title":442,"body":443,"description":717,"extension":406,"footerCta":718,"headingCta":727,"image":733,"meta":736,"metaDescription":737,"metaTitle":738,"navigation":431,"ogDescription":739,"parent":740,"path":183,"seo":741,"slug":433,"stem":742,"updated":438,"__hash__":743},"services_es\u002Fservices\u002Fweb-development.md","Desarrollo web",{"type":171,"value":444,"toc":704},[445,449,452,470,474,478,481,485,488,492,495,499,509,513,526,531,544,548,551,595,599,602,608,614,625,655,659,662,666,673,675,678,701],[236,446,448],{"id":447},"desarrollo-web-moderno-con-nuxt-y-ssr","Desarrollo web moderno con Nuxt y SSR",[174,450,451],{},"Construimos aplicaciones web rápidas y amigables con los buscadores sobre un stack moderno renderizado en servidor. Ni un maquetador de páginas ni una single-page app inflada que le entrega una pantalla en blanco a Google: aplicaciones de verdad que se renderizan en el servidor, cargan rápido en un móvil y posicionan.",[174,453,454,455,458,459,463,464,466,467,469],{},"¿Cómo de seguros estamos de este stack? ",[198,456,457],{},"Este mismo sitio está construido con él",": Nuxt 4, ",[256,460,462],{"slug":461},"server-side-rendering","renderizado en servidor",", Tailwind CSS y Nuxt Content. No elegimos estas herramientas para una página de ventas; gestionamos nuestro propio negocio con ellas. También las hemos entregado a clientes, entre ellos ",[181,465,270],{"href":269},", una plataforma de creación de formularios construida sobre Nuxt, y la ",[181,468,253],{"href":252},", cuyo back office de administración en Nuxt lanza apps de marca sobre servicios en PHP.",[471,472],"statistics-grid",{":items":473},"[{\"icon\": \"lucide:search\", \"value\": \"SSR\", \"label\": \"Indexable por defecto\", \"description\": \"HTML renderizado en servidor que los rastreadores leen sin ejecutar JavaScript\"}, {\"icon\": \"lucide:gauge\", \"value\": \"90+\", \"label\": \"Objetivo Lighthouse\", \"description\": \"Construimos a favor de las Core Web Vitals, no en su contra\"}, {\"icon\": \"lucide:smartphone\", \"value\": \"Mobile-first\", \"label\": \"Responsive en todas partes\", \"description\": \"Diseñado primero para móvil y escalado hasta el escritorio\"}, {\"icon\": \"lucide:code\", \"value\": \"Con tipos\", \"label\": \"TypeScript de principio a fin\", \"description\": \"De la capa de API a las props de los componentes\"}]",[236,475,477],{"id":476},"nuestro-stack-y-por-qué-nuxt-ssr","Nuestro stack, y por qué Nuxt + SSR",[174,479,480],{},"La elección de framework es la diferencia entre un sitio que Google puede leer al instante y otro que le cuesta renderizar. Este es el stack sobre el que construimos, y por qué.",[187,482,484],{"id":483},"renderizado-en-servidor-para-seo","Renderizado en servidor para SEO",[174,486,487],{},"Una single-page app tradicional envía una carcasa HTML vacía y le pide al navegador que construya la página con JavaScript. Los rastreadores, las vistas previas de enlaces y los dispositivos lentos lo sufren. Nuxt renderiza el HTML completo en el servidor, así que el contenido está presente en la primerísima respuesta: metaetiquetas, encabezados, datos estructurados y texto, todo ahí antes de que se ejecute una sola línea de JavaScript de cliente. Es la mayor palanca de SEO on-page que un framework puede darte, y es el comportamiento por defecto, no un añadido.",[187,489,491],{"id":490},"tailwind-para-una-ui-rápida-y-coherente","Tailwind para una UI rápida y coherente",[174,493,494],{},"Damos estilo con Tailwind CSS: utilidades primero, sin hojas de estilo globales a la deriva y sin CSS muerto enviado a los usuarios. Mantiene el sistema de diseño coherente en todas las páginas, hace explícitos los puntos de ruptura responsive y envía solo las clases que realmente usas. El resultado es una UI rápida de construir, fácil de mantener y ligera de descargar.",[187,496,498],{"id":497},"nuxt-content-para-sitios-guiados-por-el-contenido","Nuxt Content para sitios guiados por el contenido",[174,500,501,502,508],{},"Para sitios de marketing, documentación y blogs, ",[181,503,507],{"href":504,"rel":505},"https:\u002F\u002Fcontent.nuxt.com",[506],"nofollow","Nuxt Content"," convierte Markdown en páginas completamente renderizadas en servidor con esquemas tipados, exactamente como funcionan el blog y las páginas de servicio de este sitio. Los editores escriben Markdown; el sitio sigue siendo rápido e indexable; los desarrolladores mantienen el control de versiones sobre todo. Sin necesidad de base de datos.",[187,510,512],{"id":511},"strapi-cuando-necesitas-un-cms-headless","Strapi cuando necesitas un CMS headless",[174,514,515,516,520,521,525],{},"Cuando editores sin perfil técnico necesitan ser dueños del contenido —productos, listados, campañas— montamos ",[181,517,134],{"href":518,"rel":519},"https:\u002F\u002Fstrapi.io",[506],", un ",[256,522,524],{"slug":523},"headless-cms","CMS headless"," de código abierto. Tu equipo obtiene un panel de administración amable; el frontend en Nuxt consume una API limpia y la renderiza en servidor. Consigues libertad editorial sin renunciar al rendimiento ni al SEO, y eres dueño de los datos y del alojamiento.",[527,528],"features",{":items":529,":title":530},"[{\"label\": \"Páginas compatibles con móvil\", \"description\": \"Diseños mobile-first y responsive que funcionan en cualquier pantalla, del móvil al monitor panorámico: probados, no supuestos\"}, {\"label\": \"Autenticación bien hecha\", \"description\": \"Sesiones, OAuth y JWT con comprobaciones de autorización reales en servidor, no una pantalla de login con la puerta trasera abierta\"}, {\"label\": \"Cookies seguras y consentimiento\", \"description\": \"Cookies httpOnly, secure y SameSite para las sesiones, más gestión del consentimiento conforme al RGPD para analítica y rastreo\"}, {\"label\": \"SEO incorporado\", \"description\": \"Metaetiquetas renderizadas en servidor, Open Graph, enlaces canónicos y hreflang, y datos estructurados JSON-LD en cada página\"}, {\"label\": \"Rendimiento y Core Web Vitals\", \"description\": \"Optimización de imágenes, división de código y caché ajustados para pasar las Core Web Vitals en dispositivos reales\"}, {\"label\": \"Integración de CMS headless\", \"description\": \"Nuxt Content o Strapi para que tu equipo publique sin tocar código\"}]","Lo que hacemos bien",[532,533,536],"info-box",{":leading-icon":534,":title":535},"lucide:shield-check","La seguridad forma parte de la construcción",[174,537,538,539,543],{},"La autenticación, las cookies y el tratamiento de datos son donde la mayoría de las apps web tienen fugas en silencio. Las construimos bien desde el principio, y si has heredado una app sobre la que tienes dudas, nuestra ",[181,540,542],{"href":541},"\u002Fservices\u002Fai-code-audit","auditoría de código generado por IA"," revisa la autenticación, la seguridad de sesiones y la exposición de datos antes de que se conviertan en un incidente.",[236,545,547],{"id":546},"qué-construimos","Qué construimos",[174,549,550],{},"Cuatro tipos de trabajo web se repiten una y otra vez en nuestros encargos, y cada uno tiene ahora su propia página con las pruebas detrás:",[192,552,553,562,574,582],{},[195,554,555,559,560,334],{},[198,556,557],{},[181,558,169],{"href":434},": los back offices detrás de los productos: acceso por roles, formularios que mueven maquinaria real, tablas que siguen siendo usables a escala. Su ancla es la interfaz de administración que lanza apps de marca para nuestra ",[181,561,253],{"href":252},[195,563,564,570,571,573],{},[198,565,566],{},[181,567,569],{"href":568},"\u002Fservices\u002Fweb-development\u002Fnuxt-development","Desarrollo con Nuxt",": sitios de marketing, plataformas de contenido y migraciones a renderizado en servidor, como el paso de ",[181,572,270],{"href":269}," de plantillas de Django a Nuxt. Este sitio es la demostración permanente.",[195,575,576,581],{},[198,577,578],{},[181,579,580],{"href":221},"Apps web complementarias",": la superficie de navegador de un producto que vive principalmente en una app móvil, compartiendo con ella una única API y un único backend.",[195,583,584,590,591,334],{},[198,585,586],{},[181,587,589],{"href":588},"\u002Fservices\u002Fweb-development\u002Fembeddable-widgets","Widgets y scripts embebibles",": JavaScript que corre dentro de páginas que no controlas, construido sin dependencias y a la defensiva, como el recolector detrás de nuestra ",[181,592,594],{"href":593},"\u002Fportfolio\u002Frealtime-bot-detection-platform","plataforma de detección de bots",[236,596,598],{"id":597},"flutter-para-web-ventajas-e-inconvenientes","Flutter para web: ventajas e inconvenientes",[174,600,601],{},"Flutter puede compilar a web, y los clientes con una app móvil en Flutter suelen preguntar si deberían reutilizarla también para su sitio. La respuesta honesta: a veces, pero rara vez para web pública guiada por contenido. Este es el compromiso.",[603,604],"features-table",{":heading":605,":rows":606,":top-left-label":607},"[{\"label\": \"Nuxt + SSR\", \"hightlightLabel\": \"Web pública\"}, {\"label\": \"Flutter web\"}, {\"label\": \"SPA tradicional\"}]","[{\"label\": \"SEO \u002F indexabilidad\",\"cells\": [{\"text\": \"Excelente (SSR)\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Mala (render en canvas)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Débil (carcasa vacía)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Tamaño de carga inicial\",\"cells\": [{\"text\": \"Pequeño\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Pesado (bundle grande)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Medio\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Código compartido con móvil\",\"cells\": [{\"text\": \"Ninguno\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Casi el 100%\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Algo (React Native)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"UI compleja tipo app\",\"cells\": [{\"text\": \"Buena\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Excelente\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Buena\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Sitios de contenido o marketing\",\"cells\": [{\"text\": \"Ideal\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Mal encaje\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Aceptable\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Accesibilidad\",\"cells\": [{\"text\": \"HTML nativo\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Mejorando, limitada\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"HTML nativo\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Mejor para\",\"cells\": [{\"text\": \"Sitios y apps web\", \"color\": \"success\"},{ \"text\": \"Herramientas internas tipo app\", \"color\": \"warning\"},{ \"text\": \"Cuadros de mando\", \"color\": \"warning\"}]}]","Aspecto",[174,609,610,613],{},[198,611,612],{},"Dónde brilla Flutter web:"," en un producto tipo app donde ya tienes una base de código Flutter móvil y quieres un solo equipo entregando en todas partes: cuadros de mando internos, herramientas tras un login, interfaces muy interactivas o basadas en canvas detrás de un muro de autenticación, donde el SEO no importa y los usuarios esperan una app y no una página.",[174,615,616,619,620,624],{},[198,617,618],{},"Dónde duele:"," en cualquier cosa que necesite encontrarse en Google. Flutter web renderiza sobre un canvas, que a los rastreadores les cuesta leer, envía un bundle inicial pesado y pelea con el navegador en accesibilidad y ",[256,621,623],{"slug":622},"deep-linking","deep linking",". Para sitios de marketing, blogs, comercio electrónico y landings, eso es descalificatorio.",[532,626,627],{},[174,628,629,632,633,636,637,640,641,645,646,650,651,334],{},[198,630,631],{},"💡 En resumen:"," usa ",[198,634,635],{},"Nuxt + SSR"," para cualquier cosa pública o guiada por SEO: sitios de marketing, contenido, comercio electrónico, superficies de marketing de un SaaS. Usa ",[198,638,639],{},"Flutter web"," cuando estés extendiendo una app móvil de Flutter a una herramienta web tipo app donde el alcance por búsqueda no es el objetivo. Construimos ambas y te diremos con honestidad cuál necesita tu proyecto. Si también hay móvil sobre la mesa, mira nuestro servicio de ",[181,642,644],{"href":643},"\u002Fservices\u002Fflutter-app-development","desarrollo de apps con Flutter"," y los compromisos en ",[181,647,649],{"href":648},"\u002Fblog\u002Fflutter-vs-react-native-2026","Flutter frente a React Native en 2026"," y ",[181,652,654],{"href":653},"\u002Fblog\u002Fflutter-vs-native-2026","Flutter frente a nativo",[236,656,658],{"id":657},"precios-del-desarrollo-web","Precios del desarrollo web",[174,660,661],{},"Rangos transparentes según el alcance y la complejidad",[663,664],"pricing-table",{":items":665},"[{\"title\": \"Sitio de marketing \u002F landing\", \"subtitle\": \"Rápido, listo para SEO, guiado por contenido\", \"price\": \"web-development\u002Flanding\", \"terms\": \"2-4 semanas\", \"lines\": [\"Nuxt + SSR para indexabilidad completa\", \"Diseño responsive y mobile-first\", \"Metaetiquetas SEO, Open Graph y datos estructurados\", \"Nuxt Content o CMS en Markdown\", \"Formularios de contacto y analítica\", \"Core Web Vitals ajustadas\", \"Despliegue y configuración de dominio\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Empezar\"}},{\"highlight\": \"Popular\",\"title\": \"Aplicación web\", \"subtitle\": \"Producto interactivo con autenticación\", \"price\": \"web-development\u002Fapp\", \"terms\": \"1-3 meses\", \"lines\": [\"Todo lo del sitio de marketing\", \"Autenticación de usuarios (OAuth \u002F JWT)\", \"Sesiones seguras y gestión de cookies\", \"Integración de API REST o GraphQL\", \"Control de acceso por roles\", \"Diseño e integración de base de datos\", \"Panel de administración\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Empezar\"}},{\"title\": \"Plataforma con CMS headless\", \"subtitle\": \"Contenido gestionado por editores a escala\", \"price\": \"web-development\u002Fheadless-cms\", \"terms\": \"2-4 meses\", \"lines\": [\"Backend con Strapi o Nuxt Content\", \"Panel editorial a medida\", \"Soporte de contenido multilingüe\", \"Páginas renderizadas en servidor e indexables\", \"Gestión de medios y recursos\", \"Flujo de vista previa y publicación\", \"Arquitectura orientada a API\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Empezar\"}},{\"title\": \"SaaS \u002F E-commerce\", \"subtitle\": \"Producto web complejo y escalable\", \"price\": \"web-development\u002Fsaas\", \"terms\": \"4+ meses\", \"lines\": [\"Todas las plataformas e integraciones\", \"Pagos y suscripciones\", \"Arquitectura multiinquilino\", \"Seguridad y cumplimiento avanzados\", \"Infraestructura de backend escalable\", \"Monitorización y observabilidad\", \"Soporte dedicado\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Empezar\"}}]",[532,667,670],{":leading-icon":668,":title":669},"lucide:dollar-sign","Precios a medida disponibles",[174,671,672],{},"Cada proyecto es único. Estos rangos son aproximados y se basan en un alcance típico. Te daremos un presupuesto detallado tras entender tus requisitos, tus integraciones y tus plazos. Contáctanos para una consulta gratuita y una estimación precisa.",[236,674,363],{"id":362},[174,676,677],{},"Dudas habituales sobre nuestros servicios de desarrollo web",[368,679,681],{":items":680},"[{\"title\":\"¿Por qué construís con Nuxt en vez de con WordPress o un maquetador?\",\"text\":\"Nuxt te da renderizado en servidor, lo que significa que los buscadores y las vistas previas de enlaces ven HTML completamente construido en la primera petición en vez de una carcasa vacía. Obtienes la velocidad y la indexabilidad de un sitio estático con la potencia de una aplicación real y control de versiones completo sobre el código, sin la sobrecarga de plugins ni la superficie de seguridad de una instalación típica de WordPress. Para sitios con mucho contenido combinamos Nuxt con un CMS headless para que los editores sigan teniendo un panel de administración amable.\"},{\"title\":\"¿El renderizado en servidor mejora realmente el SEO?\",\"text\":\"Sí, de forma significativa. Con SSR, el contenido de la página, las metaetiquetas, los datos de Open Graph y los datos estructurados están presentes en el HTML que envía el servidor, así que los rastreadores pueden leerlos sin ejecutar JavaScript. Las single-page apps que se renderizan enteramente en el navegador tardan más en indexarse y algunos rastreadores y vistas previas sociales pueden ignorarlas por completo. El SSR es la decisión a nivel de framework con más impacto que puedes tomar para la búsqueda orgánica.\"},{\"title\":\"¿Podéis construir mi app web con Flutter para web?\",\"text\":\"Podemos, y para el proyecto adecuado encaja muy bien. Flutter web funciona bien para productos tipo app y herramientas internas tras un login, sobre todo cuando ya tienes una app móvil en Flutter y quieres compartir una base de código. Encaja mal en cualquier cosa que necesite posicionar en Google, porque renderiza sobre un canvas que a los rastreadores les cuesta leer y envía un bundle inicial pesado. Para sitios públicos, de contenido o de comercio electrónico recomendamos Nuxt con renderizado en servidor.\"},{\"title\":\"¿Cómo gestionáis la autenticación y los datos de usuario de forma segura?\",\"text\":\"Implementamos autorización real en el servidor, no solo una pantalla de login. Las sesiones usan cookies httpOnly, secure y SameSite para que los tokens no puedan robarse desde scripts del cliente, y damos soporte a flujos de OAuth y JWT con control de acceso por roles. El consentimiento de cookies se gestiona conforme al RGPD. Si ya tienes una app, nuestro servicio de auditoría de código IA revisa la autenticación, la gestión de sesiones y la exposición de datos como una comprobación específica.\"},{\"title\":\"¿Debería usar Nuxt Content o Strapi para mi contenido?\",\"text\":\"Depende de quién edite el contenido. Nuxt Content es ideal cuando desarrolladores o redactores técnicos gestionan el contenido en Markdown bajo control de versiones, como un blog o documentación, sin necesidad de base de datos. Strapi es la elección correcta cuando editores sin perfil técnico necesitan un panel amable para gestionar productos, listados o campañas. Ambos se renderizan en servidor a través del frontend de Nuxt, así que en cualquier caso el sitio sigue siendo rápido e indexable. Te ayudamos a elegir según tu equipo.\"},{\"title\":\"¿Cuánto cuesta un proyecto de desarrollo web?\",\"slot\":\"cost\",\"text\":\"Un sitio rápido de marketing o contenido suele costar entre 5.000 y 12.000 dólares, una app web con autenticación entre 15.000 y 40.000, una plataforma con CMS headless entre 20.000 y 50.000, y un producto SaaS o de comercio electrónico complejo a partir de 50.000. La cifra final depende del número de funcionalidades, de las integraciones y del alcance del diseño. Damos un presupuesto cerrado tras una consulta gratuita.\"}]",[682,683,684],"template",{"v-slot:cost_body":386},[174,685,686,687,690,691,693,694,697,698,700],{},"Un sitio rápido de marketing o contenido suele costar ",[349,688],{"format":351,"service":689},"web-development\u002Flanding",", una app web con autenticación ",[349,692],{"format":351,"service":352},", una plataforma con CMS headless ",[349,695],{"format":351,"service":696},"web-development\u002Fheadless-cms"," y un producto SaaS o de comercio electrónico complejo ",[349,699],{"format":351,"service":356},". La cifra final depende del número de funcionalidades, de las integraciones y del alcance del diseño. Damos un presupuesto cerrado tras una consulta gratuita.",[174,702,703],{},"::",{"title":386,"searchDepth":387,"depth":387,"links":705},[706,707,713,714,715,716],{"id":447,"depth":387,"text":448},{"id":476,"depth":387,"text":477,"children":708},[709,710,711,712],{"id":483,"depth":390,"text":484},{"id":490,"depth":390,"text":491},{"id":497,"depth":390,"text":498},{"id":511,"depth":390,"text":512},{"id":546,"depth":387,"text":547},{"id":597,"depth":387,"text":598},{"id":657,"depth":387,"text":658},{"id":362,"depth":387,"text":363},"Aplicaciones web rápidas y listas para SEO construidas sobre Nuxt, SSR y Tailwind",{"heading":719,"text":720,"buttons":721},"¿Listo para una app web que posicione y rinda?","Convirtamos tu idea en una aplicación web rápida y lista para SEO que guste tanto a tus usuarios como a los buscadores.",[722,725],{"to":723,"label":724,"leadingIcon":414,"color":415,"variant":416},"\u002Fcontact","Empieza tu proyecto",{"to":726,"label":424,"color":419,"variant":420},"\u002Fportfolio",[728,730],{"to":723,"label":729,"leadingIcon":414,"color":419,"variant":420},"Consulta gratuita",{"to":731,"label":732,"color":415,"variant":416},"#precios-del-desarrollo-web","Ver precios",{"url":734,"alt":442,"text":735},"\u002Fservices\u002Fweb-development.webp","Construido sobre el stack con el que funciona este sitio",{},"Desarrollo web con Nuxt, SSR y Tailwind: apps rápidas, listas para SEO y mobile-first, con autenticación, CMS headless y Strapi. Consulta gratuita.","Servicios de desarrollo web — Nuxt, SSR y SEO","Apps web en Nuxt y SSR que cargan rápido y posicionan: autenticación, CMS headless y un mobile-first que no pelea con el navegador.",null,{"title":442,"description":717},"services\u002Fweb-development","VXx2qJYFIdgBhuUQKX8woWdSx5-IVibxftdnb5HM6Ek",[],[746,761,778,793,805,817,830,842,855,870,883,898,910,923,936,948,965,978,991,1004,1018,1032,1044,1055,1069,1081,1094,1105,1114,1127,1139,1153,1160,1172,1183,1194,1206,1221,1234,1247,1259,1270,1284,1298,1310,1321,1333,1344,1357,1369,1380,1394,1403],{"slug":747,"term":748,"definition":749,"category":750,"aliases":751,"links":753,"related":757,"readMore":-1,"target":759,"hasArticle":760},"aosp","AOSP","El Android Open Source Project: Android sin la capa de Google encima, que cualquiera puede forkear. Los terminales de punto de venta, los kioscos y los sistemas de a bordo funcionan sobre forks suyos, y trabajar a ese nivel expone partes del SO que un desarrollador de apps nunca ve.","platform",[752],"Android Open Source Project",[754],{"kind":755,"url":756},"website","https:\u002F\u002Fsource.android.com\u002F",[758],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":762,"term":763,"definition":764,"category":765,"aliases":766,"links":771,"related":775,"readMore":-1,"target":777,"hasArticle":760},"object-storage","Almacenamiento de objetos","Almacenamiento que guarda un archivo entero bajo una clave en vez de en un árbol de directorios: Amazon S3 y los muchos servicios que hablan su API. Barato, casi ilimitado y el hogar habitual de eventos en bruto, backups y multimedia: se escriben una vez, se leen poco y se guardan para siempre.","architecture",[767,768,769,770],"S3","almacenamiento compatible con S3","object storage","blob storage",[772],{"kind":773,"url":774},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[776],"bigquery","\u002Fglossary#object-storage",{"slug":779,"term":780,"definition":781,"category":782,"aliases":783,"links":788,"related":789,"readMore":-1,"target":792,"hasArticle":760},"staff-augmentation","Ampliación de equipo","Un modelo de contratación en el que ingenieros de un socio externo se suman a tu equipo y trabajan bajo tu gestión —en tu repositorio, tus sprints, tu proceso— en vez de entregar un proyecto propio. Compras capacidad; el código y el contexto se quedan contigo.","business",[784,785,786,787],"staff augmentation","team augmentation","desarrolladores dedicados","outstaffing",[],[790,791],"total-cost-of-ownership","time-to-market","\u002Fglossary#staff-augmentation",{"slug":794,"term":795,"definition":796,"category":750,"aliases":797,"links":798,"related":802,"readMore":-1,"target":804,"hasArticle":760},"app-clips","App Clips","Una función de Apple que ejecuta una porción pequeña de una app de iOS —menos de 15 MB— sin instalarla entera. Se invoca desde un código QR, una etiqueta NFC o un enlace, para cuando lo primero que hace un usuario no debería exigir pasar por la tienda.",[],[799],{"kind":800,"url":801},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[622,803],"install-referrer","\u002Fglossary#app-clips",{"slug":776,"term":806,"definition":807,"category":750,"aliases":808,"links":809,"related":814,"readMore":-1,"target":816,"hasArticle":760},"BigQuery","El almacén analítico de Google Cloud. Le lanzas SQL a miles de millones de filas y las recorre en segundos, sobre un almacenamiento separado de las máquinas que consultan, que es lo que mantiene los informes y la exploración fuera de la base de datos que sirve tráfico real.",[],[810,812],{"kind":755,"url":811},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":773,"url":813},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[762,815],"elasticsearch","\u002Fglossary#bigquery",{"slug":258,"term":818,"definition":819,"category":820,"aliases":821,"links":825,"related":828,"readMore":-1,"target":829,"hasArticle":760},"CI\u002FCD","Automatización que compila, testea y publica cada cambio sin que nadie ejecute comandos a mano. En móvil es lo que convierte una release en pulsar un botón en lugar de en una tarde esperando a que alguien esté disponible.","practice",[822,823,824],"CI","integración continua","entrega continua",[826],{"kind":773,"url":827},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":523,"term":524,"definition":831,"category":765,"aliases":832,"links":836,"related":839,"readMore":-1,"target":841,"hasArticle":760},"Un sistema de contenidos con editor y API pero sin frontend propio. Los editores publican en un solo sitio y el sitio web o la app renderizan ese contenido por su cuenta, así que la capa de presentación es tuya y no del proveedor del CMS.",[833,834,835],"headless CMS","gestor de contenidos headless","API de contenidos",[837],{"kind":773,"url":838},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[461,840],"rest","\u002Fglossary#headless-cms",{"slug":843,"term":844,"definition":845,"category":765,"aliases":846,"links":849,"related":852,"readMore":-1,"target":854,"hasArticle":760},"crud","CRUD","Create, read, update, delete: las cuatro operaciones detrás de casi todo formulario y pantalla de administración. Nombre corto para la mitad rutinaria de una app, la que gestiona datos, frente a la que lleva la lógica de dominio.",[847,848],"Create, Read, Update, Delete","crear, leer, actualizar, borrar",[850],{"kind":773,"url":851},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[840,853],"graphql","\u002Fglossary#crud",{"slug":856,"term":857,"definition":858,"category":765,"aliases":859,"links":863,"related":866,"readMore":-1,"target":869,"hasArticle":760},"end-to-end-encryption","Cifrado de extremo a extremo","Cifrado aplicado en el dispositivo que envía y deshecho solo en el que recibe, de modo que el servicio que transporta el mensaje no puede leerlo: ni por orden judicial ni tras una brecha. Protege el contenido y nunca los metadatos.",[860,861,862],"E2EE","cifrado extremo a extremo","end-to-end encryption",[864],{"kind":773,"url":865},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[867,868],"tls","jwt","\u002Fglossary#end-to-end-encryption",{"slug":871,"term":872,"definition":873,"category":765,"aliases":874,"links":878,"related":881,"readMore":-1,"target":882,"hasArticle":760},"floating-point","Coma flotante","El formato binario IEEE 754 detrás de double y float. No puede representar 0,1 de forma exacta, así que 0,1 + 0,2 da 0,30000000000000004: invisible en gráficos y fatal en dinero, que va en unidades menores enteras o en un tipo decimal.",[875,876,877],"IEEE 754","double","aritmética de coma flotante",[879],{"kind":773,"url":880},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point",{"slug":884,"term":885,"definition":886,"category":782,"aliases":887,"links":892,"related":895,"readMore":-1,"target":897,"hasArticle":760},"in-app-purchase","Compra dentro de la app","Vender bienes digitales o una suscripción a través de la facturación de Apple o Google, obligatoria para contenido digital en ambas tiendas y sujeta a comisión. Lo difícil nunca es la compra: es restaurarla en un dispositivo nuevo y mantener honesto el estado de los derechos.",[888,889,890,891],"IAP","in-app purchase","compras integradas","suscripción in-app",[893],{"kind":800,"url":894},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[896],"product-market-fit","\u002Fglossary#in-app-purchase",{"slug":790,"term":899,"definition":900,"category":782,"aliases":901,"links":905,"related":908,"readMore":-1,"target":909,"hasArticle":760},"Coste total de propiedad","Lo que cuesta un producto a lo largo de toda su vida, no solo construirlo: mantenimiento, actualizaciones, migraciones anuales de SO y de tiendas, y el segundo equipo que contratas para mantener dos bases de código alineadas. Suele superar al presupuesto de desarrollo, y casi nunca va dentro.",[902,903,904],"TCO","total cost of ownership","coste de propiedad",[906],{"kind":773,"url":907},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[791],"\u002Fglossary#total-cost-of-ownership",{"slug":911,"term":912,"definition":913,"category":914,"aliases":915,"links":918,"related":921,"readMore":-1,"target":922,"hasArticle":760},"post-quantum-cryptography","Criptografía poscuántica","Algoritmos de cifrado pensados para resistir a un futuro ordenador cuántico, ya estandarizados por el NIST. La migración urge antes que el hardware: el tráfico capturado hoy puede descifrarse cuando esa máquina exista.","protocol",[916,917],"PQC","cifrado poscuántico",[919],{"kind":773,"url":920},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[867,856],"\u002Fglossary#post-quantum-cryptography",{"slug":622,"term":924,"definition":925,"category":750,"aliases":926,"links":931,"related":934,"readMore":935,"target":935,"hasArticle":431},"Deep linking","Un enlace que abre una pantalla concreta dentro de una app instalada en vez de su pantalla de inicio o una página web. El deep linking diferido sobrevive a la instalación, así que un toque que pasa por la tienda acaba igualmente en la pantalla correcta.",[927,928,929,930],"deep linking diferido","enlaces profundos","universal links","Android App Links",[932],{"kind":773,"url":933},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[794,803],"\u002Fglossary\u002Fdeep-linking",{"slug":937,"term":938,"definition":939,"category":820,"aliases":940,"links":944,"related":945,"readMore":-1,"target":947,"hasArticle":760},"staged-rollout","Despliegue escalonado","Publicar una build primero a un porcentaje pequeño de usuarios y ampliarlo solo cuando la tasa sin fallos aguanta. Una build mala detectada al diez por ciento es una tarde mala; esa misma build al cien por cien es una semana mala.",[941,942,943],"staged rollout","lanzamiento por fases","release canaria",[],[946,258],"feature-flags","\u002Fglossary#staged-rollout",{"slug":949,"term":950,"definition":951,"category":820,"aliases":952,"links":957,"related":962,"readMore":-1,"target":964,"hasArticle":760},"dev-container","Dev Container","Un entorno de desarrollo descrito una sola vez en devcontainer.json —el SO, las herramientas y las versiones de runtime que un proyecto necesita— y abierto de forma idéntica en un contenedor por el editor de cada colaborador, en vez de una guía que cada quien interpreta a su manera.",[953,954,955,956],"devcontainer.json","Dev Containers","VS Code Dev Containers","contenedor de desarrollo",[958,960],{"kind":755,"url":959},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":800,"url":961},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[963],"container-registry","\u002Fglossary#dev-container",{"slug":815,"term":966,"definition":967,"category":750,"aliases":968,"links":971,"related":976,"readMore":-1,"target":977,"hasArticle":760},"Elasticsearch","Un motor de búsqueda y analítica que indexa registros para poder filtrarlos y buscarlos de forma interactiva en vez de recorrerlos. Lo que usas cuando la pregunta es «enséñame estas sesiones concretas, filtradas de seis maneras» y no «suma esta columna».",[969,970],"Elastic","ELK",[972,974],{"kind":755,"url":973},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":773,"url":975},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[776],"\u002Fglossary#elasticsearch",{"slug":896,"term":979,"definition":980,"category":782,"aliases":981,"links":985,"related":988,"readMore":-1,"target":990,"hasArticle":760},"Encaje producto-mercado","El punto en el que un producto ha encontrado de forma demostrable a gente que lo quiere: lo usa, vuelve y paga. Antes de eso la ingeniería responde a una pregunta; después, responde a la demanda.",[982,983,984],"PMF","product-market fit","product\u002Fmarket fit",[986],{"kind":773,"url":987},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[989,791],"mvp","\u002Fglossary#product-market-fit",{"slug":992,"term":993,"definition":994,"category":765,"aliases":995,"links":998,"related":999,"readMore":-1,"target":1003,"hasArticle":760},"fan-out","Fan-out","Leer una fuente una sola vez y entregar cada actualización a todos los clientes suscritos. La versión ingenua escribe a los suscriptores en un bucle y se atasca en cuanto un socket va lento; una real usa un búfer por cliente y descarta a quien no siga el ritmo.",[996,997],"fanout","difusión",[],[1000,1001,1002],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":946,"term":1005,"definition":1006,"category":820,"aliases":1007,"links":1011,"related":1014,"readMore":-1,"target":1017,"hasArticle":760},"Feature flags","Interruptores que activan o desactivan funcionalidad desde la configuración y no desde una release. Permiten que un mismo binario se comporte distinto por marca, mercado o usuario, y apagar una función arriesgada sin pasar una build nueva por revisión.",[1008,1009,1010],"feature flag","feature toggle","banderas de funcionalidad",[1012],{"kind":773,"url":1013},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[937,1015,1016],"white-label","multi-tenancy","\u002Fglossary#feature-flags",{"slug":1019,"term":1020,"definition":1021,"category":765,"aliases":1022,"links":1026,"related":1029,"readMore":-1,"target":1031,"hasArticle":760},"state-management","Gestión de estado","Cómo decide una app dónde vive un valor, quién puede cambiarlo y qué partes de la pantalla se redibujan cuando lo hace. En Flutter, elegir entre Riverpod, BLoC y Provider es de las primeras decisiones arquitectónicas y de las más difíciles de revisar.",[1023,1024,1025],"state management","BLoC","Riverpod",[1027],{"kind":800,"url":1028},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[1030],"golden-test","\u002Fglossary#state-management",{"slug":1030,"term":1033,"definition":1034,"category":820,"aliases":1035,"links":1039,"related":1042,"readMore":-1,"target":1043,"hasArticle":760},"Golden test","Un test que renderiza un widget y compara el resultado píxel a píxel con una imagen de referencia guardada. En Flutter es la forma más barata de saber si un rediseño rompió el estado vacío a 320 pt, en modo oscuro y con el texto al 200 %.",[1036,1037,1038],"golden tests","test de captura","snapshot test",[1040],{"kind":800,"url":1041},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[258],"\u002Fglossary#golden-test",{"slug":853,"term":1045,"definition":1046,"category":765,"aliases":1047,"links":1048,"related":1053,"readMore":-1,"target":1054,"hasArticle":760},"GraphQL","Un lenguaje de consulta para APIs donde el cliente nombra exactamente los campos que quiere y recibe una única respuesta con esa forma. Elimina el exceso de datos al que derivan los endpoints REST y añade un fallo propio: una consulta sin límites que recorre todo el modelo.",[],[1049,1051],{"kind":755,"url":1050},"https:\u002F\u002Fgraphql.org\u002F",{"kind":773,"url":1052},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[840],"\u002Fglossary#graphql",{"slug":1056,"term":1057,"definition":1058,"category":820,"aliases":1059,"links":1061,"related":1064,"readMore":-1,"target":1068,"hasArticle":760},"hipaa","HIPAA","La ley estadounidense que regula la información sanitaria protegida: cómo puede almacenarse, transmitirse, registrarse y divulgarse. Como PCI-DSS, es una restricción arquitectónica que se elige al principio, no un documento de políticas que se añade antes del lanzamiento.",[1060],"Health Insurance Portability and Accountability Act",[1062],{"kind":773,"url":1063},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[1065,1066,1067],"pci-dss","gdpr","soc-2","\u002Fglossary#hipaa",{"slug":758,"term":1070,"definition":1071,"category":750,"aliases":1072,"links":1076,"related":1079,"readMore":-1,"target":1080,"hasArticle":760},"Host Card Emulation","Permitir que un móvil Android actúe por software como una tarjeta contactless sobre NFC, sin elemento seguro por hardware. Es así como paga una app de wallet en un terminal: el teléfono habla el mismo protocolo EMV contactless que habría hablado la tarjeta de plástico.",[1073,1074,1075],"HCE","EMV Contactless","pagos contactless",[1077],{"kind":800,"url":1078},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[1065,747],"\u002Fglossary#host-card-emulation",{"slug":1082,"term":1083,"definition":1084,"category":765,"aliases":1085,"links":1089,"related":1092,"readMore":-1,"target":1093,"hasArticle":760},"multi-arch-image","Imagen multiarquitectura","Una única etiqueta de imagen que resuelve a binarios distintos según la arquitectura de CPU —linux\u002Famd64 y linux\u002Farm64 son el par habitual—, de modo que el mismo docker pull funciona sin cambios tanto en servidores Intel\u002FAMD como en portátiles con Apple Silicon.",[1086,1087,1088],"build multiarquitectura","multi-arch build","linux\u002Famd64 + linux\u002Farm64",[1090],{"kind":800,"url":1091},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[963],"\u002Fglossary#multi-arch-image",{"slug":1095,"term":1096,"definition":1097,"category":750,"aliases":1098,"links":1099,"related":1102,"readMore":-1,"target":1104,"hasArticle":760},"impeller","Impeller","El motor de renderizado que usa Flutter hoy, por defecto en iOS desde 2023 y en Android desde 2024. Compila sus shaders por adelantado en lugar de durante la primera animación, lo que eliminó el jank de shaders, el problema más visible de Flutter en producción.",[],[1100],{"kind":800,"url":1101},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[1103],"skia","\u002Fglossary#impeller",{"slug":803,"term":1106,"definition":1107,"category":750,"aliases":1108,"links":1109,"related":1112,"readMore":-1,"target":1113,"hasArticle":760},"Install Referrer","Una API de Google Play que entrega a una app Android recién instalada los parámetros de campaña del enlace que llevó a la instalación. La mitad Android del deep linking diferido y la forma fiable de atribuir de dónde viene un usuario.",[],[1110],{"kind":800,"url":1111},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[622,794],"\u002Fglossary#install-referrer",{"slug":1115,"term":1116,"definition":1117,"category":820,"aliases":1118,"links":1121,"related":1124,"readMore":-1,"target":1126,"hasArticle":760},"prompt-injection","Inyección de prompts","Un ataque en el que el texto que aporta un usuario lo lee un modelo de lenguaje como instrucciones y no como datos, desviándolo de sus propias reglas. El hermano de la inyección SQL en la era de los LLM, y aparece donde se concatena entrada de usuario en un prompt.",[1119,1120],"prompt injection","ataque de inyección",[1122],{"kind":773,"url":1123},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[1125],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":868,"term":1128,"definition":1129,"category":914,"aliases":1130,"links":1132,"related":1137,"readMore":-1,"target":1138,"hasArticle":760},"JWT","Un token firmado que lleva sus propios claims, de modo que un servidor puede saber a quién pertenece una petición sin consultar una sesión. Estándar para la autenticación móvil. La firma prueba que no se alteró; no oculta lo que hay dentro.",[1131],"JSON Web Token",[1133,1135],{"kind":755,"url":1134},"https:\u002F\u002Fjwt.io\u002F",{"kind":773,"url":1136},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[1065],"\u002Fglossary#jwt",{"slug":1140,"term":1141,"definition":1142,"category":820,"aliases":1143,"links":1148,"related":1151,"readMore":-1,"target":1152,"hasArticle":760},"kyc","KYC","Know Your Customer: las verificaciones de identidad que hace un producto financiero regulado antes de dejar mover dinero —captura de documentos, prueba de vida, listas de sanciones y control antiblanqueo—. Condiciona el onboarding más que cualquier decisión de diseño.",[1144,1145,1146,1147],"Know Your Customer","AML","KYC\u002FAML","conocimiento del cliente",[1149],{"kind":773,"url":1150},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[1065,1066],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":1154,"category":750,"aliases":1155,"links":1157,"related":1158,"readMore":1159,"target":1159,"hasArticle":760},"Compartir lógica de negocio escrita en Kotlin entre Android, iOS y el servidor mientras cada plataforma conserva su UI nativa. La alternativa a Flutter cuando la interfaz tiene que ser nativa pero las reglas que hay detrás no.",[1156],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":1125,"term":1161,"definition":1162,"category":820,"aliases":1163,"links":1167,"related":1170,"readMore":-1,"target":1171,"hasArticle":760},"Limitación de tasa","Un tope de cuántas peticiones puede hacer un mismo cliente en una ventana de tiempo. Es lo que impide que un usuario entusiasta, un scraper o un bot se gaste en una tarde un mes de presupuesto de API, y tiene que vivir en tu lado de la integración.",[1164,1165,1166],"rate limiting","rate limit","throttling",[1168],{"kind":773,"url":1169},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[1115],"\u002Fglossary#rate-limiting",{"slug":989,"term":1173,"definition":1174,"category":782,"aliases":1175,"links":1178,"related":1181,"readMore":-1,"target":1182,"hasArticle":760},"MVP","La versión más pequeña de un producto que puede ponerse delante de usuarios reales y aun así responder la pregunta por la que lo construiste. Una decisión sobre alcance, no sobre calidad: un MVP también tiene que funcionar.",[1176,1177],"producto mínimo viable","minimum viable product",[1179],{"kind":773,"url":1180},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[1015],"\u002Fglossary#mvp",{"slug":1015,"term":1184,"definition":1185,"category":782,"aliases":1186,"links":1189,"related":1192,"readMore":1193,"target":1193,"hasArticle":431},"Marca blanca","Un mismo producto publicado bajo muchas marcas. Una plataforma móvil de marca blanca construye para cada cliente una app lista para la tienda con su nombre, su diseño y su contenido desde una única base de código compartida, en vez de forkear el proyecto por cliente.",[1015,1187,1188],"white label","app multiinquilino",[1190],{"kind":773,"url":1191},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[989],"\u002Fglossary\u002Fwhite-label",{"slug":1016,"term":1195,"definition":1196,"category":765,"aliases":1197,"links":1201,"related":1204,"readMore":-1,"target":1205,"hasArticle":760},"Multi-tenancy","Un solo despliegue que sirve a muchos clientes, cada uno viendo solo sus datos, su configuración y sus funciones activas porque el contexto de tenant se resuelve en cada petición. Es lo que hace que una flota de apps de marca sea un producto y no muchos forks.",[1198,1199,1200],"multi-tenant","multiinquilino","tenant",[1202],{"kind":773,"url":1203},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[1015,946],"\u002Fglossary#multi-tenancy",{"slug":1207,"term":1208,"definition":1209,"category":914,"aliases":1210,"links":1214,"related":1219,"readMore":-1,"target":1220,"hasArticle":760},"oauth","OAuth","El estándar detrás de Iniciar sesión con Apple, con Google y demás: el usuario autoriza tu app en un proveedor en el que ya confía y tu app recibe un token en lugar de su contraseña. Nadie inventa una credencial nueva y tú nunca almacenas ninguna.",[1211,1212,1213],"OAuth 2.0","login social","Iniciar sesión con Apple",[1215,1217],{"kind":755,"url":1216},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":773,"url":1218},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[868],"\u002Fglossary#oauth",{"slug":1065,"term":1222,"definition":1223,"category":820,"aliases":1224,"links":1227,"related":1232,"readMore":-1,"target":1233,"hasArticle":760},"PCI-DSS","El estándar de seguridad del sector de tarjetas que obliga a quien almacena, procesa o transmite datos de tarjeta. La mayoría de las apps se mantienen fuera de su alcance a propósito, delegando la introducción de la tarjeta en un proveedor de pagos certificado.",[1225,1226],"PCI DSS","Payment Card Industry Data Security Standard",[1228,1230],{"kind":755,"url":1229},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":773,"url":1231},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[868],"\u002Fglossary#pci-dss",{"slug":1235,"term":1236,"definition":1237,"category":750,"aliases":1238,"links":1242,"related":1245,"readMore":-1,"target":1246,"hasArticle":760},"platform-channels","Platform channels","El puente que usa una app Flutter para llamar a código nativo de iOS y Android: Keychain y Keystore, biometría, hojas de pago, cualquier SDK sin paquete de Dart. Trabajo rutinario pero real, y lo primero donde encalla quien nunca salió de Dart.",[1239,1240,1241],"platform channel","method channel","canales de plataforma",[1243],{"kind":800,"url":1244},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":1001,"term":1248,"definition":1249,"category":765,"aliases":1250,"links":1254,"related":1257,"readMore":-1,"target":1258,"hasArticle":760},"Pub\u002FSub","Un patrón de mensajería donde un productor publica un evento y cualquier número de consumidores lo lee de forma independiente, con un broker en medio. El productor nunca los espera, y así la ruta de la petición sigue siendo rápida mientras el trabajo lento ocurre detrás.",[1251,1252,1253],"publicación\u002Fsuscripción","publish\u002Fsubscribe","Google Cloud Pub\u002FSub",[1255],{"kind":773,"url":1256},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":840,"term":1260,"definition":1261,"category":765,"aliases":1262,"links":1265,"related":1268,"readMore":-1,"target":1269,"hasArticle":760},"REST","El estilo convencional de las APIs HTTP: una URL nombra un recurso y el verbo HTTP dice qué hacer con él. La forma por defecto en que una app habla con un backend, y lo que esperan encontrar la mayoría de integraciones de terceros.",[1263,1264],"API REST","Representational State Transfer",[1266],{"kind":773,"url":1267},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[1000,1002],"\u002Fglossary#rest",{"slug":1066,"term":1271,"definition":1272,"category":820,"aliases":1273,"links":1277,"related":1282,"readMore":-1,"target":1283,"hasArticle":760},"RGPD","El reglamento de la UE sobre los datos personales de las personas en la UE: una base legal para recogerlos, consentimiento real para el rastreo y derechos de acceso y supresión. Sigue a tus usuarios, no a tus servidores, así que se aplica esté donde esté la empresa.",[1274,1275,1276],"GDPR","Reglamento General de Protección de Datos","protección de datos",[1278,1280],{"kind":755,"url":1279},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":773,"url":1281},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[1065,1067,1056],"\u002Fglossary#gdpr",{"slug":963,"term":1285,"definition":1286,"category":765,"aliases":1287,"links":1293,"related":1296,"readMore":-1,"target":1297,"hasArticle":760},"Registro de contenedores","Almacenamiento alojado para imágenes de contenedores, direccionadas por nombre y etiqueta: Docker Hub, GitHub Container Registry o el propio de un proveedor cloud. Publicar una build ahí convierte 'funciona en mi máquina' en una imagen que cualquiera puede descargar y ejecutar sin cambios.",[1288,1289,1290,1291,1292],"registro de imágenes","Docker registry","GHCR","ghcr.io","container registry",[1294],{"kind":800,"url":1295},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[949,1082],"\u002Fglossary#container-registry",{"slug":461,"term":1299,"definition":1300,"category":765,"aliases":1301,"links":1305,"related":1308,"readMore":-1,"target":1309,"hasArticle":760},"Renderizado en servidor","Construir una página como HTML terminado en el servidor, de modo que la primera respuesta ya lleva el contenido, los encabezados, las metaetiquetas y los datos estructurados. Los rastreadores, las vistas previas de enlaces y los dispositivos lentos lo leen sin ejecutar JavaScript.",[1302,1303,1304],"SSR","server-side rendering","renderizado del lado del servidor",[1306],{"kind":773,"url":1307},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[523],"\u002Fglossary#server-side-rendering",{"slug":1067,"term":1311,"definition":1312,"category":820,"aliases":1313,"links":1316,"related":1319,"readMore":-1,"target":1320,"hasArticle":760},"SOC 2","Un informe de auditoría externa sobre cómo trata una organización los datos de clientes —seguridad, disponibilidad, confidencialidad— y no un certificado que se compra. Los clientes empresariales lo piden, y condiciona la arquitectura mucho antes que la propia auditoría.",[1314,1315],"SOC2","System and Organization Controls",[1317],{"kind":773,"url":1318},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[1065,1066,1056],"\u002Fglossary#soc-2",{"slug":1322,"term":1323,"definition":1324,"category":782,"aliases":1325,"links":1328,"related":1331,"readMore":-1,"target":1332,"hasArticle":760},"saas","SaaS","Software vendido como suscripción continua a un producto alojado, en lugar de como una licencia única que el cliente instala y opera. El proveedor mantiene los servidores, publica actualizaciones sin parar y cobra por usuario o por uso.",[1326,1327],"Software as a Service","software como servicio",[1329],{"kind":773,"url":1330},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[1016,1015],"\u002Fglossary#saas",{"slug":1002,"term":1334,"definition":1335,"category":914,"aliases":1336,"links":1339,"related":1342,"readMore":-1,"target":1343,"hasArticle":760},"Server-Sent Events","Un flujo unidireccional del servidor al cliente sobre una conexión HTTP corriente. Más simple que un WebSocket y suficiente allí donde solo el servidor tiene algo que decir: un feed de progreso, o una respuesta de IA que llega token a token.",[1337,1338],"SSE","eventos enviados por el servidor",[1340],{"kind":773,"url":1341},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[1000,840],"\u002Fglossary#server-sent-events",{"slug":1103,"term":1345,"definition":1346,"category":750,"aliases":1347,"links":1350,"related":1355,"readMore":-1,"target":1356,"hasArticle":760},"Skia","La librería gráfica 2D de código abierto de Google que dibuja Chrome, Android y —hasta Impeller— cada fotograma de Flutter. Renderiza tanto a PDF como a pantalla, que es lo que hace la función de imprimir a PDF de Chrome.",[1348,1349],"Skia Graphics Engine","skia-safe",[1351,1353],{"kind":755,"url":1352},"https:\u002F\u002Fskia.org\u002F",{"kind":773,"url":1354},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[1095],"\u002Fglossary#skia",{"slug":867,"term":1358,"definition":1359,"category":914,"aliases":1360,"links":1364,"related":1367,"readMore":-1,"target":1368,"hasArticle":760},"TLS","La capa de cifrado bajo HTTPS. Demuestra que el servidor es quien dice su certificado, acuerda una clave nueva para la sesión y cifra todo lo demás, de modo que la red intermedia solo ve texto cifrado que no puede alterar sin que se note.",[1361,1362,1363],"SSL","HTTPS","Transport Layer Security",[1365],{"kind":773,"url":1366},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[856,868],"\u002Fglossary#tls",{"slug":791,"term":1370,"definition":1371,"category":782,"aliases":1372,"links":1375,"related":1378,"readMore":-1,"target":1379,"hasArticle":760},"Time to market","Cuánto se tarda en llevar un producto desde la decisión hasta usuarios reales. Casi todas las discusiones sobre stack y alcance son en realidad discusiones sobre este número, porque cada semana ahorrada es una semana de ingresos, feedback y posición competitiva.",[1373,1374],"TTM","tiempo de salida al mercado",[1376],{"kind":773,"url":1377},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[989,790],"\u002Fglossary#time-to-market",{"slug":1381,"term":1382,"definition":1383,"category":914,"aliases":1384,"links":1386,"related":1391,"readMore":-1,"target":1393,"hasArticle":760},"webrtc","WebRTC","El estándar de navegador y móvil para enviar audio, vídeo y datos directamente entre dos dispositivos, con los servidores implicados solo en presentarlos entre sí. Es sobre lo que se construye una videollamada dentro de una app cuando no es un SDK alquilado.",[1385],"Web Real-Time Communication",[1387,1389],{"kind":755,"url":1388},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":773,"url":1390},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[1392,1000],"xmpp","\u002Fglossary#webrtc",{"slug":1000,"term":1395,"definition":1396,"category":914,"aliases":1397,"links":1398,"related":1401,"readMore":-1,"target":1402,"hasArticle":760},"WebSocket","Un protocolo que mantiene una conexión abierta entre cliente y servidor para que cualquiera de los dos pueda enviar en cualquier momento, en vez de que el cliente pregunte una y otra vez. Sobre esto funcionan los precios en vivo, el chat y los indicadores de presencia.",[],[1399],{"kind":773,"url":1400},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[1002,840],"\u002Fglossary#websocket",{"slug":1392,"term":1404,"definition":1405,"category":914,"aliases":1406,"links":1409,"related":1414,"readMore":-1,"target":1415,"hasArticle":760},"XMPP","Un protocolo de mensajería abierto y federado, y la alternativa de siempre a escribir un backend de chat o alquilarlo. Se extiende a presencia, indicadores de escritura y transferencia de archivos, y es lo bastante antiguo como para que cada plataforma tenga una librería madura.",[1407,1408],"Jabber","Extensible Messaging and Presence Protocol",[1410,1412],{"kind":755,"url":1411},"https:\u002F\u002Fxmpp.org\u002F",{"kind":773,"url":1413},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[1381,1000],"\u002Fglossary#xmpp"]