├── .all-contributorsrc
├── .eslintrc
├── .github
├── ISSUE_TEMPLATE
│ ├── bug.md
│ └── feature.md
└── pull_request_template.md
├── .gitignore
├── .prettierignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── commitlint.config.js
├── gatsby-browser.js
├── gatsby-config.js
├── gatsby-node.js
├── package-lock.json
├── package.json
├── src
├── components
│ ├── UI
│ │ ├── button
│ │ │ ├── button.js
│ │ │ └── button.module.css
│ │ ├── card
│ │ │ ├── card.js
│ │ │ └── card.module.css
│ │ ├── carousel
│ │ │ ├── carousel.css
│ │ │ └── carousel.js
│ │ └── personas
│ │ │ ├── persona
│ │ │ ├── persona.js
│ │ │ └── persona.module.css
│ │ │ ├── personas.js
│ │ │ └── personas.module.css
│ ├── author
│ │ ├── author.js
│ │ └── author.module.css
│ ├── blog-section
│ │ ├── blog-section.js
│ │ └── blog-section.module.css
│ ├── cities-section
│ │ ├── cities-section.js
│ │ └── cities-section.module.css
│ ├── community-hero-section
│ │ ├── card-section
│ │ │ ├── card-section.css
│ │ │ └── card-section.js
│ │ ├── community-hero-section.css
│ │ └── community-hero-section.js
│ ├── community-section
│ │ ├── community-description
│ │ │ ├── community-description.css
│ │ │ └── community-description.js
│ │ ├── community-section.css
│ │ ├── community-section.js
│ │ └── photo-slider
│ │ │ ├── photo-slider.css
│ │ │ └── photo-slider.js
│ ├── contributors
│ │ ├── contributors.js
│ │ └── contributors.module.css
│ ├── events-section
│ │ ├── Events.js
│ │ └── events.module.css
│ ├── footer
│ │ ├── footer.js
│ │ └── footer.module.css
│ ├── header
│ │ ├── Logo
│ │ │ ├── logo.js
│ │ │ └── logo.module.css
│ │ ├── header.css
│ │ └── header.js
│ ├── hero-section
│ │ ├── city-markers
│ │ │ ├── city-markers.css
│ │ │ └── city-markers.js
│ │ ├── hero-section.css
│ │ ├── hero-section.js
│ │ └── social-networks
│ │ │ ├── social-networks.css
│ │ │ └── social-networks.js
│ ├── layout
│ │ ├── layout.js
│ │ └── layout.module.css
│ ├── maintainers
│ │ ├── maintainers.js
│ │ └── maintainers.module.css
│ ├── personas-section
│ │ ├── personas-section.js
│ │ └── personas-section.module.css
│ ├── seo.js
│ ├── sponsors-section
│ │ ├── sponsors-section.js
│ │ └── sponsors-section.module.css
│ └── subscribe
│ │ ├── subscribe.css
│ │ └── subscribe.js
├── constants
│ ├── cities.js
│ ├── eventos.js
│ └── slider.js
├── css
│ └── style.css
├── data
│ ├── authors.json
│ ├── contributors.json
│ ├── maintainers.json
│ └── sponsors.json
├── images
│ ├── abduction-illustration.svg
│ ├── background
│ │ ├── grid.svg
│ │ └── path.svg
│ ├── cities
│ │ ├── ambato.jpg
│ │ ├── cuenca.jpg
│ │ ├── guayaquil.jpg
│ │ ├── latacunga.jpg
│ │ ├── loja.jpg
│ │ ├── quito.jpg
│ │ └── riobamba.jpg
│ ├── code-of-conduct.svg
│ ├── dog-illustration.svg
│ ├── events
│ │ ├── event-1.jpg
│ │ ├── event-2.jpg
│ │ └── event-3.jpg
│ ├── icons
│ │ ├── chevron-left.svg
│ │ ├── chevron-right.svg
│ │ ├── email.svg
│ │ ├── eventbrite.png
│ │ ├── github-small.svg
│ │ ├── github.svg
│ │ ├── telegram.svg
│ │ ├── twitter-small.svg
│ │ ├── twitter.svg
│ │ └── world.svg
│ ├── javascriptecuador.png
│ ├── js-ec-pattern.svg
│ ├── logo-escudo-ec.svg
│ ├── slider
│ │ ├── 1era meetup cuenca.jpg
│ │ └── segunda meetup.jpg
│ └── widgets
│ │ ├── brackets.svg
│ │ ├── brackets2.svg
│ │ ├── circle.svg
│ │ ├── js-ecuador-map.svg
│ │ ├── lines.svg
│ │ ├── square.svg
│ │ ├── times-purple.svg
│ │ ├── times-yellow.svg
│ │ └── triangle.svg
├── pages
│ ├── 404.js
│ ├── about.js
│ ├── blog.js
│ ├── blog
│ │ └── gatsby-deploy.mdx
│ ├── ciudades.js
│ ├── code-of-conduct.js
│ ├── comunidad.js
│ ├── contact.js
│ ├── cuentas.js
│ ├── eventos.js
│ ├── index.js
│ └── sponsors.js
└── templates
│ ├── blog-entry.js
│ └── blog-entry.module.css
└── tailwind.config.js
/.all-contributorsrc:
--------------------------------------------------------------------------------
1 | {
2 | "projectName": "web",
3 | "projectOwner": "javascriptecuador",
4 | "repoType": "github",
5 | "repoHost": "https://github.com",
6 | "files": [
7 | "README.md"
8 | ],
9 | "imageSize": 100,
10 | "commit": true,
11 | "commitConvention": "none",
12 | "contributors": [
13 | {
14 | "login": "rpalaciosg",
15 | "name": "Richard Palacios G",
16 | "avatar_url": "https://avatars0.githubusercontent.com/u/11642622?v=4",
17 | "profile": "https://richardpalaciosg.dev/",
18 | "contributions": [
19 | "code",
20 | "doc",
21 | "design"
22 | ]
23 | },
24 | {
25 | "login": "edzzn",
26 | "name": "Edisson Reinozo",
27 | "avatar_url": "https://avatars3.githubusercontent.com/u/14936466?v=4",
28 | "profile": "http://edzzn.com/",
29 | "contributions": [
30 | "code"
31 | ]
32 | },
33 | {
34 | "login": "israteneda",
35 | "name": "Israel Teneda",
36 | "avatar_url": "https://avatars2.githubusercontent.com/u/20668624?v=4",
37 | "profile": "https://github.com/israteneda",
38 | "contributions": [
39 | "code",
40 | "doc",
41 | "design"
42 | ]
43 | },
44 | {
45 | "login": "jordanrjcode",
46 | "name": "Jordan Jaramillo",
47 | "avatar_url": "https://avatars2.githubusercontent.com/u/62086742?v=4",
48 | "profile": "https://github.com/jordanrjcode",
49 | "contributions": [
50 | "doc"
51 | ]
52 | },
53 | {
54 | "login": "EduardoAyora",
55 | "name": "Eduardo Ayora Ochoa",
56 | "avatar_url": "https://avatars1.githubusercontent.com/u/49033198?v=4",
57 | "profile": "https://github.com/EduardoAyora",
58 | "contributions": [
59 | "code"
60 | ]
61 | },
62 | {
63 | "login": "cesardlinx",
64 | "name": "David Padilla",
65 | "avatar_url": "https://avatars3.githubusercontent.com/u/25573926?v=4",
66 | "profile": "https://www.davidpadilla.dev/",
67 | "contributions": [
68 | "code",
69 | "doc",
70 | "ideas"
71 | ]
72 | },
73 | {
74 | "login": "FreddieAbad",
75 | "name": "Freddy Abad",
76 | "avatar_url": "https://avatars0.githubusercontent.com/u/38579765?v=4",
77 | "profile": "https://github.com/FreddieAbad",
78 | "contributions": [
79 | "design"
80 | ]
81 | },
82 | {
83 | "login": "miguel-rios-r",
84 | "name": "Miguel Rios R",
85 | "avatar_url": "https://avatars3.githubusercontent.com/u/25510181?v=4",
86 | "profile": "https://miguelriosr.com/",
87 | "contributions": [
88 | "doc"
89 | ]
90 | },
91 | {
92 | "login": "skcode7",
93 | "name": "Carlos G. Encalada B.",
94 | "avatar_url": "https://avatars2.githubusercontent.com/u/55223838?v=4",
95 | "profile": "http://karlosencalada.dev",
96 | "contributions": [
97 | "doc",
98 | "code"
99 | ]
100 | },
101 | {
102 | "login": "albamaister",
103 | "name": "Bryan Alba",
104 | "avatar_url": "https://avatars0.githubusercontent.com/u/20263594?v=4",
105 | "profile": "https://github.com/albamaister",
106 | "contributions": [
107 | "doc",
108 | "code"
109 | ]
110 | },
111 | {
112 | "login": "Leninner",
113 | "name": "Lenin Mazabanda",
114 | "avatar_url": "https://avatars.githubusercontent.com/u/67031243?v=4",
115 | "profile": "https://www.linkedin.com/in/leninner/",
116 | "contributions": [
117 | "code"
118 | ]
119 | },
120 | {
121 | "login": "thegreatyamori",
122 | "name": "Jerson Morocho",
123 | "avatar_url": "https://avatars.githubusercontent.com/u/20387293?v=4",
124 | "profile": "https://jersonalexander.now.sh/",
125 | "contributions": [
126 | "code",
127 | "design",
128 | "ideas",
129 | "maintenance"
130 | ]
131 | }
132 | ],
133 | "contributorsPerLine": 7,
134 | "skipCi": true
135 | }
136 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | // https://eslint.org/docs/user-guide/configuring#specifying-environments
3 | "env": {
4 | "browser": true,
5 | "node": true
6 | },
7 | // https://github.com/babel/babel-eslint
8 | "parser": "babel-eslint",
9 | "rules": {
10 | // https://eslint.org/docs/2.0.0/rules/strict
11 | "strict": 0
12 | },
13 | "settings": {
14 | "react": {
15 | "version": "detect"
16 | }
17 | }
18 | // },
19 | // "extends": [
20 | // // https://eslint.org/docs/rules/
21 | // "eslint:recommended",
22 | // // https://github.com/yannickcr/eslint-plugin-react#recommended
23 | // "plugin:react/recommended",
24 | // // https://github.com/benmosher/eslint-plugin-import
25 | // "plugin:import/recommended"
26 | // ]
27 | }
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Notificar Bug/Error
3 | about: Templete para reportar errores y que nos ayudará a mejorar
4 | title: "[BUG]"
5 | labels: bug, documentation
6 | assignees: ""
7 | ---
8 |
9 | **Describe el bug/error**
10 | Una descripción clara y concisa de lo que trata el bug/error.
11 |
12 | **Para reproducirlo**
13 | Pasos para reproducir el comportamiento:
14 |
15 | 1. Ir a '...'
16 | 2. Click en '....'
17 | 3. Scroll down a '....'
18 | 4. Ver el error
19 |
20 | **Comportamiento esperado**
21 | Una descripción clara y concisa de lo que se espera que ocurra.
22 |
23 | **Capturas de Pantalla**
24 | Si aplica, agregar capturas de pantalla que ayuden a explicar el problema.
25 |
26 | **Desktop (por favor completa la siguiente información):**
27 |
28 | - OS: [ejem. iOS]
29 | - Navegador [ejem. chrome, safari]
30 | - Versión [ejem. 22]
31 |
32 | **Smartphone (por favor completa la siguiente información):**
33 |
34 | - Dispositivo: [ejem. iPhone6]
35 | - OS: [ejem. iOS8.1]
36 | - Navegador [ejem. safari]
37 | - Versión [ejem. 22]
38 |
39 | **Información adicional**
40 | Agrega cualquier información adicional sobre el problema.
41 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Solicitar Feature
3 | about: Templete para solicitar mejoras o nuevas funcionalidades en el sitio
4 | title: "[NUEVO]"
5 | labels: feature, enhancement
6 | assignees: ""
7 | ---
8 |
9 | **Tarea a realizar**
10 | Descripción de la mejora o funcionalidad solicitada
11 |
12 | **¿Por qué se realizará?**
13 | Razón o motivación para solicitar la mejora
14 |
15 | **Recomendaciones**
16 | Cualquier sugerencia o comentario que facilite el desarrollo.
17 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | **Descripción del cambio**:
2 |
3 |
4 |
5 | **Razón del cambio**:
6 |
7 |
8 |
9 | **Captura**:
10 |
11 |
12 |
13 | **Otros cambios**:
14 |
15 |
16 |
17 | **Link al origen de este PR**:
18 |
19 |
20 |
21 | Closes #
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Based on gatsby-starter-default's .gitignore
2 | # https://github.com/gatsbyjs/gatsby-starter-default/blob/master/.gitignore
3 |
4 | # Logs
5 | logs
6 | *.log
7 | npm-debug.log*
8 | yarn-debug.log*
9 | yarn-error.log*
10 |
11 | # Runtime data
12 | pids
13 | *.pid
14 | *.seed
15 | *.pid.lock
16 |
17 | # Directory for instrumented libs generated by jscoverage/JSCover
18 | lib-cov
19 |
20 | # Coverage directory used by tools like istanbul
21 | coverage
22 |
23 | # nyc test coverage
24 | .nyc_output
25 |
26 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
27 | .grunt
28 |
29 | # Bower dependency directory (https://bower.io/)
30 | bower_components
31 |
32 | # node-waf configuration
33 | .lock-wscript
34 |
35 | # Compiled binary addons (http://nodejs.org/api/addons.html)
36 | build/Release
37 |
38 | # Dependency directories
39 | node_modules/
40 | jspm_packages/
41 |
42 | # Typescript v1 declaration files
43 | typings/
44 |
45 | # Optional npm cache directory
46 | .npm
47 |
48 | # Optional eslint cache
49 | .eslintcache
50 |
51 | # Optional REPL history
52 | .node_repl_history
53 |
54 | # Output of 'npm pack'
55 | *.tgz
56 |
57 | # dotenv environment variable files
58 | .env*
59 |
60 | # gatsby files
61 | .cache/
62 | public
63 |
64 | # Mac files
65 | .DS_Store
66 |
67 | # Yarn
68 | yarn-error.log
69 | .pnp/
70 | .pnp.js
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # VSCode
76 | .vscode/
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .cache
2 | package.json
3 | package-lock.json
4 | public
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Tabla de contenido
2 |
3 | ## [1. ¿Cómo contribuir?](#¿Cómo-contribuir?)
4 |
5 | ## [2. Guías para colaborar](#Guías-para-colaborar)
6 |
7 | - [Trabajar en un Issue](#Trabajar-en-un-Issue)
8 | - [Ramas](#Ramas)
9 | - [Workflow](#Workflow)
10 | - [GitHub](#globe_with_meridians-github)
11 | - [Pre-requisitos](#page_facing_up-Pre-requisitos)
12 | - [Configuración local](#construction_worker-Configuración-local)
13 | - [Levantar ambiente de desarrollo](#hammer-Levantar-ambiente-de-desarrollo)
14 | - [Enviar cambios (commits)](#arrow_up-enviar-cambios-commits)
15 | - [Pull Request](#rocket-Pull-Request)
16 | - [Segundo Pull Request](#muscle-Segundo-Pull-Request)
17 | - [Guía Conventional Commits](#Guía-Conventional-Commits)
18 | - [Explicación de los campos ](#Explicación-de-los-campos)
19 |
20 | # ¿Cómo contribuir?
21 |
22 | Hola👋 a todos.
23 | Las contribuciones a este repositorio son bienvenidas. Si deseas mejorar esta hoja de referencia o traducirla a otros idiomas, ¡considera abrir un nuevo [issue][1]! y lo trataremos juntos.
24 |
25 | Si quieres contribuir debes leer y aceptar nuestro [Código de Conducta][2]
26 |
27 | # Guías para colaborar
28 |
29 | A continuación se detallan los pasos a seguir para configurar el repositorio y levantar el ambiente de desarrollo.
30 |
31 | ## Trabajar en un Issue
32 |
33 | > IMPORTANTE: antes de trabajar en un PR, elija un [issue][4] y discuta los cambios previstos con los mantenedores. Pueden proporcionar información invaluable y orientarlo en la dirección correcta para aprovechar al máximo su contribución.
34 |
35 | ## Ramas
36 |
37 | `master` es la rama principal sobre la que nos desarrollamos y usaremos para desplegar el sitio. Todas las ramas de `issues` deben estar ramificadas directamente desde la rama `master` es importante [crear una nueva rama](#configuración-local) sobre la que se trabajara antes de empezar a realizar cualquier cambio.
38 |
39 | ## Workflow
40 |
41 | ### :globe_with_meridians: GitHub
42 |
43 | - Si te gusta la comunidad antes nos regalas una ⭐ al repositorio, te lo agradecemos.
44 | - Accede al repositorio del proyecto **[web][12]** y realiza un [fork][3]
45 | > Un Fork es hacer una copia del repositorio y a partir de esta copia hacer cambios. El Fork esta en la parte superior derecha de la pagina.
46 | - Copiar la URL del repositorio copiado (**forked**)
47 | - Elegir un [issue][4] en el cual trabajar. Si nadie esta trabajando en el, comenta que tomas el issue para que te sea asignado.
48 |
49 | ### :page_facing_up: Pre-requisitos
50 |
51 | - Instalar [Node.js][5]
52 | - Un editor de código [VS Code][6], [Vim][7], [Atom][8]
53 |
54 | ### :construction_worker: Configuración local
55 |
56 | - Abrir una terminal, navegar al directorio en el que se creará el proyecto y clonar el repositorio fork.
57 | ` git clone https://github.com/[usuario-github]/web.git `
58 | > Para igualar los cambios del repositorio original [Ver aquí](###-:muscle:-Segundo-Pull-Request)
59 | - Crea una nueva rama cuyo nombre describa el issue en el que se va a trabajar, por ejemplo `arregla-issue-1`.
60 | ```
61 | git checkout -b tarea-issue-1
62 | ```
63 |
64 | #### :hammer: Levantar ambiente de desarrollo
65 |
66 | - Instalar [**GatsbyJS**][9]
67 | ```
68 | npm install -g gatsby-cli
69 | ```
70 | - Instalar dependencias
71 |
72 | ```
73 | npm install
74 | ```
75 |
76 | - Ejecutar el proyecto de forma local
77 | ```
78 | gatsby develop
79 | ```
80 | - Hacer los cambios necesarios. Se puede visualizarlos con `status`
81 | ```
82 | git status
83 | ```
84 |
85 | ### :arrow_up: Enviar cambios (commits)
86 |
87 | Para este proyecto usaremos [Commit Lint][10] que usa [Conventional Commits][11], esto nos proporcionará un estándar al momento de escribir un commit e identificar el propósito del mismo.
88 |
89 | - Realizar un commit usando las siguientes líneas
90 |
91 | ```
92 | git add archivos-creados-o-editados
93 | git commit -m "docs(README): Agregada sección de colaboradores"
94 | ```
95 |
96 | > Al final del documento se encuentra una guía detallada de **Conventional Commits**
97 |
98 | - Una vez hecho el commit, subir la rama (branch) creada al fork.
99 | ```
100 | git push -u origin tarea-issue-1
101 | ```
102 |
103 | ### :rocket: Pull Request
104 |
105 | - Dirigirse al repositorio principal en [GitHub][12]
106 | - Se presenta un mensaje sugiriendo crear un [`pull request`][13].
107 | - Verificar que la rama base a la izquierda sea `master o main` y la rama a comparar a la derecha sea la creada (`tarea-issue-1` en este ejemplo).
108 | - Reemplazar el texto del template indicando los cambios realizados y el `issue` que resuelve, en este caso de ejemplo `close #1`.
109 |
110 | ### :muscle: Segundo Pull Request
111 |
112 | > NOTA: Asegúrate de repetir este proceso antes de tomar una nuevo issue.
113 |
114 | - Antes de tomar un nuevo issue o hacer un Pull Request debe seguir estos pasos para igualar tu Fork con los ultimos cambios del repositorio.
115 |
116 | - Debes cambiarte a la rama master
117 |
118 | ```
119 | git checkout master
120 | ```
121 |
122 | - Para comprobar que estas en la rama master ejecutar
123 |
124 | ```
125 | git branch
126 | ```
127 |
128 | > Asegurarse de no tener cambios pendientes, esto lo puedes ver haciendo `git status`, en caso de tenerlos hacer commit de los cambios [Guia commit](<###-:arrow_up:-Enviar-cambios-(commits)>)
129 |
130 | - Debemos conectar el repositorio local con el repositorio remoto principal
131 |
132 | ```
133 | git remote add upstream https://github.com/javascriptecuador/web.git
134 | ```
135 |
136 | - Para comprobar que se conectó al repositorio principal
137 |
138 | ```
139 | git remote -v
140 | ```
141 |
142 | - Traemos los ultimos cambios remotos a nuetro repositorio local
143 |
144 | ```
145 | git pull upstream master
146 | ```
147 |
148 | - Subir los cambios al Fork
149 |
150 | ```
151 | git push origin master
152 | ```
153 |
154 | > Recuerda cambiarte a la rama issue que creaste
155 |
156 | ```
157 | git checkout nombre-branch
158 | ```
159 |
160 | - Ahora puedes seguir los pasos para [enviar tus cambios](<###-:arrow_up:-Enviar-cambios-(commits)>)
161 |
162 | ---
163 |
164 | ## Guía Conventional Commits
165 |
166 | A continuación tenemos una estructura completa de un **Conventional Commit**:
167 |
168 | ```
169 | [tipo]([ámbito opcional]): [descripción]
170 |
171 | [cuerpo opcional]
172 |
173 | [nota de pie opcional]
174 | ```
175 |
176 | Aquí tenemos una estructura con solo los campos obligatorios:
177 |
178 | ```
179 | [tipo]: [descripción]
180 | ```
181 |
182 | Ejemplos:
183 |
184 | ```
185 | feat(home): añadir pie alternativo al home
186 |
187 | Implementar una versión alternativa del pie de página
188 | Agregar iconos alternativos en la versión móvil del pie de página
189 |
190 | Soluciona la incidencia #3
191 | ```
192 |
193 | ```
194 | feat: cambiar títulos y estilos en la página de inicio
195 | ```
196 |
197 | ### Explicación de los campos
198 |
199 | **Tipo (obligatorio)**
200 | Los principales tipos de commits son
201 |
202 | - **fix:** corrige un error
203 | - **feat** introduce nuevas funcionalidades
204 | - **docs** completa la documentación del proyecto
205 |
206 | Se permiten otros tipos de commit pero se recomienda los que usan **Angular Convention**
207 |
208 | **Ámbito (opcional)**
209 | Se puede agregar un ámbito al tipo de commit para proveer información contextual adicional. Es opcional y se escribe entre paréntesis. Ejemplo:
210 |
211 | ```
212 | feat(parser): añadir capacidad de parsear arrays
213 | ```
214 |
215 | **Descripción (obligatoria)**
216 | Es obligatoria una descripción corta de los cambios realizados en el código.
217 |
218 | **Cuerpo (opcional)**
219 | Puede agregarse después de la descripción, dando información adicional acerca de los cambios en el código. Debe iniciar con una línea en blanco después de la descripción.
220 |
221 | **Nota de pie (opcional)**
222 | Puede agregarse tras una línea en blanco después del cuerpo o después de la descripción en caso de que no haya un cuerpo. Debe contener referencias adicionales a los números de problemas registrados sobre el cambio del código (ejemplo corrige incidencia #154).
223 |
224 | [1]: https://github.com/javascriptecuador/web/issues/new "Nuevo issue"
225 | [2]: https://github.com/javascriptecuador/.github/blob/master/CODE_OF_CONDUCT.md "Código de Conducta JavaScript Ecuador"
226 | [3]: https://help.github.com/articles/fork-a-repo/ "Fork a repo"
227 | [4]: https://github.com/javascriptecuador/web/issues "Listado de issues"
228 | [5]: https://nodejs.org/en/ "Página oficial"
229 | [6]: https://code.visualstudio.com/ "Página oficial"
230 | [7]: https://www.vim.org/ "Página oficial"
231 | [8]: https://atom.io/ "Página oficial"
232 | [9]: https://www.gatsbyjs.com/tutorial/part-zero/ "Documentación oficial"
233 | [10]: https://commitlint.js.org/#/ "Página oficial"
234 | [11]: https://www.conventionalcommits.org/en/v1.0.0/ "Página oficial"
235 | [12]: https://github.com/javascriptecuador/web "Repositorio web - JavaScript Ecuador"
236 | [13]: https://help.github.com/articles/creating-a-pull-request/ "Creating a pull request"
237 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2020 Taylor Bryant
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 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
JavaScript Ecuador
2 |
3 |
4 | [](https://app.netlify.com/sites/javascriptecuador/deploys) [](https://www.gatsbyjs.com/) [](https://es.reactjs.org/) [](https://github.com/javascriptecuador/web/blob/master/CONTRIBUTING.md) [](https://www.figma.com/file/w2VP8mKwNivTOGqsdvGMVe/Prototipo-Web-Ecuador.js?node-id=0%3A1) [](https://t.me/javascriptecuador)
5 |
6 |
7 | Bienvenido a la comunidad oficial de JavaScript en Ecuador, en donde podrás contribuir, aprender, enseñar y compartir con personas realmente apasionadas por JavaScript y las tecnologías a su alrededor.
8 |
9 | En JavaScript Ecuador creemos en que todos tenemos algo que aportar, por lo que abrimos espacios a todos quienes tengan ideas, iniciativas y/o quieran contribuir a los proyectos desarrollados y mantenidos por la comunidad.
10 |
11 | No importa el grado de experiencia que tengas o las tecnologías con las que trabajes. Pasa a saludar en el canal de la comunidad en [Telegram](https://t.me/javascriptecuador) estaremos encantados de que formes parte :smile:.
12 |
13 | ## ¿Cómo contribuir?
14 |
15 | Este es nuestro primer repositorio público al que puedes contribuir, conoce más sobre cómo hacerlo en nuestra **[GUÍA DE CONTRIBUCIÓN](https://github.com/javascriptecuador/web/blob/master/CONTRIBUTING.md)**.
16 |
17 | En este proyecto se construye el sitio web oficial de la comunidad, así como el blog en el que muy pronto también podrás hacer tus entradas y en el que informaremos de todo lo que esté pasando alrededor de JavaScript y la comuniad, como tutoriales, debates, etc. **[Puedes revisar el prototipo del sitio en Figma](https://www.figma.com/file/w2VP8mKwNivTOGqsdvGMVe/Prototipo-Web-Ecuador.js?node-id=0%3A1)**
18 |
19 | ## Tecnología
20 |
21 | El sitio esta desarrollado con el generador de sitios estáticos [Gatsby](https://www.gatsbyjs.com/) junto con [Tailwindcss](https://tailwindcss.com/), si has trabajado con React seguro se te hará muy similar hacerlo con este framework, o aqui lo puedes aprender.
22 |
23 | ## Contribuidores ✨
24 |
25 | Este repositorio es posible gracias a estos excelentes desarrolladores ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
26 |
27 |
28 |
29 |
30 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | Este proyecto sigue la espicificación [all-contributors](https://github.com/all-contributors/all-contributors). Contribuciones de cualquier tipo son bienvenidas!
55 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ["@commitlint/config-conventional"],
3 | };
4 |
--------------------------------------------------------------------------------
/gatsby-browser.js:
--------------------------------------------------------------------------------
1 | import "./src/css/style.css";
2 | import "typeface-roboto";
3 | import "typeface-open-sans";
4 |
--------------------------------------------------------------------------------
/gatsby-config.js:
--------------------------------------------------------------------------------
1 | const resolveConfig = require("tailwindcss/resolveConfig");
2 | const tailwindConfig = require("./tailwind.config.js");
3 |
4 | const fullConfig = resolveConfig(tailwindConfig);
5 |
6 | module.exports = {
7 | siteMetadata: {
8 | title: `JavaScript Ecuador`,
9 | description: `Web de la Comunidad JavaScript Ecuador`,
10 | author: ``,
11 | generator: `Gatsby`,
12 | keywords: `gatsby, react, graphql, javascript, ecuador`,
13 | },
14 | plugins: [
15 | `gatsby-plugin-eslint`,
16 | `gatsby-plugin-react-helmet`,
17 | {
18 | resolve: `gatsby-plugin-manifest`,
19 | options: {
20 | name: `gatsby-starter-tailwind`,
21 | short_name: `starter`,
22 | start_url: `/`,
23 | background_color: fullConfig.theme.colors.white,
24 | theme_color: fullConfig.theme.colors.teal["400"],
25 | display: `minimal-ui`,
26 | icon: `src/images/javascriptecuador.png`,
27 | },
28 | },
29 | `gatsby-plugin-styled-components`,
30 | `gatsby-transformer-json`,
31 | {
32 | resolve: `gatsby-source-filesystem`,
33 | options: {
34 | name: `data`,
35 | path: `${__dirname}/src/data/`,
36 | },
37 | },
38 | {
39 | resolve: `gatsby-source-filesystem`,
40 | options: {
41 | name: `blog-entries`,
42 | path: `${__dirname}/src/pages/blog`,
43 | },
44 | },
45 | {
46 | resolve: `gatsby-plugin-mdx`,
47 | options: {
48 | extensions: [`.mdx`, `.md`],
49 | defaultLayouts: {
50 | default: require.resolve("./src/templates/blog-entry.js"),
51 | },
52 | },
53 | },
54 | {
55 | resolve: `gatsby-plugin-postcss`,
56 | options: {
57 | postCssPlugins: [
58 | require(`tailwindcss`)(tailwindConfig),
59 | require(`autoprefixer`),
60 | ...(process.env.NODE_ENV === `production`
61 | ? [require(`cssnano`)]
62 | : []),
63 | ],
64 | },
65 | },
66 | `gatsby-plugin-offline`,
67 | ],
68 | };
69 |
--------------------------------------------------------------------------------
/gatsby-node.js:
--------------------------------------------------------------------------------
1 | exports.onCreateNode = ({ node }) => {};
2 |
3 | exports.createSchemaCustomization = ({ actions }) => {
4 | const { createTypes } = actions;
5 | const typeDefs = `
6 | type Mdx implements Node {
7 | frontmatter: Frontmatter
8 | }
9 |
10 | type Frontmatter {
11 | author: AuthorsJson @link(by: "github")
12 | }
13 | `;
14 | createTypes(typeDefs);
15 | };
16 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "javascript-ecuador",
3 | "description": "Sitio de la comunidad Javascript Ecuador",
4 | "version": "1.0.0",
5 | "author": "Javascript Ecuador ",
6 | "dependencies": {
7 | "@mdx-js/mdx": "^1.6.18",
8 | "@mdx-js/react": "^1.6.18",
9 | "babel-plugin-styled-components": "^1.11.1",
10 | "babel-polyfill": "^6.26.0",
11 | "babel-preset-env": "^1.7.0",
12 | "babel-preset-gatsby": "^0.5.14",
13 | "gatsby": "^2.24.85",
14 | "gatsby-legacy-polyfills": "0.0.5",
15 | "gatsby-plugin-manifest": "2.4.31",
16 | "gatsby-plugin-mdx": "^1.2.42",
17 | "gatsby-plugin-offline": "3.2.27",
18 | "gatsby-plugin-postcss": "2.3.11",
19 | "gatsby-plugin-react-helmet": "3.3.11",
20 | "gatsby-plugin-sharp": "2.6.36",
21 | "gatsby-plugin-styled-components": "^3.3.14",
22 | "gatsby-source-filesystem": "^2.3.31",
23 | "gatsby-transformer-json": "^2.4.14",
24 | "prop-types": "15.7.2",
25 | "react": "16.13.1",
26 | "react-dom": "16.13.1",
27 | "react-helmet": "6.1.0",
28 | "react-slick": "^0.27.11",
29 | "styled-components": "^5.2.0",
30 | "typeface-open-sans": "^1.1.13",
31 | "typeface-roboto": "^1.1.13"
32 | },
33 | "keywords": [
34 | "ecuador",
35 | "gatsby",
36 | "javascript",
37 | "tailwind",
38 | "tailwindcss",
39 | "purgecss",
40 | "ecuador.js"
41 | ],
42 | "license": "MIT",
43 | "scripts": {
44 | "contributors": "all-contributors",
45 | "analyze:lint": "eslint --ext .jsx --ext .js .",
46 | "analyze:prettier": "prettier --list-different \"**/*.{css,js,jsx,json,md}\"",
47 | "analyze": "npm run analyze:lint && npm run analyze:prettier",
48 | "fix:lint": "eslint --ext .jsx --ext .js . --fix",
49 | "fix:prettier": "prettier --write \"**/*.{css,js,jsx,json,md}\"",
50 | "fix": "npm run fix:lint && npm run fix:prettier",
51 | "build": "gatsby build",
52 | "develop": "gatsby develop",
53 | "dev": "npm run develop",
54 | "start": "npm run develop",
55 | "serve": "gatsby serve",
56 | "clean": "gatsby clean",
57 | "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1"
58 | },
59 | "devDependencies": {
60 | "@commitlint/cli": "^11.0.0",
61 | "@commitlint/config-conventional": "^11.0.0",
62 | "@tailwindcss/custom-forms": "0.2.1",
63 | "all-contributors-cli": "^6.19.0",
64 | "autoprefixer": "9.8.6",
65 | "babel-eslint": "10.1.0",
66 | "cssnano": "4.1.10",
67 | "eslint": "7.9.0",
68 | "eslint-loader": "4.0.2",
69 | "eslint-plugin-import": "^2.25.3",
70 | "eslint-plugin-react": "7.21.2",
71 | "gatsby-plugin-eslint": "2.0.8",
72 | "husky": "^4.3.0",
73 | "prettier": "2.1.2",
74 | "tailwindcss": "1.8.10"
75 | },
76 | "repository": {
77 | "type": "git",
78 | "url": "https://github.com/javascriptecuador/web"
79 | },
80 | "bugs": {
81 | "url": "https://github.com/javascriptecuador/web/issues"
82 | },
83 | "husky": {
84 | "hooks": {
85 | "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/src/components/UI/button/button.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PropTypes from "prop-types";
3 | import styles from "./button.module.css";
4 |
5 | const Button = ({ type, children }) => {
6 | let typeStyles = "";
7 | if (type === "primary") {
8 | typeStyles = styles.buttonPrimary;
9 | } else if (type === "secondary") {
10 | typeStyles = styles.buttonSecondary;
11 | } else if (type === "tertiary") {
12 | typeStyles = styles.buttonTertiary;
13 | }
14 |
15 | return (
16 | {children}
17 | );
18 | };
19 |
20 | Button.propTypes = {
21 | type: PropTypes.oneOf(["primary", "secondary", "tertiary"]).isRequired,
22 | };
23 |
24 | export default Button;
25 |
--------------------------------------------------------------------------------
/src/components/UI/button/button.module.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Styles For the Button Component
3 | */
4 | .button {
5 | display: inline-block;
6 | font-family: "Open Sans", sans-serif;
7 | font-weight: 700;
8 | text-align: center;
9 | border: 1px solid transparent;
10 | padding: 0.375rem 0.75rem;
11 | font-size: 12px;
12 | line-height: 1.5;
13 | border-radius: 5px;
14 | transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,
15 | border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
16 | }
17 |
18 | .button--primary {
19 | color: #737373;
20 | background-color: #f7e018;
21 | border-color: #f7e018;
22 | }
23 |
24 | .button--primary:hover {
25 | color: #f7e018;
26 | background-color: transparent;
27 | }
28 |
29 | .button--secondary {
30 | color: #f7e018;
31 | background-color: transparent;
32 | border-color: #f7e018;
33 | }
34 |
35 | .button--secondary:hover {
36 | color: #737373;
37 | background-color: #f7e018;
38 | border-color: #f7e018;
39 | }
40 |
41 | .button--tertiary {
42 | color: #fff;
43 | background-color: #27ae60;
44 | border-radius: 10px;
45 | }
46 |
47 | .button--tertiary:hover {
48 | background-color: #2dca6f;
49 | }
50 |
--------------------------------------------------------------------------------
/src/components/UI/card/card.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PropTypes from "prop-types";
3 | import styles from "./card.module.css";
4 | import { Link } from "gatsby";
5 |
6 | const Card = ({
7 | imgURL,
8 | topic,
9 | dateTime,
10 | descriptionTitle,
11 | description,
12 | link,
13 | readMoreColor,
14 | topicFontSize,
15 | viewportHeight,
16 | textSpacing,
17 | lineHeight,
18 | }) => (
19 |
20 |
21 |
25 |
26 |
27 |
28 |
29 |
37 | {topic}
38 |
39 |
40 | {dateTime}
41 |
42 |
46 |
47 |
48 | {descriptionTitle}:
49 |
50 | {description}{" "}
51 |
56 | Leer más
57 |
58 |
59 |
60 |
61 |
62 | );
63 |
64 | Card.propTypes = {
65 | imgURL: PropTypes.string,
66 | topic: PropTypes.string,
67 | dateTime: PropTypes.string,
68 | descriptionTitle: PropTypes.string,
69 | description: PropTypes.string,
70 | link: PropTypes.string,
71 | readMoreColor: PropTypes.string,
72 | viewportHeight: PropTypes.string,
73 | textSpacing: PropTypes.string,
74 | lineHeight: PropTypes.string,
75 | };
76 |
77 | Card.defaultProps = {
78 | date: null,
79 | descriptionTitle: "Descripción",
80 | readMoreColor: "#27ae60",
81 | topicFontSize: "2rem",
82 | viewportHeight: "136.13px",
83 | textSpacing: "0.5em",
84 | lineHeight: "auto",
85 | };
86 |
87 | export default Card;
88 |
--------------------------------------------------------------------------------
/src/components/UI/card/card.module.css:
--------------------------------------------------------------------------------
1 | .card {
2 | min-width: 290px;
3 | max-width: 300px;
4 | height: 425px;
5 | border-radius: 10px;
6 | background: #e0e0e0;
7 | overflow: hidden;
8 | margin-right: 2em;
9 | user-select: none;
10 | }
11 |
12 | .card__header {
13 | width: 100%;
14 | padding: 24px 24px 15px;
15 | }
16 |
17 | .card__img--viewport {
18 | width: 100%;
19 | height: 136.13px;
20 | overflow: hidden;
21 | border-radius: 15px;
22 | }
23 |
24 | .card__img {
25 | width: 100%;
26 | display: block;
27 | }
28 |
29 | .card__body {
30 | padding: 0 24px 24px 24px;
31 | }
32 |
33 | .card__topic {
34 | font-weight: bold;
35 | font-family: "Roboto", sans-serif;
36 | }
37 |
38 | .card__date {
39 | color: #666363;
40 | font-weight: bold;
41 | }
42 |
43 | .card__description--title {
44 | margin-right: 0.5em;
45 | }
46 |
47 | .card__description {
48 | overflow: hidden;
49 | max-height: 140px;
50 | }
51 |
52 | .card__description--text {
53 | overflow: hidden;
54 | text-overflow: ellipsis;
55 | line-height: 1.1;
56 | font-family: "Roboto", sans-serif;
57 | }
58 |
59 | .card__readmore {
60 | margin-left: 0.3em;
61 | }
62 |
63 | .card__description--text a {
64 | font-weight: bold;
65 | }
66 |
--------------------------------------------------------------------------------
/src/components/UI/carousel/carousel.css:
--------------------------------------------------------------------------------
1 | .carousel {
2 | width: 100%;
3 | overflow: hidden;
4 | position: relative;
5 | background: transparent;
6 | }
7 |
8 | .carousel button {
9 | position: absolute;
10 | height: 100%;
11 | text-align: center;
12 | padding: 0 2em;
13 | z-index: 10;
14 | }
15 |
16 | .carousel .left-arrow {
17 | top: 0;
18 | background-image: linear-gradient(
19 | to left,
20 | rgba(0, 0, 0, 0),
21 | rgba(0, 0, 0, 0.5)
22 | );
23 | }
24 |
25 | .carousel .left-arrow:focus {
26 | outline: none;
27 | }
28 |
29 | .carousel .right-arrow {
30 | top: 0;
31 | right: 0;
32 | background-image: linear-gradient(
33 | to right,
34 | rgba(0, 0, 0, 0),
35 | rgba(0, 0, 0, 0.5)
36 | );
37 | }
38 |
39 | .carousel .right-arrow:focus {
40 | outline: none;
41 | }
42 |
43 | .carousel-slide {
44 | width: 100%;
45 | display: flex;
46 | background: transparent;
47 | transition: all 0.3s ease-in-out;
48 | }
49 |
--------------------------------------------------------------------------------
/src/components/UI/carousel/carousel.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useRef, useEffect } from "react";
2 | import "./carousel.css";
3 | import leftArrow from "../../../images/icons/chevron-left.svg";
4 | import rightArrow from "../../../images/icons/chevron-right.svg";
5 |
6 | const Carousel = ({ children }) => {
7 | const [counter, setCounter] = useState(0);
8 | const [width, setwidth] = useState(0);
9 | const carouselRef = useRef(null);
10 | const cardWidth = 291;
11 | // Card width plus margin
12 | const cardWidthTotal = cardWidth + 32;
13 |
14 | /**
15 | * Methods to move the carousel
16 | */
17 | const goToLeft = () => {
18 | setCounter((prevCount) => prevCount - 1);
19 | };
20 | const goToRight = () => {
21 | setCounter((prevCount) => prevCount + 1);
22 | };
23 |
24 | let offset = -counter * cardWidthTotal;
25 | let slideStyle = { transform: `translateX(${offset}px)` };
26 |
27 | let leftButton = (
28 |
29 |
30 |
31 | );
32 |
33 | if (counter === 0) {
34 | leftButton = null;
35 | }
36 |
37 | let rightButton = (
38 |
39 |
40 |
41 | );
42 |
43 | useEffect(() => {
44 | setwidth(carouselRef.current.offsetWidth);
45 | window.addEventListener("resize", handleResize);
46 | return () => {
47 | window.removeEventListener("resize", handleResize);
48 | };
49 | }, [carouselRef, width, cardWidth]);
50 |
51 | const handleResize = () => {
52 | setwidth(carouselRef.current.offsetWidth);
53 | };
54 |
55 | const totalCards = children.length;
56 | const minCards =
57 | Math.floor(width / cardWidth) >= 1 ? Math.floor(width / cardWidth) : 1;
58 | const cardsShown = minCards + counter;
59 |
60 | // If all cards were shown, don't display next button
61 | if (cardsShown >= totalCards) {
62 | rightButton = null;
63 | }
64 |
65 | return (
66 |
67 | {leftButton}
68 |
69 | {children}
70 |
71 | {rightButton}
72 |
73 | );
74 | };
75 |
76 | export default Carousel;
77 |
--------------------------------------------------------------------------------
/src/components/UI/personas/persona/persona.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./persona.module.css";
3 | import PropTypes from "prop-types";
4 | import emailImg from "../../../../images/icons/email.svg";
5 | import githubImg from "../../../../images/icons/github-small.svg";
6 | import twitterImg from "../../../../images/icons/twitter-small.svg";
7 | import websiteImg from "../../../../images/icons/world.svg";
8 |
9 | const Persona = ({
10 | photo,
11 | name,
12 | rol,
13 | description,
14 | github,
15 | website,
16 | email,
17 | twitter,
18 | }) => {
19 | let githubIcon = null;
20 | if (github) {
21 | githubIcon = (
22 |
23 |
24 |
25 | );
26 | }
27 |
28 | let websiteIcon = null;
29 | if (website) {
30 | websiteIcon = (
31 |
32 |
33 |
34 | );
35 | }
36 |
37 | let emailIcon = null;
38 | if (email) {
39 | emailIcon = (
40 |
41 |
42 |
43 | );
44 | }
45 |
46 | let twitterIcon = null;
47 | if (twitter) {
48 | twitterIcon = (
49 |
50 |
51 |
52 | );
53 | }
54 |
55 | return (
56 |
57 |
58 |
59 |
60 |
61 |
62 |
{name}
63 |
{rol}
64 |
{description}
65 |
66 |
67 | {githubIcon}
68 | {websiteIcon}
69 | {emailIcon}
70 | {twitterIcon}
71 |
72 |
73 |
74 | );
75 | };
76 |
77 | Persona.propTypes = {
78 | photo: PropTypes.string.isRequired,
79 | name: PropTypes.string.isRequired,
80 | rol: PropTypes.string.isRequired,
81 | description: PropTypes.string.isRequired,
82 | // URL
83 | github: PropTypes.string,
84 | // URL
85 | website: PropTypes.string,
86 | // URL
87 | email: PropTypes.string,
88 | // URL
89 | twitter: PropTypes.string,
90 | };
91 |
92 | export default Persona;
93 |
--------------------------------------------------------------------------------
/src/components/UI/personas/persona/persona.module.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --scale-factor: 0.9;
3 | }
4 |
5 | .persona {
6 | position: relative;
7 | }
8 |
9 | .persona__photo {
10 | width: calc(170px * var(--scale-factor));
11 | height: calc(170px * var(--scale-factor));
12 | background-color: #333333;
13 | position: absolute;
14 | top: calc(-120px * var(--scale-factor));
15 | left: calc(65px * var(--scale-factor));
16 | border: 15px solid #333333;
17 | border-radius: 50%;
18 | overflow: hidden;
19 | }
20 |
21 | .persona__photo img {
22 | transition: transform 300ms ease-in-out;
23 | cursor: pointer;
24 | }
25 |
26 | .persona__photo img:hover {
27 | transform: scale(1.2);
28 | }
29 |
30 | .persona__photo img {
31 | width: 100%;
32 | display: block;
33 | }
34 |
35 | .persona__body {
36 | width: calc(300px * var(--scale-factor));
37 | height: calc(210px * var(--scale-factor));
38 | background: #e5e5e5;
39 | border-radius: 15px;
40 | position: relative;
41 | }
42 |
43 | .persona__text {
44 | width: 100%;
45 | height: 100%;
46 | padding: 2.8em 1em 2em;
47 | }
48 |
49 | .persona__name {
50 | font-family: "Roboto", sans-serif;
51 | font-weight: 700;
52 | font-size: calc(25px * var(--scale-factor));
53 | text-align: center;
54 | white-space: nowrap;
55 | }
56 |
57 | .persona__rol {
58 | font-family: "Roboto", sans-serif;
59 | color: #656262;
60 | font-weight: 400;
61 | font-size: calc(16px * var(--scale-factor));
62 | display: block;
63 | width: 100%;
64 | text-align: center;
65 | }
66 |
67 | .persona__description {
68 | font-family: "Roboto", sans-serif;
69 | font-weight: 400;
70 | font-size: calc(12px * var(--scale-factor));
71 | line-height: calc(14px * var(--scale-factor));
72 | text-align: justify;
73 | }
74 |
75 | .persona__footer {
76 | width: 180px;
77 | left: calc(50% - 90px);
78 | position: absolute;
79 | bottom: calc((-43px / 2) * var(--scale-factor));
80 | display: flex;
81 | justify-content: space-around;
82 | }
83 |
84 | .persona__icon {
85 | width: calc(40px * var(--scale-factor));
86 | display: block;
87 | transition: transform 30ms cubic-bezier(0.42, 0, 0.65, 2.07);
88 | }
89 |
90 | .persona__icon:hover {
91 | transform: translateY(-4px);
92 | }
93 |
--------------------------------------------------------------------------------
/src/components/UI/personas/personas.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Persona from "./persona/persona";
3 | import styles from "./personas.module.css";
4 | import PropTypes from "prop-types";
5 |
6 | const Personas = ({ listPersonas }) => {
7 | let personas = null;
8 | if (listPersonas && listPersonas.length > 0) {
9 | personas = listPersonas.map((person) => (
10 |
21 | ));
22 | }
23 | return {personas}
;
24 | };
25 |
26 | Personas.prototype = {
27 | listPersonas: PropTypes.arrayOf(PropTypes.object).isRequired,
28 | };
29 |
30 | export default Personas;
31 |
--------------------------------------------------------------------------------
/src/components/UI/personas/personas.module.css:
--------------------------------------------------------------------------------
1 | .personas {
2 | box-sizing: border-box;
3 | padding: 9em 0 1em;
4 | /* CSS Grid */
5 | display: grid;
6 | grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
7 | column-gap: 3rem;
8 | row-gap: 12em;
9 | justify-items: center;
10 | }
11 |
--------------------------------------------------------------------------------
/src/components/author/author.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./author.module.css";
3 | import githubImg from "../../images/icons/github-small.svg";
4 | import emailImg from "../../images/icons/email.svg";
5 | import PropTypes from "prop-types";
6 |
7 | const Author = ({ name, photo, date, github, email }) => {
8 | let githubIcon = null;
9 | if (github) {
10 | githubIcon = (
11 |
12 |
13 |
14 | );
15 | }
16 |
17 | let emailIcon = null;
18 | if (email) {
19 | emailIcon = (
20 |
21 |
22 |
23 | );
24 | }
25 | return (
26 |
27 |
28 |
29 |
30 |
31 |
{name}
32 |
{date}
33 |
34 | {githubIcon}
35 | {emailIcon}
36 |
37 |
38 |
39 | );
40 | };
41 |
42 | Author.propTypes = {
43 | name: PropTypes.string,
44 | photo: PropTypes.string,
45 | date: PropTypes.string,
46 | github: PropTypes.string,
47 | email: PropTypes.string,
48 | };
49 |
50 | export default Author;
51 |
--------------------------------------------------------------------------------
/src/components/author/author.module.css:
--------------------------------------------------------------------------------
1 | .author {
2 | display: flex;
3 | margin: 3em 0;
4 | }
5 |
6 | .author__image {
7 | width: 4.5em;
8 | height: 4.5em;
9 | border-radius: 50%;
10 | overflow: hidden;
11 | margin: 0 1em;
12 | }
13 |
14 | .author__image img {
15 | display: block;
16 | width: 100%;
17 | }
18 |
19 | .author__info {
20 | width: 50%;
21 | }
22 |
23 | .author__name {
24 | font-size: 1rem;
25 | font-weight: bold;
26 | }
27 |
28 | .author__date {
29 | font-size: 0.8rem;
30 | color: #737373;
31 | }
32 |
33 | .author__icon {
34 | width: 24px;
35 | height: 24px;
36 | display: inline-block;
37 | }
38 |
39 | .author__icon:first-child {
40 | margin-right: 5px;
41 | }
42 |
--------------------------------------------------------------------------------
/src/components/blog-section/blog-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./blog-section.module.css";
3 |
4 | const BlogSection = () =>
;
5 |
6 | export default BlogSection;
7 |
--------------------------------------------------------------------------------
/src/components/blog-section/blog-section.module.css:
--------------------------------------------------------------------------------
1 | .blogSection {
2 | height: 923px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/components/cities-section/cities-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Card from "../UI/card/card";
3 | import Carousel from "../UI/carousel/carousel";
4 | import bracketsWidget from "../../images/widgets/brackets.svg";
5 | import timesYellowWidget from "../../images/widgets/times-yellow.svg";
6 | import timesPurpleWidget from "../../images/widgets/times-purple.svg";
7 | import styles from "./cities-section.module.css";
8 | import cities from "../../constants/cities";
9 |
10 | const CitiesSection = () => {
11 | return (
12 |
13 |
17 | Ciudades
18 |
19 | {cities.map(({ imgURL, topic, description, link }) => (
20 |
27 | ))}
28 |
29 |
33 |
37 |
38 | );
39 | };
40 |
41 | export default CitiesSection;
42 |
--------------------------------------------------------------------------------
/src/components/cities-section/cities-section.module.css:
--------------------------------------------------------------------------------
1 | .cities {
2 | background: #fff;
3 | height: 840px;
4 | padding-top: 10em;
5 | position: relative;
6 | }
7 |
8 | .cities__title {
9 | margin-bottom: 1em;
10 | }
11 |
12 | /* Widgets */
13 |
14 | .widget__bracket {
15 | bottom: 38.5em;
16 | right: 13em;
17 | }
18 |
19 | .widget__times--yellow {
20 | bottom: 25em;
21 | left: 22.4em;
22 | z-index: 0;
23 | }
24 |
25 | .widget__times--purple {
26 | bottom: 2em;
27 | right: 31em;
28 | }
29 |
--------------------------------------------------------------------------------
/src/components/community-hero-section/card-section/card-section.css:
--------------------------------------------------------------------------------
1 | .card-section {
2 | width: 100%;
3 | height: 15vw;
4 | border-radius: 1vw;
5 | background: #ffffff;
6 | overflow: hidden;
7 | user-select: none;
8 | margin-top: 1vw;
9 | padding: 1.7vw 1.7vw 1.7vw 1.7vw;
10 | }
11 |
12 | .section-evento {
13 | float: left;
14 | width: 68%;
15 | height: 13vw;
16 | background: #ffffff;
17 | border-radius: 1vw;
18 | }
19 |
20 | .topic-description {
21 | font-weight: bold;
22 | margin-bottom: 0.5em;
23 | font-family: "Roboto", sans-serif;
24 | font-size: 1.5vw;
25 | }
26 |
27 | .description-section {
28 | overflow: hidden;
29 | height: 5.5vw;
30 | margin-top: 0.5em;
31 | margin-bottom: 0.5em;
32 | font-size: 1vw;
33 | text-align: justify;
34 | font-family: sans-serif;
35 | }
36 |
37 | .topic-example {
38 | font-weight: bold;
39 | margin-top: 0.5em;
40 | margin-left: 0.5em;
41 | font-family: "Roboto", sans-serif;
42 | font-size: 1.5vw;
43 | }
44 |
45 | .description-example {
46 | overflow: hidden;
47 | height: 8vw;
48 | margin-top: 0.5em;
49 | margin-right: 0.5em;
50 | margin-left: 0.5em;
51 | margin-bottom: 0.5em;
52 | text-overflow: ellipsis;
53 | line-height: 1;
54 | font-family: sans-serif;
55 | font-size: 1vw;
56 | text-align: justify;
57 | }
58 |
59 | .section-example {
60 | float: right;
61 | width: 30%;
62 | height: 12vw;
63 | background: #c0bfbf;
64 | border-radius: 1vw;
65 | }
66 |
67 | @media all and (max-width: 60em) {
68 | .card-section {
69 | height: 70vw;
70 | }
71 | .section-evento {
72 | height: 67vw;
73 | padding: 0.5vw 0.5vw 0.5vw 0.5vw;
74 | }
75 | .topic-description {
76 | font-size: 4.5vw;
77 | height: 7vw;
78 | margin-bottom: 0em;
79 | }
80 | .description-section {
81 | font-size: 3vw;
82 | height: 45vw;
83 | margin-top: 0em;
84 | }
85 | .section-example {
86 | height: 67vw;
87 | }
88 | .topic-example {
89 | font-size: 4vw;
90 | }
91 | .description-example {
92 | height: 55vw;
93 | font-size: 3vw;
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/src/components/community-hero-section/card-section/card-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./card-section.css";
3 | import Button from "../../UI/button/button";
4 | import PropTypes from "prop-types";
5 |
6 | const HeroSection = ({ title, description, txtButton, descriptionExample }) => {
7 | return (
8 |
9 |
10 |
{title}
11 |
{description}
12 |
{txtButton}
13 |
14 |
15 |
Ejemplo
16 |
{descriptionExample}
17 |
18 |
19 | );
20 | };
21 |
22 | HeroSection.propTypes = {
23 | title: PropTypes.string,
24 | description: PropTypes.string,
25 | txtButton: PropTypes.string,
26 | descriptionExample: PropTypes.string,
27 | };
28 |
29 | export default HeroSection;
30 |
--------------------------------------------------------------------------------
/src/components/community-hero-section/community-hero-section.css:
--------------------------------------------------------------------------------
1 | .community-hero-section {
2 | background-color: #f2f2f2;
3 | padding-top: 1.4vw;
4 | padding-bottom: 3vw;
5 | }
6 |
7 | .section__title {
8 | text-align: left;
9 | font-size: 3vw;
10 | font-weight: bold;
11 | font-family: "Roboto", sans-serif;
12 | }
13 |
--------------------------------------------------------------------------------
/src/components/community-hero-section/community-hero-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./community-hero-section.css";
3 | import CardSection from "./card-section/card-section";
4 |
5 | const communityHeroSection = () => {
6 | const cards = [
7 | {
8 | title: "Organizar un Meetup",
9 | description:
10 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus accumsan sapien a elementum. Vestibulum nibh nisi, semper sit amet egestas non, blandit id turpis. Nam accumsan lectus et ultrices lacinia. In vehicula, odio eu molestie pretium, eros eros hendrerit arcu, ut efficitur quam dolor id diam. Nam sed massa scelerisque, dictum quam vel, egestas metus.",
11 | txtButton: "Llenar formulario para organizar un Meetup",
12 | descriptionExample:
13 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus accumsan sapien a elementum. Vestibulum nibh nisi, semper sit amet egestas non, blandit id turpis. Nam accumsan lectus et ultrices lacinia. In vehicula, odio eu molestie pretium.",
14 | },
15 | {
16 | title: "Impartir una charla",
17 | description:
18 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus accumsan sapien a elementum. Vestibulum nibh nisi, semper sit amet egestas non, blandit id turpis. Nam accumsan lectus et ultrices lacinia. In vehicula, odio eu molestie pretium, eros eros hendrerit arcu, ut efficitur quam dolor id diam. Nam sed massa scelerisque, dictum quam vel, egestas metus.",
19 | txtButton: "Llenar formulario para impartir charla",
20 | descriptionExample:
21 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus accumsan sapien a elementum. Vestibulum nibh nisi, semper sit amet egestas non, blandit id turpis. Nam accumsan lectus et ultrices lacinia. In vehicula, odio eu molestie pretium.",
22 | },
23 | {
24 | title: "Escribir / Traducir un Artículo",
25 | description:
26 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus accumsan sapien a elementum. Vestibulum nibh nisi, semper sit amet egestas non, blandit id turpis. Nam accumsan lectus et ultrices lacinia. In vehicula, odio eu molestie pretium, eros eros hendrerit arcu, ut efficitur quam dolor id diam. Nam sed massa scelerisque, dictum quam vel, egestas metus.",
27 | txtButton: "Llenar formulario para escribir un artículo",
28 | descriptionExample:
29 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus accumsan sapien a elementum. Vestibulum nibh nisi, semper sit amet egestas non, blandit id turpis. Nam accumsan lectus et ultrices lacinia. In vehicula, odio eu molestie pretium.",
30 | },
31 | ];
32 | return (
33 |
34 |
35 |
¿Cómo ayudar?
36 | {cards.map((card, idx) => (
37 |
44 | ))}
45 |
46 |
47 | );
48 | };
49 |
50 | export default communityHeroSection;
51 |
--------------------------------------------------------------------------------
/src/components/community-section/community-description/community-description.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Styles For the Community Description
3 | */
4 | .community-description {
5 | font-weight: 300;
6 | font-size: 18px;
7 | line-height: 28px;
8 | font-feature-settings: "ss06" on, "ss07" on;
9 | color: #252525;
10 | font-family: "Roboto", sans-serif;
11 | }
12 |
13 | .community-description p {
14 | margin-bottom: 0.7em;
15 | }
16 |
--------------------------------------------------------------------------------
/src/components/community-section/community-description/community-description.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./community-description.css";
3 |
4 | const CommunityDescription = () => (
5 |
6 |
7 | Somos una comunidad de interesados en la tecnología cuyo fin es el de
8 | fortalecer y articular el ecosistema tecnológico en nuestro país Ecuador.
9 |
10 |
11 | Constantemente organizamos meetups-talleres y conferencias relacionadas
12 | con JavaScript y el mundo del desarrollo de software.
13 |
14 |
15 | El contenido del grupo es propuesto por los miembros de la comunidad, si
16 | tienes alguna charla, conferencia o experiencia que quieras compartir
17 | puedes enviar tu propuesta aquí.
18 |
19 |
20 | );
21 |
22 | export default CommunityDescription;
23 |
--------------------------------------------------------------------------------
/src/components/community-section/community-section.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Styles For the Community Section
3 | */
4 | .community-section {
5 | background-color: #f2f2f2;
6 | display: flex;
7 | flex-direction: column;
8 | justify-content: space-between;
9 | height: auto;
10 | position: relative;
11 | }
12 |
13 | @media only screen and (min-width: 800px) {
14 | .community-section {
15 | flex-direction: row;
16 | height: 840px;
17 | }
18 | }
19 |
20 | .community-section .section-block {
21 | display: flex;
22 | flex-direction: column;
23 | justify-content: center;
24 | }
25 |
26 | .section-block.slider {
27 | width: 100%;
28 | padding-right: 0;
29 | background-image: url("../../images/background/grid.svg");
30 | background-repeat: no-repeat;
31 | background-position: 90% 40%;
32 | padding-top: 5em;
33 | padding-bottom: 0;
34 | }
35 |
36 | @media only screen and (min-width: 500px) {
37 | .section-block.slider {
38 | padding-bottom: 10em;
39 | padding-right: 0;
40 | }
41 | }
42 |
43 | @media only screen and (min-width: 800px) {
44 | .section-block.slider {
45 | width: 60%;
46 | padding-top: 0;
47 | padding-bottom: 0;
48 | padding-right: 10%;
49 | }
50 | }
51 |
52 | .section-block.info {
53 | width: 100%;
54 | }
55 |
56 | @media only screen and (min-width: 800px) {
57 | .section-block.info {
58 | width: 40%;
59 | }
60 | }
61 |
62 | .section-block .call-to-action {
63 | margin-top: 1em;
64 | display: flex;
65 | flex-direction: column;
66 | justify-content: space-between;
67 | }
68 |
69 | .call-to-action button {
70 | margin-bottom: 1em;
71 | }
72 |
73 | @media only screen and (min-width: 1256px) {
74 | .section-block .call-to-action {
75 | flex-direction: row;
76 | }
77 |
78 | .call-to-action button {
79 | margin-bottom: 0;
80 | }
81 | }
82 |
83 | .section-block .heading {
84 | font-weight: 700;
85 | background-color: rgba(247, 224, 24, 0.81);
86 | height: 51px;
87 | line-height: 51px;
88 | text-align: center;
89 | margin-bottom: 1em;
90 | }
91 |
92 | .section-block .headings {
93 | list-style-type: disc;
94 | }
95 |
96 | /* Headings */
97 | .heading-item-title {
98 | font-size: 24px;
99 | margin-left: 1em;
100 | padding-right: 1em;
101 | font-family: "Roboto", sans-serif;
102 | list-style: none;
103 | }
104 |
105 | .heading-item-subtitle {
106 | font-size: 12px;
107 | padding-left: 2em;
108 | margin-left: 1.7em;
109 | list-style: none;
110 | }
111 |
112 | .heading.title {
113 | transform: rotate(3deg);
114 | font-size: 36px;
115 | }
116 |
117 | .heading.subtitle {
118 | transform: rotate(-3deg);
119 | font-size: 24px;
120 | }
121 |
122 | /* Widgets */
123 | .widget {
124 | position: absolute;
125 | z-index: 500;
126 | display: none;
127 | }
128 |
129 | @media only screen and (min-width: 560px) {
130 | .widget {
131 | display: block;
132 | }
133 | }
134 |
135 | .widget.circle {
136 | top: -85px;
137 | right: 13%;
138 | }
139 |
140 | .widget.square {
141 | bottom: -7em;
142 | }
143 |
--------------------------------------------------------------------------------
/src/components/community-section/community-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Button from "../UI/button/button";
3 | import CommunityDescription from "./community-description/community-description";
4 | import PhotoSlider from "./photo-slider/photo-slider";
5 | import circleWidget from "../../images/widgets/circle.svg";
6 | import squareWidget from "../../images/widgets/square.svg";
7 | import photos from "../../constants/slider";
8 | import "./community-section.css";
9 |
10 | const CommunitySection = () => (
11 |
12 |
15 |
16 |
17 |
18 | Comunidad
19 |
20 |
21 | Javascript del Ecuador
22 |
23 |
24 |
25 |
26 | Conocer a la Comunidad
27 | Cómo ayudar?
28 | Código de Conducta
29 |
30 |
31 |
32 |
33 |
34 | );
35 |
36 | export default CommunitySection;
37 |
--------------------------------------------------------------------------------
/src/components/community-section/photo-slider/photo-slider.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Styles for the Photo Slider
3 | */
4 | .photo-slider {
5 | width: 100%;
6 | max-width: 670px;
7 | height: 386px;
8 | box-sizing: border-box;
9 | border-radius: 20px;
10 | position: relative;
11 | }
12 |
13 | .photo-slider .slick-list {
14 | border-radius: 1em;
15 | }
16 |
17 | /* Slider Dots */
18 | .slick-dots {
19 | display: flex !important;
20 | list-style: none;
21 | justify-content: flex-start;
22 | padding: 0;
23 | }
24 |
25 | .slick-dots li {
26 | border-radius: 10em;
27 | width: 11.36%;
28 | height: 15.65px;
29 | margin: 0 0.4em;
30 | }
31 |
32 | .slick-dots li.slick-active button {
33 | background: #27ae60;
34 | }
35 |
36 | .slick-dots li button:hover {
37 | cursor: pointer;
38 | }
39 |
40 | .slick-dots li:not(.slick-active) button:hover {
41 | background: #dadada;
42 | }
43 |
44 | .slick-dots li button {
45 | border: none;
46 | border-radius: 10em;
47 | background: #c4c4c4;
48 | width: 100%;
49 | height: 15.65px;
50 | }
51 |
52 | /* Slick Slider Styles*/
53 | .slick-slider {
54 | position: relative;
55 | display: block;
56 | box-sizing: border-box;
57 |
58 | -webkit-user-select: none;
59 | -moz-user-select: none;
60 | -ms-user-select: none;
61 | user-select: none;
62 |
63 | -webkit-touch-callout: none;
64 | -khtml-user-select: none;
65 | -ms-touch-action: pan-y;
66 | touch-action: pan-y;
67 |
68 | -webkit-tap-highlight-color: transparent;
69 | }
70 |
71 | /* List of photos */
72 | .slick-list {
73 | position: relative;
74 |
75 | display: block;
76 | overflow: hidden;
77 |
78 | margin: 0;
79 | padding: 0;
80 | }
81 | .slick-list:focus {
82 | outline: none;
83 | }
84 | .slick-list.dragging {
85 | cursor: pointer;
86 | cursor: hand;
87 | }
88 |
89 | .slick-slider .slick-track,
90 | .slick-slider .slick-list {
91 | transform: translate3d(0, 0, 0);
92 | }
93 |
94 | .slick-track {
95 | position: relative;
96 | top: 0;
97 | left: 0;
98 |
99 | display: block;
100 | margin-left: auto;
101 | margin-right: auto;
102 | }
103 | .slick-track:before,
104 | .slick-track:after {
105 | display: table;
106 |
107 | content: "";
108 | }
109 | .slick-track:after {
110 | clear: both;
111 | }
112 | .slick-loading .slick-track {
113 | visibility: hidden;
114 | }
115 |
116 | .slick-slide {
117 | display: none;
118 | float: left;
119 |
120 | height: 100%;
121 | min-height: 1px;
122 | }
123 | [dir="rtl"] .slick-slide {
124 | float: right;
125 | }
126 | .slick-slide img {
127 | display: block;
128 | }
129 | .slick-slide.slick-loading img {
130 | display: none;
131 | }
132 | .slick-slide.dragging img {
133 | pointer-events: none;
134 | }
135 | .slick-initialized .slick-slide {
136 | display: block;
137 | }
138 | .slick-loading .slick-slide {
139 | visibility: hidden;
140 | }
141 | .slick-vertical .slick-slide {
142 | display: block;
143 |
144 | height: auto;
145 |
146 | border: 1px solid transparent;
147 | }
148 | .slick-arrow.slick-hidden {
149 | display: none;
150 | }
151 |
--------------------------------------------------------------------------------
/src/components/community-section/photo-slider/photo-slider.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PropTypes from "prop-types";
3 | import Slider from "react-slick";
4 | import "./photo-slider.css";
5 |
6 | const PhotoSlider = ({ photos }) => {
7 | const settings = {
8 | dots: true,
9 | infinite: true,
10 | speed: 500,
11 | slidesToShow: 1,
12 | slidesToScroll: 1,
13 | arrows: false,
14 | autoplay: true,
15 | customPaging: () => ,
16 | };
17 | return (
18 |
19 |
20 | {photos.map((photo, idx) => (
21 |
22 | ))}
23 |
24 |
25 | );
26 | };
27 |
28 | PhotoSlider.propTypes = {
29 | photos: PropTypes.arrayOf(
30 | PropTypes.shape({
31 | name: PropTypes.string,
32 | photoURL: PropTypes.string,
33 | })
34 | ),
35 | };
36 |
37 | export default PhotoSlider;
38 |
--------------------------------------------------------------------------------
/src/components/contributors/contributors.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./contributors.module.css";
3 | import PersonasSection from "../personas-section/personas-section";
4 | import Button from "../UI/button/button";
5 | import { useStaticQuery, graphql } from "gatsby";
6 |
7 | const Contributors = () => {
8 | const data = useStaticQuery(graphql`
9 | query getContributors {
10 | allContributorsJson {
11 | edges {
12 | node {
13 | id
14 | photo
15 | name
16 | rol
17 | description
18 | email
19 | github
20 | twitter
21 | website
22 | }
23 | }
24 | }
25 | }
26 | `);
27 | const title = "Contribuidores";
28 | const description =
29 | "Personas que han contribuido con su conocimiento en nuestra comunidad.";
30 | return (
31 |
32 |
37 |
38 | Agregarme a este panel
39 |
40 |
41 | );
42 | };
43 |
44 | export default Contributors;
45 |
--------------------------------------------------------------------------------
/src/components/contributors/contributors.module.css:
--------------------------------------------------------------------------------
1 | .contributors {
2 | background-color: #f2f2f2;
3 | }
4 |
5 | .contributors__add {
6 | padding: 5em 5%;
7 | display: flex;
8 | justify-content: flex-end;
9 | font-size: 14px;
10 | }
11 |
--------------------------------------------------------------------------------
/src/components/events-section/Events.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./events.module.css";
3 | import Carousel from "../UI/carousel/carousel";
4 | import Card from "../UI/card/card";
5 | import eventos from "../../constants/eventos";
6 | import triangle from "../../images/widgets/triangle.svg";
7 | import bracketsWidget from "../../images/widgets/brackets2.svg";
8 |
9 | const Events = () => {
10 | return (
11 |
12 | Eventos
13 |
14 | {eventos.map(
15 | ({ id, imagen, titulo, fechaHora, disertantes, resumen, url }) => (
16 |
30 | )
31 | )}
32 |
33 |
37 |
41 |
42 | );
43 | };
44 |
45 | export default Events;
46 |
--------------------------------------------------------------------------------
/src/components/events-section/events.module.css:
--------------------------------------------------------------------------------
1 | .events {
2 | background: #f2f2f2;
3 | height: 840px;
4 | padding-top: 10em;
5 | position: relative;
6 | }
7 |
8 | .events__title {
9 | margin-bottom: 1em;
10 | padding-right: 1em;
11 | text-align: right;
12 | font-size: 50px;
13 | font-weight: bold;
14 | font-family: "Roboto", sans-serif;
15 | }
16 |
17 | /* Widgets */
18 |
19 | .events__triangle {
20 | top: 2em;
21 | left: 12em;
22 | display: none;
23 | }
24 |
25 | @media only screen and (min-width: 567px) {
26 | .events__triangle {
27 | display: block;
28 | }
29 | }
30 |
31 | .events__bracket {
32 | bottom: -0.6em;
33 | right: 15em;
34 | display: none;
35 | }
36 |
37 | @media only screen and (min-width: 567px) {
38 | .events__bracket {
39 | display: block;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/components/footer/footer.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Link } from "gatsby";
3 | import styles from "./footer.module.css";
4 | import escudo from "../../images/logo-escudo-ec.svg";
5 | //import SocialNetworks from './social-networks';
6 |
7 | const Footer = () => (
8 |
70 | );
71 |
72 | export default Footer;
73 |
--------------------------------------------------------------------------------
/src/components/footer/footer.module.css:
--------------------------------------------------------------------------------
1 | .footer {
2 | background-color: #fef6dd;
3 | color: #000;
4 | background-image: url("../../images/widgets/lines.svg");
5 | height: 500px;
6 | padding: 5em 10em 0 10em;
7 | position: relative;
8 | }
9 |
10 | .footer__title {
11 | font-size: 14px;
12 | padding-bottom: 2em;
13 | font-weight: 700;
14 | }
15 |
16 | .footer h1 {
17 | font-size: 64px;
18 | font-weight: 700;
19 | }
20 |
21 | .footer h2 {
22 | font-size: 25px;
23 | font-weight: 700;
24 | text-align: center;
25 | }
26 |
27 | .footer h3 {
28 | font-size: 18px;
29 | font-weight: 400;
30 | text-align: center;
31 | }
32 |
33 | .footer p {
34 | text-align: center;
35 | padding-bottom: 1em;
36 | }
37 |
38 | .footer span {
39 | text-decoration: underline;
40 | }
41 |
42 | .footer img {
43 | top: 9.5em;
44 | right: 6%;
45 | position: absolute;
46 | }
47 |
48 | .flex {
49 | display: flex;
50 | justify-content: space-between;
51 | padding-bottom: 5em;
52 | }
53 |
54 | .col {
55 | width: 25%;
56 | }
57 |
58 | .col li {
59 | font-size: 14px;
60 | line-height: 24px;
61 | }
62 |
63 | @media only screen and (max-width: 800px) {
64 | .footer {
65 | height: 550px;
66 | padding: 3em 10em 0 2em;
67 | }
68 |
69 | .footer h1 {
70 | font-size: 54px;
71 | padding-left: 2em;
72 | }
73 |
74 | .footer img {
75 | top: 7.5em;
76 | right: 4em;
77 | position: absolute;
78 | }
79 |
80 | .flex {
81 | padding-bottom: 3em;
82 | }
83 |
84 | .col {
85 | width: 50%;
86 | }
87 | }
88 |
89 | @media only screen and (max-width: 400px) {
90 | .footer {
91 | height: 810px;
92 | padding: 1em 0 0 2em;
93 | }
94 |
95 | .footer__title {
96 | font-size: 14px;
97 | padding-top: 2em;
98 | padding-bottom: 0.5em;
99 | font-weight: 700;
100 | }
101 |
102 | .footer h1 {
103 | font-size: 34px;
104 | padding-top: 1.5em;
105 | }
106 |
107 | .footer img {
108 | top: 36.5em;
109 | right: 16%;
110 | position: absolute;
111 | }
112 |
113 | .footer p {
114 | padding: 4.5em 0 1em 0;
115 | }
116 |
117 | .flex {
118 | display: inline;
119 | padding-bottom: 3em;
120 | }
121 |
122 | .col {
123 | width: 100%;
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/src/components/header/Logo/logo.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import escudo from "../../../images/logo-escudo-ec.svg";
3 | import styles from "./logo.module.css";
4 |
5 | const Logo = () => (
6 |
7 |
8 |
9 |
10 |
11 | Ecuador.js
12 |
13 |
14 | );
15 |
16 | export default Logo;
17 |
--------------------------------------------------------------------------------
/src/components/header/Logo/logo.module.css:
--------------------------------------------------------------------------------
1 | .logo {
2 | height: 80px;
3 | margin: 0;
4 | padding: 0;
5 | flex-basis: 20%;
6 | background-size: 150em;
7 | }
8 |
9 | .logo h1 {
10 | margin: 0;
11 | display: inline-flex;
12 | flex-direction: column;
13 | align-items: center;
14 | justify-content: center;
15 | }
16 |
17 | .shield {
18 | transform: scale(0.9);
19 | }
20 |
21 | .legend {
22 | font-family: "Roboto", sans-serif;
23 | font-weight: bold;
24 | font-size: 1.5em;
25 | font-size: clamp(18px, 1vw, 28px);
26 | }
27 |
--------------------------------------------------------------------------------
/src/components/header/header.css:
--------------------------------------------------------------------------------
1 | header {
2 | background-color: transparent;
3 | }
4 |
5 | .nav-wrap {
6 | display: flex;
7 | flex-wrap: wrap;
8 | align-items: center;
9 | justify-content: space-between;
10 | overflow: hidden;
11 | max-width: 76rem;
12 | padding: 1rem;
13 | margin-left: auto;
14 | margin-right: auto;
15 | }
16 |
17 | .nav__logo-image--sm {
18 | display: flex;
19 | align-items: center;
20 | justify-content: space-around;
21 | }
22 |
23 | .nav__logo-title--sm {
24 | display: flex;
25 | align-items: center;
26 | margin-left: 0.5rem;
27 | --text-opacity: 1;
28 | color: #000;
29 | color: rgba(0, 0, 0, var(--text-opacity));
30 | text-decoration: none;
31 |
32 | font-size: 1rem;
33 | font-weight: 700;
34 | font-family: "Open Sans", sans-serif, system-ui, -apple-system,
35 | BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans",
36 | sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
37 | "Noto Color Emoji";
38 | }
39 |
40 | .nav__logo {
41 | display: none;
42 | }
43 |
44 | .nav__btn {
45 | align-items: center;
46 | display: block;
47 | padding-left: 0.5rem;
48 | padding-right: 0.5rem;
49 | padding-top: 0.5rem;
50 | padding-bottom: 0.5rem;
51 | --text-opacity: 1;
52 | color: #000;
53 | color: rgba(0, 0, 0, var(--text-opacity));
54 | border-width: 1px;
55 | --border-opacity: 1;
56 | border-color: #000;
57 | border-color: rgba(0, 0, 0, var(--border-opacity));
58 | border-radius: 0.25rem;
59 | }
60 |
61 | .nav__btn svg {
62 | width: 0.75rem;
63 | height: 0.75rem;
64 | fill: currentColor;
65 | }
66 |
67 | .navbar {
68 | justify-content: center;
69 | width: 100%;
70 | height: 0;
71 | font-size: 0.75rem;
72 | font-weight: 700;
73 | font-family: "Open Sans", sans-serif, system-ui, -apple-system,
74 | BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans",
75 | sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
76 | "Noto Color Emoji";
77 | transition: height 300ms ease-in-out;
78 | }
79 |
80 | .navbar.expanded {
81 | height: 275px;
82 | }
83 |
84 | .nav__item {
85 | display: block;
86 | padding-top: 1rem;
87 | --text-opacity: 1;
88 | color: #000;
89 | color: rgba(0, 0, 0, var(--text-opacity));
90 | text-decoration: none;
91 | position: relative;
92 | box-sizing: border-box;
93 | }
94 |
95 | .nav__item::after {
96 | content: "";
97 | position: absolute;
98 | display: block;
99 | height: 5px;
100 | background-color: #f7e018;
101 | width: 0;
102 | bottom: -5px;
103 | transition: all 250ms ease-in-out;
104 | }
105 |
106 | .nav__item:hover::after {
107 | width: 100%;
108 | }
109 |
110 | .nav__item.active::after {
111 | width: 100%;
112 | }
113 |
114 | /*MD*/
115 | @media (min-width: 992px) {
116 | .nav-wrap {
117 | justify-content: center;
118 | overflow: visible;
119 | }
120 |
121 | .nav__logo-image--sm {
122 | display: none;
123 | }
124 | .nav__logo {
125 | display: inline-flex;
126 | justify-content: center;
127 | align-items: center;
128 | text-align: center;
129 | margin: 0 0.8rem 0 0.8rem;
130 | flex-basis: 100%;
131 | order: 0;
132 | }
133 | .nav__logo-title--sm {
134 | display: none;
135 | }
136 |
137 | .nav__btn {
138 | display: none;
139 | }
140 |
141 | .navbar {
142 | display: inline-flex;
143 | flex-wrap: wrap;
144 | min-height: 100px;
145 | height: 180px;
146 | width: 100vh;
147 | display: flex;
148 | align-items: center;
149 | width: auto;
150 | justify-content: center;
151 | }
152 |
153 | .navbar.expanded {
154 | height: 180px;
155 | }
156 |
157 | .nav__item {
158 | display: inline-flex;
159 | margin-top: 0;
160 | padding-top: 0;
161 | align-items: center;
162 | justify-content: center;
163 | height: 80px;
164 | width: 120px;
165 | align-items: center;
166 | text-align: center;
167 | order: 1;
168 | }
169 |
170 | .nav__item::after {
171 | bottom: 0;
172 | width: 100%;
173 | transform: scaleX(0);
174 | }
175 |
176 | .nav__item:hover::after {
177 | transform: scaleX(1);
178 | }
179 |
180 | .nav__item.active::after {
181 | transform: scale(1);
182 | }
183 | }
184 |
185 | /* LG */
186 | @media (min-width: 1100px) {
187 | .nav-wrap {
188 | justify-content: center;
189 | }
190 | .nav__logo-image--sm {
191 | display: none;
192 | }
193 |
194 | .nav__logo {
195 | display: inline-flex;
196 | justify-content: center;
197 | align-items: center;
198 | margin: 0 0.8rem 0 0.8rem;
199 | order: 1;
200 | flex-basis: 0;
201 | }
202 | .nav__logo-title--sm {
203 | display: none;
204 | }
205 |
206 | .nav__btn {
207 | display: none;
208 | }
209 |
210 | .navbar {
211 | display: flex;
212 | flex-wrap: wrap;
213 | height: 100px;
214 | width: 100vh;
215 | display: flex;
216 | align-items: center;
217 | width: auto;
218 | }
219 |
220 | .navbar.expanded {
221 | height: 100px;
222 | }
223 |
224 | .nav__item {
225 | display: inline-flex;
226 | margin-top: 0;
227 | align-items: center;
228 | justify-content: center;
229 | height: 80px;
230 | width: 120px;
231 | align-items: center;
232 | text-align: center;
233 | }
234 | }
235 |
--------------------------------------------------------------------------------
/src/components/header/header.js:
--------------------------------------------------------------------------------
1 | import { Link } from "gatsby";
2 | import React, { useState } from "react";
3 | import "./header.css";
4 | import escudo from "../../images/logo-escudo-ec.svg";
5 | import Logo from "./Logo/logo";
6 |
7 | const Header = () => {
8 | const [isExpanded, toggleExpansion] = useState(false);
9 | let expanededClass = "";
10 | if (isExpanded) {
11 | expanededClass = "expanded";
12 | }
13 |
14 | return (
15 |
16 |
17 |
18 |
19 |
Ecuador.js
20 |
21 |
toggleExpansion(!isExpanded)}
24 | >
25 |
30 | Menu
31 |
32 |
33 |
34 |
35 |
36 |
42 | HOME
43 |
44 |
51 | EVENTOS
52 |
53 |
60 | COMUNIDAD
61 |
62 |
69 | CIUDADES
70 |
71 |
72 |
73 |
74 |
81 | BLOG
82 |
83 |
89 | CÓDIGO DE CONDUCTA
90 |
91 |
98 | SPONSORS
99 |
100 |
107 | CUENTAS
108 |
109 |
110 |
111 |
112 | );
113 | };
114 |
115 | export default Header;
116 |
--------------------------------------------------------------------------------
/src/components/hero-section/city-markers/city-markers.css:
--------------------------------------------------------------------------------
1 | .markers {
2 | position: absolute;
3 | top: 4.2em;
4 | left: 13em;
5 | z-index: 600;
6 | width: 128.44px;
7 | }
8 |
9 | .markers .marker {
10 | opacity: 0;
11 | }
12 |
13 | .markers .marker:nth-child(1) {
14 | animation: marker-showup 300ms ease-in-out 600ms forwards;
15 | }
16 | .markers .marker:nth-child(2) {
17 | animation: marker-showup 300ms ease-in-out 800ms forwards;
18 | }
19 | .markers .marker:nth-child(3) {
20 | animation: marker-showup 300ms ease-in-out 1000ms forwards;
21 | }
22 | .markers .marker:nth-child(4) {
23 | animation: marker-showup 300ms ease-in-out 1200ms forwards;
24 | }
25 | .markers .marker:nth-child(5) {
26 | animation: marker-showup 300ms ease-in-out 1400ms forwards;
27 | }
28 | .markers .marker:nth-child(6) {
29 | animation: marker-showup 300ms ease-in-out 1600ms forwards;
30 | }
31 | .markers .marker:nth-child(7) {
32 | animation: marker-showup 300ms ease-in-out 1800ms forwards;
33 | }
34 |
35 | @keyframes marker-showup {
36 | 0% {
37 | opacity: 0;
38 | transform: scaleY(0);
39 | }
40 | 100% {
41 | opacity: 1;
42 | transform: scaleY(1);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/components/hero-section/city-markers/city-markers.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Link } from "gatsby";
3 | import "./city-markers.css";
4 |
5 | const CityMarkers = () => (
6 |
14 | {/* Loja */}
15 |
16 |
22 |
28 |
29 | {/* Cuenca */}
30 |
31 |
37 |
43 |
44 | {/* Riobamba */}
45 |
46 |
52 |
58 |
59 | {/* Guayaquil */}
60 |
61 |
67 |
73 |
74 | {/* Ambato */}
75 |
76 |
82 |
88 |
89 | {/* Latacunga */}
90 |
91 |
97 |
103 |
104 | {/* Quito */}
105 |
106 |
112 |
118 |
119 |
120 | );
121 |
122 | export default CityMarkers;
123 |
--------------------------------------------------------------------------------
/src/components/hero-section/hero-section.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Styles For the Hero Section
3 | */
4 | .hero-section {
5 | padding-top: 5em;
6 | position: relative;
7 | display: flex;
8 | justify-content: space-between;
9 | }
10 |
11 | @media only screen and (min-width: 800px) {
12 | .hero-section {
13 | padding-bottom: 0.5em;
14 | }
15 | }
16 |
17 | @media only screen and (min-width: 1059px) {
18 | .hero-section {
19 | padding-bottom: 1em;
20 | }
21 | }
22 |
23 | @media only screen and (min-width: 1296px) {
24 | .hero-section {
25 | padding-bottom: 7em;
26 | }
27 | }
28 |
29 | .hero-text {
30 | width: 100%;
31 | padding-bottom: 2em;
32 | animation: show-up 300ms ease-in-out forwards;
33 | }
34 |
35 | @media (min-width: 1059px) {
36 | .hero-text {
37 | width: 45%;
38 | padding-bottom: 0;
39 | }
40 | }
41 |
42 | @media (min-width: 1190px) {
43 | .hero-text {
44 | padding-bottom: 2em;
45 | }
46 | }
47 |
48 | .hero-title {
49 | font-weight: bold;
50 | font-size: 36px;
51 | line-height: 48px;
52 | letter-spacing: 1px;
53 | color: #091133;
54 | margin-bottom: 0.6em;
55 | font-family: "Roboto", sans-serif;
56 | }
57 |
58 | .hero-subtitle {
59 | font-weight: 700;
60 | font-size: 20px;
61 | line-height: 28px;
62 | letter-spacing: 1px;
63 | color: #4e4e4e;
64 | margin-bottom: 1.5em;
65 | font-family: "Roboto", sans-serif;
66 | background-color: transparent;
67 | }
68 |
69 | /* Ecuador Map */
70 | .map-container {
71 | position: relative;
72 | display: none;
73 | animation: scale-up 600ms ease-in-out forwards;
74 | }
75 |
76 | .ec-map {
77 | top: 0px;
78 | right: 3%;
79 | position: absolute;
80 | z-index: 500;
81 | width: 100%;
82 | }
83 |
84 | @media only screen and (min-width: 1059px) {
85 | .map-container {
86 | min-width: 35em;
87 | display: block;
88 | }
89 | }
90 |
91 | @keyframes scale-up {
92 | 0% {
93 | transform: scale(0);
94 | }
95 | 90% {
96 | transform: scale(1.1);
97 | }
98 | 100% {
99 | transform: scale(1);
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/src/components/hero-section/hero-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import CommunityDescription from "../community-section/community-description/community-description";
3 | import PropTypes from "prop-types";
4 | import "./hero-section.css";
5 | import SocialNetworks from "./social-networks/social-networks";
6 | import mapWidget from "../../images/widgets/js-ecuador-map.svg";
7 | import CityMarkers from "./city-markers/city-markers";
8 |
9 | const HeroSection = ({ title, subtitle }) => (
10 |
11 |
12 |
{title}
13 | {subtitle}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 |
24 | HeroSection.propTypes = {
25 | title: PropTypes.string,
26 | subtitle: PropTypes.string,
27 | };
28 |
29 | export default HeroSection;
30 |
--------------------------------------------------------------------------------
/src/components/hero-section/social-networks/social-networks.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Styles For the Social Networks Component
3 | */
4 | .social-networks {
5 | font-weight: 300;
6 | font-size: 14px;
7 | line-height: 16px;
8 | text-align: justify;
9 | margin-top: 3em;
10 | margin-bottom: 0;
11 | }
12 |
13 | @media only screen and (min-width: 800px) {
14 | .social-networks {
15 | margin-top: 0;
16 | margin-bottom: 2em;
17 | }
18 | }
19 |
20 | @media only screen and (min-width: 1190px) {
21 | .social-networks {
22 | margin-top: 3em;
23 | margin-bottom: 0;
24 | }
25 | }
26 |
27 | .social-networks div {
28 | margin-top: 1.5em;
29 | max-width: 100%;
30 | display: flex;
31 | }
32 |
33 | .social-networks a {
34 | margin-right: 2em;
35 | }
36 |
--------------------------------------------------------------------------------
/src/components/hero-section/social-networks/social-networks.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import githubSVG from "../../../images/icons/github.svg";
3 | import telegramSVG from "../../../images/icons/telegram.svg";
4 | import twitterSVG from "../../../images/icons/twitter.svg";
5 | import eventbriteSVG from "../../../images/icons/eventbrite.png";
6 | import "./social-networks.css";
7 |
8 | const SocialNetworks = () => (
9 |
10 | Siguenos en:
11 |
28 |
29 | );
30 |
31 | export default SocialNetworks;
32 |
--------------------------------------------------------------------------------
/src/components/layout/layout.js:
--------------------------------------------------------------------------------
1 | import PropTypes from "prop-types";
2 | import React from "react";
3 | import Footer from "../footer/footer";
4 | import Header from "../header/header";
5 | import styles from "./layout.module.css";
6 | import pathImg from "../../images/background/path.svg";
7 | import BlogSection from "../blog-section/blog-section";
8 | import Subscribe from "../subscribe/subscribe";
9 |
10 | const Layout = ({ isHome, children }) => {
11 | let background = "";
12 | let blogSection = null;
13 |
14 | if (isHome) {
15 | background = pathImg;
16 | blogSection = ;
17 | }
18 |
19 | return (
20 |
24 |
25 | {children}
26 |
27 | {/* Comment this section until it will be implemented */}
28 | {/* {blogSection} */}
29 |
30 |
31 | );
32 | };
33 |
34 | Layout.propTypes = {
35 | isHome: PropTypes.bool, // Indicates whether it is the Homepage or not
36 | children: PropTypes.node.isRequired,
37 | };
38 |
39 | Layout.defaultProps = {
40 | isHome: false,
41 | };
42 |
43 | export default Layout;
44 |
--------------------------------------------------------------------------------
/src/components/layout/layout.module.css:
--------------------------------------------------------------------------------
1 | /* Componente Layout */
2 |
3 | .layout {
4 | display: flex;
5 | min-height: 100vh;
6 | flex-direction: column;
7 | background-repeat: no-repeat;
8 | background-position: right top;
9 | }
10 |
11 | @media only screen and (max-width: 992px) {
12 | .layout {
13 | background-size: 200%;
14 | }
15 | }
16 |
17 | .mainContent {
18 | flex: 1;
19 | }
20 |
--------------------------------------------------------------------------------
/src/components/maintainers/maintainers.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PersonasSection from "../personas-section/personas-section";
3 | import styles from "./maintainers.module.css";
4 | import { useStaticQuery, graphql } from "gatsby";
5 |
6 | const Maintainers = () => {
7 | const title = "Mantenedores";
8 | const description =
9 | "Este es el grupo de mantenedores que hacen posible los eventos";
10 | const data = useStaticQuery(graphql`
11 | query getMaintainers {
12 | allMaintainersJson {
13 | edges {
14 | node {
15 | description
16 | email
17 | github
18 | id
19 | name
20 | photo
21 | rol
22 | twitter
23 | website
24 | }
25 | }
26 | }
27 | }
28 | `);
29 | return (
30 |
37 | );
38 | };
39 |
40 | export default Maintainers;
41 |
--------------------------------------------------------------------------------
/src/components/maintainers/maintainers.module.css:
--------------------------------------------------------------------------------
1 | .maintainers {
2 | background-color: #fff;
3 | padding-bottom: 8em;
4 | }
5 |
--------------------------------------------------------------------------------
/src/components/personas-section/personas-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./personas-section.module.css";
3 | import PropTypes from "prop-types";
4 | import Personas from "../UI/personas/personas";
5 |
6 | const PersonasSection = ({ title, description, personas }) => (
7 |
8 |
9 |
{title}
10 |
{description}
11 |
12 |
13 |
14 | );
15 |
16 | PersonasSection.propTypes = {
17 | title: PropTypes.string,
18 | description: PropTypes.string,
19 | personas: PropTypes.arrayOf(PropTypes.object),
20 | };
21 |
22 | export default PersonasSection;
23 |
--------------------------------------------------------------------------------
/src/components/personas-section/personas-section.module.css:
--------------------------------------------------------------------------------
1 | .section {
2 | width: 100%;
3 | padding: 5em 0 0;
4 | }
5 |
6 | .section__title {
7 | text-align: center;
8 | font-size: 50px;
9 | font-weight: bold;
10 | font-family: "Roboto", sans-serif;
11 | }
12 |
13 | .section__description {
14 | text-align: center;
15 | font-size: 14px;
16 | font-family: "Roboto", sans-serif;
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/seo.js:
--------------------------------------------------------------------------------
1 | import { useStaticQuery, graphql } from "gatsby";
2 | import PropTypes from "prop-types";
3 | import React from "react";
4 | import { Helmet } from "react-helmet";
5 |
6 | function SEO({ description, lang, meta, keywords, title }) {
7 | const { site } = useStaticQuery(graphql`
8 | query DefaultSEOQuery {
9 | site {
10 | siteMetadata {
11 | title
12 | description
13 | author
14 | }
15 | }
16 | }
17 | `);
18 |
19 | const metaDescription = description || site.siteMetadata.description;
20 |
21 | return (
22 | 0
62 | ? {
63 | name: `keywords`,
64 | content: keywords.join(`, `),
65 | }
66 | : []
67 | )
68 | .concat(meta)}
69 | title={title}
70 | titleTemplate={`%s | ${site.siteMetadata.title}`}
71 | />
72 | );
73 | }
74 |
75 | SEO.defaultProps = {
76 | lang: `en`,
77 | keywords: [],
78 | meta: [],
79 | };
80 |
81 | SEO.propTypes = {
82 | description: PropTypes.string,
83 | keywords: PropTypes.arrayOf(PropTypes.string),
84 | lang: PropTypes.string,
85 | meta: PropTypes.array,
86 | title: PropTypes.string.isRequired,
87 | };
88 |
89 | export default SEO;
90 |
--------------------------------------------------------------------------------
/src/components/sponsors-section/sponsors-section.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./sponsors-section.module.css";
3 | import { useStaticQuery, graphql } from "gatsby";
4 | import PersonasSection from "../personas-section/personas-section";
5 |
6 | const SponsorsSection = () => {
7 | const title = "Sponsors";
8 | const description =
9 | "Estos son nuestros sponsors que hacen posible los eventos";
10 | const data = useStaticQuery(graphql`
11 | query getSponsors {
12 | allSponsorsJson {
13 | edges {
14 | node {
15 | description
16 | email
17 | github
18 | id
19 | name
20 | photo
21 | rol
22 | twitter
23 | website
24 | }
25 | }
26 | }
27 | }
28 | `);
29 | return (
30 |
37 | );
38 | };
39 |
40 | export default SponsorsSection;
41 |
--------------------------------------------------------------------------------
/src/components/sponsors-section/sponsors-section.module.css:
--------------------------------------------------------------------------------
1 | .sponsors {
2 | background-color: #f3f3f3;
3 | padding-bottom: 8em;
4 | }
5 |
--------------------------------------------------------------------------------
/src/components/subscribe/subscribe.css:
--------------------------------------------------------------------------------
1 | .subscribe {
2 | background: #ffbe00 url(../../images/js-ec-pattern.svg);
3 | background-size: 150em;
4 |
5 | display: flex;
6 | flex-direction: column;
7 | justify-content: space-around;
8 | align-items: center;
9 | padding-top: 6rem;
10 | padding-bottom: 6rem;
11 | }
12 |
13 | .subscribe p {
14 | --text-opacity: 1;
15 | color: #fff;
16 | color: rgba(255, 255, 255, var(--text-opacity));
17 | font-size: 1.5rem;
18 | text-align: center;
19 | font-weight: 700;
20 | }
21 |
22 | .subscribe form {
23 | display: flex;
24 | flex-direction: column;
25 | }
26 |
27 | .subscribe input {
28 | margin-top: 1.25rem;
29 | margin-bottom: 1.25rem;
30 | padding: 0.5rem;
31 |
32 | --text-opacity: 1;
33 | color: #000;
34 | color: rgba(0, 0, 0, var(--text-opacity));
35 | text-align: center;
36 |
37 | --placeholder-opacity: 1;
38 | color: #4a5568;
39 | color: rgba(74, 85, 104, var(--placeholder-opacity));
40 | border-radius: 0.25rem;
41 | }
42 |
43 | .subscribe button {
44 | background-color: transparent;
45 |
46 | --text-opacity: 1;
47 | color: #fff;
48 | color: rgba(255, 255, 255, var(--text-opacity));
49 |
50 | border-width: 2px;
51 | --border-opacity: 1;
52 | border-color: #fff;
53 | border-color: rgba(255, 255, 255, var(--border-opacity));
54 |
55 | padding: 0.5rem;
56 | border-radius: 0.25rem;
57 | }
58 |
59 | .subscribe button:focus {
60 | outline: 0;
61 | outline: 2px solid transparent;
62 | outline-offset: 2px;
63 | }
64 |
65 | .subscribe button:hover {
66 | --bg-opacity: 1;
67 | background-color: #fff;
68 | background-color: rgba(255, 255, 255, var(--bg-opacity));
69 |
70 | --text-opacity: 1;
71 | color: #000;
72 | color: rgba(0, 0, 0, var(--text-opacity));
73 | }
74 |
75 | @media (min-width: 1024px) {
76 | .subscribe {
77 | flex-direction: row;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/components/subscribe/subscribe.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./subscribe.css";
3 |
4 | const Subscribe = () => {
5 | return (
6 |
7 |
8 | Entérate de todos los eventos y publicaciones
9 |
10 |
11 |
19 |
20 | );
21 | };
22 |
23 | export default Subscribe;
24 |
--------------------------------------------------------------------------------
/src/constants/cities.js:
--------------------------------------------------------------------------------
1 | import ambatoImg from "../images/cities/ambato.jpg";
2 | import cuencaImg from "../images/cities/cuenca.jpg";
3 | import guayaquilImg from "../images/cities/guayaquil.jpg";
4 | import latacungaImg from "../images/cities/latacunga.jpg";
5 | import lojaImg from "../images/cities/loja.jpg";
6 | import quitoImg from "../images/cities/quito.jpg";
7 | import riobambaImg from "../images/cities/riobamba.jpg";
8 |
9 | const cities = [
10 | {
11 | imgURL: quitoImg,
12 | topic: "Quito.js",
13 | description:
14 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
15 | link: "#",
16 | },
17 | {
18 | imgURL: guayaquilImg,
19 | topic: "Guayaquil.js",
20 | description:
21 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
22 | link: "#",
23 | },
24 | {
25 | imgURL: cuencaImg,
26 | topic: "Cuenca.js",
27 | description:
28 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
29 | link: "#",
30 | },
31 | {
32 | imgURL: lojaImg,
33 | topic: "Loja.js",
34 | description:
35 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
36 | link: "#",
37 | },
38 | {
39 | imgURL: riobambaImg,
40 | topic: "Riobamba.js",
41 | description:
42 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
43 | link: "#",
44 | },
45 | {
46 | imgURL: ambatoImg,
47 | topic: "Ambato.js",
48 | description:
49 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
50 | link: "#",
51 | },
52 | {
53 | imgURL: latacungaImg,
54 | topic: "Latacunga.js",
55 | description:
56 | "Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit exercitationem repellat molestias quod repudiandae quo atque, nobis saepe ducimus, consectetur voluptates pariatur animi.",
57 | link: "#",
58 | },
59 | ];
60 |
61 | export default cities;
62 |
--------------------------------------------------------------------------------
/src/constants/eventos.js:
--------------------------------------------------------------------------------
1 | import imgEvent1 from "../images/events/event-1.jpg";
2 | import imgEvent2 from "../images/events/event-2.jpg";
3 | import imgEvent3 from "../images/events/event-3.jpg";
4 | import imgEvent4 from "../images/events/event-1.jpg";
5 | import imgEvent5 from "../images/events/event-2.jpg";
6 |
7 | export default [
8 | {
9 | id: 1,
10 | imagen: imgEvent1,
11 | titulo: "Trabajo Remoto",
12 | fechaHora: "enero 16 - 17:00",
13 | disertantes: "Crysfel Villa, Freddy Santacruz",
14 | resumen: `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit officia maiores repudiandae!`,
15 | url: "#",
16 | },
17 | {
18 | id: 2,
19 | imagen: imgEvent2,
20 | titulo: "Metodologías",
21 | fechaHora: "enero 16 - 17:00",
22 | disertantes: "Crysfel Villa, Freddy Santacruz",
23 | resumen: `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit officia maiores repudiandae!`,
24 | url: "#",
25 | },
26 | {
27 | id: 3,
28 | imagen: imgEvent3,
29 | titulo: "GraphQL",
30 | fechaHora: "enero 16 - 17:00",
31 | disertantes: "Crysfel Villa, Freddy Santacruz",
32 | resumen: `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit officia maiores repudiandae!`,
33 | url: "#",
34 | },
35 | {
36 | id: 4,
37 | imagen: imgEvent4,
38 | titulo: "GraphQL 2",
39 | fechaHora: "enero 16 - 17:00",
40 | disertantes: "Crysfel Villa, Freddy Santacruz",
41 | resumen: `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit officia maiores repudiandae!`,
42 | url: "#",
43 | },
44 | {
45 | id: 5,
46 | imagen: imgEvent5,
47 | titulo: "Gatsby",
48 | fechaHora: "enero 16 - 17:00",
49 | disertantes: "Crysfel Villa, Freddy Santacruz",
50 | resumen: `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit officia maiores repudiandae!`,
51 | url: "#",
52 | },
53 | ];
54 |
--------------------------------------------------------------------------------
/src/constants/slider.js:
--------------------------------------------------------------------------------
1 | import photo1 from "../images/slider/1era meetup cuenca.jpg";
2 | import photo2 from "../images/slider/segunda meetup.jpg";
3 |
4 | const photos = [
5 | {
6 | name: "1era meetup",
7 | photoURL: photo1,
8 | },
9 | {
10 | name: "2da meetup - Trabajo remoto mitos y realidades",
11 | photoURL: photo2,
12 | },
13 | {
14 | name: "photo3",
15 | photoURL:
16 | "https://i.picsum.photos/id/10/2500/1667.jpg?hmac=J04WWC_ebchx3WwzbM-Z4_KC_LeLBWr5LZMaAkWkF68",
17 | },
18 | {
19 | name: "photo4",
20 | photoURL:
21 | "https://i.picsum.photos/id/100/2500/1656.jpg?hmac=gWyN-7ZB32rkAjMhKXQgdHOIBRHyTSgzuOK6U0vXb1w",
22 | },
23 | {
24 | name: "photo5",
25 | photoURL:
26 | "https://i.picsum.photos/id/864/598/386.jpg?hmac=DOo0-DGwCVWdAnQAN_IHDZ2kKK_t10AGle49ztEbyYM",
27 | },
28 | ];
29 |
30 | export default photos;
31 |
--------------------------------------------------------------------------------
/src/css/style.css:
--------------------------------------------------------------------------------
1 | /*! purgecss start ignore */
2 | @tailwind base;
3 | @tailwind components;
4 |
5 | h1 {
6 | @apply text-5xl;
7 | }
8 |
9 | h2 {
10 | @apply text-4xl;
11 | }
12 |
13 | h3 {
14 | @apply text-3xl;
15 | }
16 |
17 | h4 {
18 | @apply text-2xl;
19 | }
20 |
21 | /* Fixes ol styling for markdown */
22 | ol {
23 | @apply list-decimal my-3 ml-6 font-medium text-2xl;
24 | }
25 |
26 | /*! purgecss end ignore */
27 | @tailwind utilities;
28 |
29 | body {
30 | font-family: "Roboto", sans-serif;
31 | }
32 |
33 | /* Contenedor con padding */
34 |
35 | .ec-container {
36 | padding-left: 5%;
37 | padding-right: 5%;
38 | }
39 |
40 | .section-title {
41 | font-size: 50px;
42 | font-weight: bold;
43 | font-family: "Roboto", sans-serif;
44 | }
45 |
46 | .small-widget {
47 | display: none;
48 | position: absolute;
49 | z-index: 500;
50 | }
51 |
52 | @media only screen and (min-width: 560px) {
53 | .small-widget {
54 | display: block;
55 | }
56 | }
57 |
58 | @keyframes show-up {
59 | 0% {
60 | opacity: 0;
61 | transform: translateY(10px);
62 | }
63 | 100% {
64 | opacity: 1;
65 | transform: translateY(0px);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/data/authors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "rol": "Co-Organizador",
4 | "name": "Richard Palacios G",
5 | "photo": "https://avatars0.githubusercontent.com/u/11642622?v=4",
6 | "github": "https://richardpalaciosg.dev/",
7 | "website": "https://richardpalaciosg.dev/",
8 | "email": "https://richardpalaciosg.dev/",
9 | "twitter": "https://richardpalaciosg.dev/",
10 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
11 | },
12 | {
13 | "rol": "Co-Organizador",
14 | "name": "Israel Teneda",
15 | "photo": "https://avatars2.githubusercontent.com/u/20668624?v=4",
16 | "github": "https://github.com/israteneda",
17 | "website": "https://github.com/israteneda",
18 | "email": "https://github.com/israteneda",
19 | "twitter": "https://github.com/israteneda",
20 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
21 | },
22 | {
23 | "rol": "Co-Organizador",
24 | "name": "Edisson Reinozo",
25 | "photo": "https://avatars3.githubusercontent.com/u/14936466?v=4",
26 | "github": "https://github.com/edzzn",
27 | "website": "http://edzzn.com/",
28 | "email": "http://edzzn.com/",
29 | "twitter": "http://edzzn.com/",
30 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
31 | },
32 | {
33 | "rol": "Co-Organizador",
34 | "name": "Jordan Jaramillo",
35 | "photo": "https://avatars2.githubusercontent.com/u/62086742?v=4",
36 | "github": "https://github.com/jordanrjcode",
37 | "website": "https://github.com/jordanrjcode",
38 | "email": "https://github.com/jordanrjcode",
39 | "twitter": "https://github.com/jordanrjcode",
40 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
41 | }
42 | ]
43 |
--------------------------------------------------------------------------------
/src/data/contributors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "rol": "Co-Organizador",
4 | "name": "Richard Palacios G",
5 | "photo": "https://avatars0.githubusercontent.com/u/11642622?v=4",
6 | "github": "https://richardpalaciosg.dev/",
7 | "website": "https://richardpalaciosg.dev/",
8 | "email": "https://richardpalaciosg.dev/",
9 | "twitter": "https://richardpalaciosg.dev/",
10 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
11 | },
12 | {
13 | "rol": "Co-Organizador",
14 | "name": "Edisson Reinozo",
15 | "photo": "https://avatars3.githubusercontent.com/u/14936466?v=4",
16 | "github": "http://edzzn.com/",
17 | "website": "http://edzzn.com/",
18 | "email": "http://edzzn.com/",
19 | "twitter": "http://edzzn.com/",
20 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
21 | },
22 | {
23 | "rol": "Co-Organizador",
24 | "name": "Israel Teneda",
25 | "photo": "https://avatars2.githubusercontent.com/u/20668624?v=4",
26 | "github": "https://github.com/israteneda",
27 | "website": "https://github.com/israteneda",
28 | "email": "https://github.com/israteneda",
29 | "twitter": "https://github.com/israteneda",
30 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
31 | },
32 | {
33 | "rol": "Co-Organizador",
34 | "name": "Jordan Jaramillo",
35 | "photo": "https://avatars2.githubusercontent.com/u/62086742?v=4",
36 | "github": "https://github.com/jordanrjcode",
37 | "website": "https://github.com/jordanrjcode",
38 | "email": "https://github.com/jordanrjcode",
39 | "twitter": "https://github.com/jordanrjcode",
40 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
41 | },
42 | {
43 | "rol": "Co-Organizador",
44 | "name": "Eduardo Ayora Ochoa",
45 | "photo": "https://avatars1.githubusercontent.com/u/49033198?v=4",
46 | "github": "https://github.com/EduardoAyora",
47 | "website": "https://github.com/EduardoAyora",
48 | "email": "https://github.com/EduardoAyora",
49 | "twitter": "https://github.com/EduardoAyora",
50 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
51 | },
52 | {
53 | "rol": "Co-Organizador",
54 | "name": "David Padilla",
55 | "photo": "https://avatars3.githubusercontent.com/u/25573926?v=4",
56 | "github": "https://www.davidpadilla.dev/",
57 | "website": "https://www.davidpadilla.dev/",
58 | "email": "https://www.davidpadilla.dev/",
59 | "twitter": "https://www.davidpadilla.dev/",
60 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
61 | },
62 | {
63 | "rol": "Co-Organizador",
64 | "name": "Freddy Abad",
65 | "photo": "https://avatars0.githubusercontent.com/u/38579765?v=4",
66 | "github": "https://github.com/FreddieAbad",
67 | "website": "https://github.com/FreddieAbad",
68 | "email": "https://github.com/FreddieAbad",
69 | "twitter": "https://github.com/FreddieAbad",
70 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
71 | },
72 | {
73 | "rol": "Co-Organizador",
74 | "name": "Miguel Rios R",
75 | "photo": "https://avatars3.githubusercontent.com/u/25510181?v=4",
76 | "github": "https://miguelriosr.com/",
77 | "website": "https://miguelriosr.com/",
78 | "email": "https://miguelriosr.com/",
79 | "twitter": "https://miguelriosr.com/",
80 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
81 | },
82 | {
83 | "rol": "Co-Organizador",
84 | "name": "Carlos G. Encalada B.",
85 | "photo": "https://avatars2.githubusercontent.com/u/55223838?v=4",
86 | "github": "https://github.com/skcode7",
87 | "website": "http://karlosencalada.dev",
88 | "email": "mailto:admin@karlosencalada.dev",
89 | "twitter": "https://twitter.com/karlosrocker",
90 | "description": "Desarrollador Low Code, consultor de ERPs, entusiasta de GNU-Linux y usuario de Jamstack"
91 | },
92 | {
93 | "rol": "Co-Organizador",
94 | "name": "Bryan Alba",
95 | "photo": "https://avatars0.githubusercontent.com/u/20263594?v=4",
96 | "github": "https://github.com/albamaister",
97 | "website": "https://albamaister.github.io/curriculum/",
98 | "email": "https://albamaister.github.io/curriculum/",
99 | "twitter": "https://twitter.com/albamaister",
100 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
101 | }
102 | ]
103 |
--------------------------------------------------------------------------------
/src/data/maintainers.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "rol": "Co-Organizador",
4 | "name": "Richard Palacios G",
5 | "photo": "https://avatars0.githubusercontent.com/u/11642622?v=4",
6 | "github": "https://richardpalaciosg.dev/",
7 | "website": "https://richardpalaciosg.dev/",
8 | "email": "https://richardpalaciosg.dev/",
9 | "twitter": "https://richardpalaciosg.dev/",
10 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
11 | },
12 | {
13 | "rol": "Co-Organizador",
14 | "name": "Israel Teneda",
15 | "photo": "https://avatars2.githubusercontent.com/u/20668624?v=4",
16 | "github": "https://github.com/israteneda",
17 | "website": "https://github.com/israteneda",
18 | "email": "https://github.com/israteneda",
19 | "twitter": "https://github.com/israteneda",
20 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
21 | },
22 | {
23 | "rol": "Co-Organizador",
24 | "name": "Edisson Reinozo",
25 | "photo": "https://avatars3.githubusercontent.com/u/14936466?v=4",
26 | "github": "http://edzzn.com/",
27 | "website": "http://edzzn.com/",
28 | "email": "http://edzzn.com/",
29 | "twitter": "http://edzzn.com/",
30 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
31 | },
32 | {
33 | "rol": "Co-Organizador",
34 | "name": "Jordan Jaramillo",
35 | "photo": "https://avatars2.githubusercontent.com/u/62086742?v=4",
36 | "github": "https://github.com/jordanrjcode",
37 | "website": "https://github.com/jordanrjcode",
38 | "email": "https://github.com/jordanrjcode",
39 | "twitter": "https://github.com/jordanrjcode",
40 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
41 | }
42 | ]
43 |
--------------------------------------------------------------------------------
/src/data/sponsors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "rol": "Tech/Business",
4 | "name": "Google for Startups",
5 | "photo": "https://yt3.ggpht.com/a/AATXAJyYudfggOrGzERrHeb4Q0xTBvygabSRtjjiA5_FVg=s900-c-k-c0xffffffff-no-rj-mo",
6 | "github": "#",
7 | "website": "#",
8 | "email": "#",
9 | "twitter": "#",
10 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
11 | },
12 | {
13 | "rol": "Tech/Teaching",
14 | "name": "UDACITY",
15 | "photo": "https://media-exp1.licdn.com/dms/image/C560BAQGSBVNHbqKIdA/company-logo_200_200/0?e=2159024400&v=beta&t=5RZMctpOLPnRWkh4nOtdCCx17fB52xWFKp3EjDGDsdI",
16 | "github": "#",
17 | "website": "#",
18 | "email": "#",
19 | "twitter": "#",
20 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
21 | },
22 | {
23 | "rol": "Tech/Teaching",
24 | "name": "Udemy",
25 | "photo": "https://lh3.googleusercontent.com/3bJYxTz2wadBVS21234Cl5l_Aksm04whiYa4KaWB8boywSfd1YN3LstlSGsA7oUpWZrx",
26 | "github": "#",
27 | "website": "#",
28 | "email": "#",
29 | "twitter": "#",
30 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
31 | },
32 | {
33 | "rol": "Tech",
34 | "name": "ThoughtWorks",
35 | "photo": "https://pbs.twimg.com/profile_images/900223659176058883/9c8H_9fb_400x400.jpg",
36 | "github": "#",
37 | "website": "#",
38 | "email": "#",
39 | "twitter": "#",
40 | "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit id tempus cras orci accumsan, commodo semper sagittis consequat turpis hac malesuada felis nisi senectus est. "
41 | }
42 | ]
43 |
--------------------------------------------------------------------------------
/src/images/abduction-illustration.svg:
--------------------------------------------------------------------------------
1 | taken
--------------------------------------------------------------------------------
/src/images/background/grid.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 |
--------------------------------------------------------------------------------
/src/images/background/path.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/cities/ambato.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/ambato.jpg
--------------------------------------------------------------------------------
/src/images/cities/cuenca.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/cuenca.jpg
--------------------------------------------------------------------------------
/src/images/cities/guayaquil.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/guayaquil.jpg
--------------------------------------------------------------------------------
/src/images/cities/latacunga.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/latacunga.jpg
--------------------------------------------------------------------------------
/src/images/cities/loja.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/loja.jpg
--------------------------------------------------------------------------------
/src/images/cities/quito.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/quito.jpg
--------------------------------------------------------------------------------
/src/images/cities/riobamba.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/cities/riobamba.jpg
--------------------------------------------------------------------------------
/src/images/events/event-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/events/event-1.jpg
--------------------------------------------------------------------------------
/src/images/events/event-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/events/event-2.jpg
--------------------------------------------------------------------------------
/src/images/events/event-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/events/event-3.jpg
--------------------------------------------------------------------------------
/src/images/icons/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/icons/chevron-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/icons/email.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/images/icons/eventbrite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/icons/eventbrite.png
--------------------------------------------------------------------------------
/src/images/icons/github-small.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/images/icons/github.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/images/icons/telegram.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/twitter-small.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/images/icons/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/images/icons/world.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/images/javascriptecuador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/javascriptecuador.png
--------------------------------------------------------------------------------
/src/images/logo-escudo-ec.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/images/slider/1era meetup cuenca.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/slider/1era meetup cuenca.jpg
--------------------------------------------------------------------------------
/src/images/slider/segunda meetup.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javascriptecuador/web/332196a3d320067c52a5925e9864acefc62c4b6b/src/images/slider/segunda meetup.jpg
--------------------------------------------------------------------------------
/src/images/widgets/brackets.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/images/widgets/brackets2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/images/widgets/circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/images/widgets/lines.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/widgets/square.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/widgets/times-purple.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/widgets/times-yellow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/images/widgets/triangle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/pages/404.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import Layout from "../components/layout/layout";
4 | import SEO from "../components/seo";
5 | import abductionIllustration from "../images/abduction-illustration.svg";
6 |
7 | function NotFoundPage() {
8 | return (
9 |
10 |
11 |
12 |
17 |
18 | Looks like this page is a ghost that got abducted by aliens...
19 |
20 |
21 |
22 | );
23 | }
24 |
25 | export default NotFoundPage;
26 |
--------------------------------------------------------------------------------
/src/pages/about.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import Layout from "../components/layout/layout";
4 | import SEO from "../components/seo";
5 | import dogIllustration from "../images/dog-illustration.svg";
6 |
7 | function AboutPage() {
8 | return (
9 |
10 |
14 |
15 |
16 |
17 |
18 | The point is... to live one's life in the full complexity of
19 | what one is, which is something much darker, more contradictory,
20 | more of a maelstrom of impulses and passions, of cruelty, ecstacy,
21 | and madness, than is apparent to the civilized being who glides on
22 | the surface and fits smoothly into the world.
23 |
24 |
25 |
26 | – Thomas Nagel
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | );
36 | }
37 |
38 | export default AboutPage;
39 |
--------------------------------------------------------------------------------
/src/pages/blog.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import Layout from "../components/layout/layout";
4 | import SEO from "../components/seo";
5 |
6 | import { StaticQuery, graphql, Link } from "gatsby";
7 |
8 | function BlogPage(articulos) {
9 | return (
10 |
11 |
12 |
13 |
Lista de blogs:
14 |
15 |
16 | {articulos.map((articulo) => (
17 |
18 | {articulo.title}
19 |
20 | ))}
21 |
22 |
23 |
24 | );
25 | }
26 |
27 | function renderBlogPage() {
28 | return (
29 | {
47 | const articulosFormateados = data.articulos.edges.map((articulo) => {
48 | return {
49 | ...articulo.node.frontmatter,
50 | slug: articulo.node.slug,
51 | id: articulo.node.id,
52 | };
53 | });
54 | return BlogPage(articulosFormateados);
55 | }}
56 | />
57 | );
58 | }
59 |
60 | export default renderBlogPage;
61 |
--------------------------------------------------------------------------------
/src/pages/blog/gatsby-deploy.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Deploy de un sitio de Gatsby en Netlify
3 | date: "2020-10-05"
4 | updated: "2020-10-05"
5 | description: Como realizar el deploy de un sitio construido con Gatsby a Netlify
6 | author: "https://github.com/edzzn"
7 | ---
8 |
9 | Esta es la guía base para realizar el deploy de una página construida con el framework Gatsby,
10 | en este caso se realizará el deploy de la página de la comunidad de JavaScript Ecuador.
11 |
12 | Una vez tenemos el sitio alojado en un repositorio de GitHub tenemos que conectarlo con la plataforma
13 | [Netlify](https://www.netlify.com/).
14 |
15 | 1. Añadir el repostiorio desde GitHub
16 |
17 | 
18 |
19 | 2. Conectar el repositorio
20 |
21 | Hacer clic en el botón que lleva a la pantalla donde Netlify se conecta al repositorio de GitHub.
22 |
23 | 
24 |
25 | Cuando se realiza un push a GitHub, Netlify realiza la actualización de la página automáticamente
26 |
27 | 3. Autorizar a Netlify
28 |
29 | 
30 |
31 | Hacer clic en el botón Autorizar aplicación para permitir que Netlify y GitHub se comuniquen entre sí.
32 |
33 | 4. Elegir repositorio
34 |
35 | 
36 |
37 | Ahora que se ha conectado Netlify y GitHub, aparece una lista de los repositorios de Git. Seleccionar el que se desea deployar.
38 |
39 | 5. Configurar ajustes del sitio
40 |
41 | Aquí se configura las opciones para implementar el sitio.
42 |
43 | 
44 |
45 | 6. Construir en el sitio
46 |
47 | Ahora es el momento de sentarse y relajarse, tomar algo frío para beber, rascar al perro detrás de las orejas o levantarse y
48 | caminar. (Probablemente haya estado frente a la computadora durante demasiado tiempo hoy, ¿verdad?) Netlify hace el resto, y se puede ver el progreso.
49 |
50 | 
51 |
52 | 7. Realizar cambios
53 |
54 | Cuando se realiza cambios en el sitio, estos se reflejan automáticamente de forma local, pero ¿qué pasa con la versión alojada de Netlify?
55 | Cada vez que se confirma y envía cambios a GitHub, se activa una nueva compilación en Netlify, y tan pronto como finaliza la compilación,
56 | los cambios también están disponibles en Internet.
57 |
58 | 8. Listo
59 |
60 | Espera, ¿pensaste que habría más? ¡No! Netlify lo ha hecho, incluido darle un nombre temporal al sitio.
61 | El sitio estará activo para que lo vea el público y si se desea se puede agregar un dominio personalizado.
62 |
63 | Tomado de A Step-by-Step Guide: Gatsby on Netlify
--------------------------------------------------------------------------------
/src/pages/ciudades.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import SEO from "../components/seo";
4 |
5 | const Ciudades = () => (
6 |
7 |
11 | Pagina Ciudades
12 |
13 | );
14 |
15 | export default Ciudades;
16 |
--------------------------------------------------------------------------------
/src/pages/code-of-conduct.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import codeConductImg from "../images/code-of-conduct.svg";
3 | import Layout from "../components/layout/layout";
4 | const codeConduct = () => {
5 | return (
6 |
7 |
8 | Code of conduct
9 |
10 |
11 | Este Código de Conducta establece estándares de comportamiento para
12 | todas las personas que se involucren en los espacios de participación
13 | que estén alojados y/o asociados con la comunidad Javascript Ecuador,
14 | ya sean presenciales o virtuales. Estas normas aplican a todo tipo de
15 | participante, incluyendo, pero no limitado a, administradores,
16 | moderadores de los foros y miembros de la comunidad; incluyendo a los
17 | visitantes poco frecuentes.
18 |
19 |
20 |
21 |
22 | Nuestro Compromiso
23 |
24 |
25 | Todos los involucrados en la comunidad de Javascript Ecuador
26 | buscamos crear y fomentar una comunidad abierta y acogedora,
27 | nosotros como contribuyentes y administradores nos comprometemos a
28 | hacer de la participación en este proyecto y nuestra comunidad una
29 | experiencia libre de acoso para todos, independientemente de la
30 | edad, dimensión corporal, discapacidad, etnia, identidad y
31 | expresión de género, nivel de experiencia, nacionalidad,
32 | apariencia física, raza, religión, identidad u orientación sexual.
33 | La comunidad Javascript Ecuador celebra la diversidad de su
34 | comunidad. Para la organización es de crucial importancia que
35 | estos espacios de participación presenciales y virtuales sean
36 | ámbitos inclusivos, seguros y libres de discriminación y/o
37 | violencia de cualquier tipo.
38 |
39 |
40 |
41 |
42 | Nuestros Estándares
43 |
44 |
45 | Ejemplos de comportamiento que contribuyen a crear un ambiente
46 | positivo:
47 |
48 |
49 | Uso de lenguaje amable e inclusivo
50 | Respeto a diferentes puntos de vista y experiencias
51 | Aceptación de críticas constructivas
52 | Enfocarse en lo que es mejor para la comunidad
53 | Mostrar empatía a otros miembros de la comunidad
54 |
55 | Contribuir al debate con comentarios razonables e informados
56 |
57 |
58 | Obrar de manera justa y de buena fe en las interacciones con
59 | otros participantes/miembros de la comunidad
60 |
61 |
62 | Ejemplos de comportamiento inaceptable por participantes:
63 |
64 |
65 | Uso de lenguaje o imágenes sexuales y atención sexual no deseada
66 |
67 |
68 | Comentarios insultantes o despectivos (trolling) y ataques
69 | personales o político
70 |
71 | Acoso público o privado
72 |
73 | No ser respetuoso con los límites razonables de comunicación,
74 | como "déjame en paz", "vete" o "No estoy discutiendo/hablando
75 | esto contigo".
76 |
77 |
78 | Actos discriminatorio, incluyendo pero no limitado a
79 | discriminación por condición de género, tamaño corporal, origen
80 | étnico, nacionalidad, origen social, edad, estado civil,
81 | orientación sexual, ideología, opiniones políticas, religión,
82 | habilidad mental o física, u otras.
83 |
84 |
85 | Publicación de información privada de terceros sin su
86 | consentimiento, como direcciones físicas o electrónicas
87 |
88 |
89 | Otros tipos de conducta que pudieran considerarse inapropiadas
90 | en un entorno profesional.
91 |
92 |
93 |
94 |
95 |
96 | Nuestras responsabilidades
97 |
98 |
99 | Los administradores del proyecto son responsables de clarificar
100 | los estándares de comportamiento aceptable y se espera que tomen
101 | medidas correctivas y apropiadas en respuesta a situaciones de
102 | conducta inaceptable. Los administradores del proyecto tienen el
103 | derecho y la responsabilidad de eliminar, editar o rechazar
104 | comentarios, commits, código, ediciones de documentación, issues,
105 | y otras contribuciones que no estén alineadas con este Código de
106 | Conducta, o de prohibir temporal o permanentemente a cualquier
107 | colaborador cuyo comportamiento sea inapropiado, amenazante,
108 | ofensivo o perjudicial.
109 |
110 |
111 |
112 |
113 | Alcance
114 |
115 |
116 | Este código de conducta aplica tanto a espacios del proyecto como
117 | a espacios públicos donde un individuo esté en representación del
118 | proyecto o comunidad. Ejemplos de esto incluye el uso de la cuenta
119 | oficial de correo electrónico, publicaciones a través de las redes
120 | sociales oficiales, o presentaciones con personas designadas en
121 | eventos online u offline. La representación del proyecto puede ser
122 | clarificada explicitamente por los administradores del proyecto.
123 |
124 |
125 |
126 |
127 | Aplicación
128 |
129 |
130 | Las conductas inaceptables listadas anteriormente no serán
131 | toleradas por parte de ningún miembro de la comunidad,
132 | independientemente de su función en la comunidad. Ejemplos de
133 | abuso, acoso u otro tipo de comportamiento inaceptable puede ser
134 | reportado al equipo del proyecto en
135 | javascriptecuador"arroba"gmail.com. Todas las quejas serán
136 | revisadas e investigadas, generando un resultado apropiado a las
137 | circunstancias. El equipo del proyecto está obligado a mantener
138 | confidencialidad de la persona que reportó el incidente. Detalles
139 | específicos acerca de las políticas de aplicación pueden ser
140 | publicadas por separado. Administradores que no sigan o que no
141 | hagan cumplir este Código de Conducta pueden ser eliminados de
142 | forma temporal o permanente del equipo administrador.
143 |
144 |
145 |
146 |
147 | Atribución
148 |
149 | Este Código de Conducta es una adaptación de:
150 |
171 |
172 |
173 |
174 |
175 | );
176 | };
177 |
178 | export default codeConduct;
179 |
--------------------------------------------------------------------------------
/src/pages/comunidad.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import Maintainers from "../components/maintainers/maintainers";
4 | import SEO from "../components/seo";
5 |
6 | const ComunidadPage = () => (
7 |
8 |
12 | {/* */}
13 |
14 | {/* */}
15 |
16 | );
17 |
18 | export default ComunidadPage;
19 |
--------------------------------------------------------------------------------
/src/pages/contact.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import Layout from "../components/layout/layout";
4 | import SEO from "../components/seo";
5 |
6 | function ContactPage() {
7 | return (
8 |
9 |
13 |
76 |
77 | );
78 | }
79 |
80 | export default ContactPage;
81 |
--------------------------------------------------------------------------------
/src/pages/cuentas.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import SEO from "../components/seo";
4 |
5 | const Cuentas = () => (
6 |
7 |
11 | Pagina de Cuentas
12 |
13 | );
14 |
15 | export default Cuentas;
16 |
--------------------------------------------------------------------------------
/src/pages/eventos.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import SEO from "../components/seo";
4 |
5 | const Eventos = () => (
6 |
7 |
11 | Pagina Eventos
12 |
13 | );
14 |
15 | export default Eventos;
16 |
--------------------------------------------------------------------------------
/src/pages/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import HeroSection from "../components/hero-section/hero-section";
4 | import CommunitySection from "../components/community-section/community-section";
5 | import CitiesSection from "../components/cities-section/cities-section";
6 | import EventsSection from "../components/events-section/Events";
7 | import Contributors from "../components/contributors/contributors";
8 | import CommunityHeroSection from "../components/community-hero-section/community-hero-section";
9 | import SEO from "../components/seo";
10 |
11 |
12 | const IndexPage = () => (
13 |
14 |
18 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 |
30 | export default IndexPage;
31 |
--------------------------------------------------------------------------------
/src/pages/sponsors.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import SEO from "../components/seo";
4 | import SponsorsSection from "../components/sponsors-section/sponsors-section";
5 |
6 | const Sponsors = () => (
7 |
8 |
12 |
13 |
14 | );
15 |
16 | export default Sponsors;
17 |
--------------------------------------------------------------------------------
/src/templates/blog-entry.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Layout from "../components/layout/layout";
3 | import SEO from "../components/seo";
4 | import { useStaticQuery, graphql } from "gatsby";
5 | import styles from "./blog-entry.module.css";
6 | import Author from "../components/author/author";
7 |
8 | const BlogEntry = ({ children }) => {
9 | const data = useStaticQuery(graphql`
10 | query BlogEntry {
11 | mdx {
12 | frontmatter {
13 | title
14 | date(formatString: "MMMM DD, YYYY")
15 | author {
16 | photo
17 | name
18 | github
19 | email
20 | }
21 | }
22 | }
23 | }
24 | `);
25 | const { title, date } = data.mdx.frontmatter;
26 | const { name, photo, github, email } = data.mdx.frontmatter.author;
27 | return (
28 |
29 |
30 |
31 | {title}
32 |
39 |
40 |
41 |
42 | );
43 | };
44 |
45 | export default BlogEntry;
46 |
--------------------------------------------------------------------------------
/src/templates/blog-entry.module.css:
--------------------------------------------------------------------------------
1 | .blog {
2 | margin: 2em 6em 4em;
3 | }
4 |
5 | .blog__title {
6 | text-align: center;
7 | font-weight: 700;
8 | }
9 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | // See https://tailwindcss.com/docs/configuration for details
2 | module.exports = {
3 | purge: ["./src/**/*.js"],
4 | theme: {},
5 | variants: {},
6 | // https://github.com/tailwindcss/custom-forms
7 | plugins: [require("@tailwindcss/custom-forms")],
8 | };
9 |
--------------------------------------------------------------------------------