├── .babelrc ├── .editorconfig ├── .env ├── .env.example ├── .eslintignore ├── .eslintrc.json ├── .github └── ISSUE_TEMPLATE │ ├── bug.md │ ├── code-refactor.md │ └── feature-request.md ├── .gitignore ├── .idea ├── .gitignore ├── grey.software.iml ├── misc.xml ├── modules.xml └── vcs.xml ├── .prettierignore ├── .prettierrc ├── .stylelint.config.js ├── .vscode └── settings.json ├── Credits.md ├── README.md ├── assets ├── README.md ├── Toonin.png ├── icons │ ├── apprentice.svg │ ├── close.svg │ ├── closed-issues.svg │ ├── create.svg │ ├── creatives.svg │ ├── designers.svg │ ├── discord.svg │ ├── donate.svg │ ├── educate.svg │ ├── educators.svg │ ├── engineers.svg │ ├── explorer.svg │ ├── github-sponsors.svg │ ├── github.svg │ ├── menu.svg │ ├── merge-open-pr.svg │ ├── merge-pr.svg │ ├── new-issues.svg │ ├── open-collective.svg │ ├── paypal.png │ ├── paypal.svg │ ├── strategists.svg │ ├── vuejs.svg │ └── web-portfolio.svg ├── img │ ├── apps.svg │ ├── learn.svg │ ├── open-source.svg │ ├── projects.svg │ └── wretch.svg ├── logo.png ├── material-math.png └── styles │ ├── customize-vuetify.css │ ├── main.css │ ├── tailwind.css │ └── variables.scss ├── components ├── CenteredHero.vue ├── ContentCols1x2.vue ├── ContentCols1x3.vue ├── Contributor.vue ├── Footer.vue ├── GreyFeatureCard.vue ├── GreyHero.vue ├── Header.vue ├── InsightsCard.vue ├── LevelImageLeft.vue ├── LevelImageRight.vue ├── LogoGrid.vue ├── MarkdownContent.vue ├── ProjectCard.vue ├── ProjectCardTabs.vue ├── SideBar.vue ├── Testimonial.vue ├── TestimonialCard.vue ├── ThreeColumnChild.vue ├── Timeline.vue ├── TimelineItem.vue ├── VisionTimeline.vue └── WeeklyReport.vue ├── content ├── blog │ ├── debug-css.md │ └── useful-git-aliases.md ├── contributors.json ├── faq.md ├── projects │ ├── active.md │ └── projects.json ├── success-stories.md └── vision │ ├── index.md │ └── personas.md ├── jest.config.js ├── layouts ├── README.md └── default.vue ├── middleware └── README.md ├── nuxt.config.js ├── package.json ├── pages ├── README.md ├── blog │ ├── _slug.vue │ └── index.vue ├── faq │ └── index.vue ├── index.vue ├── projects │ └── index.vue ├── shop │ └── index.vue ├── success-stories │ └── index.vue ├── this-week │ └── index.vue ├── vision │ ├── _slug.vue │ └── index.vue └── why-donate │ └── index.vue ├── plugins └── README.md ├── screenshot.png ├── scripts ├── contributors │ └── fetch.js └── weekly-report │ ├── WeeklyScrape.js │ └── repo-reports.json ├── static ├── README.md ├── apprentice │ ├── code.svg │ ├── coding.svg │ ├── global.svg │ ├── loan.svg │ ├── mentor.svg │ ├── online-course.svg │ ├── portfolio.svg │ ├── programmer.svg │ ├── software-development.svg │ ├── teacher.svg │ ├── technology-products.svg │ └── training.svg ├── debug-css-vue.png ├── downarrow.png ├── favicon.ico ├── grey-software-sticker.png ├── icon.png ├── icons │ ├── arrow.svg │ ├── create.svg │ ├── creatives.svg │ ├── designers.svg │ ├── discord.svg │ ├── donate.svg │ ├── educate.svg │ ├── educators.svg │ ├── engineers.svg │ ├── financial-aid.svg │ ├── github-sponsors.svg │ ├── github.svg │ ├── hacktoberfest.svg │ ├── open-collective.svg │ ├── paypal.svg │ ├── projects.svg │ ├── shop.svg │ └── strategists.svg ├── logo.png ├── projects │ ├── linkedin-focus │ │ └── logo.png │ ├── logos │ │ ├── bento.svg │ │ ├── cleaner.png │ │ ├── community-cleanup-logo.svg │ │ ├── cssc.png │ │ ├── family-tree-explorer.png │ │ ├── family-tree-explorer.svg │ │ ├── futurist-network.png │ │ ├── label-sync.png │ │ ├── linkedin-focus.png │ │ ├── material-math.png │ │ ├── modfy.video.svg │ │ ├── open-gov.svg │ │ ├── sponsorware.svg │ │ ├── tab-brightness-control.svg │ │ ├── the-physics-hub.svg │ │ ├── toonin.svg │ │ └── twitter-focus.png │ ├── material-math │ │ ├── concepts.svg │ │ ├── landing-clip.mp4 │ │ ├── leaderboard.svg │ │ ├── logo.png │ │ └── progress.svg │ ├── toonin │ │ ├── logo.png │ │ └── logo.svg │ └── twitter-focus │ │ └── logo.png └── useful-git-aliases.png ├── store ├── README.md └── index.js ├── stylelint.config.js ├── tailwind.config.js ├── test └── Logo.spec.js ├── user-insights.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "test": { 4 | "presets": [ 5 | [ 6 | "@babel/preset-env", 7 | { 8 | "targets": { 9 | "node": "current" 10 | } 11 | } 12 | ] 13 | ] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | BASE_URL=http://localhost:3000/ 2 | API_URL=http://159.89.124.15/ 3 | GRAPHQL_URL=http://159.89.124.15/graphql 4 | GITHUB_TOKEN=1a0718fdb1661b3c864ad0e997420abc9b01b217 5 | 6 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | BASE_URL= 2 | API_URL= 3 | GRAPHQL_URL= 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .nuxt 3 | .github -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["eslint:recommended"], 3 | "env": { 4 | "browser": true, 5 | "node": true, 6 | "es6": true, 7 | "commonjs": true, 8 | "es2021": true 9 | }, 10 | "parserOptions": { 11 | "ecmaVersion": 12 12 | }, 13 | "rules": { 14 | "no-unused-vars": [ 15 | "error", 16 | { 17 | "vars": "local", 18 | "args": "none" 19 | } 20 | ], 21 | "no-plusplus": "off", 22 | "no-underscore-dangle": "off" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug 3 | about: Please use this template to file a bug you find on our website! 4 | title: "\U0001F41B Bug: {{Enter Bug Title}}" 5 | labels: 'Type: Bug' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | ### Expected Behavior 🧭 13 | 14 | 15 | (Please write your answer here.) 16 | 17 | 18 | ### Current Behavior 🔍 19 | 20 | 21 | (Please write your answer here.) 22 | 23 | ### Steps to Reproduce 🔢 24 | 25 | 26 | (Please write your answer here.) 27 | 28 | 1. 29 | 2. 30 | 3. 31 | 4. 32 | 33 | 34 | **Acceptence Criteria for Fix ✅** 35 | 36 | 37 | 38 | (Please write your answer here.) 39 | 40 | 41 | - [ ] 42 | - [ ] 43 | - [ ] 44 | 45 | ### Possible Solution 🛠️ 46 | 47 | 48 | (Please write your answer here.) 49 | 50 | 51 | **Implementation Details 🧰** 52 | 53 | 54 | (Please write your answer here.) 55 | 56 | 57 | - 58 | - 59 | - 60 | 61 | ### Additional details ℹ️ 62 | 63 | 67 | 68 | (Please write your answer here.) 69 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/code-refactor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Code Refactor 3 | about: Use this template to propose enhancements to the codebase 4 | title: "\U0001F6E0️ Refactor: {{Enter Title}}" 5 | labels: 'Domain: Dev Experience, Role: Software Engineer' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Motivation 🏁 11 | 12 | 17 | 18 | (Please write your motivation here.) 19 | 20 | ### Describe your refactoring solution 🛠️ 21 | 22 | 25 | 26 | (Please describe your proposed solution here.) 27 | 28 | ### Additional details ℹ️ 29 | 30 | 34 | 35 | (Please provide additional details here.) 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Please use this template to request a new feature for the futurist network website 4 | title: "\U0001F680 Feature Request: {{Feature Request Title}}" 5 | labels: 'Type: Enhancement' 6 | assignees: '' 7 | --- 8 | 9 | ### Problem Overview 👁️‍🗨️ 10 | 11 | 12 | 13 | (Please write your answer here.) 14 | 15 | ### What would you like? 🧰 16 | 17 | 18 | 19 | (Please describe your proposed solution here.) 20 | 21 | ### What alternatives have you considered? 🔍 22 | 23 | 26 | 27 | (Please write your answer here.) 28 | 29 | ### Additional details ℹ️ 30 | 31 | 35 | 36 | (Please write your answer here.) 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .history 2 | .DS_Store 3 | 4 | # Created by .ignore support plugin (hsz.mobi) 5 | ### Node template 6 | # Logs 7 | /logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # Optional npm cache directory 48 | .npm 49 | 50 | # Optional eslint cache 51 | .eslintcache 52 | 53 | # Optional REPL history 54 | .node_repl_history 55 | 56 | # Output of 'npm pack' 57 | *.tgz 58 | 59 | # Yarn Integrity file 60 | .yarn-integrity 61 | 62 | # dotenv environment variables file 63 | .env 64 | 65 | # parcel-bundler cache (https://parceljs.org/) 66 | .cache 67 | 68 | # next.js build output 69 | .next 70 | 71 | # nuxt.js build output 72 | .nuxt 73 | 74 | # Nuxt generate 75 | dist 76 | 77 | # vuepress build output 78 | .vuepress/dist 79 | 80 | # Serverless directories 81 | .serverless 82 | 83 | # IDE / Editor 84 | .idea 85 | 86 | # Service worker 87 | sw.* 88 | 89 | # macOS 90 | .DS_Store 91 | 92 | # Vim swap files 93 | *.swp 94 | 95 | .history 96 | 97 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/grey.software.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /node_modules/** 2 | /.nuxt/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": false, 6 | "singleQuote": true, 7 | "trailingComma": "all", 8 | "bracketSpacing": false, 9 | "jsxBracketSameLine": false, 10 | "proseWrap": "always" 11 | } 12 | -------------------------------------------------------------------------------- /.stylelint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['stylelint-config-standard'], 3 | // add your custom config here 4 | // https://stylelint.io/user-guide/configuration 5 | rules: {}, 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "git.ignoreLimitWarning": true 3 | } -------------------------------------------------------------------------------- /Credits.md: -------------------------------------------------------------------------------- 1 | Icons made by Freepik from www.flaticon.com -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # grey.software 2 | 3 | > [Grey Software's website](https://grey.software/) 4 | 5 | ## Build Setup 6 | 7 | ```bash 8 | # install dependencies 9 | $ yarn install 10 | 11 | # serve with hot reload at localhost:3000 12 | $ yarn dev 13 | 14 | # build for production and launch server 15 | $ yarn build 16 | $ yarn start 17 | 18 | # generate static project 19 | $ yarn generate 20 | ``` 21 | 22 | For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org). 23 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # ASSETS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked). 8 | -------------------------------------------------------------------------------- /assets/Toonin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/assets/Toonin.png -------------------------------------------------------------------------------- /assets/icons/apprentice.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /assets/icons/closed-issues.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /assets/icons/create.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/discord.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/donate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/educate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/icons/educators.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/engineers.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /assets/icons/github-sponsors.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 9 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/icons/merge-open-pr.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /assets/icons/merge-pr.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/new-issues.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/open-collective.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/assets/icons/paypal.png -------------------------------------------------------------------------------- /assets/icons/paypal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /assets/icons/strategists.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 22 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /assets/icons/vuejs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/assets/logo.png -------------------------------------------------------------------------------- /assets/material-math.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/assets/material-math.png -------------------------------------------------------------------------------- /assets/styles/customize-vuetify.css: -------------------------------------------------------------------------------- 1 | .theme--dark.v-application { 2 | background: var(--bg) !important; 3 | } 4 | 5 | .theme--dark.v-text-field--solo > .v-input__control > .v-input__slot { 6 | background: unset !important; 7 | } 8 | 9 | .theme--dark.v-toolbar.v-sheet { 10 | background: var(--bg) !important; 11 | } 12 | 13 | .theme--dark.v-sheet { 14 | background: var(--bg) !important; 15 | } 16 | 17 | .theme--dark.v-list { 18 | background: var(--bg) !important; 19 | } 20 | 21 | .v-toolbar__content, .v-toolbar__extension { 22 | padding: 4px 0; 23 | } -------------------------------------------------------------------------------- /assets/styles/main.css: -------------------------------------------------------------------------------- 1 | *, 2 | *::before, 3 | *::after { 4 | box-sizing: border-box; 5 | margin: 0; 6 | } 7 | 8 | a { 9 | text-decoration: none; 10 | color: unset; 11 | } 12 | 13 | a:hover { 14 | text-decoration: none; 15 | color: unset; 16 | } 17 | 18 | :root { 19 | --color-text: #fcfcfc; 20 | --color-text-dark: #fcfcfc; 21 | --bg: #2d3748; 22 | --border-color: #ddd; 23 | --color-gold: #b29a66; 24 | --color-gold-light: rgba(178, 154, 102, 0.8); 25 | --font-heading: 'Montserrat', sans-serif; 26 | --font-body: 'Nunito Sans', sans-serif; 27 | } 28 | 29 | body { 30 | font-family: var(--font-body) !important; 31 | background-color: var(--bg); 32 | color: var(--color-text); 33 | transition: background-color 0.3s; 34 | } 35 | 36 | h1, 37 | h2, 38 | h3, 39 | h4, 40 | h5, 41 | h6 { 42 | font-family: var(--font-heading); 43 | } 44 | 45 | .flex { 46 | display: flex; 47 | } 48 | 49 | .flex-col { 50 | display: flex; 51 | flex-direction: column; 52 | } 53 | 54 | .page-enter-active, 55 | .page-leave-active { 56 | transition: all 0.2s; 57 | filter: inherit; 58 | } 59 | 60 | .page-enter, 61 | .page-leave-to { 62 | opacity: 0; 63 | filter: blur(10px); 64 | } 65 | 66 | .nuxt-content-container { 67 | padding: 0 16px; 68 | } 69 | 70 | .nuxt-content h1 { 71 | color: #f7fafc; 72 | } 73 | 74 | .nuxt-content h2 { 75 | color: #f7fafc; 76 | } 77 | 78 | .nuxt-content h3 { 79 | color: #f7fafc; 80 | } 81 | 82 | .nuxt-content p { 83 | color: white; 84 | } 85 | 86 | .nuxt-content a { 87 | color: white; 88 | } 89 | 90 | .shadowed-image { 91 | -webkit-filter: drop-shadow(0 0 4px #bbb); 92 | filter: drop-shadow(0 0 4px #bbb); 93 | transition: filter -webkit-filter 0.2s ease-out; 94 | } 95 | 96 | .shadowed-image:hover { 97 | -webkit-filter: drop-shadow(0 0 8px #bbb); 98 | filter: drop-shadow(0 0 8px #bbb); 99 | } 100 | 101 | .btn-xl { 102 | height: 48px; 103 | min-width: 92px; 104 | padding: 0 24px; 105 | } 106 | 107 | .btn-lg { 108 | height: 42px; 109 | min-width: 78px; 110 | padding: 0 20px; 111 | } 112 | -------------------------------------------------------------------------------- /assets/styles/tailwind.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss/base'; 2 | @import 'tailwindcss/components'; 3 | @import 'tailwindcss/utilities'; 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/styles/variables.scss: -------------------------------------------------------------------------------- 1 | $body-font-family: var(--font-body); 2 | -------------------------------------------------------------------------------- /components/CenteredHero.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | -------------------------------------------------------------------------------- /components/ContentCols1x2.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | -------------------------------------------------------------------------------- /components/ContentCols1x3.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | -------------------------------------------------------------------------------- /components/Contributor.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 32 | 33 | -------------------------------------------------------------------------------- /components/Footer.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 39 | 40 | 92 | -------------------------------------------------------------------------------- /components/GreyFeatureCard.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 36 | 37 | 74 | -------------------------------------------------------------------------------- /components/GreyHero.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /components/InsightsCard.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 45 | 46 | 101 | -------------------------------------------------------------------------------- /components/LevelImageLeft.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | -------------------------------------------------------------------------------- /components/LevelImageRight.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | -------------------------------------------------------------------------------- /components/LogoGrid.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 19 | 20 | 26 | -------------------------------------------------------------------------------- /components/MarkdownContent.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 22 | -------------------------------------------------------------------------------- /components/ProjectCardTabs.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | -------------------------------------------------------------------------------- /components/SideBar.vue: -------------------------------------------------------------------------------- 1 | 60 | 61 | 87 | 88 | -------------------------------------------------------------------------------- /components/Testimonial.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 24 | 25 | 58 | -------------------------------------------------------------------------------- /components/TestimonialCard.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | -------------------------------------------------------------------------------- /components/ThreeColumnChild.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 23 | 24 | 47 | -------------------------------------------------------------------------------- /components/TimelineItem.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 47 | 48 | 85 | -------------------------------------------------------------------------------- /components/VisionTimeline.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | -------------------------------------------------------------------------------- /content/blog/debug-css.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Debug your CSS in Vue 3 | description: What if you could visually debug your CSS with a keypress? 4 | img: /debug-css-vue.png 5 | alt: debug css vue 6 | author: Arsala Grey 7 | --- 8 | 9 | # Debug your CSS in Vue 10 | 11 | If you'd like to visualize how your HTML elements are laid out, add the following _created()_ code block to your Vue app's instance. 12 | 13 | ``` 14 | created() { 15 | document.addEventListener("keyup", e => { 16 | if (e.key == "d") { 17 | [].forEach.call(document.querySelectorAll("*"), function(a) { 18 | a.style.outline = 19 | "1px solid #" + (~~(Math.random() * (1 << 24))).toString(16); 20 | }); 21 | } 22 | }); 23 | } 24 | ``` 25 | 26 | You should see your website's HTML elements' borders light up with color, allowing you to identify common layout and sizing issues. 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /content/blog/useful-git-aliases.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Useful Git Aliases 3 | description: Type less and get more done with Git using aliases! 4 | img: /useful-git-aliases.png 5 | alt: useful git aliases 6 | author: Arsala Grey 7 | --- 8 | 9 | # Useful Git Aliases 10 | 11 | Use Git aliases to type less and get more done on the command line using git! 12 | 13 | ### Setting Git Aliases 14 | 15 | Use the following syntax to set 'co' as the alias to 'checkout' 16 | ``` 17 | git config --global alias.co checkout 18 | ``` 19 | 20 | ### Example Git Aliases 21 | 22 | ``` 23 | co = checkout 24 | c = commit 25 | s = status 26 | ca = commit --amend 27 | aa = add --a 28 | rl = reflog 29 | ri = rebase -i 30 | rc = rebase --continue 31 | p = push 32 | ``` 33 | 34 | Read more about Git aliases [here](https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases) -------------------------------------------------------------------------------- /content/faq.md: -------------------------------------------------------------------------------- 1 | # Frequently Asked Questions 2 | 3 | ## What is Grey Software’s vision? 4 | 5 | Grey Software envisions an open source future where mentors and students build 6 | free software together. 7 | 8 | ## Why is Grey Software a not-for-profit organization? 9 | 10 | Grey Software was founded around a mission to build the software ecosystem of 11 | the future. 12 | 13 | To ensure that the organization’s future revenues went towards our mission 14 | instead of the pockets of shareholders, we founded the organization as a 15 | not-for-profit. 16 | 17 | ## How are Grey Software’s products connected to its students? 18 | 19 | Our students learn software development by collaborating with the creators of 20 | the products they're working on. 21 | 22 | ## How do I join Grey Software? 23 | 24 | ### Join our community 25 | 26 | We host an active community on Discord, where our mentors and students 27 | collectively build software. You can join us by visiting 28 | community.grey.software! 29 | 30 | ### Join our apprentice program 31 | 32 | You can also join as an apprentice on a project, where you get to collaborate 33 | with a mentor as a software engineer, designer, or product. 34 | 35 | Learn more at https://grey.software/apprentice 36 | 37 | ## Is Grey Software only for Software Engineers? 38 | 39 | Not at all! 40 | 41 | Software engineers write the code behind Grey Software’s apps, but designers, 42 | product owners, and researchers are integral to our software development 43 | process. 44 | 45 | ## How can I volunteer for Grey Software? 46 | 47 | Join community.grey.software and select the volunteer role! 48 | 49 | You'll receive a form that will guide you through the next steps, and after 50 | contributing to the org, you'll be able to generate a PDF/HTML report of your 51 | contributions at grey.software/report-card 52 | 53 | ## How is Grey Software different from other educational sites, such as Udemy, Udacity, and Coursera? 54 | 55 | These websites host educational content that many rely on, including Grey 56 | Software's mentors and students. 57 | 58 | Our mentors teach by collaborating with individuals or small groups on 59 | real-world projects using the same open-source technologies that are used in the 60 | industry. 61 | 62 | ## How does Grey Software deliver its educational content? 63 | 64 | Grey Software hosts students who collaborate with mentors to build our open 65 | -source products in a real-world software development environment with mentors. 66 | 67 | Since we create our apps and teach students how to develop them simultaneously, 68 | it’s hard to define a structured curriculum and predict learning outcomes. 69 | 70 | We therefore propose that each project have creation teams and education teams. 71 | 72 | The creation team evolves our products using the latest, most productive 73 | technologies and trends in software development. 74 | 75 | The education team turns our products into projects that students can learn 76 | from. This team abstracts away certain software complexities, allowing students 77 | to gradually make their way to working with production code. 78 | 79 | ## How does Grey Software make money? 80 | 81 | _Current_ 82 | 83 | We currently offer an Apprentice program where we teach students how to 84 | contribute to our open source software. 85 | 86 | _Future_ 87 | 88 | We’ve published our analytics openly at org.grey.software/stats, and we’re 89 | looking to partner with advertisers to run ethical ads on our public apps. 90 | 91 | We’re setting up software sales using Cryptolens, which would allow users to 92 | purchase premium licenses to Grey Software’s apps and use it ad-free. 93 | 94 | We’re looking into startup funding for our projects like Material Math and 95 | Toonin, which have the potential to be useful deployed software. 96 | 97 | We collect donations from individuals who believe in our mission through Paypal 98 | and Github Sponsors. 99 | 100 | ## Does open source software kill competition? 101 | 102 | Open sourcing your software doesn’t prevent competitors from creating software 103 | similar in functionality but different in implementation. 104 | -------------------------------------------------------------------------------- /content/projects/active.md: -------------------------------------------------------------------------------- 1 | We develop our projects in the open, and invite contributors from all over the world to help shape the future of our products. As a company, one of our strategies to provide sustainable education is to develop revenue-generating applications that curious learners can help contribute to. -------------------------------------------------------------------------------- /content/success-stories.md: -------------------------------------------------------------------------------- 1 | # Success Stories 2 | 3 | ## [Osama](https://github.com/OsamaSaleh289) 4 | 5 | Osama joined Grey Software as an explorer, and recently secured an internship at [Flinks](https://flinks.io) as a software engineer. 6 | 7 | ### Flinks 8 | ![Flinks Image](https://flinks.io/wp-content/uploads/2019/09/2_image_2.png) 9 | 10 | ### Here's what Osama had to say about his experience! 11 | 12 | _"Last May, I started working with Arsala as an Explorer in Grey Software where we got to co-develop [SLAV: an algorithm visualizer](https://slav.grey.software) hosted on the web. After we got the project to a decent working stage at which point I joined the organization as a part-time core software engineer helping with both front-end and back-end development._ 13 | 14 | _Within these 4 months, I received valuable mentorship from Arsala from a technical POV and on a personal level. We had many enriching technical discussions where I developed my maturity in SWE and became more independent._ 15 | 16 | _When my interview project required me to develop an angular web application with a front end UI and C# back-end, I was able to tackle the task because of the full-stack experience I got as an engineer at Grey Software."_ -------------------------------------------------------------------------------- /content/vision/index.md: -------------------------------------------------------------------------------- 1 | # Vision 2 | 3 | ## Our Mission 4 | 5 | To empower people to create open-source software for their communities and societies! 6 | 7 | ## Our Objectives 8 | 9 | To create open source software products that serve humanity. 10 | 11 | To design our products and development practices around maximizing our educational impact. 12 | 13 | ## Where are we now? 14 | 15 | 16 | 17 | ## Our 2021 OKRs 18 | 19 | ### Create 3 Software products with an open source education stream 20 | 21 | 22 | 23 | ### Research Software Development Education Strategies 24 | 25 | 26 | 27 | ## Business Development 28 | 29 | ### Personas 30 | 31 | Learn about the personas we're solving a problem for [here](./vision/personas) 32 | 33 | ### Pioneer 34 | 35 | *Grey Software has been a part of the Pioneer global startup tournament since May 2020. Our project description is:* 36 | 37 | Imagine if tech organizations prioritized involving communities in their development process as much as they prioritized creating unique, world-class software products. Grey Software is a not-for-profit that aims to be such an organization. 38 | 39 | We envision involving members of the community in our open-source product-development since they desire real-world software experience so they can get hired in tech or bring their own ideas to life. 40 | 41 | Our educational model starts with developing [our software](https://grey.software/projects) openly on Github and creating a welcoming [community of mentors on Discord](http://community.grey.software) to provide students interested in contributing with structure and guidance. 42 | 43 | We also offer an apprentice program for students to obtain practical experience by interning at an open-source project(s). This also helps maintainers get development help and generate income by charging students that require software development tutoring. We have partnered with several open-source projects for this program. 44 | 45 | To further scale our education, we envision creating massive open online courses (MOOCs) for our products to allow students to gradually develop the understanding and skills to contribute to our software's deployed versions. In the fast-changing world of technology, we will keep our curriculums relevant by updating them in tandem with our software. 46 | 47 | ## Learn more through our [FAQ](https://grey.software/faq) 48 | -------------------------------------------------------------------------------- /content/vision/personas.md: -------------------------------------------------------------------------------- 1 | ## Shawn the Apprentice 2 | 3 | Shawn is a computer science student who is passionate about software engineering. He wants to become a better software engineer by building applications that users can interact with. 4 | 5 | Shawn has worked on side projects and has contributed successfully to team projects in school. He’s a capable budding engineer with enough technical context to learn how to build a non-trivial piece of software if given the time and incentive. 6 | 7 | Shawn wants to take his software engineering skills to the next level by working on larger, real-world software projects. 8 | 9 | ## Nina the Explorer 10 | 11 | Nina is a computer science student who has creative vision, and she wants to learn software engineering by building apps that bring her creative vision to life. 12 | 13 | Nina has contributed successfully to team projects in school, but she lacks the depth of technical understanding that can allow her to learn how to build a large application on her own. 14 | 15 | Nina wonders if there is a way for her to learn how to build apps that: 16 | Offers a structured roadmap to implementation 17 | Eases the learning curve of picking up new technologies. 18 | 19 | Nina wants to learn software engineering to see if app development is a suitable career move for her. 20 | 21 | ## Milind the Seeker 22 | 23 | Milind is a computer science student who wants to participate in the tech economy by building a startup or getting hired as a software developer. 24 | 25 | Milind has experimented with software tools when building personal projects but struggles with going from an idea to deployed software. -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleNameMapper: { 3 | '^@/(.*)$': '/$1', 4 | '^~/(.*)$': '/$1', 5 | '^vue$': 'vue/dist/vue.common.js', 6 | }, 7 | moduleFileExtensions: ['js', 'vue', 'json'], 8 | transform: { 9 | '^.+\\.js$': 'babel-jest', 10 | '.*\\.(vue)$': 'vue-jest', 11 | }, 12 | collectCoverage: true, 13 | collectCoverageFrom: [ 14 | '/components/**/*.vue', 15 | '/pages/**/*.vue', 16 | ], 17 | } 18 | -------------------------------------------------------------------------------- /layouts/README.md: -------------------------------------------------------------------------------- 1 | # LAYOUTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Application Layouts. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts). 8 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /middleware/README.md: -------------------------------------------------------------------------------- 1 | # MIDDLEWARE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your application middleware. 6 | Middleware let you define custom functions that can be run before rendering either a page or a group of pages. 7 | 8 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware). 9 | -------------------------------------------------------------------------------- /nuxt.config.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | 3 | export default { 4 | /* 5 | ** Headers of the page 6 | */ 7 | head: { 8 | title: 'Grey Software', 9 | meta: [ 10 | {charset: 'utf-8'}, 11 | {name: 'viewport', content: 'width=device-width, initial-scale=1'}, 12 | { 13 | hid: 'description', 14 | name: 'description', 15 | content: "We're on a mission to empower people to create open-source software for their communities and societies!", 16 | }, 17 | {hid: 'og:title', name: 'og:title', content: 'Grey Software'}, 18 | {hid: 'og:image', name: 'og:image', content: '/logo.png'}, 19 | {hid: 'og:url', name: 'og:url', content: 'https://grey.software/'}, 20 | {hid: 'og:type', name: 'og:type', content: 'website'}, 21 | ], 22 | link: [ 23 | {rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'}, 24 | { 25 | rel: 'stylesheet', 26 | href: 27 | 'https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap', 28 | }, 29 | { 30 | rel: 'stylesheet', 31 | href: 32 | 'https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@100;200;300;400;500;600;700;800;900&display=swap', 33 | }, 34 | ], 35 | script: [ 36 | { 37 | src: 'https://plausible.io/js/plausible.js', 38 | async: true, 39 | defer: true, 40 | 'data-domain': 'grey.software', 41 | }, 42 | ], 43 | }, 44 | /* 45 | ** Customize the progress-bar color 46 | */ 47 | loading: {color: '#fff'}, 48 | /* 49 | ** Global CSS 50 | */ 51 | css: ['@/assets/styles/main.css'], 52 | /* 53 | ** Plugins to load before mounting the App 54 | */ 55 | plugins: [], 56 | components: true, 57 | /* 58 | ** Nuxt.js dev-modules 59 | */ 60 | buildModules: [ 61 | // Doc: https://github.com/nuxt-community/stylelint-module 62 | '@nuxtjs/stylelint-module', 63 | '@nuxtjs/tailwindcss', 64 | '@nuxtjs/svg', 65 | [ 66 | '@nuxtjs/vuetify', 67 | { 68 | customVariables: ['@/assets/styles/variables.scss'], 69 | treeShake: true, 70 | theme: { 71 | dark: true, 72 | themes: { 73 | dark: { 74 | primary: '#94A3B8', 75 | secondary: '#424242', 76 | accent: '#82B1FF', 77 | error: '#F04747', 78 | info: '#2196F3', 79 | success: '#43b581', 80 | warning: '#FAA61A', 81 | }, 82 | }, 83 | }, 84 | }, 85 | ], 86 | ], 87 | /* 88 | ** Nuxt.js modules 89 | */ 90 | modules: [ 91 | // Doc: https://bootstrap-vue.js.org 92 | '@nuxt/content', 93 | '@nuxtjs/axios', 94 | '@nuxtjs/pwa', 95 | // Doc: https://github.com/nuxt-community/dotenv-module 96 | '@nuxtjs/dotenv', 97 | '@nuxtjs/device', 98 | [ 99 | 'nuxt-mq', 100 | { 101 | // Default breakpoint for SSR 102 | defaultBreakpoint: 'xs', 103 | breakpoints: { 104 | sm: 600, 105 | md: 900, 106 | lg: 1200, 107 | xl: 1600, 108 | }, 109 | }, 110 | ], 111 | ], 112 | /* 113 | ** Build configuration 114 | */ 115 | build: { 116 | /* 117 | ** You can extend webpack config here 118 | */ 119 | extend(config, ctx) {}, 120 | }, 121 | } 122 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "grey.software", 3 | "version": "1.0.0", 4 | "description": "Grey Software is a not-for-profit organization that empowers students to build open-source software for their communities and societies.", 5 | "author": "Arsala Grey", 6 | "scripts": { 7 | "dev": "nuxt", 8 | "build": "nuxt build --target static", 9 | "start": "nuxt start", 10 | "generate": "nuxt generate", 11 | "test": "jest", 12 | "fix": "prettier -l --write \"{*.js,**/*.js,**/*.vue}\"", 13 | "fix:js": "eslint --ext .js,.vue .", 14 | "fix:css": "stylelint --fix **/*.{vue,css}" 15 | }, 16 | "dependencies": { 17 | "@nuxt/content": "^1.10.0", 18 | "@nuxtjs/axios": "^5.12.2", 19 | "@nuxtjs/device": "^1.2.7", 20 | "@nuxtjs/dotenv": "^1.4.1", 21 | "@nuxtjs/pwa": "^3.2.2", 22 | "@nuxtjs/svg": "^0.1.12", 23 | "@tailwindcss/typography": "^0.3.1", 24 | "code": "^5.2.4", 25 | "core-js": "^3.6.5", 26 | "node-fetch": "^2.6.1", 27 | "nuxt": "^2.14.11", 28 | "nuxt-mq": "^2.0.1", 29 | "phantomjs": "^2.1.7", 30 | "request-promise": "^4.2.6", 31 | "stylelint-config-standard": "^20.0.0", 32 | "vue-svg-loader": "^0.16.0" 33 | }, 34 | "devDependencies": { 35 | "@nuxtjs/stylelint-module": "^4.0.0", 36 | "@nuxtjs/tailwindcss": "^3.3.4", 37 | "@nuxtjs/vuetify": "^1.11.2", 38 | "@vue/test-utils": "^1.0.0-beta.27", 39 | "autoprefixer": "^9", 40 | "babel-jest": "^24.1.0", 41 | "eslint": "^7.12.1", 42 | "jest": "^24.1.0", 43 | "postcss": "^7", 44 | "prettier": "2.2.1", 45 | "stylelint": "^13.8.0", 46 | "tailwindcss": "npm:@tailwindcss/postcss7-compat", 47 | "vue-jest": "^4.0.0-0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /pages/README.md: -------------------------------------------------------------------------------- 1 | # PAGES 2 | 3 | This directory contains your Application Views and Routes. 4 | The framework reads all the `*.vue` files inside this directory and creates the router of your application. 5 | 6 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing). 7 | -------------------------------------------------------------------------------- /pages/blog/_slug.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 26 | -------------------------------------------------------------------------------- /pages/blog/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 32 | 33 | 72 | -------------------------------------------------------------------------------- /pages/faq/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | -------------------------------------------------------------------------------- /pages/projects/index.vue: -------------------------------------------------------------------------------- 1 | 68 | 69 | 93 | 94 | 113 | -------------------------------------------------------------------------------- /pages/shop/index.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 30 | -------------------------------------------------------------------------------- /pages/success-stories/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | -------------------------------------------------------------------------------- /pages/this-week/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 33 | 34 | 44 | -------------------------------------------------------------------------------- /pages/vision/_slug.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | -------------------------------------------------------------------------------- /pages/vision/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /pages/why-donate/index.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 51 | -------------------------------------------------------------------------------- /plugins/README.md: -------------------------------------------------------------------------------- 1 | # PLUGINS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains Javascript plugins that you want to run before mounting the root Vue.js application. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins). 8 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/screenshot.png -------------------------------------------------------------------------------- /scripts/contributors/fetch.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | const fs = require('fs') 3 | 4 | const repositories = [ 5 | 'grey.software', 6 | 'linkedin-focus', 7 | 'twitter-focus', 8 | 'toonin', 9 | 'material-math', 10 | 'sponsorware', 11 | 'futurist.network', 12 | ] 13 | 14 | const fetchRepoContributors = async (repoName) => { 15 | const result = await fetch( 16 | `https://api.github.com/repos/grey-software/${repoName}/contributors`, 17 | ) 18 | const contributors = await result.json() 19 | return contributors 20 | .filter((contributor) => !contributor.login.endsWith('[bot]')) 21 | .map((contributor) => { 22 | return { 23 | username: contributor.login, 24 | avatar: contributor.avatar_url, 25 | link: contributor.html_url, 26 | repos: [{name: repoName, contributions: contributor.contributions}], 27 | } 28 | }) 29 | } 30 | 31 | const constructContributors = async () => { 32 | const contributors = new Map() 33 | 34 | for (repo of repositories) { 35 | const repoContributors = await fetchRepoContributors(repo) 36 | repoContributors.forEach((contributor) => { 37 | if (!contributors.has(contributor.username)) { 38 | contributors.set(contributor.username, contributor) 39 | } else { 40 | const existingContributor = contributors.get(contributor.username) 41 | const mergedRepos = contributor.repos.concat(existingContributor.repos) 42 | contributors.set(contributor.username, { 43 | ...existingContributor, 44 | repos: mergedRepos, 45 | }) 46 | } 47 | }) 48 | } 49 | return Object.fromEntries(contributors) 50 | } 51 | 52 | const writeContributorsFile = async () => { 53 | const contributors = await constructContributors() 54 | console.log(contributors) 55 | 56 | fs.writeFile( 57 | 'content/contributors.json', 58 | JSON.stringify(contributors), 59 | 'utf8', 60 | function (err) { 61 | if (err) { 62 | console.log('An error occured while writing JSON Object to File.') 63 | return console.log(err) 64 | } 65 | } 66 | ) 67 | } 68 | 69 | writeContributorsFile() 70 | -------------------------------------------------------------------------------- /scripts/weekly-report/WeeklyScrape.js: -------------------------------------------------------------------------------- 1 | const {_} = require('core-js') 2 | 3 | getWeeklyInsights = async (link, repos) => { 4 | const cheerio = require('cheerio') 5 | const puppeteer = require('puppeteer') 6 | const fs = require('fs') 7 | const url = link 8 | const repo = link.split('/')[4] 9 | 10 | const start = new Date() 11 | const browser = await puppeteer.launch() 12 | const page = await browser.newPage() 13 | 14 | await page.goto(url, {waitUntil: 'networkidle0'}) 15 | 16 | await page.waitForSelector('.octicon-git-merge', { 17 | visible: true, 18 | }) 19 | 20 | const pageContent = await page.content() 21 | 22 | const $ = cheerio.load(pageContent) 23 | var commitsToMaster = '' 24 | var authors = '' 25 | var files = '' 26 | var totalAdditions = '' 27 | var deletions = '' 28 | const startDate = $('.Subhead-heading')['0'].children[0].data.trim('\n') 29 | const endDate = $('.dash')['0'].next.data.trim('\n') 30 | 31 | //Scraping for img link 32 | 33 | $('.text-gray').each(function(i, elem) { 34 | if ($(elem).find('strong')['0'] != undefined) { 35 | commitsToMaster = $(elem) 36 | .find('strong') 37 | .find('span')['0'].children[0].data 38 | authors = $(elem).find('strong')['0'].children[0].data 39 | files = $(elem).find('strong')['3'].children[0].data 40 | totalAdditions = $(elem).find('strong')['4'].children[0].data 41 | deletions = $(elem).find('strong')['6'].children[0].data 42 | } 43 | }) 44 | 45 | $('.Box-row').each(function(i, elem) { 46 | if ($(elem).find('ul')[0] != undefined) { 47 | //console.log($(elem).find('ul').find('span')[0].children[0].data) 48 | /*console.log($(elem).find('ul').find('span')[2].children[0].data); 49 | console.log($(elem).find('ul').find('span')[4].children[0].data); 50 | console.log($(elem).find('ul').find('span')[6].children[0].data);*/ 51 | 52 | const mergedPRs = $(elem) 53 | .find('ul') 54 | .find('svg') 55 | ['0'].next.data.trim('\n', ' ') 56 | const openedPRs = $(elem) 57 | .find('ul') 58 | .find('svg') 59 | ['1'].next.data.trim('\n', ' ') 60 | const newIssues = $(elem) 61 | .find('ul') 62 | .find('svg') 63 | ['2'].next.data.trim('\n', ' ') 64 | const closedIssues = $(elem) 65 | .find('ul') 66 | .find('svg') 67 | ['3'].next.data.trim('\n', ' ') 68 | 69 | repos.push({ 70 | repo: repo, 71 | mergedPRs: mergedPRs, 72 | openedPRs: openedPRs, 73 | newIssues: newIssues, 74 | closedIssues: closedIssues, 75 | commitsToMaster: commitsToMaster, 76 | authors: authors, 77 | files: files, 78 | totalAdditions: totalAdditions, 79 | deletions: deletions, 80 | startDate: startDate, 81 | endDate: endDate, 82 | }) 83 | } 84 | }) 85 | 86 | var jsonContent = JSON.stringify(repos) 87 | 88 | fs.writeFile( 89 | '../content/this-week/repo-reports.json', 90 | jsonContent, 91 | 'utf8', 92 | function(err) { 93 | if (err) { 94 | console.log('An error occured while writing JSON Object to File.') 95 | return console.log(err) 96 | } 97 | }, 98 | ) 99 | 100 | await browser.close() 101 | const end = new Date() - start 102 | } 103 | 104 | const links = [ 105 | 'https://github.com/grey-software/toonin/pulse', 106 | 'https://github.com/grey-software/material-math/pulse', 107 | 'https://github.com/grey-software/linkedin-focus/pulse', 108 | 'https://github.com/grey-software/twitter-focus/pulse', 109 | 'https://github.com/grey-software/grey.software/pulse', 110 | 'https://github.com/grey-software/org/pulse', 111 | ] 112 | 113 | const repos = [] 114 | 115 | for (const link of links) { 116 | getWeeklyInsights(link, repos) 117 | } 118 | -------------------------------------------------------------------------------- /scripts/weekly-report/repo-reports.json: -------------------------------------------------------------------------------- 1 | [{"repo":"toonin","mergedPRs":"0","openedPRs":"0","newIssues":"0","closedIssues":"0","commitsToMaster":"","authors":"","files":"","totalAdditions":"","deletions":"","startDate":"August 22, 2020","endDate":"August 29, 2020"},{"repo":"LinkedInFocus","mergedPRs":"2","openedPRs":"0","newIssues":"1","closedIssues":"0","commitsToMaster":"5","authors":"2 authors","files":"0 files","totalAdditions":"0","deletions":"0","startDate":"August 22, 2020","endDate":"August 29, 2020"}] -------------------------------------------------------------------------------- /static/README.md: -------------------------------------------------------------------------------- 1 | # STATIC 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your static files. 6 | Each file inside this directory is mapped to `/`. 7 | Thus you'd want to delete this README.md before deploying to production. 8 | 9 | Example: `/static/robots.txt` is mapped as `/robots.txt`. 10 | 11 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static). 12 | -------------------------------------------------------------------------------- /static/apprentice/code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /static/apprentice/coding.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/loan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/mentor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/online-course.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/portfolio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/apprentice/software-development.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/teacher.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/technology-products.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/apprentice/training.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /static/debug-css-vue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/debug-css-vue.png -------------------------------------------------------------------------------- /static/downarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/downarrow.png -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/favicon.ico -------------------------------------------------------------------------------- /static/grey-software-sticker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/grey-software-sticker.png -------------------------------------------------------------------------------- /static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/icon.png -------------------------------------------------------------------------------- /static/icons/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/icons/create.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/icons/discord.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /static/icons/donate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /static/icons/educate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /static/icons/educators.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/icons/engineers.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/icons/financial-aid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/icons/github-sponsors.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/icons/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /static/icons/open-collective.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/icons/paypal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /static/icons/shop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/icons/strategists.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 22 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/logo.png -------------------------------------------------------------------------------- /static/projects/linkedin-focus/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/linkedin-focus/logo.png -------------------------------------------------------------------------------- /static/projects/logos/cleaner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/cleaner.png -------------------------------------------------------------------------------- /static/projects/logos/community-cleanup-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/projects/logos/cssc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/cssc.png -------------------------------------------------------------------------------- /static/projects/logos/family-tree-explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/family-tree-explorer.png -------------------------------------------------------------------------------- /static/projects/logos/futurist-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/futurist-network.png -------------------------------------------------------------------------------- /static/projects/logos/label-sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/label-sync.png -------------------------------------------------------------------------------- /static/projects/logos/linkedin-focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/linkedin-focus.png -------------------------------------------------------------------------------- /static/projects/logos/material-math.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/material-math.png -------------------------------------------------------------------------------- /static/projects/logos/modfy.video.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /static/projects/logos/tab-brightness-control.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 13 | 14 | 17 | 18 | 20 | 23 | 26 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /static/projects/logos/toonin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 13 | 14 | 15 | 17 | 21 | 26 | 29 | 34 | 38 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /static/projects/logos/twitter-focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/logos/twitter-focus.png -------------------------------------------------------------------------------- /static/projects/material-math/concepts.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /static/projects/material-math/landing-clip.mp4: -------------------------------------------------------------------------------- 1 | MX����@��� �!�L�!Th -------------------------------------------------------------------------------- /static/projects/material-math/leaderboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/projects/material-math/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/material-math/logo.png -------------------------------------------------------------------------------- /static/projects/material-math/progress.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 12 | 14 | 21 | 23 | 25 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /static/projects/toonin/logo.png: -------------------------------------------------------------------------------- 1 | MX����@��� �!�L�!Th -------------------------------------------------------------------------------- /static/projects/toonin/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 13 | 14 | 15 | 17 | 21 | 26 | 29 | 34 | 38 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /static/projects/twitter-focus/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/projects/twitter-focus/logo.png -------------------------------------------------------------------------------- /static/useful-git-aliases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grey-software/website/ce93fb9034f2c18eda03e1eb46ffab98f04303e5/static/useful-git-aliases.png -------------------------------------------------------------------------------- /store/README.md: -------------------------------------------------------------------------------- 1 | # STORE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Vuex Store files. 6 | Vuex Store option is implemented in the Nuxt.js framework. 7 | 8 | Creating a file in this directory automatically activates the option in the framework. 9 | 10 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). 11 | -------------------------------------------------------------------------------- /store/index.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex' 2 | 3 | export default () => { 4 | return new Vuex.Store({ 5 | state() { 6 | return { 7 | rtil: false, 8 | } 9 | }, 10 | mutations: { 11 | setRtl(state, payload) { 12 | state.rtl = payload.rtl; 13 | }, 14 | }, 15 | }) 16 | } 17 | 18 | -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['stylelint-config-standard'], 3 | // add your custom config here 4 | // https://stylelint.io/user-guide/configuration 5 | rules: {}, 6 | } 7 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | ** TailwindCSS Configuration File 3 | ** 4 | ** Docs: https://tailwindcss.com/docs/configuration 5 | ** Default: https://github.com/tailwindcss/tailwindcss/blob/master/stubs/defaultConfig.stub.js 6 | */ 7 | const colors = require('tailwindcss/colors') 8 | 9 | module.exports = { 10 | theme: { 11 | extend: { 12 | colors: { 13 | // Build your palette here 14 | grey: colors.blueGray, 15 | }, 16 | }, 17 | spacing: { 18 | 1: '2px', 19 | 2: '4px', 20 | 3: '8px', 21 | 4: '12px', 22 | 5: '16px', 23 | 6: '24px', 24 | 7: '32px', 25 | 8: '48px', 26 | 9: '64px', 27 | 10: '72px', 28 | 11: '96px', 29 | 12: '128px', 30 | 13: '192px', 31 | 14: '256px', 32 | 15: '384px', 33 | 16: '512px', 34 | 17: '640px', 35 | 18: '768px', 36 | '88vh': '88vh', 37 | '24px': '24px', 38 | '32px': '32px', 39 | '48px': '48px', 40 | '64px': '64px', 41 | '72px': '72px', 42 | '96px': '96px', 43 | }, 44 | screens: { 45 | 't-screen-phone': {max: '599px'}, 46 | 't-screen-tablet-portrait': {min: '600px'}, 47 | 't-screen-tablet-landscape': {min: '900px'}, 48 | 't-screen-pc': {min: '1200px'}, 49 | 't-screen-pc-wide': {min: '1800px'}, 50 | }, 51 | }, 52 | variants: {}, 53 | plugins: [require('@tailwindcss/typography')], 54 | purge: { 55 | // Learn more on https://tailwindcss.com/docs/controlling-file-size/#removing-unused-css 56 | enabled: process.env.NODE_ENV === 'production', 57 | content: [ 58 | 'content/**/*.md', 59 | 'components/**/*.vue', 60 | 'layouts/**/*.vue', 61 | 'pages/**/*.vue', 62 | 'plugins/**/*.js', 63 | 'nuxt.config.js', 64 | ], 65 | }, 66 | 67 | prefix: 't-', 68 | } 69 | -------------------------------------------------------------------------------- /test/Logo.spec.js: -------------------------------------------------------------------------------- 1 | import {mount} from '@vue/test-utils' 2 | import Logo from '@/components/Logo.vue' 3 | 4 | describe('Logo', () => { 5 | test('is a Vue instance', () => { 6 | const wrapper = mount(Logo) 7 | expect(wrapper.isVueInstance()).toBeTruthy() 8 | }) 9 | }) 10 | -------------------------------------------------------------------------------- /user-insights.json: -------------------------------------------------------------------------------- 1 | [{"avatar":"https://avatars0.githubusercontent.com/u/19757203?s=60&v=4","rank":"#1","commits":"44 commits","username":"ArsalaBangash","additions":"113,846","deletions":"106,735"},{"avatar":"https://avatars0.githubusercontent.com/u/48028572?s=60&v=4","rank":"#2","commits":"31 commits","username":"milindvishnoi","additions":"23,463","deletions":"1,524"},{"avatar":"https://avatars3.githubusercontent.com/u/53316653?s=60&v=4","rank":"#3","commits":"2 commits","username":"ninaricci29","additions":"14,454","deletions":"146"},{"avatar":"https://avatars3.githubusercontent.com/u/45823673?s=60&v=4","rank":"#4","commits":"1 commit","username":"hazanncv","additions":"14","deletions":"0"}] --------------------------------------------------------------------------------