diff --git a/README.md b/README.md
new file mode 100644
index 000000000..f17417e30
--- /dev/null
+++ b/README.md
@@ -0,0 +1,635 @@
+# Curso Práctico de JavaScript
+
+- [Curso Práctico de JavaScript](#curso-práctico-de-javascript)
+ - [C007 Array y Objetos](#c007-array-y-objetos)
+ - [C009 Como conectar con JS con HTML](#c009-como-conectar-con-js-con-html)
+ - [C010 Leyendo HTML desde JS](#c010-leyendo-html-desde-js)
+ - [C011 Escribiendo HTML desde JS](#c011-escribiendo-html-desde-js)
+ - [C012 Eventos con JS, interactuando con usuarios](#c012-eventos-con-js-interactuando-con-usuarios)
+ - [C013 addEventListener](#c013-addeventlistener)
+ - [C018 Fusión del menu en desktop](#c018-fusión-del-menu-en-desktop)
+ - [C019 Fusión del menú mobile](#c019-fusión-del-menú-mobile)
+ - [C020 Carrito de compras](#c020-carrito-de-compras)
+ - [C021 Lista de productos, HTML a parti de arrays](#c021-lista-de-productos-html-a-parti-de-arrays)
+ - [C022 Detalles de un producto](#c022-detalles-de-un-producto)
+ - [C023 Interacción entre todos los componentes](#c023-interacción-entre-todos-los-componentes)
+ - [Modificación extra realizada: Product detail changes depending on the selected product](#modificación-extra-realizada-product-detail-changes-depending-on-the-selected-product)
+
+## C007 Array y Objetos
+
+Funcion que reciba cualquier array como parámetro e imprima su primer elemento.
+
+```javascript
+function imprimirPrimerElementoArray(arr){
+ console.log(arr[0]);
+}
+```
+Funcion que reciba cualquier array como parámetro e imprima todos sus elemento uno por uno.
+```javascript
+function imprimirElementoPorElemento(arr){
+ for (let i = 0; i < arr.length; i++){
+ console.log(arr[i]);
+ }
+}
+```
+Funcion que reciba cualquier objeto como parámetro e imprima todos sus elementos uno por uno.
+```javascript
+//Convertimos objeto en array con
+// Object.values(obj);
+
+function imprimirElementoPorElementoObjeto(obj) {
+ const arr = Object.values(obj);
+ for (let i = 0; i < arr.length; i++>){
+ console.log(arr[i]);
+ }
+}
+
+//Tambien tenemos Object.keys(object); que devuelve las claves en vez de los valores
+```
+
+## C009 Como conectar con JS con HTML
+
+Los entornos de ejecucion son los que permiten ejecutar el código de JS (Los navegadores, nodeJS, ...).
+Con la etiqueta `` nos permite: introducir todo el codigo o bien por medio del atributo `src` enlazar el archivo.js. Por ejemplo:
+
+```html
+
+```
+## C010 Leyendo HTML desde JS
+
+Por medio de `document.querySelector` le asignamos a una variable, declarada con `const`, un identificador o selector para poder trabajar sobre un elemento del HTML. A dicha funcion se le pasa como argumento alguna identicacion de dicho elemento, que puede ser la misma etiqueta (con el nombre, por ejemplo h1), con una clase (.clase), un id (#id), como si se tratara de CSS.
+
+```javascript
+const h1 = document.querySelector ("h1");
+const p = document.querySelector ("p");
+const parrafito = document.querySelector (".parrafito");
+const pid = document.querySelector ("#pid");
+const input = document.querySelector ("input");
+```
+Tambien hay otras funciones como `getElementbyId`, `getElementbyClass`, ..., en los cuales no hace falta identicar que es lo que queremos con ., #, ...
+Una vez que tenemos estas variables podemos acceder a su contenido.
+```javascript
+console.log (h1);
+console.log ({
+ h1,
+ p,
+ parrafito,
+ pid,
+ input,
+});
+console.log (input.value);
+```
+Al indicar en `console.log` los parrafos `{}` le estamos diciendo que le estamos pasando un objeto, y lo va a imprimir como tal.
+
+## C011 Escribiendo HTML desde JS
+
+También aca utilizaremos las variables asignadas en la clase anterior.
+Con el atributo innerHTML podemos cambiar el codigo del HTML, o sea con etiquetas, por ejemplo:
+
+```javascript
+h1.innerHTML = "Cambiando el
h1";
+```
+
+Con `innerText` solo se modifica el texto y no va a considerar a las etiquetas como codigo, la insertará como texto común.
+
+Con `getAttribute()` leo atributo, y si de argumento le paso `class`me trae las clases que tenga. Con `setAttribute()` fijo un atributo, como argumento le debo pasar el atributo y el valor que le asignamos.
+Con `classList.add()` agrego una clase, `classList.remove()` lo quito, `classList.toggle()` lo agrego o quito segun este o no, `classList.contains()` es un condicional, que me devuelve true o false si esta esa clase. Como aca ya indicamos que trabajamos con clase no se debe poner el `.`.
+Con `document.createElement()` creamos una etiqueta, por ejemplo si le pasamos como argumento `"img"` nos crea ``. Con `append()` agregamos al final dicho elemento.
+
+```javascript
+h1.innerHTML = "Cambiando el
h1";
+h1.innerText = "Cambiando el
h1";
+
+console.log (h1.getAttribute("class"));
+h1.setAttribute("class", "verde");
+h1.classList.toggle("rojo");
+
+const img = document.createElement("img");
+img.setAttribute("src", "https://st3.depositphotos.com/9572786/15657/i/450/depositphotos_156571608-stock-photo-drawn-dark-fantasy-the-city.jpg");
+
+pid.innerText="Cambio de texto e imagen anexada";
+pid.append(img);
+```
+
+## C012 Eventos con JS, interactuando con usuarios
+
+En un principio podriamos agregar codigo en el mismo HTML, que reaccione ante un evento como el `onchage` (si hay cambios) y aca le indicamos por ejemplo que mande a la consola un mensaje.
+```html
+
+```
+Para mejorar esto, podemos llamar a una funcion en el archivo de JS desde el html en lugar de poner codigo ahi.
+En el HTML editamos lo que hace el evento.
+```html
+
+```
+Y en JS agregamos la funcion
+```javascript
+const input1 = document.querySelector("#calculo1");
+const input2 = document.querySelector("#calculo2");
+const btn = document.querySelector("#btnCalcular");
+const pResult = document.querySelector("#result");
+
+function btnOnClick() {
+ const sumaInputs = input1.value + input2.value;
+ pResult.innerText= "Resultado: "+sumaInputs;
+```
+
+## C013 addEventListener
+
+Lo que se quiere lograr con esto es pasar las escuchas de los eventos a JS, y dejando el codigo html lo mas puro posible. O sea sin poner los eventos, como por ejemplo el `onclick` en el html. Y esto lo vamos a estar haciendo con `addEventListener`.
+
+```javascript
+btn.addEventListener("click",btnOnClick);
+```
+
+A este le pasamos dos argumentos, uno es el evento en cuestion y el otro la funcion a llamar, como ya debemos pasar el nombre de la funcion lo tenemos que hacer sin comillas y sin parentesis, ya que lo agrega el comando propiamente.
+A continuacion vamos a ver un ejemplo de que sucede si usamos la etiqueta `