├── .gitignore ├── .vuepress ├── config.js ├── public │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── browserconfig.xml │ ├── covers │ │ ├── are-you-sure.png │ │ ├── conciliating-laravel-and-ddd-part-2.jpg │ │ ├── conciliating-laravel-and-ddd.jpg │ │ ├── drag-drop-made-easy.jpg │ │ ├── google-calendar-part-1-integration.png │ │ ├── google-calendar-part-2-periodic-synchronizations.jpg │ │ ├── google-calendar-part-3-webhook-synchronizations.jpg │ │ ├── introducing-javel.png │ │ ├── laravel-deployment-using-gitlab-pipelines.gif │ │ ├── laravel-pagination-with-tailwindcss.png │ │ ├── learn-laravel-deployer-1.jpg │ │ ├── learn-laravel-deployer-2.jpg │ │ ├── making-cron-expressions-human-readable.png │ │ ├── redesigning-my-blog-using-vuepress-and-tailwindcss.jpg │ │ ├── renderless-editable-textarea.gif │ │ ├── renderless-resizable-textarea.gif │ │ ├── replacing-tailwind-ui-hero-patterns.png │ │ ├── so-i-wrote-my-dotfiles.jpg │ │ ├── unlock-your-frontend-skills.png │ │ ├── using-gitlabs-pipeline-with-laravel.jpg │ │ ├── visualise-your-users-as-minecraft-villagers.png │ │ ├── why-i-wrote-laravel-actions.png │ │ ├── wrap-where-clauses.jpg │ │ └── zero-downtime-deployment.jpg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png └── theme │ ├── articles.js │ ├── assets │ ├── fonts │ │ └── arkibal_serif │ │ │ ├── ArkibalSerif-Bold.eot │ │ │ ├── ArkibalSerif-Bold.svg │ │ │ ├── ArkibalSerif-Bold.woff │ │ │ ├── ArkibalSerif-Bold.woff2 │ │ │ ├── ArkibalSerif-Heavy.eot │ │ │ ├── ArkibalSerif-Heavy.svg │ │ │ ├── ArkibalSerif-Heavy.woff │ │ │ ├── ArkibalSerif-Heavy.woff2 │ │ │ ├── ArkibalSerif-Light.eot │ │ │ ├── ArkibalSerif-Light.svg │ │ │ ├── ArkibalSerif-Light.woff │ │ │ ├── ArkibalSerif-Light.woff2 │ │ │ ├── ArkibalSerif-Medium.eot │ │ │ ├── ArkibalSerif-Medium.svg │ │ │ ├── ArkibalSerif-Medium.woff │ │ │ ├── ArkibalSerif-Medium.woff2 │ │ │ ├── ArkibalSerif-Regular.eot │ │ │ ├── ArkibalSerif-Regular.svg │ │ │ ├── ArkibalSerif-Regular.woff │ │ │ ├── ArkibalSerif-Regular.woff2 │ │ │ ├── ArkibalSerif-Thin.eot │ │ │ ├── ArkibalSerif-Thin.svg │ │ │ ├── ArkibalSerif-Thin.woff │ │ │ └── ArkibalSerif-Thin.woff2 │ └── icons │ │ ├── LICENSE.md │ │ ├── icon-add-circle.svg │ │ ├── icon-add-square.svg │ │ ├── icon-add.svg │ │ ├── icon-airplane.svg │ │ ├── icon-announcement.svg │ │ ├── icon-application.svg │ │ ├── icon-archive.svg │ │ ├── icon-arrow-thick-down-circle.svg │ │ ├── icon-arrow-thick-left-circle.svg │ │ ├── icon-arrow-thick-right-circle.svg │ │ ├── icon-arrow-thick-up-circle.svg │ │ ├── icon-arrow-thin-down-circle.svg │ │ ├── icon-arrow-thin-left-circle.svg │ │ ├── icon-arrow-thin-right-circle.svg │ │ ├── icon-arrow-thin-up-circle.svg │ │ ├── icon-arrows-merge.svg │ │ ├── icon-arrows-split.svg │ │ ├── icon-asterisk.svg │ │ ├── icon-at.svg │ │ ├── icon-attach.svg │ │ ├── icon-battery-full.svg │ │ ├── icon-battery-half.svg │ │ ├── icon-bolt.svg │ │ ├── icon-book-closed.svg │ │ ├── icon-book-open.svg │ │ ├── icon-box.svg │ │ ├── icon-brick.svg │ │ ├── icon-bug.svg │ │ ├── icon-buoy.svg │ │ ├── icon-calculator.svg │ │ ├── icon-calendar-add.svg │ │ ├── icon-calendar-date.svg │ │ ├── icon-calendar-remove.svg │ │ ├── icon-calendar.svg │ │ ├── icon-camera.svg │ │ ├── icon-certificate.svg │ │ ├── icon-chart.svg │ │ ├── icon-chat-group-alt.svg │ │ ├── icon-chat-group.svg │ │ ├── icon-chat.svg │ │ ├── icon-check.svg │ │ ├── icon-cheveron-down-circle.svg │ │ ├── icon-cheveron-down.svg │ │ ├── icon-cheveron-left-circle.svg │ │ ├── icon-cheveron-right-circle.svg │ │ ├── icon-cheveron-selection.svg │ │ ├── icon-cheveron-up-circle.svg │ │ ├── icon-cheveron-up.svg │ │ ├── icon-click-target.svg │ │ ├── icon-close-circle.svg │ │ ├── icon-close-square.svg │ │ ├── icon-close.svg │ │ ├── icon-cloud-download.svg │ │ ├── icon-cloud-upload.svg │ │ ├── icon-clouds.svg │ │ ├── icon-code.svg │ │ ├── icon-cog.svg │ │ ├── icon-collection.svg │ │ ├── icon-compass.svg │ │ ├── icon-credit-card.svg │ │ ├── icon-currency-dollar.svg │ │ ├── icon-currency-euro.svg │ │ ├── icon-dashboard.svg │ │ ├── icon-deliver.svg │ │ ├── icon-desktop.svg │ │ ├── icon-device-smartphone.svg │ │ ├── icon-device-tablet.svg │ │ ├── icon-discount.svg │ │ ├── icon-document-add.svg │ │ ├── icon-document-notes.svg │ │ ├── icon-document-remove.svg │ │ ├── icon-document.svg │ │ ├── icon-door-enter.svg │ │ ├── icon-door-exit.svg │ │ ├── icon-dots-horizontal.svg │ │ ├── icon-dots-vertical.svg │ │ ├── icon-dupicate.svg │ │ ├── icon-edit.svg │ │ ├── icon-external-window.svg │ │ ├── icon-factory.svg │ │ ├── icon-fast-forward.svg │ │ ├── icon-fast-rewind.svg │ │ ├── icon-film.svg │ │ ├── icon-flag.svg │ │ ├── icon-folder-add.svg │ │ ├── icon-folder-remove.svg │ │ ├── icon-folder.svg │ │ ├── icon-globe.svg │ │ ├── icon-hard-drive.svg │ │ ├── icon-headphones.svg │ │ ├── icon-heart.svg │ │ ├── icon-help.svg │ │ ├── icon-history.svg │ │ ├── icon-home.svg │ │ ├── icon-hour-glass.svg │ │ ├── icon-identification.svg │ │ ├── icon-important.svg │ │ ├── icon-inbox-check.svg │ │ ├── icon-inbox-download.svg │ │ ├── icon-inbox-full.svg │ │ ├── icon-inbox-upload.svg │ │ ├── icon-information.svg │ │ ├── icon-interface.svg │ │ ├── icon-key.svg │ │ ├── icon-launch.svg │ │ ├── icon-layers.svg │ │ ├── icon-library.svg │ │ ├── icon-light.svg │ │ ├── icon-link.svg │ │ ├── icon-location-pin.svg │ │ ├── icon-lock-open.svg │ │ ├── icon-lock.svg │ │ ├── icon-mail.svg │ │ ├── icon-map.svg │ │ ├── icon-menu.svg │ │ ├── icon-microphone.svg │ │ ├── icon-money.svg │ │ ├── icon-monitor.svg │ │ ├── icon-mood-happy.svg │ │ ├── icon-mood-neutral.svg │ │ ├── icon-mood-sad.svg │ │ ├── icon-news.svg │ │ ├── icon-notification-off.svg │ │ ├── icon-notification.svg │ │ ├── icon-office.svg │ │ ├── icon-order-horizontal.svg │ │ ├── icon-order-vertical.svg │ │ ├── icon-package.svg │ │ ├── icon-paint.svg │ │ ├── icon-pause.svg │ │ ├── icon-phone-incoming-call.svg │ │ ├── icon-phone-outgoing-call.svg │ │ ├── icon-phone-ring.svg │ │ ├── icon-photo.svg │ │ ├── icon-pie-chart.svg │ │ ├── icon-pin.svg │ │ ├── icon-play.svg │ │ ├── icon-presentation-play.svg │ │ ├── icon-presentation.svg │ │ ├── icon-print.svg │ │ ├── icon-puzzle.svg │ │ ├── icon-receipt.svg │ │ ├── icon-refresh.svg │ │ ├── icon-remove-circle.svg │ │ ├── icon-remove-square.svg │ │ ├── icon-remove.svg │ │ ├── icon-scale.svg │ │ ├── icon-search.svg │ │ ├── icon-security-check.svg │ │ ├── icon-security-important.svg │ │ ├── icon-security.svg │ │ ├── icon-send.svg │ │ ├── icon-server.svg │ │ ├── icon-shopping-bag.svg │ │ ├── icon-shopping-basket.svg │ │ ├── icon-shopping-cart.svg │ │ ├── icon-sign.svg │ │ ├── icon-sort-ascending.svg │ │ ├── icon-sort-decending.svg │ │ ├── icon-star.svg │ │ ├── icon-stop.svg │ │ ├── icon-store.svg │ │ ├── icon-survey.svg │ │ ├── icon-swatch.svg │ │ ├── icon-tag.svg │ │ ├── icon-target.svg │ │ ├── icon-text-cursor.svg │ │ ├── icon-thermostat-full.svg │ │ ├── icon-thermostat-half.svg │ │ ├── icon-thumbs-down.svg │ │ ├── icon-thumbs-up.svg │ │ ├── icon-ticket.svg │ │ ├── icon-time.svg │ │ ├── icon-translate.svg │ │ ├── icon-trash.svg │ │ ├── icon-trending-down.svg │ │ ├── icon-trending-up.svg │ │ ├── icon-trophy.svg │ │ ├── icon-tune.svg │ │ ├── icon-umbrella.svg │ │ ├── icon-user-add.svg │ │ ├── icon-user-check.svg │ │ ├── icon-user-circle.svg │ │ ├── icon-user-couple.svg │ │ ├── icon-user-group.svg │ │ ├── icon-user-remove.svg │ │ ├── icon-user.svg │ │ ├── icon-videocam.svg │ │ ├── icon-view-hidden.svg │ │ ├── icon-view-visible.svg │ │ ├── icon-volume-down.svg │ │ ├── icon-volume-mute.svg │ │ ├── icon-volume-up.svg │ │ ├── icon-wallet.svg │ │ ├── icon-widget-add.svg │ │ ├── icon-wifi-off.svg │ │ ├── icon-wifi.svg │ │ ├── icon-work.svg │ │ ├── icon-zoom-in.svg │ │ ├── icon-zoom-out.svg │ │ └── primary.svg │ ├── components │ ├── AnimatedGradient.vue │ ├── ArticleCard.vue │ ├── ArticleGrid.vue │ ├── ArticleMetaData.vue │ ├── FloatingHeader.vue │ ├── Footer.vue │ ├── Header.vue │ ├── MenuButton.vue │ ├── Navigator.vue │ ├── Pagination.vue │ └── SubscribeForm.vue │ ├── extendPageData.js │ ├── global-components │ ├── CodePen.vue │ ├── GithubButton.vue │ ├── Icon.vue │ ├── Skills.vue │ └── YouTube.vue │ ├── index.js │ ├── layouts │ ├── Article.vue │ ├── ArticlesAll.vue │ ├── ArticlesPaginated.vue │ ├── GlobalLayout.vue │ ├── Home.vue │ ├── Layout.vue │ └── Tags.vue │ ├── search.js │ ├── styles │ ├── code.styl │ ├── container.styl │ ├── content.styl │ ├── fonts.styl │ ├── index.styl │ ├── links.styl │ ├── palette.styl │ ├── ribbons.styl │ ├── tables.styl │ └── typography.styl │ └── utils.js ├── LICENSE ├── README.md ├── articles ├── 20170905 Are you sure │ ├── Result1.mp4 │ ├── Result2.mp4 │ ├── Result3.mp4 │ ├── Result4.mp4 │ ├── States.mp4 │ ├── axios_race_condition.png │ ├── axios_race_condition_fail_fast.png │ ├── cover.png │ ├── index.md │ ├── status_diagram.png │ ├── status_diagram_clicks.png │ ├── status_diagram_submitting.png │ └── status_diagram_timeouts.png ├── 20171011 Conciliating Laravel and DDD │ ├── Compromising-layered-architecture-0.png │ ├── Compromising-layered-architecture-1.png │ ├── Compromising-layered-architecture-2.png │ ├── Compromising-layered-architecture-3.png │ ├── Compromising-layered-architecture-4.png │ ├── Layered-architecture-overview-1.png │ ├── Layered-architecture-overview-2.png │ ├── Layered-architecture-overview-3.png │ └── index.md ├── 20180219 Conciliating Laravel and DDD (part 2) │ ├── index.md │ └── meme.jpg ├── 20180221 Wrap where clauses │ └── index.md ├── 20180227 Drag&Drop made easy │ └── index.md ├── 20180311 Laravel Deployer │ └── index.md ├── 20180415 So I wrote my dotfiles... │ ├── index.md │ └── screenshot.png ├── 20180427 Learn Laravel Deployer 1 │ └── index.md ├── 20180427 Learn Laravel Deployer 2 │ └── index.md ├── 20180511 Resizable Textarea │ └── index.md ├── 20180531 Editable Textarea │ ├── Components-with-magic-wands.png │ ├── Kapture-2018-05-31-at-18.51.07.gif │ ├── Kapture-2018-05-31-at-18.57.25.gif │ ├── Kapture-2018-05-31-at-18.59.09.gif │ ├── Kapture-2018-05-31-at-19.01.41.gif │ ├── Kapture-2018-05-31-at-19.09.13.gif │ └── index.md ├── 20180603 GitLab pipelines │ ├── Screen-Shot-2018-06-03-at-17.03.04.png │ ├── docker-image-Step-1.png │ ├── docker-image-Step-2.png │ └── index.md ├── 20180806 Laravel deployment using GitLab's pipelines │ ├── cover.gif │ ├── diagram_artifacts.png │ ├── diagram_cache.png │ ├── diagram_cache_and_artifacts.png │ ├── final_pipeline.png │ ├── final_pipeline_build.png │ ├── final_pipeline_deploy.png │ ├── final_pipeline_test.png │ ├── index.md │ ├── overview_basic.png │ ├── overview_upload.png │ ├── screenshot_download_artifacts.png │ ├── screenshot_forge_ssh.png │ ├── screenshot_gitlab_variables.png │ └── screenshot_manual.gif ├── 20180912 Google Calendar Sync │ ├── Kapture-2018-08-17-at-16.35.55.gif │ ├── Part-1---Google-service-with-token.png │ ├── Part-1---Google-service.png │ ├── Part-1---Google-verif.png │ ├── Part-1---Models.png │ ├── Part-1---Next-page-tokens.png │ ├── Part-1---OAuth-final.png │ ├── Part-1---OAuth.png │ ├── Part-1---Synchronize-jobs.png │ ├── Screen-Shot-2018-08-17-at-13.40.33.png │ ├── Screen-Shot-2018-08-17-at-19.52.30.png │ ├── Screen-Shot-2018-08-17-at-20.47.06.png │ ├── Screen-Shot-2018-08-17-at-20.47.35.png │ └── index.md ├── 20180916 Google Calendar Sync 2 │ ├── Part-1---Next-page-tokens.png │ ├── Part-2---As-is-process.png │ ├── Part-2---Models.png │ ├── Part-2---Sync-tokens-usage.png │ ├── Part-2---Sync-tokens.png │ ├── Part-2---Synchronize-jobs.png │ ├── Part-2---To-be-process-with-ping.png │ ├── Part-2---To-be-process.png │ ├── Remove-constructor-from-subclasses.png │ ├── Sync-events-from-Google-calendar.gif │ └── index.md ├── 20180930 Google Calendar Sync 3 │ ├── Kapture-2018-10-02-at-17.47.13.gif │ ├── Part-3---Summary.png │ ├── Part-3---as-is.png │ ├── Part-3---event-listeners.png │ ├── Part-3---to-be-deleted.png │ ├── Part-3---to-be-hybrid.png │ ├── Part-3---to-be-refreshed.png │ ├── Part-3---to-be.png │ ├── Part-3---watch-jobs.png │ └── index.md ├── 20190211 Introducing Javel │ ├── Components-after-models.png │ ├── Components-before-models.png │ ├── Models.png │ ├── Stores.png │ └── index.md ├── 20190321 Laravel pagination with TailwindCSS │ ├── index.md │ ├── pagination.png │ ├── pagination_1.png │ ├── pagination_2.png │ ├── pagination_3.png │ ├── pagination_4.png │ ├── pagination_5.png │ └── pagination_6.png ├── 20190505 Redesigning my blog using Vuepress and TailwindCSS │ └── index.md ├── 20190607 Making CRON expressions human-readable │ ├── index.md │ └── paparazzi.png ├── 20200315 Visualise your users as Minecraft villagers │ ├── index.md │ ├── minecraft_forge_screenshot.png │ ├── minecraft_mod_1.png │ ├── minecraft_mod_2.png │ ├── minecraft_mod_2bis.png │ ├── minecraft_mod_3.png │ ├── minecraft_mod_4.png │ ├── minecraft_mod_5.png │ ├── minecraft_mod_6.png │ ├── minecraft_mod_7.png │ ├── minecraft_mod_8.png │ └── minecraft_mod_9.png ├── 20200510 Why I wrote Laravel Actions │ └── index.md ├── 20200714 Unlock your frontend skills │ ├── all_heroes.png │ ├── components.png │ ├── index.md │ ├── models.png │ ├── plugins.png │ ├── services.png │ └── stores.png ├── 20200911 Replacing Tailwind UI hero patterns │ ├── hero_pattern_1.png │ ├── hero_pattern_2.png │ ├── index.md │ └── tailwind_ui_example.png └── index.md ├── package-lock.json ├── package.json ├── pages └── cv │ ├── ccoe.jpg │ ├── elegon.png │ ├── index.md │ └── jeepfl.jpg └── tailwind.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | node_modules 4 | /public 5 | /.vuepress/dist 6 | -------------------------------------------------------------------------------- /.vuepress/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | title: 'Loris Leiva', 3 | themeConfig: { 4 | domain: 'https://lorisleiva.com', 5 | repo: 'https://github.com/lorisleiva/blog', 6 | nav: [ '/', '/tag/', '/articles/', '/cv/' ], 7 | author: { 8 | name: 'Loris Leiva', 9 | twitter: '@lorismatic', 10 | }, 11 | articlesPerPage: 11, 12 | minimumFeaturedArticles: 11, 13 | featuredArticles: [ 14 | '/replacing-tailwind-ui-hero-patterns/', 15 | '/laravel-deployment-using-gitlab-pipelines/', 16 | ], 17 | }, 18 | head: [ 19 | ['link', { rel: 'apple-touch-icon', sizes: '57x57', href: '/apple-icon-57x57.png' }], 20 | ['link', { rel: 'apple-touch-icon', sizes: '60x60', href: '/apple-icon-60x60.png' }], 21 | ['link', { rel: 'apple-touch-icon', sizes: '72x72', href: '/apple-icon-72x72.png' }], 22 | ['link', { rel: 'apple-touch-icon', sizes: '76x76', href: '/apple-icon-76x76.png' }], 23 | ['link', { rel: 'apple-touch-icon', sizes: '114x114', href: '/apple-icon-114x114.png' }], 24 | ['link', { rel: 'apple-touch-icon', sizes: '120x120', href: '/apple-icon-120x120.png' }], 25 | ['link', { rel: 'apple-touch-icon', sizes: '144x144', href: '/apple-icon-144x144.png' }], 26 | ['link', { rel: 'apple-touch-icon', sizes: '152x152', href: '/apple-icon-152x152.png' }], 27 | ['link', { rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-icon-180x180.png' }], 28 | ['link', { rel: 'icon', type: 'image/png', sizes: '192x192', href: '/android-icon-192x192.png' }], 29 | ['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' }], 30 | ['link', { rel: 'icon', type: 'image/png', sizes: '96x96', href: '/favicon-96x96.png' }], 31 | ['link', { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' }], 32 | ['link', { rel: 'manifest', href: '/manifest.json' }], 33 | ['meta', { name: 'msapplication-TileColor', content: '#ffffff' }], 34 | ['meta', { name: 'msapplication-TileImage', content: '/ms-icon-144x144.png' }], 35 | ['meta', { name: 'theme-color', content: '#ffffff' }] 36 | ], 37 | postcss: { 38 | plugins: [ 39 | require('tailwindcss')(), 40 | require('autoprefixer'), 41 | ] 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /.vuepress/public/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/android-icon-144x144.png -------------------------------------------------------------------------------- /.vuepress/public/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/android-icon-192x192.png -------------------------------------------------------------------------------- /.vuepress/public/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/android-icon-36x36.png -------------------------------------------------------------------------------- /.vuepress/public/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/android-icon-48x48.png -------------------------------------------------------------------------------- /.vuepress/public/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/android-icon-72x72.png -------------------------------------------------------------------------------- /.vuepress/public/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/android-icon-96x96.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-114x114.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-120x120.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-144x144.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-152x152.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-180x180.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-57x57.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-60x60.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-72x72.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-76x76.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon-precomposed.png -------------------------------------------------------------------------------- /.vuepress/public/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/apple-icon.png -------------------------------------------------------------------------------- /.vuepress/public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /.vuepress/public/covers/are-you-sure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/are-you-sure.png -------------------------------------------------------------------------------- /.vuepress/public/covers/conciliating-laravel-and-ddd-part-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/conciliating-laravel-and-ddd-part-2.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/conciliating-laravel-and-ddd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/conciliating-laravel-and-ddd.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/drag-drop-made-easy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/drag-drop-made-easy.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/google-calendar-part-1-integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/google-calendar-part-1-integration.png -------------------------------------------------------------------------------- /.vuepress/public/covers/google-calendar-part-2-periodic-synchronizations.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/google-calendar-part-2-periodic-synchronizations.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/google-calendar-part-3-webhook-synchronizations.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/google-calendar-part-3-webhook-synchronizations.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/introducing-javel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/introducing-javel.png -------------------------------------------------------------------------------- /.vuepress/public/covers/laravel-deployment-using-gitlab-pipelines.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/laravel-deployment-using-gitlab-pipelines.gif -------------------------------------------------------------------------------- /.vuepress/public/covers/laravel-pagination-with-tailwindcss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/laravel-pagination-with-tailwindcss.png -------------------------------------------------------------------------------- /.vuepress/public/covers/learn-laravel-deployer-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/learn-laravel-deployer-1.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/learn-laravel-deployer-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/learn-laravel-deployer-2.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/making-cron-expressions-human-readable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/making-cron-expressions-human-readable.png -------------------------------------------------------------------------------- /.vuepress/public/covers/redesigning-my-blog-using-vuepress-and-tailwindcss.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/redesigning-my-blog-using-vuepress-and-tailwindcss.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/renderless-editable-textarea.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/renderless-editable-textarea.gif -------------------------------------------------------------------------------- /.vuepress/public/covers/renderless-resizable-textarea.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/renderless-resizable-textarea.gif -------------------------------------------------------------------------------- /.vuepress/public/covers/replacing-tailwind-ui-hero-patterns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/replacing-tailwind-ui-hero-patterns.png -------------------------------------------------------------------------------- /.vuepress/public/covers/so-i-wrote-my-dotfiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/so-i-wrote-my-dotfiles.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/unlock-your-frontend-skills.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/unlock-your-frontend-skills.png -------------------------------------------------------------------------------- /.vuepress/public/covers/using-gitlabs-pipeline-with-laravel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/using-gitlabs-pipeline-with-laravel.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/visualise-your-users-as-minecraft-villagers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/visualise-your-users-as-minecraft-villagers.png -------------------------------------------------------------------------------- /.vuepress/public/covers/why-i-wrote-laravel-actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/why-i-wrote-laravel-actions.png -------------------------------------------------------------------------------- /.vuepress/public/covers/wrap-where-clauses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/wrap-where-clauses.jpg -------------------------------------------------------------------------------- /.vuepress/public/covers/zero-downtime-deployment.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/covers/zero-downtime-deployment.jpg -------------------------------------------------------------------------------- /.vuepress/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/favicon-16x16.png -------------------------------------------------------------------------------- /.vuepress/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/favicon-32x32.png -------------------------------------------------------------------------------- /.vuepress/public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/favicon-96x96.png -------------------------------------------------------------------------------- /.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /.vuepress/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /.vuepress/public/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/ms-icon-144x144.png -------------------------------------------------------------------------------- /.vuepress/public/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/ms-icon-150x150.png -------------------------------------------------------------------------------- /.vuepress/public/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/ms-icon-310x310.png -------------------------------------------------------------------------------- /.vuepress/public/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/public/ms-icon-70x70.png -------------------------------------------------------------------------------- /.vuepress/theme/articles.js: -------------------------------------------------------------------------------- 1 | import { sortByDate, fetchPagesInArray, excludePages } from '@theme/utils' 2 | 3 | export default ({ Vue }) => { 4 | Vue.mixin({ 5 | computed: { 6 | $articles () { 7 | return this.$site.pages 8 | .filter(page => page.isArticle) 9 | .sort(sortByDate) 10 | }, 11 | $featuredArticles () { 12 | const { featuredArticles, minimumFeaturedArticles } = this.$themeConfig 13 | let featured = fetchPagesInArray(this.$articles, featuredArticles) 14 | 15 | if (featured.length < minimumFeaturedArticles) { 16 | let moreFeatured = excludePages(this.$articles, featured) 17 | .slice(0, minimumFeaturedArticles - featured.length) 18 | featured.push(...moreFeatured) 19 | } 20 | 21 | return featured 22 | }, 23 | $otherArticles () { 24 | return excludePages(this.$articles, this.$featuredArticles) 25 | } 26 | } 27 | }) 28 | } 29 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Bold.eot -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Bold.woff -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Bold.woff2 -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Heavy.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Heavy.eot -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Heavy.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Heavy.woff -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Heavy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Heavy.woff2 -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Light.eot -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Light.woff -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Light.woff2 -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Medium.eot -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Medium.woff -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Medium.woff2 -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Regular.eot -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Regular.woff -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Regular.woff2 -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Thin.eot -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Thin.woff -------------------------------------------------------------------------------- /.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/.vuepress/theme/assets/fonts/arkibal_serif/ArkibalSerif-Thin.woff2 -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) Refactoring UI Inc. 2 | 3 | This License Agreement (“the Agreement”) between you, the licensee, and Refactoring UI Inc. (the “Company”), a corporation organized and existing under the laws of Ontario. The Company owns the icons (the “Product”) delivered under this Agreement. This Agreement grants you a non-exclusive, non-transferable right to use and incorporate the Product in personal and commercial projects. 4 | 5 | You agree as follows: 6 | 7 | 1. Scope of use 8 | 9 | 1. Use and incorporate the Product in personal and commercial projects including web applications, websites, native mobile applications, and printed materials, etc. 10 | 11 | 2. You may incorporate the Product in open-source projects, and are granted permission to include the Product in publicly readable repositorities as needed. 12 | 13 | 3. You may modify the Product to better serve your projects. 14 | 15 | 4. You are granted unlimited usage of the Product. 16 | 17 | 5. If an organization is the licensee, all employees of the organization may use the same license. 18 | 19 | 2. Limitations and non-use 20 | 21 | 1. You may not redistribute, sublicense or resell the Product . 22 | 23 | 2. You may not distribute, license or sell modified versions of the Product. 24 | 25 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 26 | 27 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 28 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 29 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 30 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 31 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 32 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 33 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 34 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-add-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-add-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-airplane.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-announcement.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-application.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-archive.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thick-down-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thick-left-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thick-right-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thick-up-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thin-down-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thin-left-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thin-right-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrow-thin-up-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrows-merge.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-arrows-split.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-asterisk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-at.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-attach.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-battery-full.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-battery-half.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-bolt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-book-closed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-book-open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-brick.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-bug.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-buoy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-calculator.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-calendar-add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-calendar-date.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-calendar-remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-calendar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-camera.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-certificate.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-chat-group-alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-chat-group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-down-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-left-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-right-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-selection.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-up-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cheveron-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-click-target.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-close-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-close-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cloud-download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cloud-upload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-clouds.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-cog.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-collection.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-compass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-credit-card.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-currency-dollar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-currency-euro.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-dashboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-deliver.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-desktop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-device-smartphone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-device-tablet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-discount.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-document-add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-document-notes.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-document-remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-document.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-door-enter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-door-exit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-dots-horizontal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-dots-vertical.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-dupicate.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-external-window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-factory.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-fast-forward.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-fast-rewind.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-film.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-flag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-folder-add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-folder-remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-folder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-globe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-hard-drive.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-headphones.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-help.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-history.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-hour-glass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-identification.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-important.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-inbox-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-inbox-download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-inbox-full.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-inbox-upload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-information.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-interface.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-key.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-launch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-layers.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-library.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-location-pin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-lock-open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-microphone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-money.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-monitor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-mood-happy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-mood-neutral.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-mood-sad.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-news.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-notification-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-notification.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-office.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-order-horizontal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-order-vertical.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-package.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-paint.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-phone-incoming-call.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-phone-outgoing-call.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-phone-ring.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-photo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-pie-chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-pin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-presentation-play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-presentation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-print.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-puzzle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-receipt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-refresh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-remove-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-remove-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-scale.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-security-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-security-important.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-security.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-send.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-server.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-shopping-bag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-shopping-basket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-shopping-cart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-sign.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-sort-ascending.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-sort-decending.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-stop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-store.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-survey.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-swatch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-tag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-target.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-text-cursor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-thermostat-full.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-thermostat-half.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-thumbs-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-thumbs-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-ticket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-time.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-translate.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-trending-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-trending-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-trophy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-tune.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-umbrella.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user-add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user-couple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user-group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user-remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-videocam.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-view-hidden.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-view-visible.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-volume-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-volume-mute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-volume-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-wallet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-widget-add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-wifi-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-wifi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-zoom-in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/icon-zoom-out.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/assets/icons/primary.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vuepress/theme/components/AnimatedGradient.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 28 | 29 | -------------------------------------------------------------------------------- /.vuepress/theme/components/ArticleGrid.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | -------------------------------------------------------------------------------- /.vuepress/theme/components/ArticleMetaData.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 28 | -------------------------------------------------------------------------------- /.vuepress/theme/components/Header.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 30 | -------------------------------------------------------------------------------- /.vuepress/theme/components/MenuButton.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 34 | -------------------------------------------------------------------------------- /.vuepress/theme/components/Pagination.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 21 | -------------------------------------------------------------------------------- /.vuepress/theme/components/SubscribeForm.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 61 | -------------------------------------------------------------------------------- /.vuepress/theme/extendPageData.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extendPageData (page) { 3 | ensurePageHasFrontmatter(page) 4 | classify(page) 5 | setTitle(page) 6 | setSearchableTitle(page) 7 | setIcon(page) 8 | setIsoDate(page) 9 | } 10 | } 11 | 12 | function ensurePageHasFrontmatter(page) { 13 | if (! page.frontmatter) { 14 | page.frontmatter = {} 15 | } 16 | } 17 | 18 | function classify(page) { 19 | page.isArticle = page.regularPath.startsWith('/articles/') && page.regularPath !== '/articles/' 20 | page.isTag = page.regularPath.startsWith('/tag/') 21 | page.isSearchable = page.regularPath.indexOf('/page/') === -1 22 | } 23 | 24 | function setTitle(page) { 25 | page.title = page.title 26 | || (page.path === '/tag/' && 'Tags') 27 | || page.frontmatter.title 28 | } 29 | 30 | function setSearchableTitle(page) { 31 | page.searchableTitle = page.frontmatter.searchableTitle || page.title 32 | } 33 | 34 | function setIcon(page) { 35 | page.icon = page.frontmatter.icon 36 | || (page.isArticle && 'news') 37 | || (page.isTag && 'tag') 38 | || 'document' 39 | } 40 | 41 | function setIsoDate(page) { 42 | page.isoDate = page.frontmatter.date 43 | } 44 | -------------------------------------------------------------------------------- /.vuepress/theme/global-components/CodePen.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 27 | -------------------------------------------------------------------------------- /.vuepress/theme/global-components/GithubButton.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 26 | -------------------------------------------------------------------------------- /.vuepress/theme/global-components/Icon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /.vuepress/theme/global-components/Skills.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 33 | 34 | -------------------------------------------------------------------------------- /.vuepress/theme/global-components/YouTube.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 19 | 20 | 28 | -------------------------------------------------------------------------------- /.vuepress/theme/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | plugins: [ 5 | ['@vuepress/google-analytics', { ga: 'UA-100767601-5' }], 6 | ['@vuepress/blog', { 7 | frontmatters: [ 8 | { 9 | id: 'tag', 10 | title: 'Tag', 11 | keys: ['tags'], 12 | path: '/tag/', 13 | layout: 'Tags', 14 | scopeLayout: 'ArticlesPaginated', 15 | pagination: { 16 | layout: 'ArticlesPaginated', 17 | getPaginationPageTitle: (_, key) => `${key} Tag`, 18 | } 19 | }, 20 | ], 21 | globalPagination: { 22 | lengthPerPage: 11, 23 | }, 24 | sitemap: { 25 | hostname: 'https://lorisleiva.com', 26 | }, 27 | feed: { 28 | canonical_base: 'https://lorisleiva.com', 29 | }, 30 | }], 31 | 'seo', 32 | 'disqus', 33 | require('./extendPageData.js'), 34 | ], 35 | enhanceAppFiles: [ 36 | path.resolve(__dirname, 'articles.js'), 37 | path.resolve(__dirname, 'search.js'), 38 | ], 39 | } 40 | -------------------------------------------------------------------------------- /.vuepress/theme/layouts/ArticlesAll.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 29 | -------------------------------------------------------------------------------- /.vuepress/theme/layouts/ArticlesPaginated.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 30 | -------------------------------------------------------------------------------- /.vuepress/theme/layouts/GlobalLayout.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 48 | -------------------------------------------------------------------------------- /.vuepress/theme/layouts/Home.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /.vuepress/theme/layouts/Layout.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | -------------------------------------------------------------------------------- /.vuepress/theme/layouts/Tags.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 46 | -------------------------------------------------------------------------------- /.vuepress/theme/search.js: -------------------------------------------------------------------------------- 1 | export default ({ Vue }) => { 2 | Vue.mixin({ 3 | methods: { 4 | $search (query, maxSuggestions = 5) { 5 | query = query.trim().toLowerCase() 6 | const pages = this.$site.pages.filter(page => page.isSearchable) 7 | const results = [] 8 | 9 | for (let i = 0; i < pages.length; i++) { 10 | if (maxSuggestions && results.length >= maxSuggestions) break 11 | results.push(...searchPage(pages[i], query)) 12 | } 13 | 14 | return maxSuggestions ? results.slice(0, maxSuggestions) : results 15 | } 16 | } 17 | }) 18 | } 19 | 20 | function searchPage (page, query) { 21 | if (matchPage(page, query)) return [page] 22 | if (! page.headers) return [] 23 | 24 | return page.headers 25 | .filter(header => matchHeader(header, query)) 26 | .map(header => Object.assign({}, page, { header, path: `${page.path}#${header.slug}` })) 27 | } 28 | 29 | function matchPage(page, query) { 30 | return page.searchableTitle.toLowerCase().indexOf(query) > -1 31 | } 32 | 33 | function matchHeader(header, query) { 34 | return header.title && header.title.toLowerCase().indexOf(query) > -1 35 | } 36 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/container.styl: -------------------------------------------------------------------------------- 1 | $firstBleedingPoint = 900px 2 | $secondBleedingPoint = 1040px 3 | 4 | $container 5 | width 100% 6 | max-width theme('screens.md') 7 | margin-right auto 8 | margin-left auto 9 | padding-left theme('padding.8') 10 | padding-right theme('padding.8') 11 | @media lg 12 | padding-left 0 13 | padding-right 0 14 | 15 | $container-lg 16 | @extends $container 17 | @media lg 18 | max-width $firstBleedingPoint 19 | @media xl 20 | max-width $secondBleedingPoint 21 | 22 | $break-out-of-container 23 | width 100vw 24 | position relative 25 | left 50% 26 | right 50% 27 | margin-left -50vw 28 | margin-right -50vw 29 | @media xl 30 | display block 31 | left -33.33333333333% 32 | right inherit 33 | margin-left inherit 34 | margin-right inherit 35 | width theme('screens.xl') 36 | 37 | $flex-container 38 | @extends $container 39 | display flex 40 | flex-direction column 41 | align-items center 42 | > * 43 | min-width 100% 44 | 45 | $break-out-of-flex-container 46 | @extends $break-out-of-container 47 | align-self stretch 48 | 49 | $bleed-out-of-container 50 | display block 51 | margin theme('margin.6') auto 52 | width 100% 53 | @media lg 54 | width $firstBleedingPoint 55 | @media xl 56 | width $secondBleedingPoint 57 | 58 | .container 59 | @extends $container 60 | 61 | .container-lg 62 | @extends $container-lg 63 | 64 | .container-xl 65 | margin-left theme('margin.6') 66 | margin-right theme('margin.6') 67 | @media sm 68 | margin-left theme('margin.12') 69 | margin-right theme('margin.12') 70 | @media lg 71 | margin-left theme('margin.20') 72 | margin-right theme('margin.20') 73 | 74 | .break-out-of-container 75 | @extends $break-out-of-container 76 | 77 | .bleed-out-of-container 78 | @extends $bleed-out-of-container 79 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/content.styl: -------------------------------------------------------------------------------- 1 | .content__default 2 | @extends $flex-container 3 | 4 | // Typography. 5 | font-family theme('fontFamily.content') 6 | font-size 18px 7 | @media md 8 | font-size 21px 9 | 10 | // Remove title and magnify introduction. 11 | > h1:first-of-type 12 | display none 13 | > p:first-of-type 14 | font-size theme('fontSize.xl') 15 | @media md 16 | font-size theme('fontSize.2xl') 17 | 18 | // Normal list style for content. 19 | ul 20 | list-style-type disc 21 | list-style-position outside 22 | padding-left theme('padding.8') 23 | ol 24 | list-style-type decimal 25 | list-style-position outside 26 | padding-left theme('padding.8') 27 | 28 | // Code breaks out of the container. 29 | div[class*="language-"] 30 | @extends $break-out-of-flex-container 31 | border-radius 0 32 | pre, pre[class*="language-"] 33 | @extends $container 34 | 35 | // Image breaks out of the container 36 | > p > img 37 | display block 38 | margin theme('margin.6') auto 39 | max-width 100% 40 | @media lg 41 | max-width $firstBleedingPoint 42 | @media xl 43 | max-width $secondBleedingPoint 44 | 45 | // Helpers to constraint image size 46 | @media sm 47 | for i in 1..10 48 | img[src$={'"#w' + (i * 10) + '"'}] 49 | max-width i * 10% !important 50 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/fonts.styl: -------------------------------------------------------------------------------- 1 | arkibal = ('ArkibalSerif-Thin' 200), 2 | ('ArkibalSerif-Light' 300), 3 | ('ArkibalSerif-Medium' 400), 4 | ('ArkibalSerif-Regular' 500), 5 | ('ArkibalSerif-Bold' 600), 6 | ('ArkibalSerif-Heavy' 700) 7 | 8 | for font in arkibal 9 | @font-face 10 | font-family 'Arkibal Serif' 11 | font-weight font[1] 12 | if font[2] 13 | font-style font[2] 14 | src url('~@theme/assets/fonts/arkibal_serif/' + font[0] + '.eot') 15 | src url('~@theme/assets/fonts/arkibal_serif/' + font[0] + '.eot?#iefix') format("embedded-opentype"), 16 | url('~@theme/assets/fonts/arkibal_serif/' + font[0] + '.woff2') format("woff2"), 17 | url('~@theme/assets/fonts/arkibal_serif/' + font[0] + '.woff') format("woff"), 18 | url('~@theme/assets/fonts/arkibal_serif/' + font[0] + '.svg#' + font[0]) format("svg") -------------------------------------------------------------------------------- /.vuepress/theme/styles/index.styl: -------------------------------------------------------------------------------- 1 | @require 'fonts' 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | 7 | @require '~prismjs/themes/prism-okaidia.css' 8 | @require 'palette' 9 | @require 'typography' 10 | @require 'links' 11 | @require 'tables' 12 | @require 'code' 13 | @require 'ribbons' 14 | 15 | @require 'container' 16 | @require 'content' 17 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/links.styl: -------------------------------------------------------------------------------- 1 | a 2 | text-decoration none 3 | color theme('colors.black') 4 | border-bottom 1px solid theme('colors.primary.500') 5 | &:hover 6 | color theme('colors.primary.500') 7 | 8 | a.header-anchor 9 | font-family theme('fontFamily.sans') 10 | font-weight theme('fontWeight.bold') 11 | color theme('colors.primary.300') 12 | float left 13 | font-size 0.85em 14 | margin-top 0.14em 15 | margin-left -0.85em 16 | padding-right 0.26em 17 | opacity 0 18 | text-decoration none 19 | border none 20 | &:hover 21 | color theme('colors.primary.500') 22 | h2 > & 23 | margin-top 0 24 | 25 | h1, h2, h3, h4, h5, h6 26 | &:hover .header-anchor 27 | opacity: 1 28 | 29 | .icon.outbound 30 | display none !important 31 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/palette.styl: -------------------------------------------------------------------------------- 1 | sm = '(min-width: ' + theme('screens.sm') + ')' 2 | md = '(min-width: ' + theme('screens.md') + ')' 3 | lg = '(min-width: ' + theme('screens.lg') + ')' 4 | xl = '(min-width: ' + theme('screens.xl') + ')' 5 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/ribbons.styl: -------------------------------------------------------------------------------- 1 | $ribbon-width = 100px 2 | $ribbon-height = 30px 3 | $ribbon-border = 4px 4 | $ribbon-distance = ($ribbon-width / 2) - ($ribbon-height / 2) / 1.44 5 | 6 | .ribbon 7 | position absolute 8 | overflow hidden 9 | width $ribbon-width 10 | height $ribbon-width 11 | top - ($ribbon-border * 2) 12 | left - ($ribbon-border * 2) 13 | 14 | &::before, &::after 15 | position absolute 16 | z-index -1 17 | content '' 18 | display block 19 | border $ribbon-border solid theme('colors.gray.800') 20 | border-top-color transparent 21 | border-left-color transparent 22 | &::before 23 | top 0 24 | right 0 25 | &::after 26 | bottom 0 27 | left 0 28 | 29 | span 30 | position absolute 31 | display block 32 | width $ribbon-width * 2 33 | height $ribbon-height 34 | padding 0 35 | background-color theme('colors.gray.600') 36 | box-shadow 0 5px 10px rgba(0,0,0,.1) 37 | color theme('colors.white') 38 | font-family theme('fontFamily.sans') 39 | font-size 15px 40 | font-weight 700 41 | line-height $ribbon-height 42 | text-shadow 0 1px 1px rgba(0,0,0,.2) 43 | text-transform uppercase 44 | text-align center 45 | right - $ribbon-distance 46 | top $ribbon-distance - ($ribbon-height / 2) 47 | transform rotate(-45deg) 48 | 49 | @css { 50 | .ribbon.topaz > span { @apply .bg-topaz; } 51 | .ribbon.topaz::before, .ribbon.topaz::after { @apply .border-red-800; } 52 | .ribbon.river > span { @apply .bg-river; } 53 | .ribbon.river::before, .ribbon.river::after { @apply .border-blue-700; } 54 | } 55 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/tables.styl: -------------------------------------------------------------------------------- 1 | table 2 | margin theme('margin.12') 0 3 | width 100% 4 | border-collapse collapse 5 | overflow-x: auto 6 | 7 | tr:nth-child(2n) 8 | background-color theme('colors.gray.100') 9 | 10 | th, td 11 | border 1px solid theme('colors.gray.400') 12 | padding theme('padding.2') theme('padding.6') 13 | 14 | thead 15 | th, td 16 | border none 17 | padding-bottom 0 18 | -------------------------------------------------------------------------------- /.vuepress/theme/styles/typography.styl: -------------------------------------------------------------------------------- 1 | $headings = 'h1, h2, h3, h4, h5, h6' 2 | $blocks = 'p, ul, ol, blockquote' 3 | 4 | body 5 | color theme('colors.gray.700') 6 | font-family theme('fontFamily.sans') 7 | line-height: theme('lineHeight.relaxed') 8 | 9 | {$headings} 10 | line-height theme('lineHeight.tight') 11 | font-family theme('fontFamily.sans') 12 | color theme('colors.gray.800') 13 | & + 14 | {$blocks} 15 | margin-top 0 16 | 17 | h1 18 | font-family theme('fontFamily.serif') 19 | 20 | h2 21 | font-size theme('fontSize.3xl') 22 | font-family theme('fontFamily.serif') 23 | font-weight theme('fontWeight.semibold') 24 | margin-top theme('margin.8') 25 | margin-bottom theme('margin.6') 26 | border-bottom 1px solid theme('colors.gray.400') 27 | padding-bottom .3rem 28 | @media md 29 | font-size theme('fontSize.4xl') 30 | 31 | h3 32 | font-size theme('fontSize.3xl') 33 | font-weight theme('fontWeight.bold') 34 | margin-top theme('margin.8') 35 | margin-bottom theme('margin.2') 36 | @media md 37 | margin-bottom theme('margin.3') 38 | font-size theme('fontSize.4xl') 39 | 40 | h4 41 | font-size theme('fontSize.xl') 42 | font-weight theme('fontWeight.bold') 43 | @media md 44 | font-size theme('fontSize.2xl') 45 | 46 | h4, h5, h6 47 | margin-top theme('margin.4') 48 | margin-bottom theme('margin.3') 49 | 50 | li 51 | margin-bottom theme('margin.3') 52 | 53 | {$blocks} 54 | margin-bottom theme('margin.8') 55 | 56 | blockquote 57 | font-size .9em 58 | color theme('colors.gray.600') 59 | border-left .5rem solid theme('colors.gray.400') 60 | margin theme('padding.6') 0 61 | padding theme('padding.2') theme('padding.6') 62 | > * 63 | &:first-child 64 | margin-top 0 65 | &:last-child 66 | margin-bottom 0 67 | 68 | em, strong 69 | color theme('colors.black') 70 | 71 | small 72 | color theme('colors.gray.600') 73 | -------------------------------------------------------------------------------- /.vuepress/theme/utils.js: -------------------------------------------------------------------------------- 1 | import moment from "moment" 2 | 3 | export const sortByDate = (a, b) => new Date(b.isoDate) - new Date(a.isoDate) 4 | 5 | export const fetchPagesInArray = (pages, keys) => pages 6 | .filter(page => keys.includes(page.path)) 7 | .sort((a, b) => keys.indexOf(a.path) - keys.indexOf(b.path)) 8 | 9 | export const excludePages = (pages, pagesToExclude) => 10 | pages.filter(page => ! pagesToExclude.includes(page)) 11 | 12 | export const randomElement = arr => 13 | arr[Math.floor(Math.random() * arr.length)] 14 | 15 | export const randomElements = ([...arr], n = 1) => { 16 | let m = arr.length 17 | while (m) { 18 | const i = Math.floor(Math.random() * m--) 19 | const temp = arr[i] 20 | arr[i] = arr[m] 21 | arr[m] = temp 22 | } 23 | return arr.slice(0, n) 24 | } 25 | 26 | export const relativeDate = date => moment(date).fromNow() 27 | export const formatDate = date => moment(date).format('lll') 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Loris Leiva 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Loris Leiva 3 | metaTitle: Loris Leiva | Recreational programming 4 | subtitle: Recreational programming 5 | searchableTitle: Home 6 | icon: home 7 | layout: Home 8 | --- 9 | -------------------------------------------------------------------------------- /articles/20170905 Are you sure/Result1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/Result1.mp4 -------------------------------------------------------------------------------- /articles/20170905 Are you sure/Result2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/Result2.mp4 -------------------------------------------------------------------------------- /articles/20170905 Are you sure/Result3.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/Result3.mp4 -------------------------------------------------------------------------------- /articles/20170905 Are you sure/Result4.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/Result4.mp4 -------------------------------------------------------------------------------- /articles/20170905 Are you sure/States.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/States.mp4 -------------------------------------------------------------------------------- /articles/20170905 Are you sure/axios_race_condition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/axios_race_condition.png -------------------------------------------------------------------------------- /articles/20170905 Are you sure/axios_race_condition_fail_fast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/axios_race_condition_fail_fast.png -------------------------------------------------------------------------------- /articles/20170905 Are you sure/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/cover.png -------------------------------------------------------------------------------- /articles/20170905 Are you sure/status_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/status_diagram.png -------------------------------------------------------------------------------- /articles/20170905 Are you sure/status_diagram_clicks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/status_diagram_clicks.png -------------------------------------------------------------------------------- /articles/20170905 Are you sure/status_diagram_submitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/status_diagram_submitting.png -------------------------------------------------------------------------------- /articles/20170905 Are you sure/status_diagram_timeouts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20170905 Are you sure/status_diagram_timeouts.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-0.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-1.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-2.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-3.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Compromising-layered-architecture-4.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Layered-architecture-overview-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Layered-architecture-overview-1.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Layered-architecture-overview-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Layered-architecture-overview-2.png -------------------------------------------------------------------------------- /articles/20171011 Conciliating Laravel and DDD/Layered-architecture-overview-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20171011 Conciliating Laravel and DDD/Layered-architecture-overview-3.png -------------------------------------------------------------------------------- /articles/20180219 Conciliating Laravel and DDD (part 2)/meme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180219 Conciliating Laravel and DDD (part 2)/meme.jpg -------------------------------------------------------------------------------- /articles/20180415 So I wrote my dotfiles.../screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180415 So I wrote my dotfiles.../screenshot.png -------------------------------------------------------------------------------- /articles/20180427 Learn Laravel Deployer 1/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: learn-laravel-deployer-1 3 | image: /covers/learn-laravel-deployer-1.jpg 4 | description: Deploying your Laravel application without any downtime just got easier. This video helps you get started in 5 minutes only. 5 | tags: ['Laravel', 'DevOps'] 6 | date: 2018-04-27T08:58:00Z 7 | disqus: ghost-5ae2ce40b70f970868cfdb15 8 | --- 9 | 10 | # Zero-downtime Laravel deployment in 5 minutes 11 | 12 | 13 | 14 | ## Checklist 15 | 16 | #### Set up Laravel Deployer 17 | ❑  Go to your application folder \ 18 | ❑  `composer require lorisleiva/laravel-deployer` \ 19 | ❑  `php artisan deploy:init` \ 20 | ❑  `php artisan deploy` 21 | 22 | #### Ensure your server can communicate with GitHub 23 | - If your server don’t have a SSH key, create one: \ 24 | ❑  `ssh-keygen -t rsa -b 4096 -C "root@laraveldeployer.com"` \ 25 | ❑  `eval "$(ssh-agent -s)"` \ 26 | ❑  `ssh-add ~/.ssh/id_rsa` 27 | - If your server don’t have github.com in its `known_hosts`: \ 28 | ❑  Deploy using the `git_tty` option. \ 29 | ❑  `php artisan deploy -o git_tty=true` 30 | 31 | #### Set up your production environment 32 | ❑  `php artisan ssh` \ 33 | ❑  `cp .env.example .env` \ 34 | ❑  `php artisan key:generate` \ 35 | ❑  `vim .env` and configure your production environment. \ 36 | ❑  `exit` \ 37 | ❑  `php artisan deploy` 38 | 39 | #### Update nginx configurations 40 | ❑  `vim /etc/nginx/sites-available/mydomain.com` \ 41 | ❑  Point the `root` folder to the `current/public` directory. \ 42 | ❑  `service nginx restart && service php7.2-fpm reload` -------------------------------------------------------------------------------- /articles/20180531 Editable Textarea/Components-with-magic-wands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180531 Editable Textarea/Components-with-magic-wands.png -------------------------------------------------------------------------------- /articles/20180531 Editable Textarea/Kapture-2018-05-31-at-18.51.07.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180531 Editable Textarea/Kapture-2018-05-31-at-18.51.07.gif -------------------------------------------------------------------------------- /articles/20180531 Editable Textarea/Kapture-2018-05-31-at-18.57.25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180531 Editable Textarea/Kapture-2018-05-31-at-18.57.25.gif -------------------------------------------------------------------------------- /articles/20180531 Editable Textarea/Kapture-2018-05-31-at-18.59.09.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180531 Editable Textarea/Kapture-2018-05-31-at-18.59.09.gif -------------------------------------------------------------------------------- /articles/20180531 Editable Textarea/Kapture-2018-05-31-at-19.01.41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180531 Editable Textarea/Kapture-2018-05-31-at-19.01.41.gif -------------------------------------------------------------------------------- /articles/20180531 Editable Textarea/Kapture-2018-05-31-at-19.09.13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180531 Editable Textarea/Kapture-2018-05-31-at-19.09.13.gif -------------------------------------------------------------------------------- /articles/20180603 GitLab pipelines/Screen-Shot-2018-06-03-at-17.03.04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180603 GitLab pipelines/Screen-Shot-2018-06-03-at-17.03.04.png -------------------------------------------------------------------------------- /articles/20180603 GitLab pipelines/docker-image-Step-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180603 GitLab pipelines/docker-image-Step-1.png -------------------------------------------------------------------------------- /articles/20180603 GitLab pipelines/docker-image-Step-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180603 GitLab pipelines/docker-image-Step-2.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/cover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/cover.gif -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/diagram_artifacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/diagram_artifacts.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/diagram_cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/diagram_cache.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/diagram_cache_and_artifacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/diagram_cache_and_artifacts.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline_build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline_build.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline_deploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline_deploy.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/final_pipeline_test.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/overview_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/overview_basic.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/overview_upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/overview_upload.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_download_artifacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_download_artifacts.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_forge_ssh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_forge_ssh.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_gitlab_variables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_gitlab_variables.png -------------------------------------------------------------------------------- /articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_manual.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180806 Laravel deployment using GitLab's pipelines/screenshot_manual.gif -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Kapture-2018-08-17-at-16.35.55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Kapture-2018-08-17-at-16.35.55.gif -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---Google-service-with-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---Google-service-with-token.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---Google-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---Google-service.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---Google-verif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---Google-verif.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---Models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---Models.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---Next-page-tokens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---Next-page-tokens.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---OAuth-final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---OAuth-final.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---OAuth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---OAuth.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Part-1---Synchronize-jobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Part-1---Synchronize-jobs.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-13.40.33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-13.40.33.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-19.52.30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-19.52.30.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-20.47.06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-20.47.06.png -------------------------------------------------------------------------------- /articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-20.47.35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180912 Google Calendar Sync/Screen-Shot-2018-08-17-at-20.47.35.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-1---Next-page-tokens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-1---Next-page-tokens.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---As-is-process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---As-is-process.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---Models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---Models.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---Sync-tokens-usage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---Sync-tokens-usage.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---Sync-tokens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---Sync-tokens.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---Synchronize-jobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---Synchronize-jobs.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---To-be-process-with-ping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---To-be-process-with-ping.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Part-2---To-be-process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Part-2---To-be-process.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Remove-constructor-from-subclasses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Remove-constructor-from-subclasses.png -------------------------------------------------------------------------------- /articles/20180916 Google Calendar Sync 2/Sync-events-from-Google-calendar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180916 Google Calendar Sync 2/Sync-events-from-Google-calendar.gif -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Kapture-2018-10-02-at-17.47.13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Kapture-2018-10-02-at-17.47.13.gif -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---Summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---Summary.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---as-is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---as-is.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---event-listeners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---event-listeners.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---to-be-deleted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---to-be-deleted.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---to-be-hybrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---to-be-hybrid.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---to-be-refreshed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---to-be-refreshed.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---to-be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---to-be.png -------------------------------------------------------------------------------- /articles/20180930 Google Calendar Sync 3/Part-3---watch-jobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20180930 Google Calendar Sync 3/Part-3---watch-jobs.png -------------------------------------------------------------------------------- /articles/20190211 Introducing Javel/Components-after-models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190211 Introducing Javel/Components-after-models.png -------------------------------------------------------------------------------- /articles/20190211 Introducing Javel/Components-before-models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190211 Introducing Javel/Components-before-models.png -------------------------------------------------------------------------------- /articles/20190211 Introducing Javel/Models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190211 Introducing Javel/Models.png -------------------------------------------------------------------------------- /articles/20190211 Introducing Javel/Stores.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190211 Introducing Javel/Stores.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination_1.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination_2.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination_3.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination_4.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination_5.png -------------------------------------------------------------------------------- /articles/20190321 Laravel pagination with TailwindCSS/pagination_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190321 Laravel pagination with TailwindCSS/pagination_6.png -------------------------------------------------------------------------------- /articles/20190607 Making CRON expressions human-readable/paparazzi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20190607 Making CRON expressions human-readable/paparazzi.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_forge_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_forge_screenshot.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_1.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_2.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_2bis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_2bis.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_3.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_4.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_5.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_6.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_7.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_8.png -------------------------------------------------------------------------------- /articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200315 Visualise your users as Minecraft villagers/minecraft_mod_9.png -------------------------------------------------------------------------------- /articles/20200714 Unlock your frontend skills/all_heroes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200714 Unlock your frontend skills/all_heroes.png -------------------------------------------------------------------------------- /articles/20200714 Unlock your frontend skills/components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200714 Unlock your frontend skills/components.png -------------------------------------------------------------------------------- /articles/20200714 Unlock your frontend skills/models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200714 Unlock your frontend skills/models.png -------------------------------------------------------------------------------- /articles/20200714 Unlock your frontend skills/plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200714 Unlock your frontend skills/plugins.png -------------------------------------------------------------------------------- /articles/20200714 Unlock your frontend skills/services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200714 Unlock your frontend skills/services.png -------------------------------------------------------------------------------- /articles/20200714 Unlock your frontend skills/stores.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200714 Unlock your frontend skills/stores.png -------------------------------------------------------------------------------- /articles/20200911 Replacing Tailwind UI hero patterns/hero_pattern_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200911 Replacing Tailwind UI hero patterns/hero_pattern_1.png -------------------------------------------------------------------------------- /articles/20200911 Replacing Tailwind UI hero patterns/hero_pattern_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200911 Replacing Tailwind UI hero patterns/hero_pattern_2.png -------------------------------------------------------------------------------- /articles/20200911 Replacing Tailwind UI hero patterns/tailwind_ui_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/articles/20200911 Replacing Tailwind UI hero patterns/tailwind_ui_example.png -------------------------------------------------------------------------------- /articles/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: ArticlesAll 3 | icon: collection 4 | --- 5 | 6 | # All articles 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blog", 3 | "author": "Loris Leiva", 4 | "description": "Personal website and blog", 5 | "version": "0.1.0", 6 | "license": "MIT", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/lorisleiva/blog.git" 10 | }, 11 | "keywords": [ 12 | "laravel", 13 | "vuejs", 14 | "vuepress", 15 | "php", 16 | "blog" 17 | ], 18 | "scripts": { 19 | "watch": "npm run dev", 20 | "dev": "vuepress dev", 21 | "build": "vuepress build" 22 | }, 23 | "devDependencies": { 24 | "@vue/babel-preset-app": "^4.4.6", 25 | "@vuepress/plugin-blog": "^1.9.2", 26 | "@vuepress/plugin-google-analytics": "^1.5.2", 27 | "autoprefixer": "^9.8.5", 28 | "moment": "^2.27.0", 29 | "svg-inline-loader": "^0.8.2", 30 | "tailwindcss": "^1.4.6", 31 | "tailwindcss-plugins": "^0.3.0", 32 | "vuepress": "^1.5.2", 33 | "vuepress-plugin-disqus": "^0.2.0", 34 | "vuepress-plugin-seo": "^0.1.4" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /pages/cv/ccoe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/pages/cv/ccoe.jpg -------------------------------------------------------------------------------- /pages/cv/elegon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/pages/cv/elegon.png -------------------------------------------------------------------------------- /pages/cv/jeepfl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorisleiva/blog-2019-vuepress/0b3ba2ff0b2cc9221071474baa9b733a4a76317c/pages/cv/jeepfl.jpg -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const defaultTheme = require('tailwindcss/defaultTheme') 2 | 3 | module.exports = { 4 | theme: { 5 | extend: { 6 | colors: { 7 | 'white-50p': '#FFFFFF88', 8 | primary: { 9 | '100': defaultTheme.colors.pink['100'], 10 | '200': defaultTheme.colors.pink['200'], 11 | '300': defaultTheme.colors.pink['300'], 12 | '400': defaultTheme.colors.pink['400'], 13 | '500': '#f91f40', 14 | '600': defaultTheme.colors.pink['600'], 15 | '700': defaultTheme.colors.pink['700'], 16 | '800': defaultTheme.colors.pink['800'], 17 | '900': defaultTheme.colors.pink['900'], 18 | } 19 | }, 20 | fontFamily: { 21 | sans: ['"Source Sans Pro"', ...defaultTheme.fontFamily.sans], 22 | serif: ['"Arkibal Serif"', ...defaultTheme.fontFamily.serif], 23 | content: ['Georgia', ...defaultTheme.fontFamily.sans], 24 | }, 25 | minHeight: { 26 | '72': '18rem', 27 | }, 28 | opacity: { 29 | '90': '0.9', 30 | }, 31 | }, 32 | gradients: theme => ({ 33 | topaz: ['30deg', '#EE7752', '#E73C7E'], 34 | river: ['30deg', '#23A6D5', '#23D5AB'], 35 | emerald: ['30deg', theme('colors.green.400'), theme('colors.teal.600')], 36 | blackrock: ['30deg', theme('colors.gray.700'), theme('colors.gray.900')], 37 | moonlight: ['30deg', theme('colors.gray.100'), theme('colors.gray.300')], 38 | }), 39 | }, 40 | variants: { 41 | gradients: ['responsive', 'hover'], 42 | textColor: ['responsive', 'hover', 'focus', 'group-hover'], 43 | }, 44 | plugins: [ 45 | require('tailwindcss-plugins/gradients'), 46 | ], 47 | corePlugins: { 48 | container: false, 49 | } 50 | } 51 | --------------------------------------------------------------------------------