CursosEmpresasBlogLiveConfPrecios

Enriqueciendo la información

Clase 14 de 29 • Curso de Manipulación del DOM

Clase anteriorSiguiente clase

Contenido del curso

DOM y Web API
  • 1
    Y entonces nació internet...

    Y entonces nació internet...

    02:23
  • 2

    Accede a la versión más actualizada de este contenido

    00:14
  • 3
    ¿Qué es el DOM?

    ¿Qué es el DOM?

    02:39
  • 4
    Web APIs modernas

    Web APIs modernas

    03:17
Operaciones básicas
  • 5
    Leer nodos

    Leer nodos

    09:31
  • 6
    NodeLists vs Array

    NodeLists vs Array

    03:46
  • 7
    Crear y agregar

    Crear y agregar

    15:47
  • 8
    Otras formas de agregar

    Otras formas de agregar

    06:55
  • 9
    Atributos y propiedades

    Atributos y propiedades

    05:12
  • 10
    Eliminar nodos

    Eliminar nodos

    09:31
  • 11
    Operaciones en lote

    Operaciones en lote

    06:52
Workshop 1: Fetch
  • 12
    Presentación del proyecto

    Presentación del proyecto

    01:10
  • 13
    Descargando información y creando nodos

    Descargando información y creando nodos

    18:36
  • 14
    Enriqueciendo la información

    Enriqueciendo la información

    10:53
  • 15
    Usando la API de internacionalización del browser

    Usando la API de internacionalización del browser

    12:14
  • 16
    Comparte el resultado

    Comparte el resultado

    02:18
Eventos
  • 17
    Reaccionar a lo que sucede en el DOM

    Reaccionar a lo que sucede en el DOM

    13:58
  • 18
    Event propagation

    Event propagation

    12:08
  • 19
    Event delegation

    Event delegation

    05:32
Workshop 2: Lazy loading
  • 20
    Presentación del proyecto

    Presentación del proyecto

    03:34
  • 21
    Nuestro propio plugin Lazy Loading

    Nuestro propio plugin Lazy Loading

    08:32
  • 22
    Creando las imagenes con JavaScript

    Creando las imagenes con JavaScript

    17:33
  • 23
    Intersection Observer

    Intersection Observer

    14:21
  • 24
    Aplicando Lazy loading

    Aplicando Lazy loading

    13:07
  • 25
    Comparte el resultado

    Comparte el resultado

    03:17
Workshop 3
  • 26
    Proyectos propuestos

    Proyectos propuestos

    04:17
Librerías relacionadas
  • 27
    ¿Y jQuery?

    ¿Y jQuery?

    03:41
  • 28
    ¿Y JSX?

    ¿Y JSX?

    09:40
