diff --git a/.github/workflows/data-validate.yml b/.github/workflows/data-validate.yml new file mode 100644 index 00000000..94a21ac1 --- /dev/null +++ b/.github/workflows/data-validate.yml @@ -0,0 +1,25 @@ +name: Validate data.js + +on: + pull_request: + paths: src/data.js + +env: + CI: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 13.x + - name: Install validation libs + run: | + npm install -g @hapi/joi@17.0.2 + npm install -g @actions/core@1.2.0 + npm link @hapi/joi + npm link @actions/core + - name: Validate data.js + run: node ./scripts/data-validate.js \ No newline at end of file diff --git a/.github/workflows/populate-readme.yml b/.github/workflows/populate-readme.yml new file mode 100644 index 00000000..2138c9cf --- /dev/null +++ b/.github/workflows/populate-readme.yml @@ -0,0 +1,32 @@ +name: Populate README.md from master + +on: + push: + branches: master + paths: + - src/data.js + - scripts/readme-template.md + +env: + CI: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 13.x + - name: Populate README.md from master + run: | + node ./scripts/populate-readme.js + mv generated-readme.md readme.md + git add readme.md + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git commit -m "chore: generate \`readme.md\`" + - name: Push changes + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md deleted file mode 100644 index 30118993..00000000 --- a/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## /uses - -Word Wide Web: [uses.tech](https://uses.tech) - -Add yourself [here](./src/data.js) - - diff --git a/gatsby-config.js b/gatsby-config.js index ae71b3e2..ef46ca29 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -3,6 +3,7 @@ module.exports = { title: `/uses`, description: `A list of /uses pages detailing developer setups.`, author: `@wesbos`, + siteUrl: "https://uses.tech", }, plugins: [ { @@ -26,6 +27,7 @@ module.exports = { icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site. }, }, + `gatsby-plugin-react-helmet`, `gatsby-plugin-styled-components`, ], }; diff --git a/migration.md b/migration.md index 81effec3..0767c754 100644 --- a/migration.md +++ b/migration.md @@ -1,6 +1,6 @@ We need to move these people over to the data.js file: -https://github.com/wesbos/awesome-uses/blob/website/src/data.js +https://github.com/wesbos/awesome-uses/blob/master/src/data.js Grab a random person, and fill out the info as best as possible. @@ -26,7 +26,7 @@ When done, check that person off. * [ ] [Jay Collett](https://www.jaycollett.co/uses/) - Freelance web designer and front end developer with CraftCMS * [ ] [Amit Merchant](https://www.amitmerchant.com/uses/) - Fullstack web developer, blogger. * [ ] [Adam Greenough](https://adamgreenough.me/uses/) - Freelance Digital Designer & Web Developer -* [ ] [Georgi Yanev](https://gyanev.com/uses/) - Web Developer, FPV drone pilot +* [x] [Georgi Yanev](https://gyanev.com/uses/) - Web Developer, FPV drone pilot * [ ] [Kumar Abhirup](https://kumar.now.sh/uses) - A 15yo Jnr. developer with a passion for learning ๐Ÿ‘‹๐Ÿป * [ ] [Chris Enns](https://chrisenns.com/uses/) - Podcast Editor & WordPress Wannabe * [ ] [David Llop](https://davidllop.com/uses/) - Laravel & ChatBots Developer @@ -41,7 +41,7 @@ When done, check that person off. * [x] [Andrew Healey](https://healeycodes.com/uses/) - Fullstack Software Engineer, Blogger, Tutorial Creator. * [ ] [Alex Carpenter](https://alexcarpenter.me/uses/) - Front-end Web Developer and Screencaster. * [ ] [Wang Junxiao](http://www.feng0207.site/uses/) โ€” Java Web Developer, Student. -* [ ] [Jeff Wen](https://sinchang.me/uses/) - Web Developer, Open Source Contributor +* [x] [Jeff Wen](https://sinchang.me/uses/) - Web Developer, Open Source Contributor * [ ] [Tracy Osborn](https://limedaring.com/uses/) - Designer, Developer, Tech Author, Entreprenerd * [ ] [Bruno Brito](https://brunobrito.pt/uses/) - Web Developer, Content Creator, Digital Marketing ๐Ÿ‡ต๐Ÿ‡น * [ ] [Lemon ๐Ÿ‹](https://ahoylemon.xyz/uses/) - Web Developer, Podcaster, Human Who Makes Dumb Shit @@ -81,7 +81,7 @@ When done, check that person off. * [x] [Scott Tolinski](https://kit.com/leveluptutorials/podcasting-screencasting-gear) - Web Developer, Tutorial Maker, Podcaster. * [ ] [Ben Hong](https://www.bencodezen.io/uses/) - Senior Frontend Engineer @ Meltano GitLab * [ ] [Danny de Vries](https://dandevri.es/uses/) - Indie Maker and Lecturer -* [ ] [Scott Spence](https://scottspence.me/uses) - Web Engineer @ Karmarama +* [x] [Scott Spence](https://scottspence.me/uses) - Web Engineer @ Karmarama * [ ] [Stephen Senkomago Musoke](https://ssmusoke.com/uses/) - Software Engineer [METS](https://mets.or.ug/), [UCSF Informatics Hub](https://globalhealthsciences.ucsf.edu/resources/informatics-hub) & PHP lover by night ๐Ÿ‡บ๐Ÿ‡ฌ * [ ] [Gideon Bamuleseyo](https://medium.com/developer-circle-kampala/what-i-use-my-tools-of-trade-552655db4b8d) - Software Engineer [Andela](https://andela.com/), JavaScript junkie ๐Ÿ‡บ๐Ÿ‡ฌ * [ ] [Jason Cory Alvernaz](https://jasoncoryalvernaz.com/uses/) - Fullstack Web Developer, Freelancer, Designer diff --git a/package-lock.json b/package-lock.json index f8210af3..2597f450 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@actions/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.0.tgz", + "integrity": "sha512-ZKdyhlSlyz38S6YFfPnyNgCDZuAF2T0Qv5eHflNWytPS8Qjvz39bZFMry9Bb/dpSnqWcNeav5yM2CTYpJeY+Dw==" + }, "@babel/code-frame": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", @@ -926,43 +931,62 @@ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, "@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.0.tgz", + "integrity": "sha512-GDDpkCdSUfkQCznmWUHh9dDN85BWf/V8TFKQ2JLuHdGB4Yy3YTEGBzZxoBNxfNBEvreSR/o+ZxBBSNNEVzY+lQ==", + "requires": { + "@hapi/hoek": "^9.0.0" + } }, "@hapi/bourne": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, + "@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" + }, "@hapi/hoek": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", - "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.2.tgz", + "integrity": "sha512-LyibKv2QnD9BPI5g2L+g85yiIPv3ajYpENGFgy4u0xCLPhXWG1Zdx29neSB8sgX0/wz6k5TMjHzTwJ6+DaBYOA==" }, "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.0.2.tgz", + "integrity": "sha512-84icw1yV3vbRzUidqFli1Gqr8diigOhTuKzlu3gqBXBm4Lukqe5apjyeJJhGO4rO/J3NiRjy1vXQ5bmhc5+fUA==", "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" + "@hapi/address": "^4.0.0", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" } }, + "@hapi/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" + }, "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "requires": { - "@hapi/hoek": "^8.3.0" + "@hapi/hoek": "^9.0.0" } }, "@jimp/bmp": { @@ -4264,20 +4288,13 @@ } }, "css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", "requires": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } + "postcss-value-parser": "^4.0.2" } }, "css-tree": { @@ -7457,6 +7474,35 @@ "yaml-loader": "^0.5.0" }, "dependencies": { + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/hoek": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", + "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, "acorn": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", @@ -9960,11 +10006,6 @@ "is-invalid-path": "^0.1.0" } }, - "is-what": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.5.0.tgz", - "integrity": "sha512-00pwt/Jf7IaRh5m2Dp93Iw8LG2cd3OpDj3NrD1XPNUpAWVxPvBP296p4IiGmIU4Ur0f3f56IoIM+fS2pFYF+tQ==" - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10690,11 +10731,6 @@ "p-is-promise": "^2.0.0" } }, - "memoize-one": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", - "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -10811,14 +10847,6 @@ } } }, - "merge-anything": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.4.tgz", - "integrity": "sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ==", - "requires": { - "is-what": "^3.3.1" - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -15225,21 +15253,19 @@ } }, "styled-components": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.1.tgz", - "integrity": "sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==", + "version": "5.0.0-rc.3", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.0.0-rc.3.tgz", + "integrity": "sha512-FPezIfX26DigdMspk4rtL2Z4KMtgHcUK56Zb/XTXfs4XXBPFZefTNpi+pQEOkWRmE5r5dO9vzT7Hd+b78NtMLA==", "requires": { "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@emotion/is-prop-valid": "^0.8.1", - "@emotion/unitless": "^0.7.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.3", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^2.2.2", - "memoize-one": "^5.0.0", - "merge-anything": "^2.2.4", - "prop-types": "^15.5.4", - "react-is": "^16.6.0", - "stylis": "^3.5.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", "stylis-rule-sheet": "^0.0.10", "supports-color": "^5.5.0" } @@ -15276,11 +15302,6 @@ } } }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, "stylis-rule-sheet": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", @@ -16870,6 +16891,35 @@ "workbox-window": "^4.3.1" }, "dependencies": { + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/hoek": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", + "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", diff --git a/package.json b/package.json index cdabb3a1..e894c94d 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,15 @@ "description": "What do you uses", "version": "7.7.7", "author": "Wes Bos", + "type": "module", "eslintConfig": { "extends": [ "wesbos" ] }, "dependencies": { + "@actions/core": "^1.2.0", + "@hapi/joi": "^17.0.2", "country-emoji": "^1.5.0", "esm": "^3.2.25", "gatsby": "^2.18.12", @@ -26,7 +29,7 @@ "react": "^16.12.0", "react-dom": "^16.12.0", "react-helmet": "^5.2.1", - "styled-components": "^4.4.1" + "styled-components": "5.0.0-rc.3" }, "scripts": { "build": "npx --node-arg '-r esm' gatsby build", diff --git a/readme.md b/readme.md new file mode 100644 index 00000000..a10db822 --- /dev/null +++ b/readme.md @@ -0,0 +1,188 @@ +# โ†’ Visit [uses.tech](https://uses.tech) for a good time + +A list of `/uses` pages detailing developer setups, gear, software and configs. + +Add your own `/uses` page in [data.js](https://github.com/wesbos/awesome-uses/blob/master/src/data.js). + +This readme is auto-generated from the data.js file, so please don't PR this file. + +``` + โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–„ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–„ โ–„โ–„โ–„โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„โ–„ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–€โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€โ–ˆโ–ˆโ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ +โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–€โ–ˆโ–ˆโ–ˆโ–€โ–ˆโ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–€โ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ + +โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ + +``` + +# Awesome Uses ![Awesome][awesome-badge] + +* [Wes Bos](https://wesbos.com/uses) โ€” Maker of this site. Web Developer, Tutorial Maker, Syntax.fm Podcaster, BBQ Lover +* [Eliezer Steinbock](https://elie.tech/uses) โ€” Founder of Skilled.co.il and Draft Fantasy. Full Stack Freelance Developer +* [James Quick](https://jamesqquick.com/uses) โ€” Developer Advocate Engineer at @auth0 and content creator +* [Federico Vitale](https://fedevitale.dev/uses) โ€” 20yo, Self Taught FullStack Developer, Full Time. Bikes lover, Tech (obviously) enthusiast. +* [Vishwasa Navada K](https://vishwas.tech/uses) โ€” Geek. Open source Enthusiast. Occasional blogger, photographer and traveler. +* [Silvestar Bistroviฤ‡](https://www.silvestar.codes/uses/) โ€” Fearless web engineer, CSS developer, JAMstack enthusiast, and WordPress theme specialist. +* [Adam Schwartz](https://adamschwartz.co/uses/) โ€” Software developer, designer, film music composer +* [Sergey Lysenko](https://soulwish.info/uses/) โ€” Front-end developer, guitar player, MTB rider, snowboarder, runner. +* [Habbat Adnan](https://adncodez.com/uses) โ€” Self Taught Web Developer, Full Time Freelancer, Open Source Enthusiast +* [Carter McAlister](https://cartermcalister.dev/uses) โ€” Software Engineer, Digital Nomad, Lover of the Outdoors +* [Matt Jennings](https://mattjennings.io/uses) โ€” web dev, hockey | tradebreaker.io +* [Jason Cory Alvernaz](https://jasoncoryalvernaz.com/uses) โ€” Web Developer, Blogger, YouTuber, and Dog Lover. Not necessarily in that order. +* [Alessia Bellisario](https://aless.co/uses) โ€” Web engineer, mechanical keyboard builder, plotter art maker. +* [Sam Cross](http://sam-cross.github.io/uses) โ€” "Developer", IT student, frequent traveller by coach, addicted to music. +* [Praveen Kumar Purushothaman](https://blog.praveen.science/my-personal-development-environment/) โ€” Cook, Cat Lover, Front End Architect, Full Stack Web Developer Evangelist & Cloud Computing Consultant. +* [Rene Pot](http://renepot.com/uses) โ€” Developer Evangelist, JavaScript Developer, Cross-Platform App Developer and gamer +* [Gant Laborde](http://gantlaborde.com/uses/) โ€” Speaker, GDE Web/ML, Podcaster, Trainer, Speaker, Author, Podcaster +* [Tiffany White](https://tiffanywhite.dev/uses/) โ€” Frontend dev, blogger, podcaster, herder of cats +* [Kent C. Dodds](https://kentcdodds.com/uses) โ€” JavaScript Software Engineer, speaker, and trainer +* [Ava Gaiety Wroten](https://www.wroten.me/uses) โ€” JavaScript Software Engineer, artist, and designer +* [Glenn Reyes](https://glennreyes.com/uses) โ€” Independent Software Engineer, trainer & speaker. Into sports & music. +* [Adam Jahnke](https://adamyonk.com/uses) โ€” Caffiend, motorcyclist, climber, recovering perfectionist. I love to make the complex simple. +* [Andrew Healey](https://healeycodes.com/uses) โ€” Software Engineer, Writer, Learner! +* [Scott Tolinski](https://scotttolinski.com/uses) โ€” Web Developer, Tutorial Maker, Podcaster, Bboy +* [Anton Andrรฉsen](https://anton.best/uses/) โ€” Software Engineer, Tutorial Maker, Youtuber, Tea Drinker +* [Josiah Wiebe](https://jwie.be/uses/) โ€” Designer & developer, lifelong learner. +* [Benjamin Lannon](https://lannonbr.com/uses/) โ€” Web Developer, Open Source Contributor, Livestreamer +* [Braden Watkins](https://bradenwatkins.dev/uses) โ€” Student, Full Stack Developer, Lover of all things analog +* [Lauro Silva](https://laurosilva.com/uses) โ€” Software Engineer and Technical Writer +* [Nuno Maduro](https://nunomaduro.com/uses/) โ€” Software engineer, Open Source contributor, Speaker +* [Adrian Marin](https://adrianthedev.com/uses) โ€” Product-Minded Software Engineer, Digital nomad, no-nonsense enjoyer of life, friends and family. +* [Jahir Fiquitiva](https://jahir.dev/uses) โ€” Passionate and Creative Full Stack Developer +* [Christophe Querton](https://kertof.com/what-i-use) โ€” Software Engineer, xoogler, co-founder of @accelery. Full-stack, technical debt collector. Lover of the Outdoors, BBQ, sailing. +* [Lina Marรญa Montaรฑo Ramรญrez](https://calypsobronte.me/uses) โ€” Software Engineer at @holbertonschool, Web Developer, passionate and Organizer at @node_co +* [Brad Garropy](https://bradgarropy.com/uses) โ€” Self taught frontender at Adobe, into lifting and country music. +* [Abdisalan Mohamud](https://abdisalan.com/uses) โ€” Software Engineer, blogger, lifetime learner +* [Josh Barker](https://joshuabarker.com/uses) โ€” Front end engineer at Red Ventures. Soccer enthusiast. Lover of stories. +* [Aaron Dunphy](https://aarondunphy.com/uses) โ€” Full Stack Developer, Coffee Lover and Photo Taker +* [Mohamed Benhida](http://mohamedbenhida.com/uses) โ€” Web Developer, Open source contributor. +* [Thomas Hunter II](https://thomashunter.name/uses) โ€” Node.js developer with a thing for distributed systems. Co-organizer of NodeSchool SF. Game developer. +* [Andrew McCombe](https://www.euperia.com/uses) โ€” Experienced full stack web developer with a passion for testing. +* [Smakosh](https://smakosh.com/the-tech-tools-I-use) โ€” Full stack JavaScript Developer, blogger and speaker. +* [Pouria Ezzati](https://pouria.dev/uses) โ€” Web developer. Digs music, football and a e s t h e t i c s +* [Jonathan Suh](https://jonsuh.com/uses) โ€” Designer, Developer, Sneakerhead +* [Jonathan Speek](https://speek.design/uses) โ€” Developer & Musician +* [David O'Trakoun](https://www.davidosomething.com/uses/) โ€” Software Engineer +* [Dean Harris](https://deanacus.com/uses/) โ€” Front End Developer. Husband. Skateboarder. Occasional blogger +* [Michael Hoffmann](https://www.mokkapps.de/blog/my-development-setup/) โ€” Freelance Software Engineer +* [Michael Le](https://www.michael1e.com/uses/) โ€” Software Engineer +* [Sil van Diepen](https://www.silvandiepen.nl/uses/) โ€” Creative Developer +* [Kilian Valkhof](https://kilianvalkhof.com/using/) โ€” User experience developer +* [Timothy Miller](https://timothymiller.dev/uses) โ€” Web Designer/Developer for hire. Wears lots of hats. +* [Christopher Hranj](https://brodan.biz/uses) โ€” Software Engineer, Blogger, Musician, Ultimate player. +* [Vincent Ramdhanie](https://vincentramdhanie.com/uses) โ€” Software Developer, Lecturer, Technical Writer and Mentor +* [Amir R Muntasser](https://arkm.xyz/uses/) โ€” Web Developer, #vuenicorn wizard, Oxford comma enthusiast, and inventor of the ol' razzle dazzle. +* [Pavel Melnik](https://theopract.gitlab.io/pavel-dev/uses/) โ€” Web developer, Technology enthusiast, Energy Management System expert +* [Miguel รngel Durรกn](https://midu.dev/uses) โ€” Front end passionate, Web Performance freak, casual speaker, podcast host, and gamer. +* [David Llop](https://davidllop.com/uses) โ€” Full stack developer from Girona. Open Source contributor. Always Learning. +* [Josh Manders](https://joshmanders.com/uses/) โ€” Full Snack Developer and Indie Maker +* [Daniel Wirtz](https://danielwirtz.com/uses/) โ€” Designer who codes @Crisp Studio +* [Harry Wolff](https://hswolff.com/uses/) โ€” Front-end engineer and YouTuber +* [James Mills](https://jamesmills.co.uk/uses) โ€” Work with PHP & Laravel at @clicksco in Dubai. Pleased to be part of the Laravel community. +* [Jeffrey Way](https://laracasts.com/blog/laracasts-uses) โ€” Laracasts Author +* [Terry Godier](https://terrygodier.com/uses) โ€” A developer and marketer of fine internet products. +* [Erno Salo](https://endormi.io/uses/) โ€” Full Stack Developer and Open Source Contributor +* [Gokulakrishnan Kalaikovan](https://gokul.site/uses) โ€” Web Developer, GDE, Open Source contributor, Speaker +* [James Brooks](https://james.brooks.page/uses/) โ€” Software Developer at Laravel and Podcaster +* [Byurhan Beyzat](https://byurhanbeyzat.com/uses) โ€” Front-End Developer. Engineer. Occasional blogger. +* [Mike Barkmin](https://www.barkmin.eu/uses/) โ€” I'm a passionate developer and researcher at the University of Duisburg-Essen at the chair of Computer Science Education. +* [Hugo Di Francesco](https://codewithhugo.com/uses/) โ€” JavaScript developer, blogger at codewithhugo.com, author of 'Professional JavaScript' with Packt. +* [Steve Heyes](https://steveheyes.co.uk/uses) โ€” I like to use tech to build awesome things that makes peoples lives better +* [Diego Vazquez](https://gist.github.com/diurivj/78ca931c4b20dca1e1e13982fa9c309d) โ€” Young guy who loves code. Full Stack Web Developer. Lead Teacher @ Ironhack +* [Rafael Quintanilha](https://rafaelquintanilha.com/about#uses) โ€” Software Engineer. Blogs about Web Development, Front-end, React, UI/UX, Accessibility. +* [Talita Oliveira](https://talitaoliveira.com.br/#uses) โ€” Software Developer. Loves CSS and Javascript. Already worked with PHP and a little with JAVA. +* [Ben Leivian](https://benleivian.com/uses) โ€” A โ€œseasonedโ€ full-stack developer & visual designer ๐Ÿ” +* [Roman Husar](https://seemslikelegit.com/uses) โ€” Tinkering, all the time. +* [Stephen Senkomago Musoke](https://ssmusoke.com/uses) โ€” Software Engineer, eHealth Technologist, PHP Lover by night, Muganda, Goat Meat for Life, Coffee Drinker +* [Jรฉrรฉmy Mouzin](https://jeremymouzin.com/uses) โ€” Software Engineer, Tutorial Maker, Entrepreneur, Blogger +* [Adam Laycock](https://www.arcath.net/uses) โ€” IT Engineer, Web Developer & Blogger +* [Scott Spence](https://scottspence.me#uses) โ€” Father, husband ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง Web Developer. Just In Time learner โค๏ธ ๐Ÿ‘ http://my.pronoun.is/he +* [Josรฉ Manuel Lucas](https://jmlweb.es/blog/2020/uses/) โ€” Professional Frontend Engineer - Amateur musician +* [Georgi Yanev](https://gyanev.com/uses/) โ€” Software Engineer, FPV Drone Pilot, Blogger, YouTuber +* [Karl Horky](https://github.com/karlhorky/uses/blob/master/readme.md) โ€” Founder, Teacher at https://upleveled.io +* [Josh Farrant](https://farrant.me/uses) โ€” Full-Stack JavaScript developer, creator of Shortcuts JS, astrophysicist and private pilot. I turn coffee, alchemy-like, into code. +* [Pedro Assunรงรฃo](https://pedroassuncao.com/pages/uses) โ€” Senior Fullstack Software Developer, Tutorial Maker, Blogger +* [Steven van Loef](https://steven.vanloef.com/uses) โ€” Web Developer, App Developer +* [Richard Zilahi](https://gist.github.com/zilahir/4aaf5907999ea53711b2d554d22b0f3f) โ€” Full stack developer, pug enthusiast, dying for pizza +* [Ricard Torres](https://php.quicoto.com/uses/) โ€” Senior Front-end Software Engineer from Barcelona, Haidong Gumdo Instructor, street photographer, TV addict, Boston Red Sox fan... +* [Bezael Pรฉrez](https://dominicode.com/uses) โ€” Front-end Developer passionate. Trainer & speaker +* [Zander Martineau](https://zander.wtf/writing/my-setup) โ€” Independent front-end-full-stack-UI-UX-engineer coder +* [Daniel Van Cuylenburg](https://danielvanc.com/uses) โ€” Front-end Web Developer. Love all things CSS, ReactJS, GatsbyJS, NodeJS and U.I design +* [Chiamaka Ikeanyi](https://chiamakaikeanyi.dev/uses) โ€” Software Engineer, Technical Writer, Poet +* [Francis Sunday](https://hakaselogs.me/2020-01-10/what-i-use) โ€” Software Engineer | Gopher | Hacker +* [Jared Clifton-Lee](https://jared.clifton-lee.com/uses) โ€” Engineer of code; manager of people; trainer of cats +* [James Kemp](https://www.jameskemp.dev/uses/) โ€” Web Developer, Blogger, Freelancer +* [Tom Hazledine](https://tomhazledine.com/uses) โ€” Data visualisation tinkerer and JS enthusiast. Podcaster. Nerd. +* [Mihai Serban](https://www.mihaiserban.dev/uses) โ€” Software engineer in constant search for new and exciting technologies +* [Nick Janetakis](https://nickjanetakis.com/uses) โ€” Freelance Web Developer, Web App Deployment, Tutorials, Technical death metal enthusiast +* [Kaleigh Scruggs](https://kaleighscruggs.com/uses) โ€” Front-End Web Developer, stand-up comedian, loves Brazilian jiu-jitsu, tea, and being a helicopter dog mom +* [Ste Grainer](https://stegrainer.com/uses) โ€” Designer, Developer +* [Josรฉ Carlos Correa](https://jossdz.com/uses) โ€” Fullstack developer and speaker. Lead teacher @ironhack and gatsby teacher @platzi. Learning all the time. +* [Erv Walter](https://blog.ewal.net/uses/) โ€” Father, Husband, Web Developer, Board Game Addict +* [Juanito Fatas](https://juanitofatas.com/uses) โ€” Program Tinker ๐Ÿง™๐Ÿผโ€โ™‚๏ธ +* [Elliot Bonneville](https://elliotbonneville.com/uses) โ€” Freelance Web Developer / Consultant, educator, lover of coffee, cats, and writing of all kinds. +* [John Garrett](https://johngarrett.dev/uses) โ€” Arch Duke of Computering, Full Stack Instructor +* [Dieter Stinglhamber](https://www.dieterstinglhamber.me/uses/) โ€” Developer, human, nerd. +* [Dany Paredes](https://danywalls.com/uses) โ€” I was a .NET guy, my last years โค๏ธ { #js & #sass } and play[ #react #vue #angular #sveltejs] +* [Thomas Weibenfalk](https://www.weibenfalk.com/uses/) โ€” Passionate developer, course creator, youtuber, designer and musician from Sweden +* [Chris Burgin](https://chrisburgin.me/uses) โ€” Frontend Software Engineer +* [Shiveen Pandita](https://shiveenp.com/uses/) โ€” Fullstack developer and blogger from Sydney +* [David Leuliette](https://davidl.fr/uses) โ€” Freelance React Native developer and bootcamp instructor specializing in cross-platform application. +* [Dave Berning](https://daveberning.io/uses/) โ€” Developer, author, rocker, Nintendo enthusiast. I also co-organize the CodePen Cincinnati Meetups. +* [Jan-Lukas Else](https://jlelse.dev/uses/) โ€” Computer Science Student, Developer & Blogger from Germany +* [Seyhun Akyรผrek](https://www.seyhunakyurek.com/uses/) โ€” Senior Software Specialist. Swift, Objective-C, former Rubyist. Author of twitter-bootstrap-rails +* [Eric Oyanadel](https://www.oyanadel.com/uses/) โ€” Artist - Developer - Musician +* [Usman Khwaja](https://usmankhwaja.com/uses) โ€” Front end engineer, Jamstack developer +* [Thomas Large](https://tomlarge.dev/uses) โ€” My name is Tom! I write code +* [Amit Merchant](https://www.amitmerchant.com/uses) โ€” Maker of things. Open-source enthusiast. Blogger. +* [Jesse James Burton](https://burtonmediainc.com/uses) โ€” Software Developing Yogi from Alberta, Canada. Lets build the internet together. +* [Junaid Qadir](https://junaidqadir.com/uses) โ€” A Full Stack #Laravel Developer +* [Yurui Zhang](https://gist.github.com/pallymore/6e12133b5c2fa2856a8a6b288e579c01) โ€” Full-stack developer. Dark mode enthusiast. Quality software devotee. +* [Eduardo Reveles](https://www.osiux.ws/about/uses) โ€” Web Engineer, Husband, Gamer. +* [Thomas Maximini](https://www.maxi.io/uses/) โ€” Freelance software developer from Germany. +* [Philip Theobald](https://www.philiptheobald.com/uses/) โ€” Guitar player, motorcyclist, software engineer, entreprenuer +* [Alejandro G. Anglada](https://aganglada.com/uses/) โ€” Dad ๐Ÿ‘ช๐Ÿ”ฅโšก๏ธ Web Engineer โš›๏ธ๐Ÿš€ Building websites with #react #typescript #nodejs #graphql ๐Ÿ‘Œ +* [Antoni Kepinski](https://kepinski.me/uses/) โ€” Node Fetch maintainer // Into Node.js and Rust +* [Marcus Obst](https://marcus-obst.de/uses) โ€” Webdeveloper, Music Lover +* [Pawel Grzybek](https://pawelgrzybek.com/uses/) โ€” Software Engineer +* [Eric McCormick](https://edm00se.codes/uses/) โ€” Software Developer, IBM Champion, coffee lover, dabbler in all things technology, hobbyist 3d design and printing +* [Ben Congdon](https://benjamincongdon.me/uses) โ€” Golang, Python, Rust. Runs in the Cloud. +* [Jens van Wijhe](https://jens.ai/uses) โ€” Creative web developer and entrepreneur +* [Jacob Herper](https://herper.io/uses/) โ€” Senior Front-End Engineer with a passion for all things digital. I create amazing web apps to make the internet a better place. +* [David Vives](http://dispuestoaaprender.netlify.com/en/uses) โ€” Software Engineer, Web Developer, Chess Player, Comics Reader, Loves reading, learning new things, sushi, BBQ and aioli. +* [Ryan Warner](https://ryan.warner.codes/uses) โ€” Software Engineer and Interface Designer. Leader and Mentor. +* [Adam Urban](https://urbanisierung.dev/uses/) โ€” coder, father, left-handed +* [Majo Paskuvan](https://paskuvan.us/uses.html) โ€” Front End Developer, Reader, Deaf Person +* [Christopher Wavrin](https://wavrin.com/uses) โ€” Full Stack Developer +* [Florian Kapfenberger](https://phiilu.com/uses) โ€” Frontend developer from Austria who likes to create modern applications with React (Native) +* [Maria Altyeva Schuessler ](http://mariacodes.io/uses) โ€” Nacho Cheese Lover and Senior Full-Stack Developer, Project Manager, and Writer based out of Shanghai, China +* [Arturo Campos](https://arturocampos.dev/uses) โ€” Web Developer, dad, mountain biker, meat lover +* [Sercan Eraslan](http://sercaneraslan.com/uses) โ€” Front-End Tech Lead +* [Jeff Wen](https://sinchang.me/uses) โ€” Web Developer, Open Source Contributor +* [Andrea Prus](https://avris.it/uses) โ€” Full stack developer, blogger +* [Bamuleseyo Gideon](https://medium.com/developer-circle-kampala/what-i-use-my-tools-of-trade-552655db4b8d) โ€” Software Engineer, Facebook Developer Cirle Kamapala Lead. Front-end โค๏ธ +* [Nick Taylor](https://www.iamdeveloper.com/uses/) โ€” Just some dev from Montreal, Quebec, Canada +* [Dave Hill](https://davehill.dev/uses/) โ€” Front-end developer, amateur photographer, podcast beginner. +* [Logan Blangenois](https://logan-blangenois.be/uses/) โ€” Front-end developer passionate about eco-friendly (web)app and React. +* [Muhammad Umair](https://gist.github.com/mumairofficial/0d97ed3dca1ba25d9f01b8db8aed42dc) โ€” Fullstack front-end developer and designer, passionate in everything #JavaScript +* [Alex Carpenter](https://alexcarpenter.me/uses) โ€” UI Engineer, Screencaster +* [Kevin Woblick](https://www.kovah.de/uses/) โ€” I turn Pizza into Code and Photos +* [Michaล‚ Miszczyszyn](https://typeofweb.com/michal-miszczyszyn-uses/) โ€” Motivated full-stack developer not afraid to use any technology. Experienced developer and leader. He, him. +* [Tarik Omercehajic](https://robotz.tech/uses/) โ€” DevOps Engineer @BicomSystems. Mechanical Engineer in free time :) +* [Duncan McDougall](https://www.belter.io/uses/) โ€” Web developer, contractor, remotely working from the South of Scotland +* [Kevin Simkaniฤ](https://github.com/kevinko12323/uses) โ€” Wordpress ninja ๐Ÿ˜Ž React lover โค๏ธ CSS master ๐Ÿง +* [Jerry Shi](https://github.com/szy0syz/uses) โ€” Full Stack, Motivated full-stack developer not afraid to use any technology. + +[awesome-badge]: https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg diff --git a/scripts/data-validate.js b/scripts/data-validate.js new file mode 100644 index 00000000..e9554ebb --- /dev/null +++ b/scripts/data-validate.js @@ -0,0 +1,88 @@ +import Joi from '@hapi/joi'; +import core from '@actions/core'; +import * as http from 'http'; +import * as https from 'https'; +import data from '../src/data.js'; +import flags from './flags.js'; + +if (process.env.CI !== 'true') { + core.error = console.error; + core.setFailed = console.error; +} + +const schema = Joi.object({ + name: Joi.string().required(), + description: Joi.string().required(), + url: Joi.string() + .uri() + .required() + .pattern(/(use|uses|using|setup|environment|^https:\/\/gist.github.com\/)/), + country: Joi.string() + .valid(...flags) + .required(), + twitter: Joi.string().pattern(new RegExp(/^@?(\w){1,15}$/)), + emoji: Joi.string().allow(''), + computer: Joi.string().valid('apple', 'windows', 'linux'), + phone: Joi.string().valid('iphone', 'android'), + tags: Joi.array().items(Joi.string()), +}); + +const errors = data + .map(person => schema.validate(person)) + .filter(v => v.error) + .map(v => v.error); + +errors.forEach(e => { + core.error(e._original.name); + e.details.forEach(d => core.error(d.message)); +}); + +if (errors.length) { + core.setFailed('Action failed with validation errors, see logs'); +} +const REQUEST_TIMEOUT = 10000; + +function getStatusCode(url) { + const client = url.startsWith('https') ? https : http; + return new Promise((resolve, reject) => { + setTimeout(() => reject(new Error('Request timed out')), REQUEST_TIMEOUT); + client + .get(url, res => { + resolve(res.statusCode); + }) + .on('error', err => { + reject(err); + }); + }); +} + +async function isWorkingUrl(url) { + try { + const statusCode = await getStatusCode(url); + if (statusCode < 200 || statusCode >= 400) { + core.error(`Ping to "${url}" failed with status: ${statusCode}`); + return false; + } + return true; + } catch (e) { + core.error(`Ping to "${url}" failed with error: ${e}`); + return false; + } +} + +(async () => { + // TODO: we might need to batch these in sets instead of requesting 100+ URLs + // at the same time + const areWorkingUrls = await Promise.all( + data.map(p => p.url).map(url => isWorkingUrl(url)) + ); + const failingUrls = areWorkingUrls.filter(a => !a); + if (failingUrls.length > 0) { + core.setFailed( + `Action failed with ${failingUrls.length} URL fetch failures, see logs` + ); + } + if (process.env.CI !== 'true') { + process.exit(failingUrls.length > 0 ? 1 : 0) + } +})(); diff --git a/scripts/flags.js b/scripts/flags.js new file mode 100644 index 00000000..100e8038 --- /dev/null +++ b/scripts/flags.js @@ -0,0 +1,240 @@ +const flags = [ + '๐Ÿ‡ฆ๐Ÿ‡ซ', + '๐Ÿ‡ฆ๐Ÿ‡ฑ', + '๐Ÿ‡ฉ๐Ÿ‡ฟ', + '๐Ÿ‡ฆ๐Ÿ‡ธ', + '๐Ÿ‡ฆ๐Ÿ‡ฉ', + '๐Ÿ‡ฆ๐Ÿ‡ด', + '๐Ÿ‡ฆ๐Ÿ‡ฎ', + '๐Ÿ‡ฆ๐Ÿ‡ถ', + '๐Ÿ‡ฆ๐Ÿ‡ฌ', + '๐Ÿ‡ฆ๐Ÿ‡ท', + '๐Ÿ‡ฆ๐Ÿ‡ฒ', + '๐Ÿ‡ฆ๐Ÿ‡ผ', + '๐Ÿ‡ฆ๐Ÿ‡บ', + '๐Ÿ‡ฆ๐Ÿ‡น', + '๐Ÿ‡ฆ๐Ÿ‡ฟ', + '๐Ÿ‡ง๐Ÿ‡ธ', + '๐Ÿ‡ง๐Ÿ‡ญ', + '๐Ÿ‡ง๐Ÿ‡ฉ', + '๐Ÿ‡ง๐Ÿ‡ง', + '๐Ÿ‡ง๐Ÿ‡พ', + '๐Ÿ‡ง๐Ÿ‡ช', + '๐Ÿ‡ง๐Ÿ‡ฟ', + '๐Ÿ‡ง๐Ÿ‡ฏ', + '๐Ÿ‡ง๐Ÿ‡ฒ', + '๐Ÿ‡ง๐Ÿ‡น', + '๐Ÿ‡ง๐Ÿ‡ด', + '๐Ÿ‡ง๐Ÿ‡ถ', + '๐Ÿ‡ง๐Ÿ‡ฆ', + '๐Ÿ‡ง๐Ÿ‡ผ', + '๐Ÿ‡ง๐Ÿ‡ป', + '๐Ÿ‡ง๐Ÿ‡ท', + '๐Ÿ‡ง๐Ÿ‡ณ', + '๐Ÿ‡ง๐Ÿ‡ฌ', + '๐Ÿ‡ง๐Ÿ‡ซ', + '๐Ÿ‡ง๐Ÿ‡ฎ', + '๐Ÿ‡ฐ๐Ÿ‡ญ', + '๐Ÿ‡จ๐Ÿ‡ฒ', + '๐Ÿ‡จ๐Ÿ‡ฆ', + '๐Ÿ‡จ๐Ÿ‡ป', + '๐Ÿ‡ฐ๐Ÿ‡พ', + '๐Ÿ‡จ๐Ÿ‡ซ', + '๐Ÿ‡น๐Ÿ‡ฉ', + '๐Ÿ‡จ๐Ÿ‡ฑ', + '๐Ÿ‡จ๐Ÿ‡ณ', + '๐Ÿ‡จ๐Ÿ‡ฝ', + '๐Ÿ‡จ๐Ÿ‡จ', + '๐Ÿ‡จ๐Ÿ‡ด', + '๐Ÿ‡ฐ๐Ÿ‡ฒ', + '๐Ÿ‡จ๐Ÿ‡ฉ', + '๐Ÿ‡จ๐Ÿ‡ฌ', + '๐Ÿ‡จ๐Ÿ‡ฐ', + '๐Ÿ‡จ๐Ÿ‡ท', + '๐Ÿ‡ญ๐Ÿ‡ท', + '๐Ÿ‡จ๐Ÿ‡บ', + '๐Ÿ‡จ๐Ÿ‡ผ', + '๐Ÿ‡จ๐Ÿ‡พ', + '๐Ÿ‡จ๐Ÿ‡ฟ', + '๐Ÿ‡ฉ๐Ÿ‡ฐ', + '๐Ÿ‡ฉ๐Ÿ‡ฏ', + '๐Ÿ‡ฉ๐Ÿ‡ฒ', + '๐Ÿ‡ฉ๐Ÿ‡ด', + '๐Ÿ‡ช๐Ÿ‡จ', + '๐Ÿ‡ช๐Ÿ‡ฌ', + '๐Ÿ‡ธ๐Ÿ‡ป', + '๐Ÿ‡ฌ๐Ÿ‡ถ', + '๐Ÿ‡ช๐Ÿ‡ท', + '๐Ÿ‡ช๐Ÿ‡ช', + '๐Ÿ‡ช๐Ÿ‡น', + '๐Ÿ‡ซ๐Ÿ‡ด', + '๐Ÿ‡ซ๐Ÿ‡ฏ', + '๐Ÿ‡ซ๐Ÿ‡ฎ', + '๐Ÿ‡ซ๐Ÿ‡ท', + '๐Ÿ‡ฌ๐Ÿ‡ซ', + '๐Ÿ‡ต๐Ÿ‡ซ', + '๐Ÿ‡น๐Ÿ‡ซ', + '๐Ÿ‡ฌ๐Ÿ‡ฆ', + '๐Ÿ‡ฌ๐Ÿ‡ฒ', + '๐Ÿ‡ฌ๐Ÿ‡ช', + '๐Ÿ‡ฉ๐Ÿ‡ช', + '๐Ÿ‡ฌ๐Ÿ‡ญ', + '๐Ÿ‡ฌ๐Ÿ‡ฎ', + '๐Ÿ‡ฌ๐Ÿ‡ง', + '๐Ÿ‡ฌ๐Ÿ‡ท', + '๐Ÿ‡ฌ๐Ÿ‡ฑ', + '๐Ÿ‡ฌ๐Ÿ‡ฉ', + '๐Ÿ‡ฌ๐Ÿ‡ต', + '๐Ÿ‡ฌ๐Ÿ‡บ', + '๐Ÿ‡ฌ๐Ÿ‡น', + '๐Ÿ‡ฌ๐Ÿ‡ฌ', + '๐Ÿ‡ฌ๐Ÿ‡ณ', + '๐Ÿ‡ฌ๐Ÿ‡ผ', + '๐Ÿ‡ฌ๐Ÿ‡พ', + '๐Ÿ‡ญ๐Ÿ‡น', + '๐Ÿ‡ญ๐Ÿ‡ณ', + '๐Ÿ‡ญ๐Ÿ‡ฐ', + '๐Ÿ‡ญ๐Ÿ‡บ', + '๐Ÿ‡ฎ๐Ÿ‡ธ', + '๐Ÿ‡ฎ๐Ÿ‡ณ', + '๐Ÿ‡ฎ๐Ÿ‡ฉ', + '๐Ÿ‡ฎ๐Ÿ‡ท', + '๐Ÿ‡ฎ๐Ÿ‡ถ', + '๐Ÿ‡ฎ๐Ÿ‡ช', + '๐Ÿ‡ฎ๐Ÿ‡ฑ', + '๐Ÿ‡ฎ๐Ÿ‡น', + '๐Ÿ‡จ๐Ÿ‡ฎ', + '๐Ÿ‡ฏ๐Ÿ‡ฒ', + '๐Ÿ‡ฏ๐Ÿ‡ต', + '๐Ÿ‡ฏ๐Ÿ‡ช', + '๐Ÿ‡ฏ๐Ÿ‡ด', + '๐Ÿ‡ฐ๐Ÿ‡ฟ', + '๐Ÿ‡ฐ๐Ÿ‡ช', + '๐Ÿ‡ฐ๐Ÿ‡ฎ', + '๐Ÿ‡ฐ๐Ÿ‡ผ', + '๐Ÿ‡ฐ๐Ÿ‡ฌ', + '๐Ÿ‡ฑ๐Ÿ‡ฆ', + '๐Ÿ‡ฑ๐Ÿ‡ป', + '๐Ÿ‡ฑ๐Ÿ‡ง', + '๐Ÿ‡ฑ๐Ÿ‡ธ', + '๐Ÿ‡ฑ๐Ÿ‡ท', + '๐Ÿ‡ฑ๐Ÿ‡พ', + '๐Ÿ‡ฑ๐Ÿ‡ฎ', + '๐Ÿ‡ฑ๐Ÿ‡น', + '๐Ÿ‡ฑ๐Ÿ‡บ', + '๐Ÿ‡ฒ๐Ÿ‡ด', + '๐Ÿ‡ฒ๐Ÿ‡ฐ', + '๐Ÿ‡ฒ๐Ÿ‡ฌ', + '๐Ÿ‡ฒ๐Ÿ‡ผ', + '๐Ÿ‡ฒ๐Ÿ‡พ', + '๐Ÿ‡ฒ๐Ÿ‡ป', + '๐Ÿ‡ฒ๐Ÿ‡ฑ', + '๐Ÿ‡ฒ๐Ÿ‡น', + '๐Ÿ‡ฒ๐Ÿ‡ญ', + '๐Ÿ‡ฒ๐Ÿ‡ถ', + '๐Ÿ‡ฒ๐Ÿ‡ท', + '๐Ÿ‡ฒ๐Ÿ‡บ', + '๐Ÿ‡พ๐Ÿ‡น', + '๐Ÿ‡ฒ๐Ÿ‡ฝ', + '๐Ÿ‡ซ๐Ÿ‡ฒ', + '๐Ÿ‡ฒ๐Ÿ‡ฉ', + '๐Ÿ‡ฒ๐Ÿ‡จ', + '๐Ÿ‡ฒ๐Ÿ‡ณ', + '๐Ÿ‡ฒ๐Ÿ‡ช', + '๐Ÿ‡ฒ๐Ÿ‡ธ', + '๐Ÿ‡ฒ๐Ÿ‡ฆ', + '๐Ÿ‡ฒ๐Ÿ‡ฟ', + '๐Ÿ‡ฒ๐Ÿ‡ฒ', + '๐Ÿ‡ณ๐Ÿ‡ฆ', + '๐Ÿ‡ณ๐Ÿ‡ท', + '๐Ÿ‡ณ๐Ÿ‡ต', + '๐Ÿ‡ณ๐Ÿ‡ฑ', + '๐Ÿ‡ณ๐Ÿ‡จ', + '๐Ÿ‡ณ๐Ÿ‡ฟ', + '๐Ÿ‡ณ๐Ÿ‡ฎ', + '๐Ÿ‡ณ๐Ÿ‡ช', + '๐Ÿ‡ณ๐Ÿ‡ฌ', + '๐Ÿ‡ณ๐Ÿ‡บ', + '๐Ÿ‡ณ๐Ÿ‡ซ', + '๐Ÿ‡ฐ๐Ÿ‡ต', + '๐Ÿ‡ฒ๐Ÿ‡ต', + '๐Ÿ‡ณ๐Ÿ‡ด', + '๐Ÿ‡ด๐Ÿ‡ฒ', + '๐Ÿ‡ต๐Ÿ‡ฐ', + '๐Ÿ‡ต๐Ÿ‡ผ', + '๐Ÿ‡ต๐Ÿ‡ธ', + '๐Ÿ‡ต๐Ÿ‡ฆ', + '๐Ÿ‡ต๐Ÿ‡ฌ', + '๐Ÿ‡ต๐Ÿ‡พ', + '๐Ÿ‡ต๐Ÿ‡ช', + '๐Ÿ‡ต๐Ÿ‡ญ', + '๐Ÿ‡ต๐Ÿ‡ณ', + '๐Ÿ‡ต๐Ÿ‡ฑ', + '๐Ÿ‡ต๐Ÿ‡น', + '๐Ÿ‡ต๐Ÿ‡ท', + '๐Ÿ‡ถ๐Ÿ‡ฆ', + '๐Ÿ‡ท๐Ÿ‡ช', + '๐Ÿ‡ท๐Ÿ‡ด', + '๐Ÿ‡ท๐Ÿ‡บ', + '๐Ÿ‡ท๐Ÿ‡ผ', + '๐Ÿ‡ผ๐Ÿ‡ธ', + '๐Ÿ‡ธ๐Ÿ‡ฒ', + '๐Ÿ‡ธ๐Ÿ‡น', + '๐Ÿ‡ธ๐Ÿ‡ฆ', + '๐Ÿ‡ธ๐Ÿ‡ณ', + '๐Ÿ‡ท๐Ÿ‡ธ', + '๐Ÿ‡ธ๐Ÿ‡จ', + '๐Ÿ‡ธ๐Ÿ‡ฑ', + '๐Ÿ‡ธ๐Ÿ‡ฌ', + '๐Ÿ‡ธ๐Ÿ‡ฐ', + '๐Ÿ‡ธ๐Ÿ‡ฎ', + '๐Ÿ‡ธ๐Ÿ‡ง', + '๐Ÿ‡ธ๐Ÿ‡ด', + '๐Ÿ‡ฟ๐Ÿ‡ฆ', + '๐Ÿ‡ฌ๐Ÿ‡ธ', + '๐Ÿ‡ฐ๐Ÿ‡ท', + '๐Ÿ‡ธ๐Ÿ‡ธ', + '๐Ÿ‡ช๐Ÿ‡ธ', + '๐Ÿ‡ฑ๐Ÿ‡ฐ', + '๐Ÿ‡ธ๐Ÿ‡ฉ', + '๐Ÿ‡ธ๐Ÿ‡ท', + '๐Ÿ‡ธ๐Ÿ‡ฏ', + '๐Ÿ‡ธ๐Ÿ‡ฟ', + '๐Ÿ‡ธ๐Ÿ‡ช', + '๐Ÿ‡จ๐Ÿ‡ญ', + '๐Ÿ‡ธ๐Ÿ‡พ', + '๐Ÿ‡น๐Ÿ‡ผ', + '๐Ÿ‡น๐Ÿ‡ฏ', + '๐Ÿ‡น๐Ÿ‡ฟ', + '๐Ÿ‡น๐Ÿ‡ญ', + '๐Ÿ‡น๐Ÿ‡ฑ', + '๐Ÿ‡น๐Ÿ‡ฌ', + '๐Ÿ‡น๐Ÿ‡ฐ', + '๐Ÿ‡น๐Ÿ‡ด', + '๐Ÿ‡น๐Ÿ‡น', + '๐Ÿ‡น๐Ÿ‡ณ', + '๐Ÿ‡น๐Ÿ‡ท', + '๐Ÿ‡น๐Ÿ‡ฒ', + '๐Ÿ‡น๐Ÿ‡จ', + '๐Ÿ‡น๐Ÿ‡ป', + '๐Ÿ‡บ๐Ÿ‡ฌ', + '๐Ÿ‡บ๐Ÿ‡ฆ', + '๐Ÿ‡ฆ๐Ÿ‡ช', + '๐Ÿ‡บ๐Ÿ‡พ', + '๐Ÿ‡บ๐Ÿ‡ธ', + '๐Ÿ‡บ๐Ÿ‡ฟ', + '๐Ÿ‡ป๐Ÿ‡บ', + '๐Ÿ‡ป๐Ÿ‡ฆ', + '๐Ÿ‡ป๐Ÿ‡ช', + '๐Ÿ‡ป๐Ÿ‡ณ', + '๐Ÿ‡ผ๐Ÿ‡ซ', + '๐Ÿ‡ช๐Ÿ‡ญ', + '๐Ÿ‡พ๐Ÿ‡ช', + '๐Ÿ‡ฟ๐Ÿ‡ฒ', + '๐Ÿ‡ฟ๐Ÿ‡ผ', + '๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ', + '๐Ÿณ๏ธโ€๐ŸŒˆ', + '๐Ÿ‡ช๐Ÿ‡บ', +]; + +export default flags; diff --git a/scripts/populate-readme.js b/scripts/populate-readme.js new file mode 100644 index 00000000..3a834d5c --- /dev/null +++ b/scripts/populate-readme.js @@ -0,0 +1,13 @@ +import fs from 'fs'; +import data from '../src/data.js'; + +/** @type {string} */ +const readmeTemplate = fs.readFileSync('./scripts/readme-template.md', 'utf8'); +const formatedData = data + .map(page => `* [${page.name}](${page.url}) โ€” ${page.description}`) + .join('\r\n'); + +fs.writeFileSync( + 'generated-readme.md', + readmeTemplate.replace('###DATA_PLACEHOLDER###', formatedData) +); diff --git a/scripts/readme-template.md b/scripts/readme-template.md new file mode 100644 index 00000000..e6087f72 --- /dev/null +++ b/scripts/readme-template.md @@ -0,0 +1,34 @@ +# โ†’ Visit [uses.tech](https://uses.tech) for a good time + +A list of `/uses` pages detailing developer setups, gear, software and configs. + +Add your own `/uses` page in [data.js](https://github.com/wesbos/awesome-uses/blob/master/src/data.js). + +This readme is auto-generated from the data.js file, so please don't PR this file. + +``` + โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–„ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–„ โ–„โ–„โ–„โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„โ–„ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–€โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€โ–ˆโ–ˆโ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ +โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–„ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ + โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–€โ–ˆโ–ˆโ–ˆโ–€โ–ˆโ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–€โ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ + +โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ โ–ˆโ–ˆโ–ˆ โ–ˆโ–€ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–€โ–€โ–ˆโ–ˆโ–ˆโ–€โ–€โ–€ โ–€โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–„ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–ˆโ–ˆโ–ˆ โ–„โ–ˆ โ–ˆโ–ˆโ–ˆ +โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ–„โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–€ + +``` + +# Awesome Uses ![Awesome][awesome-badge] + +###DATA_PLACEHOLDER### + +[awesome-badge]: https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg diff --git a/src/components/Person.js b/src/components/Person.js index 8ab35af7..86a05aca 100644 --- a/src/components/Person.js +++ b/src/components/Person.js @@ -7,7 +7,7 @@ import * as icons from '../util/icons'; export default function Person({ person, currentTag }) { const url = new URL(person.url); - const img = `https://logo.clearbit.com/${url.host}`; + const img = `https://images.weserv.nl/?url=https://unavatar.now.sh/${url.host}&w=100&l=9&af&il&n=-1` return ( @@ -19,9 +19,15 @@ export default function Person({ person, currentTag }) { {`${url.host}${url.pathname}`} + >{`${url.host}${ + url.pathname.endsWith('/') + ? url.pathname.substr(0, url.pathname.length - 1) + : url.pathname + }`}

