├── public
├── favicon.ico
└── index.html
├── src
├── assets
│ ├── screenshot.jpg
│ └── undraw-designer.png
├── components
│ ├── Label.js
│ ├── Nav.js
│ ├── Card.js
│ ├── Banner.js
│ ├── Resources.js
│ └── App.js
├── index.js
├── styles
│ ├── Banner.css
│ ├── Label.css
│ ├── Nav.css
│ ├── Card.css
│ ├── Resources.css
│ └── App.css
├── index.css
└── data.js
├── README.md
├── .gitignore
├── LICENSE
└── package.json
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vlipatdev/frontend-resources/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/src/assets/screenshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vlipatdev/frontend-resources/HEAD/src/assets/screenshot.jpg
--------------------------------------------------------------------------------
/src/assets/undraw-designer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vlipatdev/frontend-resources/HEAD/src/assets/undraw-designer.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Front-end Resources
2 |
3 | :book: A curated collection of usefool tools and websites for front-end web developers
4 |
5 | Website: https://vlipatdev.github.io/frontend-resources/
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/components/Label.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | import '../styles/Label.css';
4 |
5 | class Label extends Component {
6 | render() {
7 | return
{this.props.label}
;
8 | }
9 | }
10 |
11 | export default Label;
12 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import { HashRouter } from 'react-router-dom';
4 |
5 | import App from './components/App';
6 |
7 | import './index.css';
8 |
9 | ReactDOM.render(
10 |
11 |
12 | ,
13 | document.getElementById('root')
14 | );
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/src/styles/Banner.css:
--------------------------------------------------------------------------------
1 | .Banner {
2 | min-height: 4rem;
3 | width: 100%;
4 | background: #7289da;
5 | display: flex;
6 | justify-content: center;
7 | align-items: center;
8 | padding: 1rem 2rem;
9 | text-align: center;
10 | }
11 |
12 | .Banner-text {
13 | color: white;
14 | font-size: 1.4rem;
15 | }
16 |
17 | .Banner-link,
18 | .Banner-link:visited,
19 | .Banner-link:hover {
20 | color: white;
21 | }
22 |
23 | @media screen and (max-width: 768px) {
24 | .Banner-text {
25 | font-size: 1.2rem;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/styles/Label.css:
--------------------------------------------------------------------------------
1 | .Label {
2 | font-size: 1.2rem;
3 | padding: 3px 5px;
4 | border-radius: 3px;
5 | font-weight: 600;
6 | text-transform: uppercase;
7 | display: inline-block;
8 | margin-right: 10px;
9 | margin-top: 10px;
10 | }
11 |
12 | .open-source {
13 | color: #6a1b9a;
14 | background: #f3e5f5;
15 | }
16 |
17 | .free {
18 | color: #0277bd;
19 | background: #e1f5fe;
20 | }
21 |
22 | .premium {
23 | color: #ad1457;
24 | background: #fce4ec;
25 | }
26 |
27 | @media screen and (max-width: 768px) {
28 | .Label {
29 | font-size: 1rem;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | html {
2 | font-size: 62.5%;
3 | box-sizing: border-box;
4 | margin: 0;
5 | padding: 0;
6 | }
7 |
8 | body {
9 | margin: 0;
10 | font-family: 'Nunito', sans-serif;
11 | -webkit-font-smoothing: antialiased;
12 | -moz-osx-font-smoothing: grayscale;
13 | font-size: 1.6rem;
14 | overflow-x: hidden;
15 | }
16 |
17 | *,
18 | *::before,
19 | *::after {
20 | transition: all 0.2s;
21 | box-sizing: inherit;
22 | margin: 0;
23 | padding: 0;
24 | }
25 |
26 | code {
27 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
28 | monospace;
29 | }
30 |
--------------------------------------------------------------------------------
/src/components/Nav.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { NavLink } from 'react-router-dom';
3 |
4 | import '../styles/Nav.css';
5 |
6 | class Nav extends Component {
7 | render() {
8 | return (
9 |
10 | {this.props.data.map((el, idx) => (
11 |
18 | {el.type}
19 |
20 | ))}
21 |
22 | );
23 | }
24 | }
25 |
26 | export default Nav;
27 |
--------------------------------------------------------------------------------
/src/components/Card.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | import Label from './Label';
4 |
5 | import '../styles/Card.css';
6 |
7 | class Card extends Component {
8 | render() {
9 | return (
10 |
11 | {this.props.title}
12 | {this.props.description}
13 |
14 | {this.props.labels.map((label, idx) => (
15 |
16 | ))}
17 |
18 |
19 | );
20 | }
21 | }
22 |
23 | export default Card;
24 |
--------------------------------------------------------------------------------
/src/components/Banner.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | import '../styles/Banner.css';
4 |
5 | class Banner extends Component {
6 | render() {
7 | return (
8 |
9 |
10 | If you liked this list, you can support me by downloading my first React Native app:
11 | {' '}
12 |
16 | ⚛ Science News
17 |
18 | . Thank you!
19 |
20 |
21 | );
22 | }
23 | }
24 |
25 | export default Banner;
26 |
--------------------------------------------------------------------------------
/src/styles/Nav.css:
--------------------------------------------------------------------------------
1 | .Nav {
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | flex-wrap: wrap;
6 | width: 60%;
7 | margin-top: 3rem;
8 | font-size: 1.8rem;
9 | }
10 |
11 | .Nav-navlink {
12 | padding: 0.75rem 1.25rem;
13 | margin: 5px;
14 | text-decoration: none;
15 | background: #ffffff;
16 | border: 1px solid rgba(143, 155, 179, 0.16);
17 | border-radius: 3px;
18 | color: #7289da;
19 | }
20 | .Nav-navlink:hover,
21 | .active {
22 | color: #ffffff;
23 | background: #7289da;
24 | box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
25 | }
26 |
27 | @media screen and (max-width: 768px) {
28 | .Nav {
29 | width: 95%;
30 | font-size: 1.6rem;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
14 |
15 |
16 | Front-end Resources
17 |
18 |
19 | You need to enable JavaScript to run this app.
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/styles/Card.css:
--------------------------------------------------------------------------------
1 | .Card {
2 | height: auto;
3 | width: 30%;
4 | box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.05);
5 | display: inline-flex;
6 | flex-direction: column;
7 | border-radius: 5px;
8 | padding: 1.5rem;
9 | margin: 1rem 1.5rem;
10 | background: #ffffff;
11 | cursor: pointer;
12 | text-decoration: none;
13 | color: #000000;
14 | }
15 | .Card:hover {
16 | transform: scale(1.05);
17 | box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.1);
18 | }
19 |
20 | .Card-title {
21 | font-size: 1.8rem;
22 | margin-bottom: 3px;
23 | }
24 |
25 | .Card-description {
26 | font-size: 1.6rem;
27 | margin-bottom: 5px;
28 | color: #8f9bb3;
29 | }
30 |
31 | @media screen and (max-width: 976px) {
32 | .Card {
33 | width: 40%;
34 | }
35 | }
36 |
37 | @media screen and (max-width: 768px) {
38 | .Card {
39 | width: 100%;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/styles/Resources.css:
--------------------------------------------------------------------------------
1 | .Resources {
2 | background: rgba(114, 137, 218, 0.05);
3 | padding: 5rem 3rem 1rem 3rem;
4 | display: flex;
5 | flex-direction: column;
6 | justify-content: center;
7 | align-items: center;
8 | }
9 |
10 | .Resources-heading {
11 | text-align: center;
12 | margin-bottom: 3rem;
13 | font-size: 2.5rem;
14 | text-transform: uppercase;
15 | }
16 |
17 | .Resources-card-container {
18 | display: flex;
19 | justify-content: space-evenly;
20 | flex-wrap: wrap;
21 | width: 100%;
22 | max-width: 1366px;
23 | }
24 |
25 | .Resources-filler {
26 | width: 30%;
27 | margin: 1.5rem;
28 | }
29 |
30 | @media screen and (max-width: 976px) {
31 | .Resources {
32 | padding: 5rem 2rem 0 2rem;
33 | }
34 |
35 | .Resources-filler {
36 | width: 40%;
37 | }
38 | }
39 |
40 | @media screen and (max-width: 768px) {
41 | .Resources-filler {
42 | height: 0;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/styles/App.css:
--------------------------------------------------------------------------------
1 | .App-header {
2 | text-align: center;
3 | min-height: 25rem;
4 | display: flex;
5 | flex-direction: column;
6 | justify-content: center;
7 | align-items: center;
8 | padding: 5rem 0;
9 | }
10 |
11 | .App-icon {
12 | height: 15rem;
13 | width: auto;
14 | }
15 |
16 | .App-heading {
17 | font-size: 3rem;
18 | font-weight: 700;
19 | }
20 |
21 | .App-subheading {
22 | color: #8f9bb3;
23 | width: 85%;
24 | font-size: 2rem;
25 | margin-top: 0.5rem;
26 | margin-bottom: 2rem;
27 | }
28 |
29 | .App-button-container {
30 | display: flex;
31 | }
32 |
33 | .App-button-divider {
34 | width: 1rem;
35 | }
36 |
37 | .App-footer {
38 | height: 7.5rem;
39 | display: flex;
40 | flex-direction: column;
41 | justify-content: center;
42 | align-items: center;
43 | font-size: 1.4rem;
44 | }
45 | .App-footer a,
46 | .App-footer a:visited {
47 | text-decoration: none;
48 | color: #000000;
49 | font-weight: 600;
50 | }
51 |
52 | @media screen and (max-width: 768px) {
53 | .App-heading {
54 | font-size: 2.4rem;
55 | }
56 |
57 | .App-subheading {
58 | font-size: 1.6rem;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Val Lipat
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend-resources",
3 | "version": "0.1.0",
4 | "homepage": "https://vlipatdev.github.io/frontend-resources",
5 | "private": true,
6 | "dependencies": {
7 | "gh-pages": "^2.2.0",
8 | "react": "^16.13.1",
9 | "react-dom": "^16.13.1",
10 | "react-router-dom": "^5.2.0",
11 | "react-scripts": "^3.4.1"
12 | },
13 | "scripts": {
14 | "start": "react-scripts start",
15 | "build": "react-scripts build",
16 | "test": "react-scripts test",
17 | "eject": "react-scripts eject",
18 | "predeploy": "npm run build",
19 | "deploy": "gh-pages -d build"
20 | },
21 | "eslintConfig": {
22 | "extends": "react-app"
23 | },
24 | "browserslist": {
25 | "production": [
26 | ">0.2%",
27 | "not dead",
28 | "not op_mini all"
29 | ],
30 | "development": [
31 | "last 1 chrome version",
32 | "last 1 firefox version",
33 | "last 1 safari version"
34 | ]
35 | },
36 | "devDependencies": {
37 | "eslint-config-airbnb": "^18.1.0",
38 | "eslint-config-airbnb-base": "^14.1.0",
39 | "eslint-plugin-import": "^2.20.2",
40 | "eslint-plugin-jsx-a11y": "^6.2.3",
41 | "eslint-plugin-react": "^7.20.0",
42 | "eslint-plugin-react-hooks": "^2.5.1"
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/components/Resources.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Redirect } from 'react-router-dom';
3 |
4 | import Card from './Card';
5 |
6 | import '../styles/Resources.css';
7 |
8 | class Resources extends Component {
9 | render() {
10 | const idx = this.props.data.findIndex(
11 | (el) => el.type.toLowerCase() === this.props.match.params.name
12 | );
13 |
14 | if (idx === -1) {
15 | return ;
16 | } else {
17 | return (
18 |
19 |
{this.props.match.params.name}
20 |
21 | {this.props.data[idx].resources.map((el, idx) => (
22 |
29 | ))}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | );
38 | }
39 | }
40 | }
41 |
42 | export default Resources;
43 |
--------------------------------------------------------------------------------
/src/components/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Route } from 'react-router-dom';
3 |
4 | // import Banner from './Banner';
5 | import Nav from './Nav';
6 | import Resources from './Resources';
7 |
8 | import '../styles/App.css';
9 |
10 | import data from '../data';
11 | import undraw from '../assets/undraw-designer.png';
12 |
13 | class App extends Component {
14 | static defaultProps = { data };
15 |
16 | render() {
17 | return (
18 |
19 |
50 |
}
54 | />
55 |
63 | {/* */}
64 |
65 | );
66 | }
67 | }
68 |
69 | export default App;
70 |
--------------------------------------------------------------------------------
/src/data.js:
--------------------------------------------------------------------------------
1 | const data = [
2 | {
3 | type: 'HTML',
4 | resources: [
5 | {
6 | title: 'W3C Markup Validator',
7 | description: 'Check the markup of Web documents',
8 | link: 'https://validator.w3.org/',
9 | labels: ['free', 'open-source'],
10 | },
11 | {
12 | title: 'Meta Tags',
13 | description: 'Preview, edit, and generate meta tags',
14 | link: 'https://metatags.io/',
15 | labels: ['free'],
16 | },
17 | {
18 | title: 'Favicon Generator',
19 | description: 'Convert any GIF, PNG, or JPG to ICO',
20 | link: 'https://www.favicon-generator.org/',
21 | labels: ['free'],
22 | },
23 | ],
24 | },
25 | {
26 | type: 'CSS',
27 | resources: [
28 | {
29 | title: 'W3C CSS Validator',
30 | description: 'CSS Validation Service',
31 | link: 'https://jigsaw.w3.org/css-validator/',
32 | labels: ['free', 'open-source'],
33 | },
34 | {
35 | title: 'Animate.css',
36 | description: 'Just-add-water CSS animations',
37 | link: 'https://animate.style/',
38 | labels: ['free', 'open-source'],
39 | },
40 | {
41 | title: 'animista',
42 | description: 'CSS animations on demand',
43 | link: 'http://animista.net/',
44 | labels: ['free'],
45 | },
46 | {
47 | title: 'CSSeffectsSnippets',
48 | description: 'A collection of CSS effects',
49 | link: 'https://emilkowalski.github.io/css-effects-snippets/',
50 | labels: ['free', 'open-source'],
51 | },
52 | {
53 | title: 'SpinKit',
54 | description: 'A collection of loading indicators animated with CSS',
55 | link: 'https://tobiasahlin.com/spinkit/',
56 | labels: ['free', 'open-source'],
57 | },
58 | {
59 | title: 'Hamburgers by Jonathan Suh',
60 | description: 'Tasty CSS-animated hamburgers',
61 | link: 'https://jonsuh.com/hamburgers/',
62 | labels: ['free'],
63 | },
64 | {
65 | title: 'Autoprefixer CSS online',
66 | description: 'Autoprefixer parses your CSS and adds vendor prefixes',
67 | link: 'https://autoprefixer.github.io/',
68 | labels: ['free'],
69 | },
70 | {
71 | title: 'CSS Minifier',
72 | description: 'Online CSS minifier/compressor',
73 | link: 'https://cssminifier.com/',
74 | labels: ['free'],
75 | },
76 | ],
77 | },
78 | {
79 | type: 'Icons',
80 | resources: [
81 | {
82 | title: 'Font Awesome',
83 | description: "The web's most popular icon set and toolkit",
84 | link: 'https://fontawesome.com/',
85 | labels: ['free', 'open-source'],
86 | },
87 | {
88 | title: 'Feather',
89 | description: 'Simply beautiful open-source icons',
90 | link: 'https://feathericons.com/',
91 | labels: ['free', 'open-source'],
92 | },
93 | {
94 | title: 'Eva Icons',
95 | description:
96 | 'A pack of more than 480 beautifully crafted Open Source icons for common actions and items',
97 | link: 'https://akveo.github.io/eva-icons/#/',
98 | labels: ['free', 'open-source'],
99 | },
100 | {
101 | title: 'Ionicons',
102 | description: 'Beautifully crafted open-source icons',
103 | link: 'https://ionicons.com/',
104 | labels: ['free', 'open-source'],
105 | },
106 | {
107 | title: 'Material Design Icons',
108 | description:
109 | 'Delightful, beautifully crafted symbols for common actions and items',
110 | link: 'https://material.io/resources/icons/?style=baseline',
111 | labels: ['free', 'open-source'],
112 | },
113 | {
114 | title: 'LineIcons',
115 | description: '450+ free line icons for designers and developers',
116 | link: 'https://lineicons.com/',
117 | labels: ['free'],
118 | },
119 | {
120 | title: 'Simple Icons',
121 | description: 'Free SVG icons for popular brands',
122 | link: 'https://simpleicons.org/',
123 | labels: ['free', 'open-source'],
124 | },
125 | {
126 | title: 'IcoMoon',
127 | description: 'Free 5500+ vector icons',
128 | link: 'https://icomoon.io/',
129 | labels: ['free'],
130 | },
131 | ],
132 | },
133 | {
134 | type: 'Colors',
135 | resources: [
136 | {
137 | title: 'Material Design Colors',
138 | description: 'Material design colors',
139 | link: 'https://www.materialui.co/colors',
140 | labels: ['free'],
141 | },
142 | {
143 | title: 'Flat UI Colors 2',
144 | description:
145 | 'A total set of 14 color palettes and 280 colors for your designs, projects, presentations and other needs',
146 | link: 'https://flatuicolors.com/',
147 | labels: ['free'],
148 | },
149 | {
150 | title: 'Color Hunt',
151 | description:
152 | 'A free and open platform for color inspiration with thousands of trendy hand-picked color palettes',
153 | link: 'https://colorhunt.co/',
154 | labels: ['free'],
155 | },
156 | {
157 | title: 'LOL Colors',
158 | description: 'Curated color palette inspiration',
159 | link: 'https://www.webdesignrankings.com/resources/lolcolors/',
160 | labels: ['free'],
161 | },
162 | {
163 | title: 'Color Space',
164 | description: 'Color palettes generator and color gradient tool',
165 | link: 'https://mycolor.space/',
166 | labels: ['free'],
167 | },
168 | {
169 | title: 'Coolors',
170 | description: 'Color palettes generator',
171 | link: 'https://coolors.co/app',
172 | labels: ['free'],
173 | },
174 | {
175 | title: 'Web Gradients',
176 | description: 'Free collection of 180 linear gradients',
177 | link: 'https://webgradients.com/',
178 | labels: ['free'],
179 | },
180 | {
181 | title: 'uiGradients',
182 | description: 'Beautiful colored gradients',
183 | link: 'http://www.uigradients.com/',
184 | labels: ['free', 'open-source'],
185 | },
186 | ],
187 | },
188 | {
189 | type: 'Illustrations',
190 | resources: [
191 | {
192 | title: 'Undraw',
193 | description: 'A constantly updated collection of beautiful SVG images',
194 | link: 'https://undraw.co/illustrations',
195 | labels: ['free', 'open-source'],
196 | },
197 | {
198 | title: 'manypixels',
199 | description: 'Royalty-free illustrations',
200 | link: 'https://gallery.manypixels.co/',
201 | labels: ['free'],
202 | },
203 | {
204 | title: 'IRA Design',
205 | description: 'Build your own amazing illustrations',
206 | link: 'https://iradesign.io/gallery/illustrations',
207 | labels: ['free'],
208 | },
209 | {
210 | title: 'Free Illustrations by Lukasz Adam',
211 | description: 'Free SVG images',
212 | link: 'https://lukaszadam.com/illustrations',
213 | labels: ['free'],
214 | },
215 | {
216 | title: 'Blobmaker',
217 | description: 'Online SVG blob maker',
218 | link: 'https://www.blobmaker.app/',
219 | labels: ['free'],
220 | },
221 | {
222 | title: 'Get Waves',
223 | description: 'Create SVG waves for your next design',
224 | link: 'https://getwaves.io/',
225 | labels: ['free'],
226 | },
227 | ],
228 | },
229 |
230 | {
231 | type: 'Images',
232 | resources: [
233 | {
234 | title: 'Unsplash',
235 | description: 'The internet’s source of freely useable images',
236 | link: 'https://unsplash.com/',
237 | labels: ['free'],
238 | },
239 | {
240 | title: 'Pexels',
241 | description:
242 | 'The best free stock photos & videos shared by talented creators',
243 | link: 'https://www.pexels.com/',
244 | labels: ['free'],
245 | },
246 | {
247 | title: 'Burst',
248 | description: 'Free stock photos for websites and commercial use',
249 | link: 'https://burst.shopify.com/',
250 | labels: ['free'],
251 | },
252 | {
253 | title: 'ISO Republic',
254 | description: 'Thousands of Free High-Resolution CC0 Photos and Videos',
255 | link: 'https://isorepublic.com/',
256 | labels: ['free'],
257 | },
258 | {
259 | title: 'Pixabay',
260 | description: 'Stunning free images & royalty-free stock',
261 | link: 'https://pixabay.com/',
262 | labels: ['free'],
263 | },
264 | {
265 | title: 'StockSnap.io',
266 | description: 'Beautiful free stock photos',
267 | link: 'https://stocksnap.io/',
268 | labels: ['free'],
269 | },
270 | {
271 | title: 'Photopea',
272 | description: 'Advanced online photo editor',
273 | link: 'https://www.photopea.com/',
274 | labels: ['free'],
275 | },
276 | {
277 | title: 'Online Image Compressor',
278 | description: 'Compress up to 20 images at a time',
279 | link: 'https://imagecompressor.com/',
280 | labels: ['free'],
281 | },
282 | {
283 | title: 'Bulk Resize Photos',
284 | description: 'The fastest online photo size reducer',
285 | link: 'https://bulkresizephotos.com/en',
286 | labels: ['free'],
287 | },
288 | ],
289 | },
290 | {
291 | type: 'JavaScript',
292 | resources: [
293 | {
294 | title: 'JavaScript 30',
295 | description: 'Build 30 things with vanilla JS in 30 days',
296 | link: 'https://javascript30.com/',
297 | labels: ['free'],
298 | },
299 | {
300 | title: 'Codewars',
301 | description:
302 | 'Improve your skills by training with others on real code challenges',
303 | link: 'https://www.codewars.com/',
304 | labels: ['free'],
305 | },
306 | {
307 | title: 'ESLint',
308 | description: 'Find and fix problems in your JavaScript code',
309 | link: 'https://eslint.org/',
310 | labels: ['free'],
311 | },
312 | {
313 | title: 'Prettier',
314 | description: 'Opinionated Code Formatter',
315 | link: 'https://prettier.io/',
316 | labels: ['free'],
317 | },
318 | ],
319 | },
320 | {
321 | type: 'Repositories',
322 | resources: [
323 | {
324 | title: 'Developer Roadmap',
325 | description: 'Roadmap to becoming a web developer in 2020',
326 | link: 'https://github.com/kamranahmedse/developer-roadmap',
327 | labels: ['free', 'open-source'],
328 | },
329 | {
330 | title: 'Front-end Developer Interview Questions',
331 | description:
332 | 'A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore',
333 | link: 'https://github.com/h5bp/Front-end-Developer-Interview-Questions',
334 | labels: ['free', 'open-source'],
335 | },
336 | {
337 | title: 'Front-end Checklist',
338 | description:
339 | 'The perfect Front-End Checklist for modern websites and meticulous developers',
340 | link: 'https://github.com/thedaviddias/Front-End-Checklist',
341 | labels: ['free', 'open-source'],
342 | },
343 | {
344 | title: 'Front-end Performance Checklist',
345 | description:
346 | 'The only Front-End Performance Checklist that runs faster than the others',
347 | link: 'https://github.com/thedaviddias/Front-End-Performance-Checklist',
348 | labels: ['free', 'open-source'],
349 | },
350 | {
351 | title: 'Awesome Design Tools',
352 | description: 'The best design tools and plugins for everything',
353 | link: 'https://github.com/LisaDziuba/Awesome-Design-Tools',
354 | labels: ['free', 'open-source'],
355 | },
356 | {
357 | title: '30 seconds of code',
358 | description: 'Short code snippets for all your development needs',
359 | link: 'https://github.com/30-seconds/30-seconds-of-code',
360 | labels: ['free', 'open-source'],
361 | },
362 | ],
363 | },
364 | {
365 | type: 'Courses',
366 | resources: [
367 | {
368 | title: "CS50's Introduction to Computer Science",
369 | description:
370 | "Harvard's introduction to the intellectual enterprises of computer science and the art of programming",
371 | link:
372 | 'https://www.edx.org/course/cs50s-introduction-to-computer-science',
373 | labels: ['free'],
374 | },
375 | {
376 | title: "CS50's Web Programming with Python and JavaScript",
377 | description:
378 | 'Design and implement web apps with Python, JavaScript, and SQL using frameworks like Flask, Django, and Bootstrap',
379 | link:
380 | 'https://www.edx.org/course/cs50s-web-programming-with-python-and-javascript',
381 | labels: ['free'],
382 | },
383 | {
384 | title: 'Web Accessibility by Google',
385 | description:
386 | 'Get hands-on experience making web applications accessible',
387 | link: 'https://classroom.udacity.com/courses/ud891',
388 | labels: ['free'],
389 | },
390 | ],
391 | },
392 | {
393 | type: 'Readings',
394 | resources: [
395 | {
396 | title: 'Front-end Developer Handbook 2019',
397 | description:
398 | 'A guide that everyone can use to learn about the practice of front-end development',
399 | link: 'https://frontendmasters.com/books/front-end-handbook/2019/',
400 | labels: ['free'],
401 | },
402 | {
403 | title: 'HackerRank 2020 Developer Skills Report',
404 | description: 'Insights based on 116,648 developers',
405 | link: 'https://research.hackerrank.com/developer-skills/2020',
406 | labels: ['free'],
407 | },
408 | {
409 | title: 'Stack Overflow Developer Survey 2020',
410 | description: 'Insights based on nearly 65,000 developers',
411 | link: 'https://insights.stackoverflow.com/survey/2020',
412 | labels: ['free'],
413 | },
414 | {
415 | title: 'HTML & CSS',
416 | description: 'A nicer way to learn about HTML & CSS',
417 | link: 'http://www.htmlandcssbook.com/',
418 | labels: ['premium'],
419 | },
420 | {
421 | title: 'Refactoring UI',
422 | description:
423 | 'Make your ideas look awesome, without relying on a designer',
424 | link: 'https://refactoringui.com/book/',
425 | labels: ['premium'],
426 | },
427 | {
428 | title: 'airbnb JavaScript Style Guide',
429 | description: 'A mostly reasonable approach to JavaScript',
430 | link: 'https://github.com/airbnb/javascript',
431 | labels: ['free', 'open-source'],
432 | },
433 | {
434 | title: 'JavaScript & jQuery',
435 | description: 'A nicer way to learn JavaScript & jQuery',
436 | link: 'http://javascriptbook.com/',
437 | labels: ['premium'],
438 | },
439 | {
440 | title: "You Don't Know JS",
441 | description: 'A book series on JavaScript',
442 | link: 'https://github.com/getify/You-Dont-Know-JS',
443 | labels: ['free', 'open-source'],
444 | },
445 | {
446 | title: 'Eloquent JavaScript',
447 | description: 'A modern introduction to programming',
448 | link: 'https://eloquentjavascript.net/',
449 | labels: ['free'],
450 | },
451 | {
452 | title: 'Learning JavaScript Design Patterns',
453 | description: "A JavaScript and jQuery's developer guide",
454 | link:
455 | 'https://addyosmani.com/resources/essentialjsdesignpatterns/book/',
456 | labels: ['free'],
457 | },
458 | {
459 | title: 'OWASP Top Ten',
460 | description:
461 | 'Standard awareness document for developers and web application security',
462 | link: 'https://owasp.org/www-project-top-ten/',
463 | labels: ['free'],
464 | },
465 | {
466 | title: 'Web Content Accessibility Guidelines (WCAG) 2.1',
467 | description:
468 | 'Covers a wide range of recommendations for making Web content more accessible',
469 | link: 'https://www.w3.org/TR/WCAG21/',
470 | labels: ['free'],
471 | },
472 | ],
473 | },
474 | {
475 | type: 'General',
476 | resources: [
477 | {
478 | title: 'Scrimba',
479 | description: 'Learn to code with interactive tutorials',
480 | link: 'https://scrimba.com/',
481 | labels: ['free'],
482 | },
483 | {
484 | title: 'Trello',
485 | description:
486 | 'Easy, free, flexible, and visual way to manage your projects and organize anything',
487 | link: 'https://trello.com/',
488 | labels: ['free'],
489 | },
490 | {
491 | title: 'Adobe XD',
492 | description: 'Beginner-friendly prototyping software from Adobe',
493 | link: 'https://www.adobe.com/products/xd.html',
494 | labels: ['free'],
495 | },
496 | {
497 | title: 'Wireframe.cc',
498 | description: 'Minimal wireframing tool',
499 | link: 'https://wireframe.cc/',
500 | labels: ['free'],
501 | },
502 | {
503 | title: 'Sizzy',
504 | description: 'Browser made for responsive design',
505 | link: 'https://sizzy.co/',
506 | labels: ['premium'],
507 | },
508 | {
509 | title: 'Google Analytics',
510 | description: 'Web analytics service offered by Google',
511 | link: 'https://analytics.google.com/analytics/web/',
512 | labels: ['free'],
513 | },
514 | {
515 | title: 'web.dev',
516 | description: 'See how well your website performs; uses Lighthouse',
517 | link: 'https://web.dev/measure/',
518 | labels: ['free'],
519 | },
520 | {
521 | title: 'GTmetrix',
522 | description: "Tool that analyzes your page's speed performance",
523 | link: 'https://gtmetrix.com/',
524 | labels: ['free'],
525 | },
526 | {
527 | title: 'Can I Use',
528 | description: 'Support tables for HTML, CSS, etc',
529 | link: 'https://caniuse.com/',
530 | labels: ['free', 'open-source'],
531 | },
532 | {
533 | title: 'Carbon',
534 | description: 'Create and share beautiful images of your source code',
535 | link: 'https://carbon.now.sh/',
536 | labels: ['free'],
537 | },
538 | {
539 | title: 'Wappalyzer',
540 | description: 'Identify technologies on websites',
541 | link: 'https://www.wappalyzer.com/',
542 | labels: ['free'],
543 | },
544 | ],
545 | },
546 | {
547 | type: 'Deployment',
548 | resources: [
549 | {
550 | title: 'GitHub Pages',
551 | description: 'Free web hosting service by GitHub',
552 | link: 'https://pages.github.com/',
553 | labels: ['free'],
554 | },
555 | {
556 | title: 'Netlify',
557 | description: 'Deploy your site in 30 seconds',
558 | link: 'https://www.netlify.com/',
559 | labels: ['free'],
560 | },
561 | {
562 | title: 'Surge',
563 | description: 'Simple, single-command web publishing',
564 | link: 'https://surge.sh/',
565 | labels: ['free'],
566 | },
567 | {
568 | title: 'Google Domains',
569 | description: 'Find a domain, create a site, and get custom email',
570 | link: 'https://domains.google/',
571 | labels: ['premium'],
572 | },
573 | {
574 | title: 'namecheap',
575 | description: 'Cheap domain names',
576 | link: 'https://www.namecheap.com/',
577 | labels: ['premium'],
578 | },
579 | ],
580 | },
581 | {
582 | type: 'VS Code Extensions',
583 | resources: [
584 | {
585 | title: 'Live Server',
586 | description:
587 | 'Launch a development local Server with live reload feature for static & dynamic pages',
588 | link:
589 | 'https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer',
590 | labels: ['free'],
591 | },
592 | {
593 | title: 'ESLint',
594 | description: 'Integrates ESLint JavaScript into VS Code',
595 | link:
596 | 'https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint',
597 | labels: ['free'],
598 | },
599 | {
600 | title: 'Prettier - Code formatter',
601 | description: 'Code formatter using prettier',
602 | link:
603 | 'https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode',
604 | labels: ['free'],
605 | },
606 | {
607 | title: 'HTML CSS Support',
608 | description: 'CSS support for HTML documents',
609 | link:
610 | 'https://marketplace.visualstudio.com/items?itemName=ecmel.vscode-html-css',
611 | labels: ['free'],
612 | },
613 | {
614 | title: 'colorize',
615 | description: 'A vscode extension to help visualize css colors in files',
616 | link:
617 | 'https://marketplace.visualstudio.com/items?itemName=kamikillerto.vscode-colorize',
618 | labels: ['free'],
619 | },
620 | {
621 | title: 'Bracket Pair Colorizer',
622 | description:
623 | 'A customizable extension for colorizing matching brackets',
624 | link:
625 | 'https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer',
626 | labels: ['free'],
627 | },
628 | {
629 | title: 'Image Preview',
630 | description: 'Shows image preview in the gutter and on hover',
631 | link:
632 | 'https://marketplace.visualstudio.com/items?itemName=kisstkondoros.vscode-gutter-preview',
633 | labels: ['free'],
634 | },
635 | {
636 | title: 'Comment Divider',
637 | description: 'Divide your code by sections with styled separators',
638 | link:
639 | 'https://marketplace.visualstudio.com/items?itemName=stackbreak.comment-divider',
640 | labels: ['free'],
641 | },
642 | {
643 | title: 'Trailing Spaces',
644 | description: 'Highlight trailing spaces and delete them in a flash',
645 | link:
646 | 'https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces',
647 | labels: ['free'],
648 | },
649 | {
650 | title: 'Settings Sync',
651 | description:
652 | 'Synchronize settings, snippets, themes, file icons, launch, keybindings, workspaces and extensions across multiple machines using GitHub Gist',
653 | link:
654 | 'https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync',
655 | labels: ['free'],
656 | },
657 | {
658 | title: 'Material Icon Theme',
659 | description: 'Material Design Icons for Visual Studio Code',
660 | link:
661 | 'https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme',
662 | labels: ['free'],
663 | },
664 | {
665 | title: 'Palenight Theme',
666 | description:
667 | 'An elegant and juicy material-like theme for Visual Studio Code',
668 | link:
669 | 'https://marketplace.visualstudio.com/items?itemName=whizkydee.material-palenight-theme',
670 | labels: ['free'],
671 | },
672 | ],
673 | },
674 | {
675 | type: 'Accessibility',
676 | resources: [
677 | {
678 | title: 'NV Access',
679 | description: 'Screen reader for Microsoft Windows',
680 | link: 'https://www.nvaccess.org/',
681 | labels: ['free'],
682 | },
683 | {
684 | title: 'ChromeVox Chrome Extension',
685 | description: 'Screen reader by Google',
686 | link:
687 | 'https://chrome.google.com/webstore/detail/chromevox/kgejglhpjiefppelpmljglcjbhoiplfn?hl=en',
688 | labels: ['free'],
689 | },
690 | {
691 | title: 'axe Chrome Extension',
692 | description: 'Accessibility testing in Chrome Developer Tools',
693 | link:
694 | 'https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd',
695 | labels: ['free'],
696 | },
697 | ],
698 | },
699 | ];
700 |
701 | export default data;
702 |
--------------------------------------------------------------------------------