├── .github
└── FUNDING.yml
├── .gitignore
├── LICENSE
├── README.md
├── components
├── site.vue
└── styles.css
├── functions
├── certs.js
├── find-cert.js
└── suscribed.js
├── layouts
└── 404.vue
├── package.json
├── pages
├── certificados
│ ├── index.vue
│ └── not
│ │ └── found
│ │ └── index.vue
├── discord
│ └── index.vue
├── gracias
│ └── index.vue
├── index.vue
└── swag
│ └── index.vue
├── postcss.config.js
├── saber-browser.js
├── saber-config.js
├── shopify.js
├── static
├── 404.gif
├── 404.svg
├── _redirects
├── favicon.png
├── images
│ ├── banner.svg
│ ├── button.svg
│ ├── d7.png
│ ├── heart.png
│ ├── item-bg.svg
│ ├── logo.png
│ ├── netlify-light.svg
│ ├── no-profile.png
│ ├── swag.jpg
│ ├── triangles.png
│ └── yaay.gif
├── seo-discord.jpg
├── seo-swag.jpg
└── seo.jpg
├── tailwind.config.js
├── todo.js
└── yarn.lock
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 | patreon: d3portillo
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | public
3 | .saber
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Denny Portillo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://aprendejs.email)
2 |
3 | **Aprendé Javascript** desde tu email con un contenido previamente preparado y curado, además al completar recibirás un certificado válido por lo aprendido.
4 |
5 | ## Código de conducta
6 |
7 | Por favor lee, respeta y promueve el [código de conducta acá](https://github.com/D3Portillo/aprendejs/wiki/Código-de-conducta) de **AprendeJS**.
8 |
9 | ## Recursos
10 |
11 | - [Código de conducta](https://github.com/D3Portillo/aprendejs/wiki/Código-de-conducta).
12 | - [Discord de AprendeJS](https://discord.com/invite/7PyRZ6n)
13 | - [Licencia del proyecto](/LICENSE)
14 | - [Wiki y FAQs](https://github.com/D3Portillo/aprendejs/wiki/FAQ)
15 |
16 | >
17 |
18 | ---
19 |
20 | [](https://app.netlify.com/sites/aprendejs/deploys) [](https://discord.com/invite/7PyRZ6n)
21 |
--------------------------------------------------------------------------------
/components/site.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
11 |
12 |
33 |
34 |
FAQ
40 |
Discord
43 |
Inicio / Home
46 |
Stickers & Swag
49 |
Certificados
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
66 | HECHO CON
67 |
68 |
69 |
70 |
71 |
72 |
73 |
87 |
--------------------------------------------------------------------------------
/components/styles.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind utilities;
3 |
4 | @import url("https://fonts.googleapis.com/css2?family=Cutive&family=Open+Sans:wght@400;700&display=swap");
5 | * {
6 | font-family: "Open Sans", sans-serif;
7 | position: relative;
8 | outline: none;
9 | }
10 | body {
11 | background-color: #eeeeee;
12 | }
13 | p {
14 | @apply my-6;
15 | }
16 | a {
17 | @apply border-b border-transparent border-dashed z-1;
18 | }
19 | a:not([no-link]):hover {
20 | @apply border-black;
21 | }
22 | .cta:hover,
23 | a[no-link]:hover {
24 | transform: scale(1.03);
25 | }
26 | input:invalid {
27 | box-shadow: none !important;
28 | border: none !important;
29 | outline: none;
30 | }
31 | input:invalid:focus {
32 | outline: dotted 1px rgba(255, 0, 0, 0.4);
33 | }
34 | a:not([no-link])::before {
35 | content: "";
36 | height: 50%;
37 | width: 100%;
38 | z-index: -1;
39 | margin-bottom: 1px;
40 | opacity: 0.2;
41 | @apply bg-yellow bottom-0 left-0 absolute;
42 | }
43 |
44 | .medium-zoom-overlay {
45 | z-index: 10;
46 | }
47 |
48 | @tailwind components;
49 |
--------------------------------------------------------------------------------
/functions/certs.js:
--------------------------------------------------------------------------------
1 | const fetch = require("node-fetch")
2 | const { TOKEN = "" } = process.env
3 | const URL = `https://api.airtable.com/v0/appU8sXkXLRsB7KVe/AprendeJS%20-%20Certificados?view=List`
4 | exports.handler = (event, context, callback) => {
5 | const voidData = () => {
6 | const nothing = {
7 | statusCode: 200,
8 | body: JSON.stringify({}),
9 | }
10 | callback(null, nothing)
11 | }
12 | fetch(URL, {
13 | headers: {
14 | Authorization: `Bearer ${TOKEN}`,
15 | },
16 | })
17 | .then((r) => r.json())
18 | .then(({ records }) =>
19 | callback(null, {
20 | statusCode: 200,
21 | body: JSON.stringify(
22 | records
23 | .filter((e) => {
24 | return Array.isArray(e.fields.cert)
25 | })
26 | .map(
27 | ({
28 | id,
29 | fields: {
30 | name = "Usuario",
31 | email = "noemail@service.has",
32 | picture,
33 | },
34 | }) => {
35 | return {
36 | id,
37 | name,
38 | email,
39 | picture: Array.isArray(picture)
40 | ? picture[0].thumbnails.large.url
41 | : `/images/no-profile.png`,
42 | }
43 | }
44 | )
45 | ),
46 | })
47 | )
48 | .catch((error) => {
49 | console.log({ error })
50 | voidData()
51 | })
52 | }
53 |
--------------------------------------------------------------------------------
/functions/find-cert.js:
--------------------------------------------------------------------------------
1 | const fetch = require("node-fetch")
2 | const { TOKEN = "" } = process.env
3 | const BASE_URL = `https://api.airtable.com/v0/appU8sXkXLRsB7KVe/AprendeJS%20-%20Certificados`
4 | const NOT_FOUND_URL = `https://aprendejs.email/certificados/not/found`
5 | const getMetas = ({
6 | title = `AprendeJS`,
7 | description = `Aprendé Javascript desde tu email con un contenido previamente preparado y curado, además al completar recibirás un certificado válido por lo aprendido.`,
8 | image = "/seo.jpg",
9 | url = "https://aprendejs.email",
10 | }) => {
11 | const TWITTER_USER = `AprendeJS`
12 | if (!image.startsWith("http")) {
13 | image = `https://${`aprendejs.email/${image}`.replace(/\/+/g, "/")}`
14 | }
15 | return [
16 | {
17 | name: "author",
18 | content: TWITTER_USER,
19 | },
20 | {
21 | name: "keywords",
22 | content: "javascript,aprendejs,coding,newsletter",
23 | },
24 | {
25 | name: "description",
26 | content: description,
27 | },
28 | {
29 | name: "og:type",
30 | content: "article",
31 | },
32 | {
33 | name: "og:title",
34 | content: title,
35 | },
36 | {
37 | name: "og:description",
38 | content: description,
39 | },
40 | {
41 | name: "og:image",
42 | content: image,
43 | },
44 | {
45 | name: "og:url",
46 | content: url,
47 | },
48 | {
49 | name: "og:site_name",
50 | content: title,
51 | },
52 | {
53 | name: "twitter:card",
54 | content: "summary_large_image",
55 | },
56 | {
57 | name: "twitter:image",
58 | content: image,
59 | },
60 | {
61 | name: "twitter:site",
62 | content: TWITTER_USER,
63 | },
64 | {
65 | name: "twitter:creator",
66 | content: TWITTER_USER,
67 | },
68 | {
69 | name: "twitter:image:alt",
70 | content: url,
71 | },
72 | ]
73 | }
74 | module.exports = {
75 | handler: (event, context, callback) => {
76 | const embedPDF = ({ name = "Sín nombre", pdfURL, image, url }) => {
77 | const title = `AprendeJS | ${name} ~ Curso completado`
78 | const description = `${name} ha completado con éxito el curso de 20 capítulos #AprendeJS, via: https://aprendejs.email`
79 | const metas = getMetas({ title, description, image, url })
80 | .map(({ name, content }) => {
81 | return ` `
82 | })
83 | .join("\n")
84 |
85 | return `
86 |
${title} ${metas}
87 |
88 |
89 | `
90 | }
91 | const voidData = () => {
92 | callback(null, {
93 | statusCode: 302,
94 | headers: {
95 | Location: NOT_FOUND_URL,
96 | },
97 | })
98 | }
99 | const id = event.path.split("/").pop()
100 | const URL = `${BASE_URL}/${id}`
101 | console.log(URL)
102 | fetch(URL, {
103 | headers: {
104 | Authorization: `Bearer ${TOKEN}`,
105 | },
106 | })
107 | .then((r) => r.json())
108 | .then(({ fields }) => {
109 | console.log({ fields })
110 | if (Array.isArray(fields.cert)) {
111 | const pdf = fields.cert[0]
112 | callback(null, {
113 | statusCode: 200,
114 | headers: {
115 | "Content-type": "text/html",
116 | },
117 | body: embedPDF({
118 | name: fields.name,
119 | pdfURL: pdf.url,
120 | image: pdf.thumbnails.large.url,
121 | url: `https://aprendejs.email/certificados/${id}`,
122 | }),
123 | })
124 | } else voidData()
125 | })
126 | .catch((error) => {
127 | console.log({ error })
128 | voidData()
129 | })
130 | },
131 | getMetas,
132 | }
133 |
--------------------------------------------------------------------------------
/functions/suscribed.js:
--------------------------------------------------------------------------------
1 | const fetch = require("node-fetch")
2 | const { OCTUPUS = "" } = process.env
3 | const URL = `https://emailoctopus.com/api/1.5/lists/e0973809-a25a-11ea-a3d0-06b4694bee2a/contacts/subscribed?api_key=${OCTUPUS}`
4 | exports.handler = (event, context, callback) => {
5 | const voidData = () => {
6 | const nothing = {
7 | statusCode: 200,
8 | body: JSON.stringify({
9 | total: 0,
10 | }),
11 | }
12 | callback(null, nothing)
13 | }
14 | fetch(URL)
15 | .then((r) => r.json())
16 | .then(({ data = [] }) =>
17 | callback(null, {
18 | statusCode: 200,
19 | body: JSON.stringify({
20 | total: data.length,
21 | }),
22 | })
23 | )
24 | .catch((error) => {
25 | console.log({ error })
26 | voidData()
27 | })
28 | }
29 |
--------------------------------------------------------------------------------
/layouts/404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "saber",
4 | "build": "saber build"
5 | },
6 | "dependencies": {
7 | "medium-zoom": "^1.0.5",
8 | "node-fetch": "^2.6.0"
9 | },
10 | "devDependencies": {
11 | "autoprefixer": "^9.8.0",
12 | "saber": "^0.11.7",
13 | "tailwindcss": "^1.4.6"
14 | },
15 | "browserslist": [
16 | "defaults"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/pages/certificados/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Certificados
6 |
7 |
8 | Listado der personas que han completado exitosamente el curso de
9 | Javascript, nivel intermedio de #AprendeJS , creado por
10 | Denny Portillo
11 |
12 |
13 |
17 |
18 |
19 |
20 |
26 |
27 |
35 | {{ profile.email }}
36 |
37 |
40 |
41 | {{ profile.name }}
42 |
43 | Ver reconocimiento
51 |
52 |
53 |
54 |
55 |
56 | Cargando...
57 |
58 |
59 |
60 | Actividad: Todos los usuarios listados completarón el curso
61 | realizando una lectura de 20 capítulos con un promedio de 8 minutos por
62 | capítulo, y además de la realización de ejercicios cómo ejemplos reales en
63 | la vida de un desarrollador web.
64 |
65 |
66 |
67 |
68 |
93 |
--------------------------------------------------------------------------------
/pages/certificados/not/found/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Certificado no encontrado.
6 |
7 |
Ver lista de usuarios
8 | que han completado el curso.
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/pages/discord/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Discord
6 |
7 |
8 | Únete al server de discord de
9 | #AprendeJS , consulta dudas sobre Javascript, conoce personas
10 | interesadas en este lenguaje y sus tecnologías.
11 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
56 |
--------------------------------------------------------------------------------
/pages/gracias/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 | Yaay estás dentro : ) , pero... para para iniciar a recibir
12 | emails de Javascript, necesito verificar tu email; para verificarlo
13 | sigue las instrucciones enviadas a tu bandeja de entrada (PD: también
14 | checa el Spam).
15 |
16 |
17 |
18 |
19 |
20 |
34 |
--------------------------------------------------------------------------------
/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 | AprendeJS
11 |
12 |
13 | Aprendé
14 | Javascript
19 | desde tu email con un contenido previamente preparado y curado,
20 | además al completar recibirás un certificado válido por lo
21 | aprendido.
22 |
23 |
24 |
25 |
26 |
27 | Hola, mi nombre es Denny Portillo. Cuando inicié en el mundo de
28 | Javascript, sentí que no sabía lo necesario para poder enseñar a otros a
29 | hacer código con este lenguaje. Pero es tiempo de compartir lo que sé.
30 |
31 |
32 | Este es un pequeño curso de 20 capítulos para aprender javascript, al
33 | terminar este curso ya habrás hecho tu primera aplicación web funcional
34 | con un URL personalizado.
35 |
36 |
37 | Cada email está pensado para dedicar una lectura de aproximadamente
38 | 7 ~ 10 minutos.
39 |
40 |
41 | Ciertos capítulos incluíran ejercicios, guías y “tests” para aumentar el
42 | niver de complejidad. Al completar recibirás un certificado en honor a
43 | todo lo aprendido en la finalización de este. Puedes agregar el
44 | certificado a Linkedin.
45 |
46 |
47 | Estos cursos siempre y siempre serán gratuitos y para todo público,
48 | tú correo electrónico y nombre no se usará en otros servicios . Al
49 | suscribirte, solamente contenido sobre el aprendizaje de Javascript ó
50 | eventos importantes para mejorar las habilidades del mismo se enviarán a
51 | tu correo.
52 |
53 |
54 |
55 |
60 |
61 | Deployed with Netlify
62 |
63 |
64 | Actualmente hay {{ suscribed }} estudiantes suscritos al curso de
65 | AprendeJS 🥰. Si aún no te animas a suscribirte, mira el contenido del
66 | curso
67 | acá , quizá te anime : )
72 |
73 |
74 | Te pido respetes el
75 | código de conducta de AprendeJS
79 | para mantenerte cómo estudiante activo dentro del curso. Además para
80 | hacer networking puedes unirte al
81 | server de discord dónde podemos
82 | charlar un poco sobre Javascript u otro tema de tú interés.
83 |
84 |
137 |
140 | Mailing por
141 |
🐙 EmailOctopus
147 |
148 |
149 |
150 |
151 |
152 |
195 |
--------------------------------------------------------------------------------
/pages/swag/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
13 | AprendeJS, siempre, siempre será gratuito, puedes apoyar a
14 | mantenerlo así comprando stickers y swag. Además colaboras en promoverlo
15 | y así alcanzar mcuhas más personas 🙌.
16 |
17 |
18 |
22 | Cargando...
23 |
24 |
28 |
29 |
30 |
31 |
32 |
86 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [require("tailwindcss"), require("autoprefixer")()],
3 | }
4 |
--------------------------------------------------------------------------------
/saber-browser.js:
--------------------------------------------------------------------------------
1 | import RootComponent from "./components/site.vue"
2 | export default (context) => {
3 | context.setRootComponent(RootComponent)
4 | }
5 |
--------------------------------------------------------------------------------
/saber-config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | siteConfig: {
3 | lang: "es-ES",
4 | },
5 | }
6 |
--------------------------------------------------------------------------------
/shopify.js:
--------------------------------------------------------------------------------
1 | //Context on this options are on client side (window, etc)
2 | const zoom = require("medium-zoom").default
3 | module.exports = {
4 | product: {
5 | styles: {
6 | product: {
7 | "@media (min-width: 601px)": {
8 | "max-width": "calc(33.33333% - 30px)",
9 | "margin-left": "30px",
10 | "margin-bottom": "50px",
11 | width: "calc(33.33333% - 30px)",
12 | },
13 | padding: "0 0 2rem 0",
14 | "border-radius": "4px",
15 | "box-shadow": "0px 0px 5px 0px rgba(0,0,0,0.07)",
16 | },
17 | title: {
18 | "font-family": "Open Sans, sans-serif",
19 | "font-weight": "normal",
20 | color: "#000000",
21 | },
22 | button: {
23 | "font-family": "Open Sans, sans-serif",
24 | "font-size": "18px",
25 | "padding-top": "17px",
26 | "padding-bottom": "17px",
27 | color: "#000000",
28 | ":hover": {
29 | color: "#000000",
30 | "background-color": "#e6dd09",
31 | },
32 | "background-color": "#fff50a",
33 | ":focus": {
34 | "background-color": "#e6dd09",
35 | },
36 | "border-radius": "4px",
37 | "padding-left": "43px",
38 | "padding-right": "43px",
39 | },
40 | quantityInput: {
41 | "font-size": "18px",
42 | "padding-top": "17px",
43 | "padding-bottom": "17px",
44 | },
45 | price: {
46 | "font-family": "Arial, sans-serif",
47 | "font-size": "16px",
48 | color: "#656565",
49 | },
50 | compareAt: {
51 | "font-family": "Arial, sans-serif",
52 | "font-size": "13.6px",
53 | color: "#656565",
54 | },
55 | unitPrice: {
56 | "font-family": "Arial, sans-serif",
57 | "font-size": "13.6px",
58 | color: "#656565",
59 | },
60 | img: {
61 | animation: "load .75s forwards ease-in-out",
62 | "@keyframes load": {
63 | from: {
64 | opacity: 0,
65 | },
66 | to: {
67 | opacity: 1,
68 | },
69 | },
70 | "@media (max-width: 600px)": {
71 | "max-width": "20rem !important",
72 | },
73 | cursor: "pointer",
74 | },
75 | },
76 | buttonDestination: "modal",
77 | contents: {
78 | options: false,
79 | },
80 | text: {
81 | button: "Ver producto",
82 | },
83 | googleFonts: ["Open Sans"],
84 | DOMEvents: {
85 | "click img": (_, target) => {
86 | target.style.zIndex = 20
87 | zoom(target).open()
88 | },
89 | "animationstart img": (_, target) => {
90 | target.style.filter = `blur(10px)`
91 | },
92 | "animationend img": (_, target) => {
93 | target.style.filter = `blur(0px)`
94 | window.loadingDone()
95 | },
96 | },
97 | },
98 | productSet: {
99 | styles: {
100 | products: {
101 | "@media (min-width: 601px)": {
102 | "margin-left": "-30px",
103 | },
104 | },
105 | collection: {
106 | padding: ".75rem 0 2.5rem 0",
107 | },
108 | },
109 | templates: {
110 | pagination: "",
111 | },
112 | },
113 | modalProduct: {
114 | contents: {
115 | img: true,
116 | imgWithCarousel: false,
117 | },
118 | order: ["title", "img", "description", "price", "button"],
119 | styles: {
120 | product: {
121 | "@media (min-width: 601px)": {
122 | "max-width": "100%",
123 | "margin-left": "0px",
124 | "margin-bottom": "0px",
125 | },
126 | padding: "2.5rem",
127 | },
128 | button: {
129 | "font-family": "Open Sans, sans-serif",
130 | "font-size": "20px",
131 | "padding-top": "17px",
132 | "padding-bottom": "17px",
133 | "font-weight": "bold",
134 | color: "#000",
135 | ":hover": {
136 | color: "#000000",
137 | "background-color": "#e6dd09",
138 | },
139 | "background-color": "#fff",
140 | border: "solid 2px #e6dd09",
141 | ":focus": {
142 | "background-color": "#e6dd09",
143 | },
144 | "border-radius": "0px",
145 | "padding-left": "43px",
146 | "padding-right": "43px",
147 |
148 | margin: "0 auto 4rem auto !important",
149 | display: "block",
150 | },
151 | quantityInput: {
152 | "font-size": "18px",
153 | "padding-top": "17px",
154 | "padding-bottom": "17px",
155 | },
156 | title: {
157 | "font-family": "Open Sans, sans-serif",
158 | "font-weight": "normal",
159 | "font-size": "34px",
160 | color: "#000000",
161 | "text-align": "center",
162 | "padding-top": "2rem",
163 | "padding-bottom": "2rem",
164 | },
165 | price: {
166 | "font-family": "Arial, sans-serif",
167 | "font-size": "20px",
168 | "border-bottom": "solid 1px",
169 | "border-top": "solid 1px",
170 | margin: "2rem 0",
171 | padding: "1rem 0",
172 | color: "#000000",
173 | display: "block",
174 | "text-align": "center",
175 | },
176 | compareAt: {
177 | "font-family": "Arial, sans-serif",
178 | "font-size": "20.4px",
179 | },
180 | unitPrice: {
181 | "font-family": "Arial, sans-serif",
182 | "font-size": "20.4px",
183 | },
184 | description: {
185 | "font-family": "Open Sans, sans-serif",
186 | "font-size": "15px",
187 | "text-align": "center",
188 | },
189 | img: {
190 | "border-radius": "8px",
191 | },
192 | },
193 | googleFonts: ["Open Sans"],
194 | text: {
195 | button: "AGREGAR +",
196 | },
197 | },
198 | cart: {
199 | styles: {
200 | button: {
201 | "font-family": "Open Sans, sans-serif",
202 | "font-size": "18px",
203 | "padding-top": "17px",
204 | "font-weight": "bold",
205 | "padding-bottom": "17px",
206 | color: "#ffffff",
207 | "background-color": "#000000",
208 | "border-radius": "4px",
209 | },
210 | },
211 | text: {
212 | title: "Carrito de compras",
213 | total: "Total",
214 | button: "Pagar ahora",
215 | notice: "",
216 | },
217 |
218 | popup: false,
219 | googleFonts: ["Open Sans"],
220 | },
221 | toggle: {
222 | styles: {
223 | toggle: {
224 | "font-family": "Open Sans, sans-serif",
225 | "background-color": "#ffffff",
226 | "box-shadow": "inset 0 0 1px rgba(0,0,0,0.5)",
227 | ":hover": {
228 | "background-color": "#F8F8F8",
229 | },
230 | ":focus": {
231 | "background-color": "#F8F8F8",
232 | },
233 | },
234 | count: {
235 | "font-size": "18px",
236 | color: "#000000",
237 | ":hover": {
238 | color: "#000000",
239 | },
240 | },
241 | iconPath: {
242 | fill: "#000000",
243 | },
244 | },
245 | googleFonts: ["Open Sans"],
246 | },
247 | }
248 |
--------------------------------------------------------------------------------
/static/404.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/404.gif
--------------------------------------------------------------------------------
/static/404.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/static/_redirects:
--------------------------------------------------------------------------------
1 | /certificados/:id /.netlify/functions/find-cert 200!
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/favicon.png
--------------------------------------------------------------------------------
/static/images/banner.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/static/images/button.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/static/images/d7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/d7.png
--------------------------------------------------------------------------------
/static/images/heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/heart.png
--------------------------------------------------------------------------------
/static/images/item-bg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/static/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/logo.png
--------------------------------------------------------------------------------
/static/images/netlify-light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/static/images/no-profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/no-profile.png
--------------------------------------------------------------------------------
/static/images/swag.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/swag.jpg
--------------------------------------------------------------------------------
/static/images/triangles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/triangles.png
--------------------------------------------------------------------------------
/static/images/yaay.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/images/yaay.gif
--------------------------------------------------------------------------------
/static/seo-discord.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/seo-discord.jpg
--------------------------------------------------------------------------------
/static/seo-swag.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/seo-swag.jpg
--------------------------------------------------------------------------------
/static/seo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/D3Portillo/aprendejs/da43954635f6c7a9205d7d17d883c1851c1e8a28/static/seo.jpg
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: ["./pages/**/*.vue", "./components/**/*.vue"],
3 | theme: {
4 | colors: {
5 | white: "white",
6 | whiter: "#F8F8F8",
7 | black: "black",
8 | yellow: "#FFF50A",
9 | darker: "#eeeeee",
10 | transparent: "rgba(0,0,0,0)",
11 | },
12 | fontFamily: {
13 | title: ["Cutive", "Open Sans"],
14 | },
15 | extend: {
16 | zIndex: {
17 | 1: 1,
18 | },
19 | },
20 | },
21 | variants: {
22 | borderStyle: ["hover"],
23 | },
24 | plugins: [],
25 | }
26 |
--------------------------------------------------------------------------------
/todo.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | TODO
4 | ----------
5 | * Audit SEO and Accesibility things on the report:
6 | Link: https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Faprendejs.email#performance
7 | * Inlude an image generator for current progress
8 | * A track for people wanting to colaborate in other JS stuff
9 |
10 | */
11 |
--------------------------------------------------------------------------------