├── .github
├── ISSUE_TEMPLATE.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── DetailedReadme.md
├── README.md
├── Tutorials.md
├── data-formatting
└── script.js
├── package-lock.json
├── package.json
├── public
├── _redirects
├── favicon.ico
├── index.html
└── manifest.json
├── readme-images
├── code-location.jpg
└── npm-install-example-output.jpg
├── src
├── About
│ ├── About.scss
│ └── index.js
├── App.js
├── App.test.js
├── Card
│ ├── Card.scss
│ └── index.js
├── Header
│ ├── Header.scss
│ └── index.js
├── Link
│ └── index.js
├── Profiles
│ ├── Profiles.scss
│ └── index.js
├── SiteLink
│ ├── SiteLink.scss
│ └── index.js
├── data.json
├── index.js
├── index.scss
├── logo.svg
├── serviceWorker.js
├── setupTests.js
└── specs
│ └── Main.spec.js
├── temp.json
└── yarn.lock
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Your issue may already be reported!
2 | Please search on the [issue track](../) before creating one.
3 |
4 | ## Expected Behavior
5 |
6 |
7 |
8 | ## Current Behavior
9 |
10 |
11 |
12 | ## Possible Solution
13 |
14 |
15 |
16 | ## Steps to Reproduce (for bugs)
17 |
18 |
19 | 1.
20 | 2.
21 | 3.
22 | 4.
23 |
24 | ## Context
25 |
26 |
27 |
28 | ## Your Environment
29 |
30 | * Version used:
31 | * Any required dependencies and version
32 | * Browser Name and version:
33 | * Operating System and version (desktop or mobile):
34 | * Link to your project:
35 |
36 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Description
2 |
3 |
4 |
5 | ## Motivation and Context
6 |
7 |
8 |
9 | ## How Has This Been Tested?
10 |
11 |
12 |
13 |
14 | ## Screenshots (if appropriate):
15 |
16 | ## Types of changes
17 |
18 | - [ ] Bug fix (non-breaking change which fixes an issue)
19 | - [ ] New feature (non-breaking change which adds functionality)
20 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
21 | - [ ] This change requires a documentation update
22 |
23 | ## Checklist:
24 |
25 |
26 | - [ ] My code follows the code style of this project.
27 | - [ ] My change requires a change to the documentation.
28 | - [ ] I have updated the documentation accordingly.
29 | - [ ] I have commented my code, particularly in hard-to-understand areas
30 | - [ ] My changes generate no new warnings
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 |
12 | # misc
13 | .DS_Store
14 | .env
15 | .env.local
16 | .env.development.local
17 | .env.test.local
18 | .env.production.local
19 |
20 | npm-debug.log*
21 | yarn-debug.log*
22 | yarn-error.log*
23 |
24 | .vscode/
25 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to make participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at [INSERT EMAIL ADDRESS]. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/DetailedReadme.md:
--------------------------------------------------------------------------------
1 | # Learn Code from Us
2 |
3 | ## Project Introduction
4 |
5 | The following text was taken from the about page on [https://learncodefrom.us](https://learncodefrom.us):
6 |
7 | > Learn Code from Us is a site that lists people who are members of underrepresented groups in tech who create resources geared towards programmers of all levels. These resources include (but are not limited to) podcasts, blog posts, newsletters, or YouTube videos. For now, this site is geared towards free resources in order to be as accessible as possible
8 |
9 | ## The Detailed Readme
10 |
11 | If you would like a less detailed list of instructions for building this repo, please see the [Readme](Readme.md)
12 |
13 | ## Software Requirements
14 |
15 | You will need the following software to be installed in order to build the code within this repository:
16 |
17 | ### A Git Client
18 |
19 | This is required so that you can "clone" the this repository to your computer. "Cloning" code can be thought of as copying it.
20 |
21 | Most operating systems have a git client included. However, these are command line based and can be a little obtuse to start with.
22 |
23 | Some graphical git applications include:
24 |
25 | - [The GitHub application](https://desktop.github.com/)
26 | - [SourceTree](https://www.sourcetreeapp.com/)
27 | - [Gitkraken](https://www.gitkraken.com/)
28 |
29 | ### A Text Editor
30 |
31 | You could use a full IDE (Integrated Development Environment), but a text editor will do just as well. Some recommended text editors include:
32 |
33 | - [Sublime Text](https://www.sublimetext.com/)
34 | - [Atom](https://atom.io/)
35 | - [Visual Studio Code](https://code.visualstudio.com/)
36 | - [WebStorm](https://www.jetbrains.com/webstorm/)
37 | - Notepad
38 |
39 | ### Node and the npm package manager
40 |
41 | [Node](https://nodejs.org/en/) is a technology which allows you to run JavaScript (traditionally a language which used to only run in web browsers) on your desktop.
42 |
43 | It includes npm (or Node Package Manager). This is a huge repository of open source JavaScript code libraries that you can add to your application.
44 |
45 |
46 | ## Set up instructions
47 |
48 | ### Cloning the Repository to Your Computer
49 |
50 | Precisely how you will do this depends on your git client.
51 |
52 | If you are using the official GitHub client for example, then you should be able to follow [these instructions](https://help.github.com/desktop/guides/contributing-to-projects/cloning-a-repository-from-github-to-github-desktop/) to clone the repository.
53 |
54 | If you are using a command line based git client, then the following command will clone the repository to your computer:
55 |
56 | ``` bash
57 | git clone https://github.com/aspittel/learn-code-from-us.git
58 | ```
59 |
60 | The above command will copy all of the files, and their history, to your computer.
61 |
62 | ### Installing all of the Node Packages
63 |
64 | Once you have cloned the repository to your computer, you need to install all of the Node Packages. To do this, you will need to open a command line window (sometimes called a "terminal") and point it at the directory with the cloned respository in it.
65 |
66 | For example, if your closed repository is in the following directory:
67 |
68 | 
69 |
70 | Then you would need to open a command line and issue the following command:
71 |
72 | ``` bash
73 | cd /home/jamie/code/learn-code-from-us
74 | ```
75 |
76 | This tells the command line interpreter (which is what the command line passes your input to), to change directory (which is what the `cd` part means) to `/home/jamie/code/learn-code-from-us`
77 |
78 | This is like opening your file explorer (`My Computer` on Windows, `Finder` on MacOS) in that directory.
79 |
80 | Once we're there, running the following command will restore all of the Node packages:
81 |
82 | ``` bash
83 | npm install
84 | ```
85 |
86 | You could shorten this to `npm i` if you like.
87 |
88 | This will cause Node to read the contents of the `package.json` file and download all of the Node packages that this repository needs in order to run. An example of what might be displayed as output from this command is:
89 |
90 | 
91 |
92 | ### Running the Code
93 |
94 | Once you have installed all of the Node packages, you can run the code by issuing the following command:
95 |
96 | ``` bash
97 | npm start
98 | ```
99 |
100 | This will tell Node to start a webserver and host all of the files that it sees in the `learn-code-from-us` directory. It will also start a new tab in your web browser and point it at the running code.
101 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Learn Code from Us
2 |
3 | ## Project Introduction
4 |
5 | The following text was taken from the about page on [https://learncodefrom.us](https://learncodefrom.us):
6 |
7 | > Learn Code from Us is a site that lists people who are members of underrepresented groups in tech who create resources geared towards programmers of all levels. These resources include (but are not limited to) podcasts, blog posts, newsletters, or YouTube videos. For now, this site is geared towards free resources in order to be as accessible as possible
8 |
9 | [Here](https://dev.to/aspittel/introducing-learn-code-from-us-oe1) is a blog post with more about the project.
10 |
11 | ## Contributing
12 |
13 | If you would like to contribute, please add an issue or comment on one of the ones that are open that you are working on it. Then submit a pull request!
14 |
15 | If you would like to discuss the project in more detail [here](https://dev.to/learncodefromus/learn-code-from-us-developer-thread-3a5a) is an open thread where you can ask code questions or discuss the future of the project!
16 |
17 | ## Adding New People
18 |
19 | On the user side, please add a new person through [this form](https://airtable.com/shrYbUMMlR1iVpA1l).
20 |
21 | > This site is specifically for highlighting people who are members of underrepresented groups in tech who create content for programmers.
22 |
23 | > Please only submit if you have over five posts, and you are planning on making more content in the future!
24 |
25 | > Also, please only submit your own content at this point!
26 |
27 | On the code side, the logic is in `data-formatting/script.js`. It creates the `data.json` file. You need an API key for the base in order to run this script. At this point, Ali will handle this process since it requires a couple manual checks.
28 |
29 | ## The Detailed Readme
30 |
31 | If you are new to coding and would like to know what each part of the setup does or requires, please see the [Detailed Readme](DetailedReadme.md)
32 |
33 | ## Software Requirements
34 |
35 | You will need the following software to be installed in order to build the code within this repository:
36 |
37 | - A git Client
38 | - A Text Editor
39 | - [Node](https://nodejs.org/en/)
40 |
41 | ## Set up instructions
42 |
43 | - Clone the repo
44 | - run `npm install` within the `learn-from-us` directory
45 | - run `npm start` within the same directory
46 |
47 | ## [Checkout Awesome Tutorials From Beginners to Advanced](Tutorials.md)
48 |
49 |
--------------------------------------------------------------------------------
/Tutorials.md:
--------------------------------------------------------------------------------
1 | # Tutorials
2 |
3 |
4 | ### React
5 |
6 | #### Beginners/Intro to React
7 | - [A Complete Beginner's Guide to React](https://dev.to/aspittel/a-complete-beginners-guide-to-react-2cl6)
8 | - [Net Ninja Videos](https://www.youtube.com/playlist?list=PL4cUxeGkcC9ij8CfkAY2RAGb-tmkNwQHG): This tutorial explains the basics of React.js and Redux. Perfect for beginners.
9 | - [edx course](https://www.edx.org/course/programming-web-javascript-pennx-sd4x) for learning react
10 | - Codeacdemy free react course to learn concepts of react
11 | - [Part I](https://www.codecademy.com/learn/react-101)
12 | - [Part II](https://www.codecademy.com/learn/react-102)
13 | - [React Starter Kit](https://glitch.com/featured/react-starter-kit/) by [Glitch](https://glitch.com/)
14 | - [Traversy Media - React Crash Course](https://www.youtube.com/watch?v=A71aqufiNtQ)
15 | - How to Learn React — A roadmap from beginner to advanced - [Srebalaji Thirumalai](https://medium.freecodecamp.org/learning-react-roadmap-from-scratch-to-advanced-bff7735531b6).
16 | - [LearnCode.academy Videos](https://www.youtube.com/watch?v=MhkGQAoc7bc&list=PLoYCgNOIyGABj2GQSlDRjgvXtqfDxKm5b)
17 | - [freeCodeCamp's React Lessons](https://learn.freecodecamp.org/front-end-libraries/react/)
18 |
19 | #### More advanced/Specific React Topics
20 | - Build a custom toggle switch - [Toggle Switch](https://scotch.io/tutorials/build-a-custom-toggle-switch-with-react)
21 | - Build A simple login profile - [User login](https://scotch.io/tutorials/build-your-first-app-with-reacts-context-api)
22 | - Introduction to `context-api` - [React Context](https://hackernoon.com/how-to-get-started-with-the-react-context-api-ccc41728fa59)
23 | - What's new in CRA v2 - [Create React App v2](https://scotch.io/tutorials/whats-new-in-create-react-app-2)
24 | - Difference between React Elements and React Components - [Tyler McGinnis](https://tylermcginnis.com/react-elements-vs-react-components/)
25 | - React sample projects to learn
26 | - [6 Fun React Projects You Can Build Today](https://daveceddia.com/react-practice-projects/)
27 | - [25 React Projects](http://sean-smith.me/assets/portfolio/25-react-projects/index.html)
28 | - Create a Simple To-Do App With React - [Chris Nwamba](https://scotch.io/tutorials/create-a-simple-to-do-app-with-react).
29 | - [Building a chat app with React.js and Chatkit](https://scrimba.com/g/greactchatkit) - Per Harald Borgen on [Scrimba](https://scrimba.com/).
30 |
31 | ### HTML & CSS
32 | - [A Complete Beginner's Guide to HTML](https://www.w3schools.com/html/)
33 | - [Basic to advanced tutorial on CSS](https://www.w3schools.com/css/)
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/data-formatting/script.js:
--------------------------------------------------------------------------------
1 | require('dotenv').config()
2 | const fs = require('fs')
3 |
4 | const base = require('airtable').base('appyahDjTyD3MR0tU')
5 | let data = []
6 |
7 | base('Data').select({
8 | view: 'published'
9 | }).eachPage(function page (records, fetchNextPage) {
10 | records.forEach(record => {
11 | delete record.fields['Which underrepresented group are you a member of?']
12 | delete record['_table']
13 | delete record['_rawJson']
14 | })
15 | data = data.concat(records)
16 | fetchNextPage()
17 | }, (err) => {
18 | if (err) {
19 | console.error(err)
20 | } else {
21 | fs.writeFile('src/data.json', JSON.stringify(data), function (err, _) {
22 | if (err) console.log(err)
23 | console.log('Successfully Written to File.')
24 | console.log(data.length + ' records')
25 | })
26 | }
27 | })
28 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "women-in-tech",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.18.0",
7 | "node-sass": "^4.9.4",
8 | "react": "^16.5.2",
9 | "react-addons-css-transition-group": "^15.6.2",
10 | "react-dom": "^16.5.2",
11 | "react-modal": "^3.6.1",
12 | "react-router-dom": "^4.3.1",
13 | "react-scripts": "2.0.5",
14 | "react-tooltip": "^3.9.0"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "test": "react-scripts test",
20 | "test:all": "standard && prettier-standard 'src/**/*.{js,jsx}' && react-scripts test",
21 | "lint:run": "standard",
22 | "lint:prettier": "prettier-standard 'src/**/*.{js,jsx}'",
23 | "lint:fix": "standard --fix",
24 | "eject": "react-scripts eject"
25 | },
26 | "standard": {
27 | "globals": [
28 | "it",
29 | "fetch"
30 | ]
31 | },
32 | "eslintConfig": {
33 | "extends": "react-app",
34 | "rules": {
35 | "eqeqeq": 1,
36 | "semi": [
37 | "error",
38 | "never"
39 | ]
40 | }
41 | },
42 | "browserslist": [
43 | ">0.2%",
44 | "not dead",
45 | "not ie <= 11",
46 | "not op_mini all"
47 | ],
48 | "devDependencies": {
49 | "airtable": "^0.5.7",
50 | "dotenv": "^6.1.0",
51 | "enzyme": "^3.7.0",
52 | "enzyme-adapter-react-16": "^1.6.0",
53 | "eslint": "5.6.0",
54 | "jest-environment-enzyme": "^7.0.0",
55 | "jest-enzyme": "^7.0.0",
56 | "prettier-standard": "^8.0.1",
57 | "prop-types": "^15.6.2",
58 | "react-test-renderer": "^16.5.2",
59 | "standard": "^12.0.1"
60 | },
61 | "jest": {
62 | "snapshotSerializers": [
63 | "enzyme-to-json/serializer"
64 | ]
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
2 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aspittel/learn-code-from-us/fa8b4faed41f713edb33871a23f4c10419733914/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 | Learn Code from Us is a site that lists people who are members of
10 | underrepresented groups in tech who create resources geared towards
11 | programmers of all levels. These resources include (but are not limited
12 | to) podcasts, blog posts, newsletters, or YouTube videos. For now, this
13 | site is geared towards free resources in order to be as accessible as
14 | possible.{" "}
15 |
20 | Here
21 | {' '}
22 | is a blog post with more about the project.
23 |
24 |
25 | If you would like to be included on this list and identify as part of an
26 | underrepresented group in tech, please fill out{" "}
27 |
32 | this form
33 |
34 | !
35 |
36 |
37 | );
38 | };
39 |
40 | export default About;
41 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { BrowserRouter as Router, Route } from 'react-router-dom'
3 | import Header from './Header'
4 | import Profiles from './Profiles'
5 | import About from './About'
6 |
7 | class App extends Component {
8 | render () {
9 | return (
10 |
11 |
66 |
67 | )
68 | }
69 | }
70 |
71 | export default Profiles
72 |
--------------------------------------------------------------------------------
/src/SiteLink/SiteLink.scss:
--------------------------------------------------------------------------------
1 | .links {
2 | width: 75%;
3 | display: flex;
4 | justify-content: space-around;
5 | margin-bottom: 30px;
6 |
7 | svg {
8 | color: #7b8acc;
9 | height: 24;
10 | width: 24;
11 | size: 24;
12 | }
13 |
14 | a{
15 | position: relative;
16 |
17 | &:after{
18 | content: attr(data-tip);
19 | position:absolute;
20 | bottom:0;
21 | left:50%;
22 | transform: translate(-50%, 100%);
23 | font-size:0.8em;
24 | color:#999;
25 | opacity:0;
26 | transition:all 0.3s;
27 | padding:0.25em 0;
28 | }
29 |
30 |
31 | &:hover{
32 |
33 | &:after{
34 | opacity: 1;
35 | }
36 | }
37 | }
38 | }
39 |
40 | .overlay {
41 | background-color: #7b8acc;
42 | height: 100%;
43 | left: 0;
44 | position: absolute;
45 | top: 0;
46 | width: 100%;
47 | z-index: -1;
48 | }
49 |
--------------------------------------------------------------------------------
/src/SiteLink/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 |
4 |
5 | import './SiteLink.scss'
6 |
7 | const SiteLink = ({ link, icon, tooltipText }) => {
8 | if (!link) return null
9 |
10 | return (
11 |
17 |
18 |
19 | )
20 | }
21 |
22 | SiteLink.propTypes = {
23 | link: PropTypes.string,
24 | tooltipText: PropTypes.string,
25 | icon: PropTypes.string
26 | }
27 |
28 | export default SiteLink
29 |
--------------------------------------------------------------------------------
/src/data.json:
--------------------------------------------------------------------------------
1 | [{"id":"recWhmTAXi2OjNN2R","fields":{"Name":"Ali Spittel","Tags":["WebDev","Design","JavaScript","CSS","Python"],"Blog":"https://zen-of-programming.com","Website":"https://alispit.tel","About":"Ali's blog The Zen of Programming is a set of resources that she wishes she had when she was learning to code, including code and design tutorials, motivational posts, and life updates.\n","Published":true,"slug":"ali-spittel","Newsletter":"https://tinyletter.com/ali_writes_code","Image":[{"id":"attIOBwo35aiNjbpX","url":"https://dl.airtable.com/nqocZpRButvXs9ch5vbw_selfiesquare.jpg","filename":"selfiesquare.jpg","size":224297,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/PCGOkMDZSvOXPgxBzIXB_small_selfiesquare.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/Tf1WIoCcQLGQSsDEIGXs_large_selfiesquare.jpg","width":512,"height":512},"full":{"url":"https://dl.airtable.com/hFKaVzzuToWOyaxjgxGh_full_selfiesquare.jpg","width":1341,"height":1340}}}],"Dev":"https://dev.to/aspittel"}},{"id":"recSCs0qSkc8pSd6r","fields":{"Name":"Arit Amana","Tags":["WebDev","JavaScript"],"Blog":"https://medium.com/@msarit","About":"As a developer, Arit's passion is two-fold: (1) empowering businesses, companies and organizations achieve their goals and bottom-line by leveraging her tech skills (2) inspiring, encouraging and mentoring other developers, particularly those less represented in the tech space.\n","Published":true,"slug":"arit-amana","Image":[{"id":"att7l8b5bvABvK762","url":"https://dl.airtable.com/b8Ajl8lJSEO8m4U9Jzqg_pic%20for%20resume.jpg","filename":"pic for resume.jpg","size":908584,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/3udjIBypTOSBTB51XOGu_small_pic%20for%20resume.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/TMz45N5lT5GRFacp8MI4_large_pic%20for%20resume.jpg","width":512,"height":512},"full":{"url":"https://dl.airtable.com/vboQnG5BSbC5fZWZyJgO_full_pic%20for%20resume.jpg","width":1440,"height":1440}}}]}},{"id":"reciyS34zeGtsWL6v","fields":{"Name":"Emma Wedekind","Tags":["WebDev","JavaScript","CSS","Design"],"Blog":"https://www.medium.com/@emmawedekind","About":"Emma is a Software Engineer at LogMeIn I’m Germany and enjoys blogging about everything design, and front-end development. ","Published":true,"slug":"emma-wedekind","Image":[{"id":"attV0U2VV379SdH8O","url":"https://dl.airtable.com/cfjFVRV7RoKVKkF9Gd3k_2E682F13-24A8-429F-9328-619927BFAABA.jpeg","filename":"2E682F13-24A8-429F-9328-619927BFAABA.jpeg","size":215370,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/6qUPZZFLTQea3sJCiDOv_small_2E682F13-24A8-429F-9328-619927BFAABA.jpeg","width":33,"height":36},"large":{"url":"https://dl.airtable.com/CQSsqvaKRamxYSM6ugfn_large_2E682F13-24A8-429F-9328-619927BFAABA.jpeg","width":512,"height":560},"full":{"url":"https://dl.airtable.com/M7mzk8SLSi6U89BXdkMN_full_2E682F13-24A8-429F-9328-619927BFAABA.jpeg","width":1138,"height":1245}}}]}},{"id":"recqgVk51yWmZnfhq","fields":{"Name":"Code with Veni","Tags":["WebDev","Data Science","Python","JavaScript"],"Blog":"http://codewithveni.com","About":"A newsletter for women & enbies in tech. Get hand picked selection of great articles on coding, finding your first job as well as advice from women in the field.","Published":true,"slug":"code-with-veni","Newsletter":"http://codewithveni.com","Image":[{"id":"attYa4iL09e0bYEUi","url":"https://dl.airtable.com/A8zklLFSQHaR0mzWkBbQ_cover_photo_orig.jpg","filename":"cover_photo_orig.jpg","size":385962,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/H48LcifbRLqomwARKk7m_small_cover_photo_orig.jpg","width":108,"height":36},"large":{"url":"https://dl.airtable.com/mnf0hyYRPuidvXthlBi3_large_cover_photo_orig.jpg","width":1532,"height":512},"full":{"url":"https://dl.airtable.com/oAQE1t3HQgiHIvEkUWU5_full_cover_photo_orig.jpg","width":2005,"height":670}}}]}},{"id":"recgnwTRHpAse6sKu","fields":{"Name":"Coding Commanders ","Tags":["WebDev","JavaScript","CSS"],"Blog":"http://www.codingcommanders.com","YouTube":"https://www.youtube.com/channel/UC-gCUMK_EGUqJ7P9VA7BJmQ","About":"Coding Commanders has easy to follow Web Development tutorials that assume no prior knowledge. ","Published":true,"slug":"coding-commanders","Image":[{"id":"atteAEfuJKoO2QlGv","url":"https://dl.airtable.com/oh74pkIQeGi9ohDSQb0s_logo_resize.png","filename":"logo_resize.png","size":86552,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/loPZ6Y2ERZkGlPitLjok_small_logo_resize.png","width":51,"height":36},"large":{"url":"https://dl.airtable.com/zYQbbLmQseaqGul1wxwl_large_logo_resize.png","width":320,"height":226},"full":{"url":"https://dl.airtable.com/w1AUWs7lRBS9lej3s7ir_full_logo_resize.png","width":320,"height":226}}}]}},{"id":"recOVSnbpg5AGnIWY","fields":{"Name":"Mahmoud Elmahdi","Tags":["JavaScript","WebDev","CSS","Design"],"Blog":"https://elmahdim.com","Website":"https://elmahdim.com","About":"Development & UX/UI tutorials, and courses","Published":true,"slug":"mahmoud-elmahdi","Image":[{"id":"attxsbYO960rVauR1","url":"https://dl.airtable.com/QJIZcWpKQF6jDLfTwiD6_Optimized-IMG_20180510_180944%20copy%20copy.jpg","filename":"Optimized-IMG_20180510_180944 copy copy.jpg","size":332664,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/RtWlo9THQIqMiIEg9tNg_small_Optimized-IMG_20180510_180944%20copy%20copy.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/r4CO0a51Ruq8AIGBCjBC_large_Optimized-IMG_20180510_180944%20copy%20copy.jpg","width":512,"height":519},"full":{"url":"https://dl.airtable.com/0uPi7SFvTU0bjsEUf1FI_full_Optimized-IMG_20180510_180944%20copy%20copy.jpg","width":888,"height":900}}}],"Dev":"https://dev.to/_elmahdim"}},{"id":"recq2X0TR6Ljv8OF7","fields":{"Name":"Ahmad Awais","Tags":["WebDev","JavaScript","CSS"],"Blog":"https://AhmadAwais.com/","YouTube":"https://www.youtube.com/AhmadAwais","About":"🥑 Open Source DevRels ❯ Ridiculously hard-working Web Dev ❯ WordPress Core Dev ❯ TEDx Speaker ❯ JS/DevOps fanboy ❯ Cracks silly jokes ❯ Loves his wife @MaedahBatool + 🍕","Published":true,"slug":"ahmad-awais","Newsletter":"https://dev.to/mrahmadawais","Image":[{"id":"att4FOEx712498Rf3","url":"https://dl.airtable.com/TWSpjJ1RSb6kSLOSCy7w__Ahmad_Awais_TED_Speaker_Speech_Blogging_Alternate_Career_Path_DP_Blurrpurpule.jpg","filename":"_Ahmad_Awais_TED_Speaker_Speech_Blogging_Alternate_Career_Path_DP_Blurrpurpule.jpg","size":13555,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/NSeuA4S7QQm7YnnNZlp2_small__Ahmad_Awais_TED_Speaker_Speech_Blogging_Alternate_Career_Path_DP_Blurrpurpule.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/spbvYBXQfmM3FGfLUigM_large__Ahmad_Awais_TED_Speaker_Speech_Blogging_Alternate_Career_Path_DP_Blurrpurpule.jpg","width":250,"height":250},"full":{"url":"https://dl.airtable.com/dsNURKYRL2fIB2uUheeQ_full__Ahmad_Awais_TED_Speaker_Speech_Blogging_Alternate_Career_Path_DP_Blurrpurpule.jpg","width":250,"height":250}}}],"Dev":"https://dev.to/mrahmadawais"}},{"id":"recp2kPPJRhXST5Qh","fields":{"Name":"Nick Karnik","Tags":["WebDev","JavaScript",".NET","C++","Python","Data Science"],"Blog":"https://nick.karnik.io/","YouTube":"http://youtube.karnik.io","Website":"https://twitter.com/theoutlander","About":"Tutorials about Web Development, Software Engineering, Computer Science, Career in Tech, and Startups.\n\nYou can learn more about me @ http://linkedin.com/in/theoutlander.","Published":true,"slug":"nick-karnik","Image":[{"id":"attW4ZlcZHMYH93as","url":"https://dl.airtable.com/BzotvehSTaNSNtwpoGc3_neo_square.jpg","filename":"neo_square.jpg","size":299328,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/sfRgzI1YRISJ6oCTVpa8_small_neo_square.jpg","width":47,"height":36},"large":{"url":"https://dl.airtable.com/nQ8bJM5ToC3qS3Is3gAV_large_neo_square.jpg","width":666,"height":512},"full":{"url":"https://dl.airtable.com/b0UUKbOSOCLWds1dMxWg_full_neo_square.jpg","width":1040,"height":800}}}],"Dev":"https://dev.to/theoutlander"}},{"id":"recY1sbGD6RNWO6FF","fields":{"Name":"Charlie Gerard","Tags":["WebDev","JavaScript"],"Blog":"https://medium.com/@devdevcharlie","Website":"https://charliegerard.github.io/","About":"I love sharing what I learn from building prototypes with JavaScript, Arduino, Machine learning and AR/VR.","Published":true,"slug":"charlie-gerard","Image":[{"id":"attxVjr02Z3q7dztA","url":"https://dl.airtable.com/XIdIy6O4Rry5SLzPIMvT_Charlie_Gerard.png","filename":"Charlie_Gerard.png","size":540889,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/RB4ecDj8Q1mRTicRfvne_small_Charlie_Gerard.png","width":36,"height":36},"large":{"url":"https://dl.airtable.com/SxTZvlnJQLyNgBibvMSG_large_Charlie_Gerard.png","width":460,"height":460},"full":{"url":"https://dl.airtable.com/dUQkjazQ4y6Qb2aoIhiw_full_Charlie_Gerard.png","width":460,"height":460}}}]}},{"id":"recgAfYx9Gt0JQMAf","fields":{"Name":"Heartbeat","Tags":["JavaScript","WebDev"],"YouTube":"https://goo.gl/8p3msR","About":"We build together a desktop app using NW.js and Vue.js (featuring also the use of Vuetify.js and some npm packages during the journey)","Published":true,"slug":"heartbeat","Image":[{"id":"attcxgCogoze0gAXr","url":"https://dl.airtable.com/U9QhQU2lR9yuaiF6Iuj1_courseBanner_squ.png","filename":"courseBanner_squ.png","size":49900,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/n9AVNFxlTZ2rlJ8zcSvg_small_courseBanner_squ.png","width":36,"height":36},"large":{"url":"https://dl.airtable.com/dWOYXtptRXyZAweSmZM5_large_courseBanner_squ.png","width":500,"height":500},"full":{"url":"https://dl.airtable.com/6g3Xb87TyUGY5N9OPk9g_full_courseBanner_squ.png","width":500,"height":500}}}]}},{"id":"recxN6ownk6vRQX9k","fields":{"Name":"Coding Woman","Tags":["Data Science","Machine Learning","Deep Learning","Computer Vision"],"Blog":"http://www.codingwoman.com","About":"Coding Woman is a blog to share anecdotes from the life of a woman studying Computer Engineering, while supporting Women in Tech to break stereotypes. It also consists of technical topics related to a Computer Engineering degree, as well as tech related news, and articles about Women in STEM.","Published":true,"slug":"coding-woman","Newsletter":"http://eepurl.com/dh8phb","Image":[{"id":"attSXUnyMsMNvLKap","url":"https://dl.airtable.com/izJuWbMpRhii70XVsVVK_coding-woman-logo2.jpg","filename":"coding-woman-logo2.jpg","size":581207,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/UhnWWlRCS8eYuiP1sTEZ_small_coding-woman-logo2.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/Dt1vemJtRUKYUoTB1qd7_large_coding-woman-logo2.jpg","width":512,"height":512},"full":{"url":"https://dl.airtable.com/kWb5hiY7Swaf5XLtCaCX_full_coding-woman-logo2.jpg","width":2603,"height":2603}}}]}},{"id":"recrQojELm0A5wp1E","fields":{"Name":"Amit Merchant","Tags":["WebDev","JavaScript","Design"],"Blog":"https://www.amitmerchant.com","About":"I'm basically posting about all things tech. i.e. JavaScript and PHP. The topics are mostly at the intersection of code and design and sometimes there are rants about certain topics as well.","Published":true,"slug":"amit-merchant","Image":[{"id":"atto2cLFLqbn0fOhH","url":"https://dl.airtable.com/izB9pRelTpa13SqsifGN_profile.jpg","filename":"profile.jpg","size":27005,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/jh5K9mayQBZnJmJgNK4w_small_profile.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/IcLr1TosQnWogAfQl9GW_large_profile.jpg","width":320,"height":320},"full":{"url":"https://dl.airtable.com/QZgh9BIlQFa2FxGTuZnA_full_profile.jpg","width":320,"height":320}}}],"Dev":"https://dev.to/amit_merchant"}},{"id":"recB02Kg0J9WzQQ47","fields":{"Name":"Asam Shan","Tags":["WebDev","JavaScript","CSS"],"Blog":"https://upbeat-sinoussi-998f2b.netlify.com/","Website":"https://asamshan.com/","About":"I try to help the newest of newbies get started with programming.","Published":true,"slug":"asam-shan","Image":[{"id":"attcUVPEi19oYkyRQ","url":"https://dl.airtable.com/zXPJsYyRSV25nyrFtNFr_av.jpeg","filename":"av.jpeg","size":18886,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/2L2rIjXaQBa217J5qr2r_small_av.jpeg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/NYxk4p9eRbq4BGbovHPO_large_av.jpeg","width":400,"height":400},"full":{"url":"https://dl.airtable.com/Cm3pDL0TTmMNcwTqHZ3A_full_av.jpeg","width":400,"height":400}}}],"Dev":"https://dev.to/shan5742"}},{"id":"recsRVuP6LKuvTbay","fields":{"Name":"Sharynne Azhar","Tags":["WebDev","JavaScript","CSS","Design"],"Blog":"https://sharynneazhar.com/blog/","Website":"https://sharynneazhar.com/","About":"Hi, I'm Sharynne and I'm addicted to building products. I love sharing about the different things I've learned from my experiences. Feel free to follow my journey through my blog or connect with me through LinkedIn! ","Published":true,"slug":"sharynne-azhar","Image":[{"id":"attTcYCsYVLFkcVYe","url":"https://dl.airtable.com/HmqHuy1FTwaWIhxc5mTT_IMG_3828l.jpg","filename":"IMG_3828l.jpg","size":1072325,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/86WoRiW0SgqYloImJmeZ_small_IMG_3828l.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/76AGpHTRQHq4PurmNfSA_large_IMG_3828l.jpg","width":512,"height":518},"full":{"url":"https://dl.airtable.com/xLtWo5cTRz2oQn56Y5FY_full_IMG_3828l.jpg","width":2966,"height":3000}}}]}},{"id":"reclLNJm1iie0zyJW","fields":{"Name":"Madison","Tags":["JavaScript","WebDev"],"Blog":"http://madisonkanna.com","Website":"Madisonkanna.com","About":"I write about learning how to code and becoming a developer without a traditional CS background.","Published":true,"slug":"madison","Newsletter":"http://www.madisonkanna.com/get-my-coding-course-for-free/","Image":[{"id":"attoYM6ByMJoJ7Lc4","url":"https://dl.airtable.com/KP6MZneTCX4mpLl2tN1g_headshot.jpg","filename":"headshot.jpg","size":210844,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/wqhaSQiRLS7EuoXfcGEX_small_headshot.jpg","width":35,"height":36},"large":{"url":"https://dl.airtable.com/Y8oclPkQH3x3RBbBku8w_large_headshot.jpg","width":512,"height":519},"full":{"url":"https://dl.airtable.com/jeWHQ9jQcGMWbV1R97fw_full_headshot.jpg","width":1335,"height":1354}}}]}},{"id":"recmq0bpfHcMbEBOe","fields":{"Name":"Madelene Campos","Tags":["Python","JavaScript","WebDev"],"Blog":"https://maddiecampos.wordpress.com/","Website":"https://madelenecampos.com/","About":"The above website was built by hand and is hosted on Firebase. It includes links to my blog, with which I try to encourage other people who are dissatisfied and need a change in their lives to look into coding as a profession. Specifically, people with musical or arts backgrounds who are unable to find stable employment.","Published":true,"slug":"madelene-campos","Image":[{"id":"attoMneHgUr90xsxx","url":"https://dl.airtable.com/goARqJewSwCqWuuiGO8G_2270.jpg","filename":"2270.jpg","size":58288,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/DZa8O7KDTRWGifLDhLpH_small_2270.jpg","width":64,"height":36},"large":{"url":"https://dl.airtable.com/kokkp6I6QOOUc6Px6KrR_large_2270.jpg","width":910,"height":512},"full":{"url":"https://dl.airtable.com/YBbgE1QtT5Wv1aCu37V2_full_2270.jpg","width":2560,"height":1440}}}]}},{"id":"recVd7hjJ9isAw3J1","fields":{"Name":"Harriet Ryder","Tags":["WebDev","JavaScript","CSS"],"Blog":"http://www.harrietryder.co.uk/","About":"As a software developer and former bootcamp instructor I love learning and teaching all things code! I write technical and non-technical posts on Medium and my personal blog.","Published":true,"slug":"harriet-ryder","Image":[{"id":"att4OshlJClcTtDKT","url":"https://dl.airtable.com/6C3sWW0Q6m68UfvqFXi4_Screen%20Shot%202018-09-23%20at%2016.36.46.png","filename":"Screen Shot 2018-09-23 at 16.36.46.png","size":2750098,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/sjQmdxavSGWh9Ms9tD9b_small_Screen%20Shot%202018-09-23%20at%2016.36.46.png","width":36,"height":36},"large":{"url":"https://dl.airtable.com/SsMJdpTB2BrSEhjWCHwT_large_Screen%20Shot%202018-09-23%20at%2016.36.46.png","width":513,"height":512},"full":{"url":"https://dl.airtable.com/lf9lUlFiRWalU5FwT6mO_full_Screen%20Shot%202018-09-23%20at%2016.36.46.png","width":1186,"height":1184}}}]}},{"id":"recBBv3q1Aj7l4B2k","fields":{"Name":"Kauress","Tags":["WebDev","JavaScript","Computer Vision"],"Blog":"https://www.kauress.me/","YouTube":"https://www.youtube.com/channel/UCqKOx3BuRotITRi99hT2yAw","Website":"http://www.letsjavascript.com","About":"Learning how to code by doing bite sized projects. Fullstack JavaScript and VR.","Published":true,"slug":"kauress","Image":[{"id":"attWWyXWg7SHDQdJW","url":"https://dl.airtable.com/Fi1Vy0opTWPcsTGUTkp6_kauress.jpg","filename":"kauress.jpg","size":35240,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/iubNnTPaQht44Ik2AdiA_small_kauress.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/eLwYIFBPRa6C5IdfcD55_large_kauress.jpg","width":400,"height":400},"full":{"url":"https://dl.airtable.com/l7r3FWEfS2KKPG8DxefI_full_kauress.jpg","width":400,"height":400}}}],"Dev":"https://dev.to/kauresss"}},{"id":"recfCMwdI8hoYWcm1","fields":{"Name":"Saigowtham","Tags":["JavaScript","CSS","WebDev"],"Website":"https://reactgo.com","About":"I write tutorials about JavaScript and web development .","Published":true,"Newsletter":"https://tinyletter.com/reactgo","Image":[{"id":"attf6NWcU7SzMSgm4","url":"https://dl.airtable.com/xZGa3JOcR4m6Zsr1xmHh_download.png","filename":"download.png","size":8676,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/BwcNXCDTQcmT452ghis3_small_download.png","width":36,"height":36},"large":{"url":"https://dl.airtable.com/i6NqWwHGQc2fKzHkIyYh_large_download.png","width":256,"height":256},"full":{"url":"https://dl.airtable.com/HLihqYm9QEuCUJ7lEu6v_full_download.png","width":256,"height":256}}}],"Dev":"https://dev.to/saigowthamr"}},{"id":"recPiDELH12QJPrmy","fields":{"Name":"Aibol","Tags":["WebDev","JavaScript"],"Blog":"https://aibolik.github.io","Website":"https://aibolik.github.io","About":"I am a Software Engineer who loves FrontEnd, JavaScript and everything related to web. I'm beginner tech-blogger and instructor. I like sharing useful stuff, so stay tuned!","Published":true,"Newsletter":"https://tinyletter.com/jsindev","Image":[{"id":"attEHCMdhW8N13d45","url":"https://dl.airtable.com/4QhaL21ITLC0te8sizt9_avatar.png","filename":"avatar.png","size":127786,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/8CxCu1u8SMCtf9ZnR8Al_small_avatar.png","width":36,"height":36},"large":{"url":"https://dl.airtable.com/re8GoiRJ2Vsk1YsEyS4g_large_avatar.png","width":416,"height":416},"full":{"url":"https://dl.airtable.com/MNeUJnRvicINQjXkOOAm_full_avatar.png","width":416,"height":416}}}],"Dev":"http://dev.to/aibolik"}},{"id":"recqx08wE0zHwkC4e","fields":{"Name":"Lindsey Kopacz","Tags":["JavaScript","CSS","WebDev"],"Blog":"https://www.a11ywithlindsey.com/","About":"I write about primarily accessibility and using human empathy to solve technical accessibility problems.","Published":true,"Newsletter":"http://eepurl.com/dy1USP","Image":[{"id":"attAwgw7mpHnjkYoM","url":"https://dl.airtable.com/dTDLsmidTpOy164x2pHg_13581979_10206952583992825_2455472662860616818_o.jpg","filename":"13581979_10206952583992825_2455472662860616818_o.jpg","size":271857,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/0xcsa3GfTr2PvChsDtq8_small_13581979_10206952583992825_2455472662860616818_o.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/ZCVjkVwQyCq61uh7menJ_large_13581979_10206952583992825_2455472662860616818_o.jpg","width":512,"height":512},"full":{"url":"https://dl.airtable.com/rb4BowzYSvmezI8OXCkR_full_13581979_10206952583992825_2455472662860616818_o.jpg","width":1080,"height":1079}}}],"Dev":"https://dev.to/lkopacz"}},{"id":"rec4nS45r3Sz5o2bC","fields":{"Name":"The WebDev Coach","YouTube":"https://www.youtube.com/channel/UCERIxMohPPYmwjtHF3DdlJQ","About":"Teaching web development to those interested in breaking into the industry.","Image":[{"id":"attczAG4MLlDt9qy4","url":"https://dl.airtable.com/Yt8DMrSNSDam9ORD6E9O_WebDev4.png","filename":"WebDev4.png","size":60959,"type":"image/png","thumbnails":{"small":{"url":"https://dl.airtable.com/XD6jaOaRAea7589pmtXt_small_WebDev4.png","width":36,"height":36},"large":{"url":"https://dl.airtable.com/q252PSUQyuuXWvxKyWty_large_WebDev4.png","width":512,"height":512},"full":{"url":"https://dl.airtable.com/11daD2yRsSbE2Z5m3dV0_full_WebDev4.png","width":1000,"height":1000}}}],"Published":true,"Tags":["WebDev"]}},{"id":"recoNMbOcesnaJjd4","fields":{"Name":"Tiffany White","Blog":"https://tiffanywhite.tech","Website":"https://www.twitch.tv/sydmalicious78","About":"React.js, JavaScript, and web development news as well as developer productivity.","Newsletter":"https://buttondown.email/tiffanywhite/","Image":[{"id":"atteHfu6AbV37vL8Y","url":"https://dl.airtable.com/rIYz2YA5S4yor47UPK1H_IMG_4148.JPG","filename":"IMG_4148.JPG","size":309792,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/2fOLsr0HTuWkTwQrHbEj_small_IMG_4148.JPG","width":36,"height":36},"large":{"url":"https://dl.airtable.com/OQ7orYgR4mzBYBa11ASK_large_IMG_4148.JPG","width":512,"height":512},"full":{"url":"https://dl.airtable.com/s1wYhuNiSY2vn0R4FLsq_full_IMG_4148.JPG","width":1242,"height":1242}}}],"Dev":"https://dev.to/twhite","Published":true,"Tags":["WebDev","JavaScript"]}},{"id":"reczp03Z88eFLuJDO","fields":{"Name":"Muses Code JS","Tags":["JavaScript","WebDev"],"Blog":"http://nodegirls.com.au/","Website":"https://github.com/node-girls-australia","About":"Muses runs free JavaScript and Node.js workshops for women, non-binary and trans folk around Australia. We believe that everyone should try programming at least once in their life. \n\nTherefore we created a community where, in a friendly atmosphere with great vibe you can try programming for the first time or, if you already code, learn something new about JavaScript and/or Node.js. \n\nOur half day coding bootcamps are also a great opportunity to grow your network and meet new people with similar interests. Come and join our next half-day coding bootcamp with lunch provided.\n\nAll of our resources are open source on Github. https://github.com/node-girls-australia","Published":true}},{"id":"recerkEX8sromRy7u","fields":{"Name":"Alex Pliutau","Tags":["WebDev","Go"],"Blog":"https://pliutau.com","YouTube":"https://www.youtube.com/packagemain","Website":"https://pliutau.com","About":"Hi Gophers, my name is Alex Pliutau,\n\nTopics I share:\n - Programming in Go\n - Go code reviews\n - Solving Algorithms with Go\n - Microservices with Go\n - Machine learning in Go\n - Build things with Go","Image":[{"id":"attQ6aA7k4q8M56fn","url":"https://dl.airtable.com/G64Ws34BT46f710auoYg_152ccc4.jpg","filename":"152ccc4.jpg","size":1642756,"type":"image/jpeg","thumbnails":{"small":{"url":"https://dl.airtable.com/fZN28udJTeKKzql9CfdK_small_152ccc4.jpg","width":36,"height":36},"large":{"url":"https://dl.airtable.com/xAongwhWQ22F972JsaBx_large_152ccc4.jpg","width":512,"height":512},"full":{"url":"https://dl.airtable.com/FnElpXdiTl2RJogze7oj_full_152ccc4.jpg","width":2224,"height":2224}}}],"Dev":"https://dev.to/plutov","Published":true}}]
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./index.scss";
4 | import App from "./App";
5 | import * as serviceWorker from "./serviceWorker";
6 |
7 | ReactDOM.render(, document.getElementById("root"));
8 |
9 | // If you want your app to work offline and load faster, you can change
10 | // unregister() to register() below. Note this comes with some pitfalls.
11 | // Learn more about service workers: http://bit.ly/CRA-PWA
12 | serviceWorker.unregister();
13 |
--------------------------------------------------------------------------------
/src/index.scss:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css?family=Playfair+Display|Roboto");
2 |
3 | body {
4 | color: #444;
5 | font-family: 'Roboto', sans-serif;
6 | font-size: 20px;
7 | }
8 |
9 | ::-moz-selection {
10 | background-color: paleturquoise;
11 | }
12 |
13 | ::selection {
14 | background-color: paleturquoise;
15 | }
16 |
--------------------------------------------------------------------------------
/src/logo.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/src/serviceWorker.js:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read http://bit.ly/CRA-PWA.
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.1/8 is considered localhost for IPv4.
18 | window.location.hostname.match(
19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
20 | )
21 | )
22 |
23 | export function register (config) {
24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
25 | // The URL constructor is available in all browsers that support SW.
26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location)
27 | if (publicUrl.origin !== window.location.origin) {
28 | // Our service worker won't work if PUBLIC_URL is on a different origin
29 | // from what our page is served on. This might happen if a CDN is used to
30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
31 | return
32 | }
33 |
34 | window.addEventListener('load', () => {
35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`
36 |
37 | if (isLocalhost) {
38 | // This is running on localhost. Let's check if a service worker still exists or not.
39 | checkValidServiceWorker(swUrl, config)
40 |
41 | // Add some additional logging to localhost, pointing developers to the
42 | // service worker/PWA documentation.
43 | navigator.serviceWorker.ready.then(() => {
44 | console.log(
45 | 'This web app is being served cache-first by a service ' +
46 | 'worker. To learn more, visit http://bit.ly/CRA-PWA'
47 | )
48 | })
49 | } else {
50 | // Is not localhost. Just register service worker
51 | registerValidSW(swUrl, config)
52 | }
53 | })
54 | }
55 | }
56 |
57 | function registerValidSW (swUrl, config) {
58 | navigator.serviceWorker
59 | .register(swUrl)
60 | .then(registration => {
61 | registration.onupdatefound = () => {
62 | const installingWorker = registration.installing
63 | installingWorker.onstatechange = () => {
64 | if (installingWorker.state === 'installed') {
65 | if (navigator.serviceWorker.controller) {
66 | // At this point, the updated precached content has been fetched,
67 | // but the previous service worker will still serve the older
68 | // content until all client tabs are closed.
69 | console.log(
70 | 'New content is available and will be used when all ' +
71 | 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'
72 | )
73 |
74 | // Execute callback
75 | if (config && config.onUpdate) {
76 | config.onUpdate(registration)
77 | }
78 | } else {
79 | // At this point, everything has been precached.
80 | // It's the perfect time to display a
81 | // "Content is cached for offline use." message.
82 | console.log('Content is cached for offline use.')
83 |
84 | // Execute callback
85 | if (config && config.onSuccess) {
86 | config.onSuccess(registration)
87 | }
88 | }
89 | }
90 | }
91 | }
92 | })
93 | .catch(error => {
94 | console.error('Error during service worker registration:', error)
95 | })
96 | }
97 |
98 | function checkValidServiceWorker (swUrl, config) {
99 | // Check if the service worker can be found. If it can't reload the page.
100 | fetch(swUrl)
101 | .then(response => {
102 | // Ensure service worker exists, and that we really are getting a JS file.
103 | if (
104 | response.status === 404 ||
105 | response.headers.get('content-type').indexOf('javascript') === -1
106 | ) {
107 | // No service worker found. Probably a different app. Reload the page.
108 | navigator.serviceWorker.ready.then(registration => {
109 | registration.unregister().then(() => {
110 | window.location.reload()
111 | })
112 | })
113 | } else {
114 | // Service worker found. Proceed as normal.
115 | registerValidSW(swUrl, config)
116 | }
117 | })
118 | .catch(() => {
119 | console.log(
120 | 'No internet connection found. App is running in offline mode.'
121 | )
122 | })
123 | }
124 |
125 | export function unregister () {
126 | if ('serviceWorker' in navigator) {
127 | navigator.serviceWorker.ready.then(registration => {
128 | registration.unregister()
129 | })
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/src/setupTests.js:
--------------------------------------------------------------------------------
1 | import * as jestEnv from 'jest-environment-enzyme';
2 |
3 | import { configure } from 'enzyme';
4 | import Adapter from 'enzyme-adapter-react-16';
5 |
6 | configure({ adapter: new Adapter() });
7 |
--------------------------------------------------------------------------------
/src/specs/Main.spec.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import App from '../App'
3 | import renderer from 'react-test-renderer'
4 | import { shallow } from 'enzyme'
5 | import Profiles from '../Profiles'
6 | jest.mock('../data')
7 |
8 | describe('The application', () => {
9 | let data
10 | beforeAll(() => {
11 | data = require('../data.json')
12 | })
13 |
14 | it('should render without crashing', () => {
15 | renderer.create()
16 | })
17 |
18 | it('should allow shallow rendering', () => {
19 | data[0] = {
20 | id: 'recWhmTAXi2OjNN2R',
21 | fields: {
22 | Name: 'Ali Spittel',
23 | Tags: ['WebDev', 'Design', 'JavaScript', 'CSS', 'Python'],
24 | Blog: 'https://zen-of-programming.com',
25 | Website: 'https://alispit.tel',
26 | About:
27 | "Ali's blog The Zen of Programming is a set of resources that she wishes she had when she was learning to code, including code and design tutorials, motivational posts, and life updates.\n",
28 | Published: true,
29 | slug: 'ali-spittel',
30 | Newsletter: 'https://tinyletter.com/ali_writes_code',
31 | Dev: 'https://dev.to/aspittel'
32 | },
33 | createdTime: '2018-09-06T22:03:29.000Z'
34 | }
35 | expect(shallow()).toMatchInlineSnapshot(`
36 |
37 |