diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 00000000..fa719874
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,35 @@
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the
+// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
+{
+ "name": "Node.js",
+ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
+ "image": "mcr.microsoft.com/devcontainers/javascript-node:0-16",
+ "customizations": {
+ "vscode": {
+ "settings": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "workbench.editorAssociations": {
+ "*.md": "vscode.markdown.preview.editor"
+ }
+ },
+ "extensions": ["learn-pack.learnpack-vscode"]
+ }
+ },
+
+ // Features to add to the dev container. More info: https://containers.dev/features.
+ // "features": {},
+
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
+ // "forwardPorts": [],
+
+ "onCreateCommand": "npm i jest@24.8.0 -g && npm i @learnpack/learnpack@2.1.26 -g && learnpack plugins:install learnpack-html@0.0.20"
+
+ // Use 'postCreateCommand' to run commands after the container is created.
+ // "postCreateCommand": "yarn install",
+
+ // Configure tool-specific properties.
+ // "customizations": {},
+
+ // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
+ // "remoteUser": "root"
+}
diff --git a/.github/workflows/learnpack-audit.yml b/.github/workflows/learnpack-audit.yml
new file mode 100644
index 00000000..52644d89
--- /dev/null
+++ b/.github/workflows/learnpack-audit.yml
@@ -0,0 +1,29 @@
+# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
+# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
+
+name: Learnpack audit
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ - run: npm install @learnpack/learnpack@latest -g
+ - run: learnpack audit
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 8f255a69..b54a1f9f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,8 @@
!bc.json
!learn.json
!README.md
+!README.es.md
+!.vscode
!/exercises
!/exercises/*
diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile
index 31389fd0..c303edbf 100644
--- a/.gitpod.Dockerfile
+++ b/.gitpod.Dockerfile
@@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest
USER gitpod
RUN npm i jest@24.8.0 -g
-RUN npm i learnpack@0.0.88 -g && learnpack plugins:install learnpack-html@0.0.17
+RUN npm i @learnpack/learnpack@2.1.26 -g && learnpack plugins:install learnpack-html@0.0.20
diff --git a/.gitpod.yml b/.gitpod.yml
index c83d6cc1..fbb44ce0 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -4,9 +4,13 @@ image:
ports:
- port: 3000
- onOpen: open-preview
-tasks:
- - command: learnpack start --disableGrading;
+ onOpen: ignore
+
+vscode:
+ extensions:
+ - learn-pack.learnpack-vscode
+
+
github:
prebuilds:
# enable for the master/default branch (defaults to true)
diff --git a/.learn/assets/4geeks-icon-blue.png b/.learn/assets/4geeks-icon-blue.png
new file mode 100644
index 00000000..6dbdabee
Binary files /dev/null and b/.learn/assets/4geeks-icon-blue.png differ
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..2f5ad94d
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,8 @@
+{
+ "files.autoSave": "afterDelay",
+ "files.autoSaveDelay": 700,
+ "editor.minimap.enabled": false,
+ "workbench.editorAssociations": {
+ "*.md": "vscode.markdown.preview.editor"
+ }
+}
\ No newline at end of file
diff --git a/README.es.md b/README.es.md
new file mode 100644
index 00000000..77217f4a
--- /dev/null
+++ b/README.es.md
@@ -0,0 +1,100 @@
+# Tutorial de Ejercicios de CSS de 4Geeks Academy
+
+
+
+¡Hola! Soy [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), ¡muy emocionado de tenerte aquí! 🎉 😂 Aprender a programar es difícil, ¡necesitas entrenamiento! [Envíame un DM en Twitter](https://twitter.com/alesanchezr) si tienes alguna pregunta.
+
+
+## En este tutorial aprenderás los siguientes conceptos:
+
+1. Cómo aplicar CSS a su sitio web de 3 maneras diferentes: en línea, agrupándolos dentro de una etiqueta `
-Click me to open google.com
-```
-
-Tenemos un enlace de HTML `` que lleva a las personas a google.com cuando se hace clic.
-Usamos CSS para selectionar todas las etiquetas `` y luego hacerlas `pink`.
-
-## 📝 Instrucciones
-
-Pega este código en tu sitio web para ver los resultados.
-
-## 💻 Preview
-
-Debería verse así:
-
-
\ No newline at end of file
diff --git a/exercises/01-Hello-World/README.md b/exercises/01-Hello-World/README.md
deleted file mode 100644
index 50db2a76..00000000
--- a/exercises/01-Hello-World/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-tutorial: "https://www.youtube.com/watch?v=rbtHLA813pU"
----
-# `01` Hello World in CSS
-
-CSS is about styles. To apply styles you always have to follow this steps:
-
-1. Read the HTML and pick in your mind what element you want to decorate or apply styles to.
-1. Programatically select the element you want to style using CSS Selectors.
-2. Write the styling that you want by using CSS rules.
-
-That is it! The rest is just semantics! 😁
-
-Look at this example:
-
-```HTML
-
-Click me to open google.com
-```
-
-We have an HTML anchor `` that takes people to google.com when clicked.
-We use CSS to tell (selected) all the anchor tags and make then pink.
-
-## 📝 Instructions
-
-Paste this code on your website to see the results.
-
-## 💻 Preview
-
-It should look like this:
-
-
diff --git a/exercises/01-Hello-World/index.html b/exercises/01-Hello-World/index.html
deleted file mode 100644
index 03ae0584..00000000
--- a/exercises/01-Hello-World/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/exercises/01-Style-tag/README.es.md b/exercises/01-Style-tag/README.es.md
new file mode 100644
index 00000000..d356ddaf
--- /dev/null
+++ b/exercises/01-Style-tag/README.es.md
@@ -0,0 +1,36 @@
+
+# `01` Hello World in CSS
+
+CSS trata sobre estilos (styles). Para aplicar estilos, siempre debes seguir estos pasos:
+
+1. Lee el HTML y elige qué elemento deseas decorar o aplicarle estilos.
+
+2. Programáticamente selecciona el elemento que deseas decorar con los selectores de CSS.
+
+3. Escribe el estilo que quieras usando las reglas CSS.
+
+¡Eso es todo! El resto es solo semántica. 😁
+
+Mira este ejemplo:
+
+```html
+
+Click me to open google.com
+```
+
+Tenemos un enlace de HTML `` que lleva a las personas a google.com cuando se hace clic.
+Usamos CSS para seleccionar todas las etiquetas `` y luego hacerlas `pink`.
+
+## 📝 Instrucciones
+
+1. Pega este código en tu sitio web para ver los resultados.
+
+## 💻 Vista previa:
+
+Debería verse así:
+
+
diff --git a/exercises/01-Style-tag/README.md b/exercises/01-Style-tag/README.md
new file mode 100644
index 00000000..d146fc05
--- /dev/null
+++ b/exercises/01-Style-tag/README.md
@@ -0,0 +1,38 @@
+---
+tutorial: "https://www.youtube.com/watch?v=rbtHLA813pU"
+---
+# `01` Hello World in CSS
+
+CSS is about styles. To apply styles you always have to follow these steps:
+
+1. Read the HTML and pick what element (tag) you want to decorate or apply styles to.
+
+2. Programmatically select the element you want to style using [CSS Selectors](https://4geeks.com/lesson/what-is-css-learn-css#wait-what-is-a-selector).
+
+3. Write the styling that you want by using [CSS property rules](https://4geeks.com/lesson/what-is-css-learn-css#properties).
+
+That is it! The rest is just semantics! 😁
+
+Look at this example:
+
+```html
+
+Click me to open google.com
+```
+
+We have an HTML anchor `` that takes people to google.com when clicked.
+We use CSS to select all the anchor tags and make them pink.
+
+## 📝 Instructions:
+
+1. Paste this code on your website to see the results.
+
+## 💻 Preview:
+
+It should look like this:
+
+
diff --git a/exercises/01-Style-tag/index.html b/exercises/01-Style-tag/index.html
new file mode 100644
index 00000000..93d4ce1c
--- /dev/null
+++ b/exercises/01-Style-tag/index.html
@@ -0,0 +1 @@
+
diff --git a/exercises/01-Style-tag/solution.hide.html b/exercises/01-Style-tag/solution.hide.html
new file mode 100644
index 00000000..b2ad5b0e
--- /dev/null
+++ b/exercises/01-Style-tag/solution.hide.html
@@ -0,0 +1,7 @@
+
+
+Click me to open google.com
diff --git a/exercises/01-Style-tag/test.js b/exercises/01-Style-tag/test.js
new file mode 100644
index 00000000..479b0469
--- /dev/null
+++ b/exercises/01-Style-tag/test.js
@@ -0,0 +1,34 @@
+const fs = require('fs');
+const path = require('path');
+const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8');
+document.documentElement.innerHTML = html.toString();
+
+jest.dontMock('fs');
+
+const a = document.querySelector("a");
+
+test("There should be an anchor tag", ()=>{
+ expect(a).toBeTruthy()
+})
+
+test("The anchor tag should be pink", ()=>{
+ let styles = window.getComputedStyle(a);
+ expect(styles["color"]).toBe("pink");
+});
+
+test("There should be a href attribute pointing to 'https://google.com'", ()=>{
+ let href = a.getAttribute('href');
+ expect(href).toBeTruthy();
+ expect(href).toBe("https://google.com");
+})
+
+test("There should be a target attribute pointing to '_blank'", ()=>{
+ let target = a.getAttribute('target');
+ expect(target).toBeTruthy();
+ expect(target).toBe("_blank");
+})
+
+test("The anchor tag should not contain any inline style", ()=>{
+ let emptyBodyInlineStyle = {};
+ expect(a.style._values).toEqual(emptyBodyInlineStyle);
+});
diff --git a/exercises/01.1-Add-a-style-tag/README.es.md b/exercises/01.1-Add-a-style-tag/README.es.md
new file mode 100644
index 00000000..c69508dd
--- /dev/null
+++ b/exercises/01.1-Add-a-style-tag/README.es.md
@@ -0,0 +1,21 @@
+
+# `01.1` The Style Tag
+
+Si quieres añadir estilos a tu sitio web escribiendo CSS siempre debes hacerlo dentro de una etiqueta `
+```
+
+## 📝 Instrucciones:
+
+1. Añade una etiqueta `
+```
+
+## 📝 Instructions
+
+1. Add a `
+
+ Coding is a basic literacy in the digital age, and it is important for kids to understand and be able to work with and understand the technology
+ around them. Having children learn coding at a young age prepares them for the future. Coding helps children with communication, creativity,
+ math, writing, and confidence.
+
diff --git a/exercises/01.1-Add-a-style-tag/test.js b/exercises/01.1-Add-a-style-tag/test.js
new file mode 100644
index 00000000..0b3c714b
--- /dev/null
+++ b/exercises/01.1-Add-a-style-tag/test.js
@@ -0,0 +1,22 @@
+const fs = require('fs');
+const path = require('path');
+const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8');
+document.documentElement.innerHTML = html.toString();
+
+jest.dontMock('fs');
+
+const p = document.querySelector("p");
+
+test("There should be a tag", ()=>{
+ expect(p).toBeTruthy();
+})
+
+test("The
tag color should be blue", ()=>{
+ let styles = window.getComputedStyle(p);
+ expect(styles["color"]).toBe("blue");
+});
+
+test("The
tag should not contain any inline style", ()=>{
+ let emptyBodyInlineStyle = {};
+ expect(p.style._values).toEqual(emptyBodyInlineStyle);
+});
diff --git a/exercises/01.1-The-Style-Tag/README.es.md b/exercises/01.1-The-Style-Tag/README.es.md
deleted file mode 100644
index 9f6a1023..00000000
--- a/exercises/01.1-The-Style-Tag/README.es.md
+++ /dev/null
@@ -1,20 +0,0 @@
-
-# `01.1` Etiqueta Style
-
-Si quieres añadir estilos a tu sitio web escribiendo CSS siempre debes hacerlo dentro de una etiqueta `
-```
-
-## 📝 Instruccciones
-Añade una etiqueta `
-```
-
-## 📝 Instructions
-
-Add a `
+
+
+ Hello! I am an anchor in red, change my color to yellow
+
+