├── .editorconfig ├── .eslintrc.js ├── .github └── workflows │ └── deploy.yml ├── .gitignore ├── .prettierrc ├── README.md ├── assets ├── images │ ├── burger.svg │ ├── cursos-codelytv-pro.png │ ├── logo-codelytv.png │ ├── plant.jpg │ └── rico-sonriente-2273.png └── styles │ └── common.css ├── common ├── Checkbox.vue └── Footer.vue ├── content └── courses.json ├── nuxt.config.js ├── package-lock.json ├── package.json ├── pages ├── 1-1-common-errors │ ├── after │ │ ├── components │ │ │ ├── Btn.vue │ │ │ ├── Card.vue │ │ │ ├── CourseInfo.vue │ │ │ ├── Courses.vue │ │ │ ├── Header.vue │ │ │ ├── Hero.vue │ │ │ └── Modal.vue │ │ └── index.vue │ └── before │ │ ├── components │ │ ├── Btn.vue │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ │ └── index.vue ├── 1-2-units │ ├── components │ │ ├── Btn.vue │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ └── index.vue ├── 2-1-responsive-flex │ ├── components │ │ ├── Card.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ └── Hero.vue │ └── index.vue ├── 2-2-responsive-grid │ ├── components │ │ ├── Card.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ └── Hero.vue │ └── index.vue ├── 3-1-grid-areas-order │ ├── components │ │ ├── Card.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ └── Hero.vue │ └── index.vue ├── 4-1-modal-position │ ├── components │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ └── index.vue ├── 4-2-menu-sticky │ ├── components │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ └── index.vue ├── 4-3-understanding-z-index │ ├── components │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ └── index.vue ├── 5-1-float │ ├── components │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ └── index.vue ├── 5-2-multi-column-masonry │ ├── components │ │ ├── Card.vue │ │ ├── CourseInfo.vue │ │ ├── Courses.vue │ │ ├── Filters.vue │ │ ├── Header.vue │ │ ├── Hero.vue │ │ └── Modal.vue │ └── index.vue └── index.vue ├── static ├── cursos │ ├── bash.jpg │ ├── buenas-practicas-bdd-cucumber-behat.jpg │ ├── comunicacion-microservicios.jpg │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg │ ├── curso-agile-retrospectivas.jpg │ ├── curso-api-http-scala.jpg │ ├── curso-app-mean-webpack.jpg │ ├── curso-app-vuejs-jest.jpg │ ├── curso-arquitectura-hexagonal.jpg │ ├── curso-aws-ec2.jpg │ ├── curso-aws-escalando-apps.jpg │ ├── curso-cqrs.jpg │ ├── curso-introduccion-scala.jpg │ ├── curso-screenshot-testing-android.jpg │ ├── curso-screenshot-testing-ios.jpg │ ├── curso-ui-testing-android.jpg │ ├── curso-ui-testing-ios.jpg │ ├── ddd-en-php.jpg │ ├── ddd-java.jpg │ ├── docker-desde-0.jpg │ ├── domain-driven-design.jpg │ ├── dotfiles.jpg │ ├── elastic-stack.jpg │ ├── git-introduccion-trabajo-en-equipo.jpg │ ├── github-actions-automatizacion.jpg │ ├── github-actions-integracion-continua.jpg │ ├── go-primera-app.jpg │ ├── intellij.jpg │ ├── iterm-productividad.jpg │ ├── kubernetes-para-desarrolladores.jpg │ ├── makefiles.jpg │ ├── migracion-vuejs.jpg │ ├── notion.jpg │ ├── programacion-funcional-refactor-typeclasses.jpg │ ├── prometheus.jpg │ ├── reactjs-de-0-a-deploy.jpg │ ├── solid.jpg │ ├── terminal-zsh.jpg │ ├── testing-introduccion-buenas-practicas.jpg │ ├── testing-vuex.jpg │ └── vistas-android.jpg └── favicon.ico └── stylelint.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | browser: true, 5 | node: true, 6 | }, 7 | parserOptions: { 8 | parser: 'babel-eslint', 9 | }, 10 | extends: [ 11 | '@nuxtjs', 12 | 'plugin:nuxt/recommended', 13 | 'prettier', 14 | 'prettier/vue', 15 | 'plugin:prettier/recommended', 16 | ], 17 | plugins: ['prettier'], 18 | // add your custom rules here 19 | rules: {}, 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: 'Deploy' 2 | on: 3 | push: 4 | branches: 5 | - main 6 | 7 | env: 8 | NODE_VERSION: '10.x' 9 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 10 | GH_TOKEN_PERSONAL: ${{ secrets.GH_TOKEN_PERSONAL }} 11 | 12 | jobs: 13 | build-and-deploy: 14 | name: Install, Build and Deploy 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@master 18 | - name: Use Node.js ${{ env.NODE_VERSION }} 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ env.NODE_VERSION }} 22 | - name: Cache node_modules 23 | id: cache-primes 24 | uses: actions/cache@v1 25 | with: 26 | path: node_modules 27 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 28 | restore-keys: | 29 | ${{ runner.os }}-node- 30 | - name: npm install, build, and test 31 | env: 32 | BASE_PATH: ${{ secrets.BASE_PATH }} 33 | run: | 34 | npm install 35 | npm run generate 36 | - name: Push to pages 37 | uses: crazy-max/ghaction-github-pages@v1.2.4 38 | with: 39 | build_dir: dist 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | /logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist 73 | 74 | # vuepress build output 75 | .vuepress/dist 76 | 77 | # Serverless directories 78 | .serverless 79 | 80 | # IDE / Editor 81 | .idea 82 | 83 | # Service worker 84 | sw.* 85 | 86 | # macOS 87 | .DS_Store 88 | 89 | # Vim swap files 90 | *.swp 91 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 📐 CSS Layouts Best Practises 2 | 3 | Code related to the [CSS Layouts Best Practises course](https://pro.codely.tv/library/layouts-css/) 4 | 5 | ## 🕵️ Project structure 6 | 7 | Lesson related content is inside the `/pages` folder. For each lesson there is a `/components` folder, whre you can find each component's html and css together in a [single file component](https://vuejs.org/v2/guide/single-file-components.html). 8 | 9 | In `/common` you will find the components that remain unchanged throughout the course. 10 | 11 | If you prefer, you can also inspect the code for each lesson on the [demo page](https://codelytv.github.io/css-layouts-best-practises-course/) with your devtools, or run the project locally as seen in the next section. 12 | 13 | ## 🏗️ Build Setup 14 | 15 | If you wish to run the project locally: 16 | 17 | ```bash 18 | # install dependencies 19 | $ npm install 20 | 21 | # serve with hot reload at localhost:3000 22 | $ npm run dev 23 | 24 | # or generate static project and serve dist folder at localhost:3000 25 | $ npm run generate 26 | $ npm run start 27 | ``` 28 | 29 | Generated html files are in the `/dist` folder. CSS files are extracted to `/dist/_nuxt/pages` 30 | -------------------------------------------------------------------------------- /assets/images/burger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/cursos-codelytv-pro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/assets/images/cursos-codelytv-pro.png -------------------------------------------------------------------------------- /assets/images/logo-codelytv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/assets/images/logo-codelytv.png -------------------------------------------------------------------------------- /assets/images/plant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/assets/images/plant.jpg -------------------------------------------------------------------------------- /assets/images/rico-sonriente-2273.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/assets/images/rico-sonriente-2273.png -------------------------------------------------------------------------------- /assets/styles/common.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --ff-default: 'IBM Plex Sans', sans-serif; 3 | --ff-primary: 'Merriweather', serif; 4 | --max-width: 80rem; 5 | --primary-color: rgb(51, 225, 124); 6 | --dark-color: #181818; 7 | } 8 | 9 | *, 10 | *::before, 11 | *::after { 12 | box-sizing: border-box; 13 | } 14 | 15 | html { 16 | font-size: 0.8rem; 17 | } 18 | @media (min-width: 512px) { 19 | html { 20 | font-size: 1rem; 21 | } 22 | } 23 | 24 | body { 25 | margin: 0; 26 | padding: 0; 27 | font-family: var(--ff-default); 28 | line-height: 1.3; 29 | background: url('~assets/images/plant.jpg') no-repeat; 30 | background-size: cover; 31 | background-attachment: fixed; 32 | } 33 | 34 | h1, 35 | h2, 36 | h3, 37 | h4, 38 | h5, 39 | h6 { 40 | font-weight: 400; 41 | font-family: var(--ff-primary); 42 | line-height: 1.2; 43 | } 44 | 45 | img { 46 | max-width: 100%; 47 | } 48 | 49 | .sr-only { 50 | position: absolute; 51 | top: auto; 52 | left: -10000px; 53 | width: 1px; 54 | height: 1px; 55 | overflow: hidden; 56 | } 57 | -------------------------------------------------------------------------------- /common/Checkbox.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 37 | 38 | 48 | -------------------------------------------------------------------------------- /common/Footer.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 36 | 37 | 92 | -------------------------------------------------------------------------------- /content/courses.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "🐂 Makefiles", 4 | "img": "makefiles.jpg", 5 | "description": "El centralizar tareas de nuestras aplicaciones es algo muy importante, y con los Makefiles se simplifica mucho." 6 | }, 7 | 8 | { 9 | "title": "🔥 Monitoring con Prometheus", 10 | "img": "prometheus.jpg", 11 | "description": "La observabilidad es una de las cosas más importantes de la programación y el Monitoring uno de sus principales pilares." 12 | }, 13 | { 14 | "title": "💻 Bash para el día a día: Scripting & Productividad", 15 | "img": "bash.jpg", 16 | "description": "Aprende a usar la navaja suiza de los programadores 😬" 17 | }, 18 | { 19 | "title": "🌈 Notion: Productividad en equipo", 20 | "img": "notion.jpg", 21 | "description": "Centraliza toda la documentación de tu equipo de trabajo y la gestión de tareas en 1 única herramienta: Notion." 22 | }, 23 | { 24 | "title": "🚀 Todo sobre los dotfiles", 25 | "img": "dotfiles.jpg", 26 | "description": "Aprende a automatizar, centralizar y compartir todas tus configuraciones gracias a los dotfiles." 27 | }, 28 | { 29 | "title": "🤖 Automatiza tu flujo de trabajo con GitHub Actions", 30 | "img": "github-actions-automatizacion.jpg", 31 | "description": "Crearemos nuestras propias actions (¡hasta publicaremos alguna en el Marketplace!) que nos puedan ser muy útiles en nuestro día a día." 32 | }, 33 | { 34 | "title": "💻 💨 Productividad con iTerm: Terminal macOS", 35 | "img": "iterm-productividad.jpg", 36 | "description": "Veremos cómo tener una terminal rapidísima y muy productiva gracias a unos simple (y escondidos) tips." 37 | }, 38 | { 39 | "title": "💻 Terminal 100% productiva con Zsh", 40 | "img": "terminal-zsh.jpg", 41 | "description": "Consigue ser un Productivity Raptor™️ con tu terminal gracias a Zsh, Oh My Zsh, Zim y funciones avanzadas." 42 | }, 43 | { 44 | "title": "🤖 Integración Continua con GitHub Actions", 45 | "img": "github-actions-integracion-continua.jpg", 46 | "description": "¡Consigue una Integración Continua de la que te puedas fiar y que sea rapidísima! Gracias a GitHub Actions veremos como lograrlo." 47 | }, 48 | { 49 | "title": "⚡ Exprimiendo IntelliJ", 50 | "img": "intellij.jpg", 51 | "description": "¡Mejora tu productividad exprimiendo IntelliJ! Consigue un aspecto minimalista, crea ficheros con plantillas personalizadas, atajos secretos, y mucho más." 52 | }, 53 | { 54 | "title": "☕ DDD en Java", 55 | "img": "ddd-java.jpg", 56 | "description": "Crea paso a paso tu aplicación Java siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más." 57 | }, 58 | { 59 | "title": "🐘 DDD en PHP", 60 | "img": "ddd-en-php.jpg", 61 | "description": "Crea paso a paso tu aplicación PHP siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más." 62 | }, 63 | { 64 | "title": "🔀 Git: Introducción y trabajo en equipo", 65 | "img": "git-introduccion-trabajo-en-equipo.jpg", 66 | "description": "Aprende a trabajar en equipo con Git y sacarle todo el provecho con aspectos avanzados como debugging, estrategias de merge, y mucho más." 67 | }, 68 | { 69 | "title": "⚡ Introducción a Go: Tu primera app", 70 | "description": "Desarrolla tu primer comando de consola con Go mientras aprendes qué hace diferente al lenguaje de moda.", 71 | "img": "go-primera-app.jpg" 72 | }, 73 | { 74 | "title": "✅ Testing: Introducción y buenas prácticas", 75 | "img": "testing-introduccion-buenas-practicas.jpg", 76 | "description": "Aprende qué aporta el testing, cómo testear y buenas prácticas para evitar que mantener tus tests sea un infierno con ejemplos de El Mundo Real™️" 77 | }, 78 | { 79 | "title": "🧱 Principios SOLID aplicados", 80 | "img": "solid.jpg", 81 | "description": "Si ya sabes desarrollar software, pero quieres ir un paso más allá y mejorar la calidad de tu código, este es tu curso" 82 | }, 83 | { 84 | "title": "🕋 Domain-Driven Design", 85 | "img": "domain-driven-design.jpg", 86 | "description": "Aprende a modelar tus aplicaciones centrándote en tu dominio, definir Bounded Contexts, agregados, value objects, y mucho más. Todo de forma práctica y con ejemplos de código ⚡" 87 | }, 88 | { 89 | "title": "🎯 Arquitectura Hexagonal", 90 | "img": "curso-arquitectura-hexagonal.jpg", 91 | "description": "Domain-Driven Design se apoya en la Arquitectura Hexagonal como uno de sus pilares a nivel técnico. Aprende a implementarla con CodelyTV!" 92 | }, 93 | { 94 | "title": "🐳 Docker: De 0 a deploy", 95 | "img": "docker-desde-0.jpg", 96 | "description": "Aprende qué es Docker y cómo sacar el mayor partido a los contenedores. Empezando desde el principio, veremos cómo usar Docker para levantar tu aplicación en local como si fuese producción, arrancando una base de datos con Docker Compose." 97 | }, 98 | { 99 | "title": "🚌 CQRS: Command Query Responsibility Segregation", 100 | "img": "curso-cqrs.jpg", 101 | "description": "Aumenta el rendimiento y el desacoplamiento de tu backend mediante CQRS. Veremos conceptos e implementaciones de buses síncronos y asíncronos." 102 | }, 103 | { 104 | "title": "💬 Comunicación entre microservicios: Event-Driven Architecture", 105 | "img": "comunicacion-microservicios.jpg", 106 | "description": "Publica y consume eventos de dominio, consistencia eventual, RabbitMQ y AWS SNS-SQS, migración de monolito a servicios, y mucho más." 107 | }, 108 | { 109 | "title": "⛵ Kubernetes para desarrolladores", 110 | "img": "kubernetes-para-desarrolladores.jpg", 111 | "description": "Aprende a orquestrar contenedores de Docker y desplegarlos en Azure, GCE, o AWS siguiendo buenas prácticas" 112 | }, 113 | { 114 | "title": "🌀 Introducción a Scala", 115 | "img": "curso-introduccion-scala.jpg", 116 | "description": "Scala es un lenguaje conciso, poco verboso, y que permite la programación funcional sin olvidar la POO. Aprenderemos cómo configurar el entorno, las bases del lenguaje, asincronía y otros tips para empezar." 117 | }, 118 | { 119 | "title": "📊 ELK: Centraliza logs con Elastic Stack", 120 | "img": "elastic-stack.jpg", 121 | "description": "Aprende a montar un stack para poder explotar toda la información de tus logs gracias a Elasticsearch, Logstash o Beats, y Kibana" 122 | }, 123 | { 124 | "title": "☁️ AWS EC2: Tu primer deploy", 125 | "img": "curso-aws-ec2.jpg", 126 | "description": "Aprende las bases de Amazon Web Services para levantar tu primera aplicación en la nube con José Armesto. Crea tu propia VPC, elige la instancia adecuada de EC2, configura SSH, elige tu AMI base y crea la tuya propia, define Security Groups, deploya, y configura Route53 como DNS!" 127 | }, 128 | { 129 | "title": "🥒 Buenas prácticas de BDD con Gherkin (Cucumber, Behat…)", 130 | "img": "buenas-practicas-bdd-cucumber-behat.jpg", 131 | "description": "Aprenderás desde los conceptos básicos para testear tu aplicación con Cucumber o Behat, hasta consejos de buenas prácticas para hacer que tu suite de tests sea más fácilmente mantenible. ¡Teoría a través de ejemplos de código en Java, JavaScript, y Ruby!" 132 | }, 133 | { 134 | "title": "⚛️ ReactJS: De 0 a deploy", 135 | "img": "reactjs-de-0-a-deploy.jpg", 136 | "description": "Crea tu primera aplicación de React llevándola hasta producción y siguiendo buenas prácticas" 137 | }, 138 | { 139 | "title": "✌️ Crea una app con VueJS y Jest aplicando TDD", 140 | "img": "curso-app-vuejs-jest.jpg", 141 | "description": "Alberto Gualis y Javi Rubio nos explicarán cómo testean aplicaciones VueJS con Jest en los Coding Stones. Incluye sesión práctica de TDD en Frontend. A lo loco!" 142 | }, 143 | { 144 | "title": "🤹 CQRS y Event Sourcing con Kotlin y Axon Framework", 145 | "img": "cqrs-event-sourcing-kotlin-axon-framework.jpg", 146 | "description": "En el curso aprenderemos qué es Event Sourcing y cómo se complementa de manera natural con la arquitectura CQRS. La parte práctica del curso consistirá en un desarrollo del típico carrito de la compra para un ecommerce usando Kotlin y el framework Axon." 147 | }, 148 | { 149 | "title": "🤝 Agile: Cómo mejorar tus retrospectivas", 150 | "img": "curso-agile-retrospectivas.jpg", 151 | "description": "A pesar de parecer simple, llevar a cabo buenas retrospectivas no siempre es fácil. En este curso José Huerta de Smoking Brains nos explicará cómo mejorar." 152 | }, 153 | { 154 | "title": "♻️️ Migrando a VueJS progresivamente", 155 | "img": "migracion-vuejs.jpg", 156 | "description": "Aprende cómo migrar un frontend ya existente a Vue.js partiendo de HTML, CSS y JS generado por backend" 157 | }, 158 | { 159 | "title": "🗣️ Tu primera API HTTP con Scala", 160 | "img": "curso-api-http-scala.jpg", 161 | "description": "Habiendo hecho el primer curso de introducción a Scala ya nos podemos meter en materia y desarrollar nuestra primera API HTTP con Scala, Akka, base de datos, y mucho más." 162 | }, 163 | { 164 | "title": "📈 AWS: Escalando apps - Load Balancers y Auto Scaling Groups", 165 | "img": "curso-aws-escalando-apps.jpg", 166 | "description": "José Armesto seguirá la serie de cursos sobre AWS hablando de cómo escalar. Introduciremos los Load Balancers y Auto Scaling Groups de AWS." 167 | }, 168 | { 169 | "title": "🎨 UI Testing en Android con Espresso", 170 | "img": "curso-ui-testing-android.jpg", 171 | "description": "En el mundo mobile la parte más importante y grande que debemos cubrir con tests es la interfaz de usuario. En este curso aprenderemos las claves para escribir buenos tests de UI con Jorge Barroso de Karumi." 172 | }, 173 | { 174 | "title": "ƛ Programación funcional: Refactorizando código orientado a objetos con TypeClasses", 175 | "img": "programacion-funcional-refactor-typeclasses.jpg", 176 | "description": "En este curso nos proponemos refactorizar la aplicación de ejemplo utilizada en el curso API HTTP con Scala y Akka con el objetivo de dotar a nuestra aplicación de mayor tolerancia al cambio. Para ello utilizaremos las type classes, una técnica que nos ofrece la programación funcional con la que podremos implementar nuestras APIs de una forma mucho más declarativa y limpiar de impurezas asíncronas nuestra lógica de negocio." 177 | }, 178 | { 179 | "title": "🍄 Testing unidirectional dataflow con Vuex y Jest", 180 | "img": "testing-vuex.jpg", 181 | "description": "Explicaremos la implementación de arquitectura de flujo unidireccional de Vuex y veremos cómo ayuda al desarrollo de aplicaciones con una jerarquía de componentes más compleja. Testearemos desde las acciones hasta el router, e incluso haremos una sesión de TDD en este contexto con un backender ;)" 182 | }, 183 | { 184 | "title": "🛡️ Crea una app MEAN profesional con AngularJS y Webpack", 185 | "img": "curso-app-mean-webpack.jpg", 186 | "description": "JuanMa Garrido nos explica cómo crear aplicaciones profesionales desde 0 basándonos en MongoDB, Express, AngularJS, y Node.js siguiendo buenas prácticas y usando Webpack." 187 | }, 188 | { 189 | "title": "📱 UI Testing en iOS con KIF", 190 | "img": "curso-ui-testing-ios.jpg", 191 | "description": "Aprende una de las técnicas de testing más potentes que existen para desarrollo móvil, aprende a hacer tests funcionales de UI para aplicaciones iOS con Sergio Gutierrez de Karumi." 192 | }, 193 | { 194 | "title": "🖌️ Exprimiendo las vistas de Android", 195 | "img": "vistas-android.jpg", 196 | "description": "Aprenderás a diseñar en Android cualquier diseño que te propongas. Empezando desde la base, iremos analizando todos los componentes hasta llegar a conceptos avanzados para que no se te resista ningún reto." 197 | }, 198 | { 199 | "title": "📸 Screenshot testing en Android", 200 | "img": "curso-screenshot-testing-android.jpg", 201 | "description": "Jorge Barroso de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en Android. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua." 202 | }, 203 | { 204 | "title": "🖼️ Screenshot testing en iOS", 205 | "img": "curso-screenshot-testing-ios.jpg", 206 | "description": "Sergio Gutierrez de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en iOS. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua." 207 | } 208 | ] 209 | -------------------------------------------------------------------------------- /nuxt.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | /* 3 | ** Nuxt rendering mode 4 | ** See https://nuxtjs.org/api/configuration-mode 5 | */ 6 | mode: 'universal', 7 | /* 8 | ** Nuxt target 9 | ** See https://nuxtjs.org/api/configuration-target 10 | */ 11 | target: 'static', 12 | /* 13 | ** Headers of the page 14 | ** See https://nuxtjs.org/api/configuration-head 15 | */ 16 | head: { 17 | htmlAttrs: { 18 | lang: 'es', 19 | }, 20 | title: process.env.npm_package_name || '', 21 | meta: [ 22 | { charset: 'utf-8' }, 23 | { name: 'viewport', content: 'width=device-width, initial-scale=1' }, 24 | { 25 | hid: 'description', 26 | name: 'description', 27 | content: process.env.npm_package_description || '', 28 | }, 29 | ], 30 | link: [ 31 | { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }, 32 | { 33 | href: 34 | 'https://fonts.googleapis.com/css2?family=IBM+Plex+Sans&family=Merriweather&display=swap', 35 | rel: 'stylesheet', 36 | }, 37 | ], 38 | }, 39 | /* 40 | ** Global CSS 41 | */ 42 | css: ['./assets/styles/common.css'], 43 | /* 44 | ** Plugins to load before mounting the App 45 | ** https://nuxtjs.org/guide/plugins 46 | */ 47 | plugins: [], 48 | /* 49 | ** Auto import components 50 | ** See https://nuxtjs.org/api/configuration-components 51 | */ 52 | components: true, 53 | /* 54 | ** Nuxt.js dev-modules 55 | */ 56 | buildModules: [ 57 | // Doc: https://github.com/nuxt-community/eslint-module 58 | '@nuxtjs/eslint-module', 59 | // Doc: https://github.com/nuxt-community/stylelint-module 60 | '@nuxtjs/stylelint-module', 61 | ], 62 | /* 63 | ** Nuxt.js modules 64 | */ 65 | modules: ['nuxt-svg-loader'], 66 | /* 67 | ** Build configuration 68 | ** See https://nuxtjs.org/api/configuration-build/ 69 | */ 70 | build: { 71 | extractCSS: true, 72 | }, 73 | router: { 74 | base: process.env.BASE_PATH || '/', 75 | }, 76 | ignore: ['**/*.test.*', 'pages/**/components/*'], 77 | } 78 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "css-layouts-best-practises-course", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "nuxt", 7 | "build": "nuxt build", 8 | "start": "nuxt start", 9 | "generate": "nuxt generate", 10 | "lint:js": "eslint --ext .js,.vue --ignore-path .gitignore .", 11 | "lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore", 12 | "lint": "npm run lint:js && npm run lint:style" 13 | }, 14 | "lint-staged": { 15 | "*.{js,vue}": "eslint", 16 | "*.{css,vue}": "stylelint" 17 | }, 18 | "husky": { 19 | "hooks": { 20 | "pre-commit": "lint-staged" 21 | } 22 | }, 23 | "dependencies": { 24 | "nuxt": "^2.14.0" 25 | }, 26 | "devDependencies": { 27 | "@nuxtjs/eslint-config": "^3.1.0", 28 | "@nuxtjs/eslint-module": "^2.0.0", 29 | "@nuxtjs/stylelint-module": "^4.0.0", 30 | "babel-eslint": "^10.1.0", 31 | "eslint": "^7.5.0", 32 | "eslint-config-prettier": "^6.11.0", 33 | "eslint-plugin-nuxt": "^1.0.0", 34 | "eslint-plugin-prettier": "^3.1.4", 35 | "husky": "^4.2.5", 36 | "lint-staged": "^10.2.11", 37 | "nuxt-svg-loader": "^1.2.0", 38 | "prettier": "^2.0.5", 39 | "stylelint": "^13.7.1", 40 | "stylelint-config-prettier": "^8.0.2", 41 | "stylelint-config-rational-order": "^0.1.2", 42 | "stylelint-config-standard": "^20.0.0", 43 | "stylelint-order": "^4.1.0", 44 | "stylelint-prettier": "^1.1.2" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/Btn.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 19 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 72 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 62 | 63 | 91 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 88 | 89 | 164 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 38 | 39 | 48 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 48 | 49 | 69 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/after/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/Btn.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 20 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 72 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 62 | 63 | 91 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 88 | 89 | 164 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 38 | 39 | 48 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 49 | 50 | 70 | -------------------------------------------------------------------------------- /pages/1-1-common-errors/before/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/1-2-units/components/Btn.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | -------------------------------------------------------------------------------- /pages/1-2-units/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/1-2-units/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 72 | -------------------------------------------------------------------------------- /pages/1-2-units/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 62 | 63 | 91 | -------------------------------------------------------------------------------- /pages/1-2-units/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 92 | 93 | 168 | -------------------------------------------------------------------------------- /pages/1-2-units/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 38 | 39 | 48 | -------------------------------------------------------------------------------- /pages/1-2-units/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 48 | 49 | 69 | -------------------------------------------------------------------------------- /pages/1-2-units/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 19 | 20 | 33 | -------------------------------------------------------------------------------- /pages/2-1-responsive-flex/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/2-1-responsive-flex/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 53 | 54 | 71 | -------------------------------------------------------------------------------- /pages/2-1-responsive-flex/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/2-1-responsive-flex/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 86 | 87 | 162 | -------------------------------------------------------------------------------- /pages/2-1-responsive-flex/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/2-1-responsive-flex/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/2-2-responsive-grid/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/2-2-responsive-grid/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 41 | 42 | 59 | -------------------------------------------------------------------------------- /pages/2-2-responsive-grid/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/2-2-responsive-grid/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 86 | 87 | 162 | -------------------------------------------------------------------------------- /pages/2-2-responsive-grid/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/2-2-responsive-grid/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/3-1-grid-areas-order/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/3-1-grid-areas-order/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 52 | 53 | 70 | -------------------------------------------------------------------------------- /pages/3-1-grid-areas-order/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 41 | 42 | 64 | -------------------------------------------------------------------------------- /pages/3-1-grid-areas-order/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 86 | 87 | 162 | -------------------------------------------------------------------------------- /pages/3-1-grid-areas-order/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/3-1-grid-areas-order/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 72 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 51 | 52 | 82 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 86 | 87 | 162 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 48 | 49 | 69 | -------------------------------------------------------------------------------- /pages/4-1-modal-position/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 32 | 33 | 48 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 72 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 51 | 52 | 82 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 89 | 90 | 165 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 48 | 49 | 69 | -------------------------------------------------------------------------------- /pages/4-2-menu-sticky/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 42 | 43 | 58 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 72 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 51 | 52 | 82 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 90 | 91 | 166 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 49 | 50 | 70 | -------------------------------------------------------------------------------- /pages/4-3-understanding-z-index/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/5-1-float/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 42 | 43 | 58 | -------------------------------------------------------------------------------- /pages/5-1-float/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 82 | -------------------------------------------------------------------------------- /pages/5-1-float/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 51 | 52 | 82 | -------------------------------------------------------------------------------- /pages/5-1-float/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/5-1-float/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 90 | 91 | 166 | -------------------------------------------------------------------------------- /pages/5-1-float/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/5-1-float/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 49 | 50 | 70 | -------------------------------------------------------------------------------- /pages/5-1-float/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/Card.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 44 | 45 | 60 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/CourseInfo.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 82 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/Courses.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 50 | 51 | 81 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/Filters.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 68 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 90 | 91 | 166 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 49 | 50 | 70 | -------------------------------------------------------------------------------- /pages/5-2-multi-column-masonry/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 53 | -------------------------------------------------------------------------------- /static/cursos/bash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/bash.jpg -------------------------------------------------------------------------------- /static/cursos/buenas-practicas-bdd-cucumber-behat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/buenas-practicas-bdd-cucumber-behat.jpg -------------------------------------------------------------------------------- /static/cursos/comunicacion-microservicios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/comunicacion-microservicios.jpg -------------------------------------------------------------------------------- /static/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg -------------------------------------------------------------------------------- /static/cursos/curso-agile-retrospectivas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-agile-retrospectivas.jpg -------------------------------------------------------------------------------- /static/cursos/curso-api-http-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-api-http-scala.jpg -------------------------------------------------------------------------------- /static/cursos/curso-app-mean-webpack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-app-mean-webpack.jpg -------------------------------------------------------------------------------- /static/cursos/curso-app-vuejs-jest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-app-vuejs-jest.jpg -------------------------------------------------------------------------------- /static/cursos/curso-arquitectura-hexagonal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-arquitectura-hexagonal.jpg -------------------------------------------------------------------------------- /static/cursos/curso-aws-ec2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-aws-ec2.jpg -------------------------------------------------------------------------------- /static/cursos/curso-aws-escalando-apps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-aws-escalando-apps.jpg -------------------------------------------------------------------------------- /static/cursos/curso-cqrs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-cqrs.jpg -------------------------------------------------------------------------------- /static/cursos/curso-introduccion-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-introduccion-scala.jpg -------------------------------------------------------------------------------- /static/cursos/curso-screenshot-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-screenshot-testing-android.jpg -------------------------------------------------------------------------------- /static/cursos/curso-screenshot-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-screenshot-testing-ios.jpg -------------------------------------------------------------------------------- /static/cursos/curso-ui-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-ui-testing-android.jpg -------------------------------------------------------------------------------- /static/cursos/curso-ui-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/curso-ui-testing-ios.jpg -------------------------------------------------------------------------------- /static/cursos/ddd-en-php.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/ddd-en-php.jpg -------------------------------------------------------------------------------- /static/cursos/ddd-java.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/ddd-java.jpg -------------------------------------------------------------------------------- /static/cursos/docker-desde-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/docker-desde-0.jpg -------------------------------------------------------------------------------- /static/cursos/domain-driven-design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/domain-driven-design.jpg -------------------------------------------------------------------------------- /static/cursos/dotfiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/dotfiles.jpg -------------------------------------------------------------------------------- /static/cursos/elastic-stack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/elastic-stack.jpg -------------------------------------------------------------------------------- /static/cursos/git-introduccion-trabajo-en-equipo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/git-introduccion-trabajo-en-equipo.jpg -------------------------------------------------------------------------------- /static/cursos/github-actions-automatizacion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/github-actions-automatizacion.jpg -------------------------------------------------------------------------------- /static/cursos/github-actions-integracion-continua.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/github-actions-integracion-continua.jpg -------------------------------------------------------------------------------- /static/cursos/go-primera-app.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/go-primera-app.jpg -------------------------------------------------------------------------------- /static/cursos/intellij.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/intellij.jpg -------------------------------------------------------------------------------- /static/cursos/iterm-productividad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/iterm-productividad.jpg -------------------------------------------------------------------------------- /static/cursos/kubernetes-para-desarrolladores.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/kubernetes-para-desarrolladores.jpg -------------------------------------------------------------------------------- /static/cursos/makefiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/makefiles.jpg -------------------------------------------------------------------------------- /static/cursos/migracion-vuejs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/migracion-vuejs.jpg -------------------------------------------------------------------------------- /static/cursos/notion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/notion.jpg -------------------------------------------------------------------------------- /static/cursos/programacion-funcional-refactor-typeclasses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/programacion-funcional-refactor-typeclasses.jpg -------------------------------------------------------------------------------- /static/cursos/prometheus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/prometheus.jpg -------------------------------------------------------------------------------- /static/cursos/reactjs-de-0-a-deploy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/reactjs-de-0-a-deploy.jpg -------------------------------------------------------------------------------- /static/cursos/solid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/solid.jpg -------------------------------------------------------------------------------- /static/cursos/terminal-zsh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/terminal-zsh.jpg -------------------------------------------------------------------------------- /static/cursos/testing-introduccion-buenas-practicas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/testing-introduccion-buenas-practicas.jpg -------------------------------------------------------------------------------- /static/cursos/testing-vuex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/testing-vuex.jpg -------------------------------------------------------------------------------- /static/cursos/vistas-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/cursos/vistas-android.jpg -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/css-layouts-best-practises-course/c54b023b348dfbec212b5e7c257fed6c484a95db/static/favicon.ico -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | 'stylelint-config-standard', 4 | 'stylelint-config-rational-order', 5 | 'stylelint-config-prettier', 6 | ], 7 | plugins: ['stylelint-prettier'], 8 | rules: { 9 | 'prettier/prettier': true, 10 | 'at-rule-no-unknown': null, 11 | }, 12 | } 13 | --------------------------------------------------------------------------------