diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..f2e92d5
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,20 @@
+name: Create environment file
+
+on:
+ push:
+ branches:
+ - master
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2.5.0
+
+ - name: 'Create env file'
+ working-directory: challenge-01/frontend.yml
+ run: |
+ touch .env
+ echo API_KEY=${{ secrets.API_KEY }} >> .env
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b58b603
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/2022ChallengeOnfire.iml b/.idea/2022ChallengeOnfire.iml
new file mode 100644
index 0000000..c37c5e9
--- /dev/null
+++ b/.idea/2022ChallengeOnfire.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..977218c
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/challenge-01/SOLUCION.md b/challenge-01/SOLUCION.md
new file mode 100644
index 0000000..16a755e
--- /dev/null
+++ b/challenge-01/SOLUCION.md
@@ -0,0 +1,60 @@
+# Challenge 01
+
+## 1. Dockerfile
+En el directorio backend se encuentra el archivo Dockerfile el cual contiene las instrucciones para construir la imagen del backend, para construir la imagen se debe ejecutar el siguiente comando en la raiz del directorio backend
+
+```docker build -t backend_pokemon .
+docker run -d -p 8000:8000 backend_pokemon
+```
+
+En el directorio frontend se encuentra el otro archivo necesario para el despliegue del frontend, el cual es el Dockerfile, para construir la imagen se debe ejecutar el siguiente comando en la raiz del directorio frontend
+
+```docker build -t frontend_pokemon .
+docker run -d -p 3000:3000 frontend_pokemon
+```
+
+## 2. Docker-compose
+En el directorio raiz se encuentra el archivo docker-compose.yml el cual contiene las instrucciones para construir las imagenes y desplegar los contenedores del backend y frontend, para construir las imagenes y desplegar los contenedores se debe ejecutar el siguiente comando en la raiz del directorio raiz
+
+```
+docker-compose up -d
+```
+
+## Variables de entorno
+En la ruta frontend se crea el archivo .env el cual contiene las variables de entorno para el frontend, en este archivo se encuentran las variables de entorno para el backend, estas variables de entorno se utilizan para indicarle al frontend a que url se debe conectar para obtener los datos de los pokemones, estas variables de entorno son las siguientes
+
+```REACT_APP_URL_DEVELOPMENT=http://localhost:8000
+REACT_APP_URL_PRODUCTION=http://localhost:8000
+```
+
+Estas variables estan protegidas y son creadas gracias a un Github Action que se encarga de crearlas una vez se hace push a la rama master.
+
+## Terraform
+
+En la ruta terraform se encuentran diferentes archivos que se encargan de crear los recursos necesarios para desplegar la aplicacion en AWS, para desplegar la aplicacion en AWS se debe ejecutar el siguiente comando en la raiz del directorio terraform
+
+```
+terraform init
+terraform plan
+terraform apply
+```
+
+Esto creara un cluster en EKS, una subnet, y un security group, ademas de crear un archivo de configuracion para kubectl, el cual se debe ejecutar para poder conectarse al cluster de EKS
+
+```
+aws eks --region us-east-1 update-kubeconfig --name pokemon
+```
+
+Una vez conectado al cluster de EKS se debe ejecutar el siguiente comando para desplegar los pods y servicios de la aplicacion
+
+```
+kubectl apply -f kubernetes/
+```
+
+## Kubernetes
+
+Una vez desplegada la aplicacion en AWS se debe ejecutar el siguiente comando para obtener la direccion ip del load balancer
+
+```
+kubectl get svc
+```
\ No newline at end of file
diff --git a/challenge-01/backend/Dockerfile b/challenge-01/backend/Dockerfile
new file mode 100644
index 0000000..6bfb11f
--- /dev/null
+++ b/challenge-01/backend/Dockerfile
@@ -0,0 +1,10 @@
+FROM python:3.8-slim-buster
+
+WORKDIR /app
+COPY requirements.txt requirements.txt
+RUN pip install -r requirements.txt
+
+COPY . .
+EXPOSE 8000
+
+CMD ["python", "main.py"]
\ No newline at end of file
diff --git a/challenge-01/docker-compose.yml b/challenge-01/docker-compose.yml
new file mode 100644
index 0000000..e4e8f30
--- /dev/null
+++ b/challenge-01/docker-compose.yml
@@ -0,0 +1,13 @@
+version: '3.7'
+services:
+ frontend:
+ build: ./frontend/
+ ports:
+ - 3000:3000
+ depends_on:
+ - backend
+
+ backend:
+ build: ./backend/
+ ports:
+ - 8000:8000
\ No newline at end of file
diff --git a/challenge-01/frontend/.gitignore b/challenge-01/frontend/.gitignore
new file mode 100644
index 0000000..97aca2e
--- /dev/null
+++ b/challenge-01/frontend/.gitignore
@@ -0,0 +1,2 @@
+.env
+node_modules
\ No newline at end of file
diff --git a/challenge-01/frontend/Dockerfile b/challenge-01/frontend/Dockerfile
new file mode 100644
index 0000000..e1c4a86
--- /dev/null
+++ b/challenge-01/frontend/Dockerfile
@@ -0,0 +1,10 @@
+FROM node:16.13.2-alpine3.15 AS base
+
+WORKDIR /app
+
+COPY package.json .
+RUN npm install
+COPY . .
+
+EXPOSE 3000
+CMD [ "npm", "run", "start" ]
\ No newline at end of file
diff --git a/challenge-01/kubernetes/backend-service.yml b/challenge-01/kubernetes/backend-service.yml
new file mode 100644
index 0000000..eb31597
--- /dev/null
+++ b/challenge-01/kubernetes/backend-service.yml
@@ -0,0 +1,12 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: backend-service
+spec:
+ type: LoadBalancer
+ selector:
+ app: backend
+ ports:
+ - protocol: TCP
+ port: 8000
+ targetPort: 8000
\ No newline at end of file
diff --git a/challenge-01/kubernetes/backend.yml b/challenge-01/kubernetes/backend.yml
new file mode 100644
index 0000000..32eeabb
--- /dev/null
+++ b/challenge-01/kubernetes/backend.yml
@@ -0,0 +1,22 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: backend
+ labels:
+ app: backend
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: backend
+ template:
+ metadata:
+ labels:
+ app: backend
+ spec:
+ containers:
+ - name: fastapi-backend
+ image: waltergsteven/backend_pokemon:latest
+ imagePullPolicy: Always
+ ports:
+ - containerPort: 8000
\ No newline at end of file
diff --git a/challenge-01/kubernetes/frontend-service.yml b/challenge-01/kubernetes/frontend-service.yml
new file mode 100644
index 0000000..9f37cf0
--- /dev/null
+++ b/challenge-01/kubernetes/frontend-service.yml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: frontend-service
+spec:
+ type: LoadBalancer
+ selector:
+ app: frontend
+ ports:
+ - protocol: TCP
+ port: 80
+ targetPort: 3000
+ tls:
+ - secretName: example-tls
+ termination: edge
\ No newline at end of file
diff --git a/challenge-01/kubernetes/frontend.yml b/challenge-01/kubernetes/frontend.yml
new file mode 100644
index 0000000..04a729e
--- /dev/null
+++ b/challenge-01/kubernetes/frontend.yml
@@ -0,0 +1,22 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: frontend
+ labels:
+ app: frontend
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: frontend
+ template:
+ metadata:
+ labels:
+ app: frontend
+ spec:
+ containers:
+ - name: react-frontend
+ image: waltergsteven/frontend_pokemon:latest
+ imagePullPolicy: Always
+ ports:
+ - containerPort: 3000
\ No newline at end of file
diff --git a/challenge-01/terraform/.gitignore b/challenge-01/terraform/.gitignore
new file mode 100644
index 0000000..7aef60a
--- /dev/null
+++ b/challenge-01/terraform/.gitignore
@@ -0,0 +1,31 @@
+# Local .terraform directories
+**/.terraform/*
+
+# .tfstate files
+*.tfstate
+*.tfstate.*
+
+# Crash log files
+crash.log
+
+# Ignore any .tfvars files that are generated automatically for each Terraform run. Most
+# .tfvars files are managed as part of configuration and so should be included in
+# version control.
+#
+# example.tfvars
+
+# Ignore override files as they are usually used to override resources locally and so
+# are not checked in
+override.tf
+override.tf.json
+*_override.tf
+*_override.tf.json
+
+# Include override files you do wish to add to version control using negated pattern
+#
+# !example_override.tf
+
+# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
+# example: *tfplan*
+
+*.terraform.lock.hcl*
\ No newline at end of file
diff --git a/challenge-01/terraform/eip.tf b/challenge-01/terraform/eip.tf
new file mode 100644
index 0000000..a52c433
--- /dev/null
+++ b/challenge-01/terraform/eip.tf
@@ -0,0 +1,7 @@
+resource "aws_eip" "nat1" {
+ depends_on = [aws_internet_gateway.igw] # This is needed to ensure the EIP is created after the IGW
+}
+
+resource "aws_eip" "nat2" {
+ depends_on = [aws_internet_gateway.igw] # Use depends_on to ensure the EIP is created after the IGW
+}
\ No newline at end of file
diff --git a/challenge-01/terraform/eks-node-groups.tf b/challenge-01/terraform/eks-node-groups.tf
new file mode 100644
index 0000000..e4e13b0
--- /dev/null
+++ b/challenge-01/terraform/eks-node-groups.tf
@@ -0,0 +1,117 @@
+# Resource: aws_iam_role
+# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role
+
+# Create IAM role for EKS Node Group
+resource "aws_iam_role" "nodes_general" {
+ # The name of the role
+ name = "eks-node-group-general"
+
+ # The policy that grants an entity permission to assume the role.
+ assume_role_policy = <