{person.description}

@@ -54,7 +60,7 @@ export default function Person({ person, currentTag }) { {person.twitter && ( @@ -77,6 +83,7 @@ Person.propTypes = { emoji: PropTypes.string, description: PropTypes.string, tags: PropTypes.arrayOf(PropTypes.string), + country: PropTypes.string, computer: PropTypes.oneOf(['apple', 'windows', 'linux']), phone: PropTypes.oneOf(['iphone', 'android']), twitter(props, propName, componentName) { @@ -118,10 +125,16 @@ const PersonInner = styled.div` font-size: 1rem; } .displayLink { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; text-decoration: none; color: var(--vape); letter-spacing: 1px; font-size: 1.2rem; + text-overflow: ellipsis; + max-width: 100%; + overflow: hidden; :hover { color: var(--pink); } @@ -150,6 +163,7 @@ const PersonDeets = styled.div` } .country { font-size: 3rem; + padding-top: 2rem; } .phone { padding: 0; diff --git a/src/components/Topics.js b/src/components/Topics.js index 4262a986..d420e2a7 100644 --- a/src/components/Topics.js +++ b/src/components/Topics.js @@ -76,7 +76,7 @@ export default function Topics() { } // Component Styles -const Tags = styled.div` +const Tags = styled.ul` list-style-type: none; margin: 0; padding: 0; @@ -92,7 +92,7 @@ const Tag = styled.label` padding: 5px; color: hsla(0, 100%, 100%, 0.8); transition: background-color 0.2s; - cursor: ${props => (props.clickable? "pointer" : "default")}; + cursor: ${props => (props.clickable ? 'pointer' : 'default')}; display: grid; grid-template-columns: 1fr auto; align-items: center; diff --git a/src/components/header.js b/src/components/header.js index 3b80b1b7..9c5e3b62 100644 --- a/src/components/header.js +++ b/src/components/header.js @@ -5,12 +5,20 @@ import Helmet from 'react-helmet'; import styled from 'styled-components'; import FavIcon from './FavIcon'; -function Header({ siteTitle }) { +function Header({ siteTitle, siteDescription, siteUrl }) { return ( + {siteTitle} + + + + + + +

diff --git a/src/components/layout.js b/src/components/layout.js index 502fb33d..2f4a808a 100644 --- a/src/components/layout.js +++ b/src/components/layout.js @@ -19,6 +19,8 @@ const Layout = ({ children }) => { site { siteMetadata { title + description + siteUrl } } } @@ -28,7 +30,11 @@ const Layout = ({ children }) => { <>
-
+
{children}