Conclusiones
  • 29
    Conclusiones

    Conclusiones

    01:56
    Héctor Iván Sáenz Estrada

    Héctor Iván Sáenz Estrada

    student•
    hace 5 años

    Les recomiendo la extensión de Google Chrome ++JSON viewer++, con ella podemos visualizar formato JSON en nuestro navegador de una forma ordenada. Además, es completamente personalizable. . . Al descargarlo, podrás visualizar algo como esto:

      Jonathan 🦑 Alvarez

      Jonathan 🦑 Alvarez

      teacher•
      hace 5 años

      También la uso!

      Guillermo Castaño Vèlez

      Guillermo Castaño Vèlez

      student•
      hace 5 años

      Excelente aporte!

    Carlos Eduardo Gomez García

    Carlos Eduardo Gomez García

    teacher•
    hace 5 años

    La parte del rellenado de los datos es lo que más me gusta porque es como jugar con piezas de lego, básicamente puedes acceder a la propiedad de cualquier nodo y ponerle el valor que desees, es increíble! . Por si a alguien le interesa, aquí iré dejando enlaces a mi repositorio en GitHub con el código de cada clase: . Clase anterior: Creación de elementos Esta clase: Adición de los nodos al DOM

      Griger Ratia

      Griger Ratia

      student•
      hace 4 años

      De acuerdo contigo!! Ya tenía muchas ganas de consumir PIs y veo que es genial. Podemos hacer muchísimas cosas, y hay cientos de APIs o miles?

      Gracias por el repo.

    Anfernee Valera

    Anfernee Valera

    student•
    hace 4 años

    Estás clases son todo lo que está bien después del curso de asincronismo

    Andres Felipe Pinchao Ramirez

    Andres Felipe Pinchao Ramirez

    student•
    hace 5 años

    MIS APUNTES 😎👌👌

    const appNode = document.querySelector('#app'); //const url = "https://platzi-avo.vercel.app/api/avo"; /* Cambiamos la url que tenemos por una url base y lo que hacemos es agregarle atraves de un template string el resto de la url que teniamos en el fetch*/ window .fetch(`${baseUrl}/api/avo`) .then(respuesta => respuesta.json()) .then(responseJson =>{ const todosLosItems = []; responseJson.data.forEach(item => { const imagen = document.createElement('img'); /* Para asignar la url que obtenemos de la api a nuestra imagen lo hacemos en la propiedad src Si la agregaramos solo con lo que obtenemos de la API nos daria un error ya que lo que obtenemos es una ruta obsuluta mas no una url por lo tanto nos dara error porque no encontraria la ruta de la imagen */ imagen.src = `${baseUrl}${item.image}`; const titulo = document.createElement('h2'); titulo.textContent = item.name; const precio = document.createElement('div'); /* Le asignamos al texto del elemento precio que es un div la informacion que obtenemos de respuesta JSON Y atraves del parametro que tenemos en la funcion del forEach accederemos al precio */ precio.textContent = item.price; const container = document.createElement('div'); container.append(imagen,titulo,precio); todosLosItems.push(container); console.log(item.name); }); appNode.append(...todosLosItems) });``` Luego agregaremos en nuestro HTML una etiqueta div con un id para meter todos nuestros nodos dentro de el, generalmente se le llama mount o app o container. <div id="app"></div> Después vamos a nuestro javascript y agregamos nuestra etiqueta div con id app const appNode = document.querySelector('#app'); y cambiamos la parte donde agregábamos todos los items al body appNode.append(...todosLosItems)
      Jimmy Buriticá Londoño

      Jimmy Buriticá Londoño

      student•
      hace 5 años

      Muy detallado el código fuente. gracias.

      Andrés Felipe García Rendón

      Andrés Felipe García Rendón

      student•
      hace 5 años

      Muchas gracias por compartir tus apuntes. Saludos,

    Jose Anibal Garcia Giraldo

    Jose Anibal Garcia Giraldo

    student•
    hace 5 años

    Que tal!, yo quise probar otro tipo de soluciones. Les comparto como lo resolví con innerHTML 😎

    2021-05-06_20h37_28.png

      Rosmer Edgar Minchola Gutierrez

      Rosmer Edgar Minchola Gutierrez

      student•
      hace 4 años

      La idea es practicar el crear, modificar, eliminar y reemplazar los nodos, en ese caso estás creando directamente código HTML. Sin embargo también da un buen resultado.

      Julian Franco

      Julian Franco

      student•
      hace 4 años

      En clases anteriores se menciona que no era buen aparacticar usar el innerHTML por la inyeccion de XSS

    Jeferson Velásquez

    Jeferson Velásquez

    student•
    hace 5 años

    Me parece que sería mejor si en la API se hubiese agregado la ruta completa de una vez

    Así:

    "image": "https://platzi-avo.vercel.app/images/maluma.jpg",

    En lugar de:

    "image": "/images/fuerte.jpg",

    Pero esto es una prueba de que se debe de tener cuidado con este tipo de detalles al consumir una API.

      Gutierrez Diego

      Gutierrez Diego

      student•
      hace 4 años

      Lo acabo de pensar, mañana lo pruebo. Te funcionó?

    alberto ayala rodriguez

    alberto ayala rodriguez

    student•
    hace 5 años

    decidí utilizar async/await y separar el código de forma que cree dos funciones: una para obtener los datos y otra para pintar los datos, me gustó más porqué el código se puede leer mejor

    Función para obtener los datos

    const getData = async url => { try{ const response = await fetch(url); const data = await response.json(); const allAguacates = data.data; printItems(allAguacates); }catch(error){ console.log(error); } }

    Función para pintar los elementos que se traen del API

    const printItems = (items) => { const allItems = []; items.forEach(item => { //Crear imagen const imagen = document.createElement('img'); imagen.src = `${URL_BASE}${item.image}`; //Crear titulo const title = document.createElement('h2'); title.textContent = item.name; //crear precio const price = document.createElement('div'); price.textContent = item.price; //Crear un container const container = document.createElement('div'); container.append(imagen, title, price); allItems.push(container); }); //Agregamos todo al contendor principal appNode.append(...allItems); }

    Todo el código

    const URL_BASE = "https://platzi-avo.vercel.app"; const appNode = document.querySelector('#app'); //Uso de fetch const getData = async url => { try{ const response = await fetch(url); const data = await response.json(); const allAguacates = data.data; printItems(allAguacates); }catch(error){ console.log(error); } } const printItems = (items) => { const allItems = []; items.forEach(item => { //Crear imagen const imagen = document.createElement('img'); imagen.src = `${URL_BASE}${item.image}`; //Crear titulo const title = document.createElement('h2'); title.textContent = item.name; //crear precio const price = document.createElement('div'); price.textContent = item.price; //Crear un container const container = document.createElement('div'); container.append(imagen, title, price); allItems.push(container); }); //Agregamos todo al contendor principal appNode.append(...allItems); } getData(`${URL_BASE}/api/avo`);
      Griger Ratia

      Griger Ratia

      student•
      hace 4 años

      Genial

      Chanel Mariannis Paredes Sánchez

      Chanel Mariannis Paredes Sánchez

      student•
      hace 2 años

      Super, un código clean!

    Daniel Salazar Munoz

    Daniel Salazar Munoz

    student•
    hace 4 años

    El profe maneja muy buenas prácticas, la diferencia en que el dom realice cambios el número de veces por componente y solo una vez está en almacenar todo en arreglos y luego ejecutarlo su contenido una vez, esto solo lo notaría una persona al tener muchos elementos por renderizar y una pagina que muere lentamente.

    Luis Fernando Cortes Duque

    Luis Fernando Cortes Duque

    student•
    hace 4 años

    algo muy bueno hasta ahora del curso es que nos ensaña de varias formas a hacer lo mismo. Hasta ahora es un curso de graduación de javascript.

    Usuario anónimo

    Usuario anónimo

    user•
    hace 4 años

    🧐 Dato curioso, puedes declarar el nodo de referencia en la misma línea en la que se agregan los itmes, de manera que:

    document.querySelector("#container").append(...allItems);

    document.querySelector("#container").append(...allItems);
    JOSE GABRIEL CASTILLO MOSQUERA

    JOSE GABRIEL CASTILLO MOSQUERA

    student•
    hace 4 años

    Les comparto que podemos utilizar uno de estos dos métodos para recortar la cadena de texto a nuestro gusto substring() o slice() este ultimo acepta números negativos

    Documentación

    https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/substring

    https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

    Untitled.jpg
    Leiver Granda

    Leiver Granda

    student•
    hace 5 años

    Cuál es la diferencia de concatenar la url con:

    imagen.src=baseUrl+item.image;

    que con:

    `${baseUrl}${item.image}`;
      Fernando Quinteros Gutierrez

      Fernando Quinteros Gutierrez

      student•
      hace 5 años

      ¡Excelente pregunta Leiver! 😄

      bueno ambas son válidas y correctas. Pero depende de las convenciones que tengas o el criterio en que concideres apta cada alternativa. En lo personal para concatenar cadenas largas que tendrán o tendre textos intermedios o muchos espacios me gusta usar los template Literals, para concatenaciones cortas, el clasico signo "+"

      Espero haberte ayudado 😉

      Leiver Granda

      Leiver Granda

      student•
      hace 5 años

      Muchas gracias por la aclaración Fernando.🎇

    Gerardo Javier Ramírez Gómez

    Gerardo Javier Ramírez Gómez

    student•
    hace 5 años

    Postman es una plataforma que nos ayuda a visualizar Api’s propias y de terceros, además de gestionar y organizar las peticiones. Se las recomiendo mucho y les dejo el curso de Postman de platzi. . .

    postman.png

      Carlos Escribano Clemente

      Carlos Escribano Clemente

      student•
      hace 3 años

      No existe ese curso, se ha borrado? Alguno similar? Yo también uso postman pero siento que le estoy sacando poco partido.

    Johnnie Lopez

    Johnnie Lopez

    student•
    hace 5 años

    ¿Cuál es la extensión que usa el profe para visualizar la web API en el navegador?

      Fernando Quinteros Gutierrez

      Fernando Quinteros Gutierrez

      student•
      hace 5 años

      👋 Saludos, Johnnie!

      • La extensión que usa es JSON Formatter

      Pero en los aportes encontrarás alternativas interesantes

      Espero haberte ayudado 😉

      💚 Nunca pares de aprender 🤟

      Luis Lira

      Luis Lira

      student•
      hace 5 años

      Hola! A mí me gusta mucho JSON Viewer

    Diego Rubio

    Diego Rubio

    student•
    hace 5 años

    Porque no actualiza los cambios del proyecto en el browser?

      Massimo Di Berardino

      Massimo Di Berardino

      student•
      hace 5 años

      Hola didier, podrías ser un poco más claro con tu consulta para poder ayudarte mejor. ¿Exactamente que error estás teniendo?

      Jonathan 🦑 Alvarez

      Jonathan 🦑 Alvarez

      teacher•
      hace 5 años

      Hola Didier! ¿Qué te muestra la consola? ¿Hay algún error? ¿Estás en Windows?

    Federico Upegui Restrepo

    Federico Upegui Restrepo

    student•
    hace 3 años

    Con TypeScript

    import './style.css' interface Data { image: string name: string price: string } const BASE_URL = 'https://platzi-avo.vercel.app' const appNode = document.querySelector<HTMLDivElement>('#app')! appNode.innerHTML = ` <div> <h1 class='text-center my-8 text-3xl font-bold'>Avocados store</h2> </div> ` fetch (`${BASE_URL}/api/avo`) .then(response => response.json()) .then(data => { const allItems: HTMLElement[] = [] data.data.forEach( (item: Data) => { const image = document.createElement('img') image.src = `${BASE_URL}/${item.image}` const title = document.createElement('h2') title.textContent = item.name const price = document.createElement('div') price.textContent = item.price const container = document.createElement('div') container.append(image, title, price) allItems.push(container) } ) appNode.append(...allItems) })
    Jorge Martin Aguilar Hernández

    Jorge Martin Aguilar Hernández

    student•
    hace 4 años

    Me está encantando este curso, justo lo que necesitaba

    Roger Colquehuanca

    Roger Colquehuanca

    student•
    hace 5 años

    Hola para mi sitio web estoy usando Tailwind CSS y tiene muchas clases y nodos para un solo item. Recomiendas crear elementos con create?

    Me parece mas sencillo usar un innerHtml.

      Roger Colquehuanca

      Roger Colquehuanca

      student•
      hace 5 años

      solo estoy usando el cdn 😅. mi sitio web. https://rogergcc.github.io/

    Roger Colquehuanca

    Roger Colquehuanca

    student•
    hace 5 años

    puedo usar **InnerHtml **si son muchos nodos, divs y class me parece mas sencillo usar eso a createElement

      Jimmy Buriticá Londoño

      Jimmy Buriticá Londoño

      student•
      hace 5 años

      Yo acabo de terminar un proyecto con una API, fui armando el código HTML y al final lo subo con innerHTML, funciona perfectamente.

      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      teacher•
      hace 5 años

      La verdad es que usar innerHTML no es recomendable, es muy inseguro, la forma correcta es usar createElement, sin embargo, existen librerías (como JSX) que hacen más ameno su uso, permitiéndote crear elementos HTML de una forma más sencilla, pero recuerda que en este curso se usa Vanilla JavaSript:D

    Existaya .

    Existaya .

    student•
    hace 3 años

    ![](

    Captura de Pantalla 2022-08-11 a la(s) 3.27.36 p. m..png

    No me ingresa los nodos creados dentro del app, en el HTML me los sigue ingresando al final del body y no donde cree la etique <div id="app"></div>

    Este es el HTML

    Captura de Pantalla 2022-08-11 a la(s) 3.30.27 p. m..png
      Kevin J. Zea Alvarado

      Kevin J. Zea Alvarado

      student•
      hace 3 años

      Hola, Existaya. 👋

      De hecho, los estás ingresando al body con la línea de document.body.append(container);.

      Si quieres ingresarlos a app, hazlo así: app.append(...elementosIterados);, pero debes tomar en cuenta que la variable de elementosIterados debe ser creada antes del forEach; si no, como solo tiene alcance/scope de bloque, no podrás acceder a ella fuera del forEach. De hecho, probablemente con ese códigoi te aparezca un error en consola al respecto.

      Haz los cambios y cuéntanos cómo te fue.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads