557 Commits
1.0 ... master

Author SHA1 Message Date
Leonardo Romanini
2939a7e7a1 Add resouce for cqrs and event sourcing (#1307) 2022-06-28 15:02:16 +04:00
Aroyan
fae0bef2f8 fix: remove empty badge at ChakraUI (#1308) 2022-06-28 15:01:58 +04:00
Kamran Ahmed
5d8b14e9c3 Update sponsors section 2022-06-24 01:00:00 +04:00
Taeik Lim
3b0923ce74 Change md5 wiki link to english wiki (#1306) 2022-06-23 20:59:06 +04:00
Kamran Ahmed
ed9cc647ce Remove doppler from sponsors 2022-06-22 13:59:44 +04:00
Arminder Singh
295f404d7b Adding Content and Resources for CSS Frameworks (#1287) 2022-06-22 11:39:35 +04:00
Archit Sharma
786acc072d Resources added for Database indexes (#1301) 2022-06-20 14:57:08 +04:00
Archit Sharma
9c6438726a Resources added for oracle (#1298)
* Resources added for oracle

* Update content/roadmaps/101-backend/content/106-relational-databases/104-oracle.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-06-18 14:13:25 +04:00
Kamran Ahmed
b1fc074416 Remove sponsor 2022-06-18 14:12:28 +04:00
Kamran Ahmed
355f1e610e Update PDFs path 2022-06-14 20:21:44 +04:00
Kamran Ahmed
e5d5043bca Trigger build 2022-06-14 20:12:41 +04:00
Kamran Ahmed
01c4870a63 Update PDFs path 2022-06-14 20:10:39 +04:00
Gabriel Nunes
04b434bdcb Add content for Operating Systems
* Update 101-how-oss-work-in-general.md

* Update content/roadmaps/101-backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-06-14 16:26:30 +04:00
Alberto Vinícius A. dos Santos
f3366d1fd3 fix: the word "compatible" is written wrong (#1297) 2022-06-14 16:25:17 +04:00
Kamran Ahmed
8eda9bb049 Remove carbon ads 2022-06-14 16:24:53 +04:00
Danil
b845ddad09 Fix wrong content description for Freeze and Seal in JavaScript (#1293) 2022-06-13 11:47:29 +04:00
Archit Sharma
4759604e14 Resources added for Graph databases (#1294) 2022-06-13 11:47:13 +04:00
Archit Sharma
eb29d5348e Resources added for Solr (#1281) 2022-06-07 11:57:28 +04:00
Nico Domino
3de4eaafec Add 'messwithdns.com' julia evans DNS playground (#1283) 2022-06-07 11:56:57 +04:00
helmut a carter
05eefc9e30 corrected grammar: it's -> its (#1284) 2022-06-07 11:56:33 +04:00
Archit Sharma
c9c5349926 Resources added for Neo4j (#1263) 2022-05-24 23:00:07 +04:00
Anu
d47bf04f9e Fixed issue #1217 - missing read label (#1272)
Fixed a typo that was causing missing "read" label on a resource link in frontend developer roadmap, pwa node.
2022-05-24 22:59:45 +04:00
Anu
cd676cacfd Add PWA resource (#1266)
#### What roadmap does this PR target?

- [ ] Code Change
- [x] Frontend Roadmap
- [ ] Backend Roadmap
- [ ] DevOps Roadmap
- [ ] All Roadmaps
- [ ] Guides

#### Please acknowledge the items listed below

- [x] I have discussed this contribution and got a go-ahead in an issue before opening this pull request.
- [x] This is not a duplicate issue. I have searched and there is no existing issue for this.
- [x] I understand that these roadmaps are highly opinionated. The purpose is to not to include everything out there in these roadmaps but to have everything that is most relevant today comparing to the other options listed.
- [x] I have read the [contribution docs](../contributing) before opening this PR.

#### Enter the details about the contribution

I am suggesting the addition of PWA tutorials from MDN Web Docs. Apart from basic introduction to PWAs, it has numerous helpful How-to's such as using client-side storage with IndexedDB and Web Storage API, making mobile-first and installable PWAs, enabling "add to home screen", using notifications and push API etc.
2022-05-21 20:57:46 +04:00
Gustavo Ribeiro
fb79348426 Add scrypt content for back-end roadmap (#1267) 2022-05-21 20:57:31 +04:00
Gustavo Ribeiro
e468763346 Add SSL/TLS content for back-end roadmap (#1268) 2022-05-21 20:57:14 +04:00
Anu
e18df2b24b Add content to PWA peformance node (#1269)
#### What roadmap does this PR target?

- [ ] Code Change
- [x] Frontend Roadmap
- [ ] Backend Roadmap
- [ ] DevOps Roadmap
- [ ] All Roadmaps
- [ ] Guides

#### Please acknowledge the items listed below

- [x] I have discussed this contribution and got a go-ahead in an issue before opening this pull request.
- [x] This is not a duplicate issue. I have searched and there is no existing issue for this.
- [x] I understand that these roadmaps are highly opinionated. The purpose is to not to include everything out there in these roadmaps but to have everything that is most relevant today comparing to the other options listed.
- [x] I have read the [contribution docs](../contributing) before opening this PR.

#### Enter the details about the contribution

I have added a description and several resources that I have used myself and found useful in learning the topic of PWA performance analysis. 
-1st link is from google web.dev and provides several articles on what is speed, how does it matter and how one can measure and optimize the performance of PWAs. 
-2nd link gives detailed explanation on what is PRPL pattern and how it works. 
-3rd resource is from google web.dev and teaches how to implement PRPL pattern to instantly load PWAs
-4th resource is from google web.dev and gives a detailed account about RAIL model and its implementation
-5th resource is from freecodecamp and gives an introduction to Chrome Lighthouse
-6th resource is from PWA training module of Google Developers (Web)
-7th resource is a 5 minute tutorial on how to use Lighthouse to audit your PWAs

I was unable to find a resource on devtools that is specifically catered to PWAs compared to general website performance analysis. Will add later if needed and this contribution gets approval!
2022-05-21 20:56:58 +04:00
Kamran Ahmed
30bc570dc7 Add missing sponsors 2022-05-19 21:51:35 +04:00
Archit Sharma
b18bee3828 Resources added for Linters formatters (#1261) 2022-05-16 19:57:42 +04:00
Nis-chal-Jain
ec6606d9d8 Added Bootstrap Documentation (#1262) 2022-05-16 19:57:20 +04:00
Aroyan
b60e1ee8e8 Add gRPC content on Backend roadmap (#1260)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap

* Add Version Control System description

* Add Jekyll content on Frontend roadmap

* Add VuePress content on Frontend roadmap

* Revert "Add VuePress content on Frontend roadmap"

This reverts commit 05625604c2.

* Add Gatsbyjs content on Frontend roadmap

* Update content/roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md

* Add content for Gridsome

* Add content for NuxtJS

* Revert "Add content for NuxtJS"

This reverts commit bd533a6ba9.

* Add content for Nuxt.js in Front End roadmap

* feat(content):add gRPC content on backend roadmap

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-05-13 22:34:09 +04:00
amq
8467abf624 Fix line length issue looking as a typo (#1255) 2022-05-11 16:03:19 +04:00
Gustavo Ribeiro
ef706f700b Add SHA family content for the back-end roadmap (#1257) 2022-05-11 15:56:36 +04:00
Paul Marsicovetere
39b87fdab3 Update 104-basic-terminal-commands.md (#1205)
* Update 104-basic-terminal-commands.md

* Update content/roadmaps/101-backend/content/102-os-general-knowledge/104-basic-terminal-commands.md

* Update 104-basic-terminal-commands.md

* Update 104-basic-terminal-commands.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-23 01:33:01 +04:00
Andrey Kudinov
44291d828b Remove extra empty line (#1232) 2022-04-23 01:29:35 +04:00
Andrey Kudinov
d81b56d321 Add vue content (#1233) 2022-04-23 01:29:23 +04:00
Andrey Kudinov
2f36199637 Add react content (#1234) 2022-04-23 01:28:58 +04:00
Andrey Kudinov
eff757633e Add angular content (#1235)
* Add content

* Update content/roadmaps/100-frontend/content/118-server-side-rendering/101-angular/readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-23 01:28:22 +04:00
Max Tiessler
bc5dcee8fb Add SOA resources
added reference model for SOA
2022-04-23 01:27:45 +04:00
Paul Marsicovetere
544a530fcb Update 102-mariadb.md (#1206) 2022-04-19 13:17:22 +04:00
Archit Sharma
289d52d135 Resources added for JSON api (#1208)
* Resources added for JSON api

* Update content/roadmaps/101-backend/content/109-apis/101-json-apis.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-19 13:16:40 +04:00
Mochammad Daffa Putra Karyudi
814cf7b137 Update 100-orms.md (#1231)
* Update 100-orms.md

* Update content/roadmaps/101-backend/content/108-more-about-databases/100-orms.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-19 13:14:43 +04:00
Himanshu Jangid, हिमांशु जाँगिड़
87c3fb0aa8 Update 101-after-js.md added introduction and links (#1210)
* Update 101-after-js.md added introduction

* Update content/roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/101-after-js.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-16 16:50:25 +04:00
Saeed Farahi Mohassel
2d17f12caf updated message-borkers pages (#1219)
* updated message-borkers pages

* Update content/roadmaps/101-backend/content/117-message-brokers/100-rabbitmq.md

* Update content/roadmaps/101-backend/content/117-message-brokers/readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-16 16:48:28 +04:00
Pieter
b6345f9de1 Add explanation of glue records in DNS (#1222) 2022-04-16 16:33:30 +04:00
Lucas Souza
ff4485a871 Add the Vox video "How Does the Internet Works?" (#1227)
* Add the Vox video "How  Does the Internet Works?"

As the article that describes how the internet works, Vox also have a very intersing video about the topic. It's a great production that covers the whole process among sending and receiving a picture between mobile phones.

* Update content/roadmaps/100-frontend/content/100-internet/100-how-does-the-internet-work.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-04-16 16:31:01 +04:00
Aroyan
1b9d74525a fix: remove colorScheme attribute at React Native video tutorial (#1201) 2022-03-22 11:50:38 +04:00
Archit Sharma
17120b4db0 Resource add -> Containerization vs Virtualization (#1198) 2022-03-21 10:54:36 +04:00
Aroyan
39a17ec525 fix: remove colorScheme for Ionic video tutorial (#1199) 2022-03-21 10:53:48 +04:00
Archit Sharma
1c8efaf136 Resources added for Web Security Knowledge (#1195) 2022-03-19 17:44:02 +04:00
Archit Sharma
bdd9787690 Resources added for MS IIS (#1194)
* Resources added for MS IIS

* Update content/roadmaps/101-backend/content/122-web-servers/103-ms-iis.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-19 11:15:28 +04:00
Archit Sharma
47542ddfa3 Resources added for CaddyServer (#1191)
* Resources added for CaddyServer

* Update content/roadmaps/101-backend/content/122-web-servers/102-caddy.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-18 10:56:22 +04:00
Aroyan
9e60b1d847 Add Enzyme content on Front End roadmap (#1192) 2022-03-18 10:54:32 +04:00
Marcela Pedrini Duarte
540ec027d7 fix memory management resource type (#1193) 2022-03-18 10:54:16 +04:00
Marcela Pedrini Duarte
fbb9729d01 Update 103-threads-and-concurrency.md (#1185) 2022-03-16 15:24:23 +04:00
Aroyan
04f30d4e2b Add links to ElectronJS on Front End Roadmap (#1187)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap

* Add Version Control System description

* Add Jekyll content on Frontend roadmap

* Add VuePress content on Frontend roadmap

* Revert "Add VuePress content on Frontend roadmap"

This reverts commit 05625604c2.

* Add Gatsbyjs content on Frontend roadmap

* Update content/roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md

* Add content for Gridsome

* Add content for NuxtJS

* Revert "Add content for NuxtJS"

This reverts commit bd533a6ba9.

* Add content for Nuxt.js in Front End roadmap

* Add links for ElectronJS in Front End Roadmap

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-16 15:23:24 +04:00
Archit Sharma
601be80bf3 Resources added for Nginx (#1188)
* Resources added for Nginx

* Update content/roadmaps/101-backend/content/122-web-servers/100-nginx.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-16 15:22:36 +04:00
Jack Logan
f3565cf48a Add content - threads and concurrency (#1189) 2022-03-16 15:21:00 +04:00
narasimhauppala
f9b8b8043a update 108-owasp.md (#1161)
* update 108-owasp.md

* Update content/roadmaps/101-backend/content/111-web-security-knowledge/108-owasp.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-14 21:20:11 +04:00
Aroyan
e19d202230 Add content for Nuxt.js in Front End roadmap (#1155)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap

* Add Version Control System description

* Add Jekyll content on Frontend roadmap

* Add VuePress content on Frontend roadmap

* Revert "Add VuePress content on Frontend roadmap"

This reverts commit 05625604c2.

* Add Gatsbyjs content on Frontend roadmap

* Update content/roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md

* Add content for Gridsome

* Add content for NuxtJS

* Revert "Add content for NuxtJS"

This reverts commit bd533a6ba9.

* Add content for Nuxt.js in Front End roadmap

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-14 21:18:30 +04:00
Cedrick
cba1419163 Update devops.json - fix typo (#1168) 2022-03-14 21:17:57 +04:00
JAIHARISHAN AV
7110b35b97 Added resources for Basics of SEO in Frontend Development Roadmap (#1169)
* Added resources for Basics of SEO in Frontend Development Roadmap

* Update content/roadmaps/100-frontend/content/101-html/105-seo-basics.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-14 21:17:33 +04:00
Marcela Pedrini Duarte
370e343b91 Added Process Management definition and resources (#1182)
* Update 102-process-management.md

* Update content/roadmaps/101-backend/content/102-os-general-knowledge/102-process-management.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-03-14 19:06:49 +04:00
ncn000
9c4ccf27dc Fixed typo in Java and Go meta descriptions (#1183) 2022-03-14 19:05:27 +04:00
Archit Sharma
44f2f12dd9 Resources added for WebSockets (#1184) 2022-03-14 19:04:24 +04:00
Ameer Hamza
90204a07ff n+1 problem article link (#1160) 2022-03-12 22:53:05 +04:00
Koodies
dd1a31d577 Add MongoDB content (#1162)
Co-authored-by: kewei <tan.kewei@stengg.com>
2022-03-12 22:52:37 +04:00
Archit Sharma
9cecf34b1a Resources added for Relay Modern (#1172) 2022-03-12 22:50:51 +04:00
Archit Sharma
0ba8999121 Resources added for OWASP (#1174) 2022-03-12 22:49:28 +04:00
Archit Sharma
c4ef89be3c Resources added for Content Security policy (#1177) 2022-03-12 22:48:50 +04:00
Abhishek Jindal
c58d956224 Add Angular definition and official docs link (#1179) 2022-03-12 22:48:12 +04:00
Himanshu Hiranandani
b141f0bcc2 Adds Basic details for the Open API Spec (#1163)
* Adds Basic details for the Open API Spec

* Removes paid content and adds a free course
2022-03-03 10:11:08 +04:00
Archit Sharma
9e955a61a9 Resources added for GraphQL (#1164) 2022-03-03 10:10:40 +04:00
Archit Sharma
b105b2eb5f Resources added for Apollo (#1167) 2022-03-03 10:10:09 +04:00
Archit Sharma
17d0c3d41b Resources added for Jasmine (#1149)
* Resources added for Jasmine

* Update content/roadmaps/100-frontend/content/115-testing-your-apps/108-jasmine.md

* Update content/roadmaps/100-frontend/content/115-testing-your-apps/108-jasmine.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-25 14:15:24 +04:00
Archit Sharma
a30f1ee9c9 Resources added for Hugo (#1150) 2022-02-25 14:13:15 +04:00
Aroyan
ead5e1d399 Add content for Gridsome (#1151)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap

* Add Version Control System description

* Add Jekyll content on Frontend roadmap

* Add VuePress content on Frontend roadmap

* Revert "Add VuePress content on Frontend roadmap"

This reverts commit 05625604c2.

* Add Gatsbyjs content on Frontend roadmap

* Update content/roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md

* Add content for Gridsome

* Add content for NuxtJS

* Revert "Add content for NuxtJS"

This reverts commit bd533a6ba9.

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-25 14:12:47 +04:00
Kamran Ahmed
d3f18267a1 Update thanks 2022-02-24 15:35:14 +04:00
Masoumeh Afshar
4eec5b025f Add link to JavaScript concepts 2022-02-21 10:17:40 +04:00
Kamran Ahmed
07cb445d06 Add hash table video link 2022-02-21 03:35:57 +04:00
Archit Sharma
b2c5d6184c Resources added for Ava (#1147) 2022-02-20 14:11:41 +04:00
Archit Sharma
2a57bb91f0 Resources added for Chai js (#1146)
* Resources added for Chai js

* Update content/roadmaps/100-frontend/content/115-testing-your-apps/106-chai.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-19 05:24:10 +04:00
Kamran Ahmed
69ebb08c9e Fix JSON ld response 2022-02-18 20:50:01 +04:00
Kamran Ahmed
1637ef20a6 Fix broken build 2022-02-18 14:18:26 +04:00
Kamran Ahmed
5cbc5e0fdc Update CAP theorem content 2022-02-18 13:07:03 +04:00
Kodey Thomas
8595cc56b5 CAP Theorem Resources (#1099)
* Updated HATEOAS

* Removed Colour Scheme

* CAP Theorem

* Update content/roadmaps/101-backend/content/108-more-about-databases/108-cap-theorem.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-17 18:38:18 +04:00
Himanshu Soni
4199ab05a0 Add cypress content
* Update 102-cypress.md

update documentation

* Update content/roadmaps/100-frontend/content/115-testing-your-apps/102-cypress.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-17 18:36:40 +04:00
Himanshu Soni
f3b6cd87f4 Add content for react testing library
* Update 101-react-testing-library.md

updated Documentation

* Update content/roadmaps/100-frontend/content/115-testing-your-apps/101-react-testing-library.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-17 18:34:27 +04:00
narasimhauppala
3dc6bcd8d6 Add content for memory management
* update 105-memory-management

* Update content/roadmaps/101-backend/content/102-os-general-knowledge/105-memory-management.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-17 18:30:53 +04:00
Archit Sharma
c0b19fec32 Added Resources for Mocha (#1141)
* Added Resources for Mocha

* Update content/roadmaps/100-frontend/content/115-testing-your-apps/105-mocha.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-17 18:19:21 +04:00
Patrick Shushereba
ca092f69f6 [100-github] - Added course to list. (#1143) 2022-02-17 18:18:35 +04:00
Pawel Pisulski
616422b023 Update opensource-banner.tsx (#1144)
Update most starred rank
2022-02-17 16:35:51 +04:00
Kamran Ahmed
0f889af8ab Add doppler logo 2022-02-16 22:27:54 +04:00
Kamran Ahmed
462b532a94 Change doppler logo 2022-02-16 22:26:39 +04:00
Archit Sharma
83611cdbe1 Resources added for VuePress (#1139) 2022-02-15 16:05:10 +04:00
Aroyan
6dbf88d0a6 Add Gatsbyjs content on Frontend roadmap (#1140)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap

* Add Version Control System description

* Add Jekyll content on Frontend roadmap

* Add VuePress content on Frontend roadmap

* Revert "Add VuePress content on Frontend roadmap"

This reverts commit 05625604c2.

* Add Gatsbyjs content on Frontend roadmap

* Update content/roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-15 16:04:51 +04:00
Kamran Ahmed
e0c660dcff Add queue data structure video 2022-02-15 04:09:13 +04:00
Kamran Ahmed
0ac5875237 Add queue data structure video 2022-02-15 03:54:29 +04:00
Archit Sharma
35107862cb Added resources for Proton Native (#1134)
* Added resources for Proton Native

* Update content/roadmaps/100-frontend/content/122-desktop-applications/102-proton-native.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-13 21:57:53 +04:00
Archit Sharma
a2a6d7f3cf Added content for Pick a Framework (#1107)
* Added content for Pick a Framework

* Update content/roadmaps/100-frontend/content/111-pick-a-framework/readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-12 20:58:24 +04:00
narasimhauppala
6023376452 Add terminal usage resources
* update 100-terminal-usage.md

* Update content/roadmaps/101-backend/content/102-os-general-knowledge/100-terminal-usage.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-12 13:58:18 +04:00
Archit Sharma
c6def19bcd Added resources for Rollup (#1130)
* Added resources for Rollup

* Update content/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/102-rollup.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-12 13:56:53 +04:00
Paul Marsicovetere
a18daa7356 Add JWT resources
* Update 104-jwt.md

* Update content/roadmaps/101-backend/content/109-apis/106-authentication/104-jwt.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-12 13:56:09 +04:00
Paul Marsicovetere
9ec90f6abe Add bitbucket resources 2022-02-12 13:54:54 +04:00
Archit Sharma
f4183b7174 Added resources for Parcel (#1133)
* Added resources for Parcel

* Update content/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/103-parcel.md

* Update content/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/103-parcel.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-12 13:54:21 +04:00
Cabir Bayram
d82ca9b5c4 Add Esbuild to "Esbuild" (#1106)
* Add Esbuild to "Esbuild"

* Update content/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/101-esbuild.md

* Update content/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/101-esbuild.md

* Update content/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/101-esbuild.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-09 20:17:24 +04:00
qrav
778d21558d Update 102-bcrypt.md (#1108)
* Update 102-bcrypt.md

* Update 102-bcrypt.md
2022-02-09 20:14:27 +04:00
Ivan Kalashnikov
d529ac3a12 HTML abbreviation – fixed typo. (#1109) 2022-02-09 20:13:52 +04:00
Archit Sharma
869716212f Added content in Standardjs (#1111)
* Added content in Standardjs

* Update content/roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/102-standardjs.md

* Update content/roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/102-standardjs.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-09 20:13:35 +04:00
Rasyad Subandrio
aab8895998 Add design patterns information
* Update 100-gof-design-patterns.md

Add resources for design patterns.

* Update content/roadmaps/101-backend/content/114-design-and-development-principles/100-gof-design-patterns.md

* Update content/roadmaps/101-backend/content/114-design-and-development-principles/100-gof-design-patterns.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-09 20:12:29 +04:00
Archit Sharma
5f302bf844 Added content for Carlo (#1120) 2022-02-09 20:02:22 +04:00
Paul Marsicovetere
b3db659a9c Update 100-cdn.md (#1123) 2022-02-09 20:01:25 +04:00
qrav
97f2583e0c Update 101-apache.md (#1124) 2022-02-09 20:01:04 +04:00
Paul Marsicovetere
e757f429dc Update 101-oauth.md (#1125) 2022-02-09 20:00:34 +04:00
Kamran Ahmed
258beade8d Add video for stack data structure 2022-02-08 18:17:42 +04:00
Josué Ayala
864c8fb57a Update 102-nuxt-js.md (#1113) 2022-02-06 18:19:05 +04:00
Archit Sharma
00f9a2f523 Added Resources for Less (#1116)
* Added Resources for Less

* Update content/roadmaps/100-frontend/content/109-css-preprocessors/102-less.md

* Update content/roadmaps/100-frontend/content/109-css-preprocessors/102-less.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-06 18:17:42 +04:00
Kamran Ahmed
f32c61b690 Add new sponsors 2022-02-06 18:13:26 +04:00
Cecilia La Place
52a21ba9ac Repaired broken flexbox.io link in Backend Frontend Basics (CSS) (#1100)
* Repaired broken flexbox.io link

* Repaired broken link in CSS README
2022-02-04 10:14:26 +04:00
Kyle Thorpe
8d7911b35d Add content for Monolithic applications (#1102) 2022-02-04 10:14:08 +04:00
Kyle Thorpe
71d0218953 Add content for Microservices (#1103)
Add description and resources for Microservices pattern
2022-02-04 10:13:52 +04:00
Kyle Thorpe
dff393a20b Add content for Serverless (#1104)
Add description and resources for serverless
2022-02-04 10:13:37 +04:00
Archit Sharma
0e83a361e3 Resources added for Styled Components (#1105)
* Resources added for Styled Componenets

* Update content/roadmaps/100-frontend/content/112-modern-css/100-styled-components.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-04 09:58:16 +04:00
Aroyan
6145be9d1b Add Jekyll content on Frontend roadmap (#1095)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap

* Add Version Control System description

* Add Jekyll content on Frontend roadmap
2022-02-03 23:56:04 +04:00
marinerbob
8d25145db6 Update 117-progressive-web-apps topic (#1097) 2022-02-03 23:55:50 +04:00
marinerbob
ff212753f6 Update 102-css topic (#1096) 2022-02-03 23:55:42 +04:00
Archit Sharma
23bb1e18be Added resources for Styled jsx (#1098)
* Added resources for Styled jsx

* Update content/roadmaps/100-frontend/content/112-modern-css/102-styled-jsx.md

* Update content/roadmaps/100-frontend/content/112-modern-css/102-styled-jsx.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-03 23:54:43 +04:00
Archit Sharma
ed991df832 Added Resources for Emotion css (#1094)
* Added Resources for Emotion css

* Update content/roadmaps/100-frontend/content/112-modern-css/103-emotion.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-03 00:20:51 +04:00
marinerbob
26bc8c0e70 Update 102-responsive-design-and-media-queries.md (#1092) 2022-02-02 18:38:33 +04:00
Archit Sharma
0ce8e58f9f Added Resources for Material UI (#1093)
* Added Resources for Material UI

* Update content/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/102-material-ui.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-02 18:38:17 +04:00
Kodey Thomas
b65cf6a026 Updated HATEOAS (#1090)
* Updated HATEOAS

* Removed Colour Scheme
2022-02-02 15:38:58 +04:00
Archit Sharma
bc80ba4194 Added Resources for Radix UI (#1091)
* Added Resources for Radix UI

* Add Radix UI content

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-02-02 15:38:25 +04:00
Uriell
7883875126 Added Resources for HTTP (#1088)
* Adding an extra resource on HTTP

I've recently read this 3-part series on HTTP, mostly focused on HTTP/3 and QUIC, but the first part covers basic concepts about HTTP and how it evolved to HTTP/3 (which is really HTTP/2-over-QUIC) and I find it might be a great reading resource on the topic.

I'm not recommending the 2nd and 3rd parts as they're linked through the 1st one and they diverge a little from the topic of HTTP (going into performance improvements and deployment of QUIC)

* Replicating new HTTP resource to back end roadmap
2022-02-01 10:48:55 +04:00
Archit Sharma
46d53b50eb Resources added for NativeScript framework (#1083) 2022-02-01 10:47:22 +04:00
Archit Sharma
6879b9827b Resources added for Web Assembly (#1084) 2022-02-01 10:47:09 +04:00
Kamran Ahmed
3b8144aafc Add linked list data structure video 2022-01-31 19:51:08 +04:00
Archit Sharma
82af3e2880 Resources added for static site generators (#1087)
* Resources added for static site generators

* Update readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-31 13:36:10 +04:00
Archit Sharma
c791dbb70c Added Resources for Ionic Framework (#1081) 2022-01-30 00:26:49 +04:00
Leandro Morais Azevedo
24559a32ee Added Resources for Interprocess Communication (#1082)
* Added Resources for Interprocess Communication

* Update 106-interprocess-communication.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-30 00:26:11 +04:00
Surya Vamsi
45a66feac9 Remove redundant link (#1077)
The link to the Official Relay Modern website is displayed thrice.
2022-01-29 16:48:23 +04:00
Tóth Bence
272d871d47 Fix badge text for ESLint 2022-01-29 13:24:31 +04:00
Anaxímeno Brito
7cb36ca7ff Update 101-rust.md (#1043)
Added content for the Rust programming language.
Contents: link to the official online book and the rust by example official web page.
2022-01-29 01:28:02 +04:00
Archit Sharma
d55b6927b8 Resources added for RxJS (#1044)
* Resources added for RxJS

* Update content/roadmaps/100-frontend/content/111-pick-a-framework/101-angular/100-rxjs.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-29 01:27:27 +04:00
Archit Sharma
c054a3f56c Resources added for NgRx (#1045)
* Resources added for NgRx

* Update content/roadmaps/100-frontend/content/111-pick-a-framework/101-angular/101-ngrx.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-29 01:25:55 +04:00
LJS
a3b7b45ef3 Update 107-eleventy.md (#1047)
* added resource

Not sure if badge text "read" is fitting. 11ty.rocks is more like a resource treasure chest for 11ty starters.
2022-01-29 01:25:19 +04:00
Nomar Gómez Cabreja
a41ee92931 Add content to Css modules (#1048)
* Add content to Css modules

Also I think you guys should change CSS Modules to Alternative Option as is not used much anymore.

* Update 101-css-modules.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-29 01:24:45 +04:00
Archit Sharma
6db1e89628 Resources added for Flow (#1049) 2022-01-29 01:23:12 +04:00
Paul Marsicovetere
7c9159b5b4 Update 100-npm.md (#1052) 2022-01-29 01:22:56 +04:00
Paul Marsicovetere
c6d35aa63c Update readme.md (#1053) 2022-01-29 01:22:28 +04:00
Paul Marsicovetere
3dc11ae726 Update readme.md (#1054) 2022-01-29 01:22:05 +04:00
Paul Marsicovetere
85186c7fe6 Add HTML resource 2022-01-29 01:21:48 +04:00
Paul Marsicovetere
432c6d5ac3 Add CSS resource 2022-01-29 01:21:25 +04:00
Paul Marsicovetere
f876d2f604 Add Git resource 2022-01-29 01:20:59 +04:00
Madukoma Blessed
ba889de406 Add PostgreSQL resources
* Update 100-postgresql.md

* Update 100-postgresql.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-29 01:20:19 +04:00
Tóth Bence
11e8cf4630 Add ESLint resources
* Update 101-eslint.md

* Update 101-eslint.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-29 01:17:34 +04:00
Kamran Ahmed
ba211922b2 Delete slnx.sqlite 2022-01-29 01:14:06 +04:00
Kyle Zamora
50f078a884 Update 113-ci-cd.md (#1064)
* Update 113-ci-cd.md

* Update 113-ci-cd.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-29 01:13:45 +04:00
Paul Marsicovetere
b8c8dfcab1 Update 100-go.md (#1066) 2022-01-29 01:10:07 +04:00
Paul Marsicovetere
a5093ef4e0 Add Ruby resources 2022-01-29 01:09:45 +04:00
Paul Marsicovetere
883c28cf39 Add MySQL Resources 2022-01-29 01:09:23 +04:00
Paul Marsicovetere
b26dbc2a62 Update 103-mssql.md (#1069) 2022-01-29 01:08:48 +04:00
qrav
bb0788e357 Update-100-md5.md (#1072)
* Update-100-md5.md

* Minor typo change

* Update content/roadmaps/101-backend/content/111-web-security-knowledge/100-md5.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-28 14:41:40 +04:00
Paul Marsicovetere
684d3d9c4a Update readme.md (#1070) 2022-01-28 14:26:19 +04:00
qrav
1bdc3ebd14 Update 102-java.md (#1071) 2022-01-28 14:25:30 +04:00
Kamran Ahmed
52fa640dcf Update WorkOS logo background 2022-01-28 02:33:58 +04:00
Kamran Ahmed
2f0ee7f3ae Add WorkOS logo 2022-01-28 02:29:22 +04:00
Kamran Ahmed
178aa830f1 Add WorkOS Logo 2022-01-28 02:26:37 +04:00
Kamran Ahmed
0ca59ab032 Add workos logo 2022-01-28 02:22:31 +04:00
y8l
594ff9ab81 Add Relational Databases Content (#1034)
* Add Relational Databases Content

* Update readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 21:28:33 +04:00
Archit Sharma
fd8ba60b02 Resources added for MobX (#1041) 2022-01-22 21:27:12 +04:00
Archit Sharma
ce4e5a21a0 Resources added for Recoil.js (#1042) 2022-01-22 21:26:35 +04:00
Kyle Thorpe
439d622e11 Add content for Docker (#1039)
Add a description and resources for Docker. However, Docker is a big topic and could probably use some more information.
2022-01-22 21:25:58 +04:00
Kyle Thorpe
ceffafd4ae Add content for Functional Testing (#1038)
Add a description and resources for Functional Testing
2022-01-22 21:25:14 +04:00
Kyle Thorpe
1b5900f5d7 Add content for Unit Testing (#1037)
Add a description and resources for Unit Testing
2022-01-22 21:24:52 +04:00
Kyle Thorpe
800263d195 Add content for Integration Testing (#1036)
Add a description and resources for Integration Testing
2022-01-22 21:24:11 +04:00
Kyle Thorpe
38bf960e0d Add content for Testing (#1035)
* Add content for Testing

Add a description and resources for testing

* Update readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 21:23:41 +04:00
Vilmar Pavesi Junior
63ad44a90d Add resources for ACID compliance
* Update 101-acid.md

I add some content to ACID on backend roadmap

* Update 101-acid.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 14:21:27 +04:00
Kamran Ahmed
f5f238d779 Add sponsor link — Thanks @kevin-bog 🙌 2022-01-22 13:39:30 +04:00
Archit Sharma
0b00f55238 Progressive Web Apps resources added (#1009) 2022-01-22 13:33:29 +04:00
Archit Sharma
622a6f76b0 React Native resources added (#1022)
* React Native resources added

* Update 100-react-native.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 13:32:35 +04:00
Paul Marsicovetere
1adecfacde Add HTML resource
Add free course from Codecademy
2022-01-22 13:31:21 +04:00
Paul Marsicovetere
63f68c4b52 Update 101-css.md (#1025)
Adding codecademy CSS courses
2022-01-22 13:31:06 +04:00
Paul Marsicovetere
6064177f6f Add python resources
* Update 106-python.md

Python additions

* Update 106-python.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 13:30:45 +04:00
Paul Marsicovetere
7bbb7979c5 Update 105-javascript.md (#1027)
Add codecademy course
2022-01-22 13:29:16 +04:00
Kyle Thorpe
f7738262ef Add content for Version Control Systems (#1028)
Add a description and resources for version control systems
2022-01-22 13:28:41 +04:00
Kyle Thorpe
2e28eebae1 Add content for Repo Hosting Services (#1029)
Add description and resources for repo hosting services
2022-01-22 13:28:06 +04:00
Kyle Thorpe
7b1d664261 Add content for Scaling (#1030)
* Add content for Scaling

- Add description and resources for vertical and horizontal scaling
- Fix typo

* Update 103-horizontal-vertial-scaling.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 13:27:12 +04:00
Kyle Thorpe
729db8f40f Add content for Test Driven Development (#1031)
Add description and resources for TDD
2022-01-22 13:24:46 +04:00
Sachin Kotian
a0095a9b96 Update 100-elasticsearch.md (#1011)
* Update 100-elasticsearch.md

* Add elasticsearch details

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-22 10:29:50 +04:00
Kyle Thorpe
d8b7986a6d Description and resources for SOLID (#1021)
Add a description and resources for the SOLID design principles
2022-01-21 18:08:18 +04:00
Archit Sharma
2eab2b77ac Resources added for NPM Scripts (#1012)
* Resources added for NPM Scripts

* Update 100-npm-scripts.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-21 09:27:15 +04:00
Mark Rossetti
d03f91cb01 Add link to Roy Fielding's paper (#1017)
* Add link to Roy Fielding's paper

The backend diagram makes reference to Roy Fielding's dissertation. I thought it would be helpful to have a direct link to his paper for convenience.

* Update 100-rest.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-21 09:24:15 +04:00
Kyle Thorpe
fbb252baf3 KISS description and resources (#1018)
Add description and resources for KISS software development/design principle
2022-01-21 09:21:39 +04:00
Kyle Thorpe
1678bb8910 YAGNI description and resources (#1019)
* YAGNI description and resources

Add description and resources for YAGNI software development/design principle

* Update 105-yagni.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-21 09:21:15 +04:00
Kyle Thorpe
cdbfa8ae9a DRY description and resources (#1020)
* DRY description and resources

Add a description and resources for DRY software development/design principle

* Minor space change

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-21 09:20:16 +04:00
tigor7
7b1f8c32af Fixed 'dns and how it works' button/node (#1014) 2022-01-19 10:25:48 +04:00
Kamran Ahmed
8899bab70d Add getform logo 2022-01-18 13:32:46 +04:00
Kamran Ahmed
d892107e6e Add getform logo 2022-01-18 13:29:52 +04:00
Amjith OS
b8247b6d77 added content in JavaScript (learn a language) in backend roadmap (#1006)
* added content in JavaScript (learn a language) in backend roadmap

* Update node.js resources

Co-authored-by: Amjith <amjithomy@gmail.com>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-17 14:53:39 +04:00
Archit Sharma
a912acd6d7 Added Resources for Vue.js (#1008)
* Added Resources for Vue.js

* Update content/roadmaps/100-frontend/content/111-pick-a-framework/102-vue-js/readme.md

* Update content/roadmaps/100-frontend/content/111-pick-a-framework/102-vue-js/readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-17 14:48:05 +04:00
Archit Sharma
084a4d3569 Apollo Description and Content added (#999)
* Apollo Description and Content added

* Update content/roadmaps/100-frontend/content/119-graphql/100-apollo.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-15 21:11:21 +04:00
Truncgil Technology
2f23c69323 Add PHP resources
* Update 103-php.md

* Update content/roadmaps/101-backend/content/103-learn-a-language/103-php.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-15 21:05:36 +04:00
Archit Sharma
be22e8dc6b Added Description and Resources for Relay Modern (#1000)
* Added Description and Resources for Relay Modern

* Update content/roadmaps/100-frontend/content/119-graphql/101-relay-modern.md

* Update content/roadmaps/100-frontend/content/119-graphql/101-relay-modern.md

* Update content/roadmaps/100-frontend/content/119-graphql/101-relay-modern.md

* Update content/roadmaps/100-frontend/content/119-graphql/101-relay-modern.md

* Update content/roadmaps/100-frontend/content/119-graphql/101-relay-modern.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-15 20:55:48 +04:00
LJS
02a0b864a5 Update 107-eleventy.md (#1004)
* Update 107-eleventy.md

* added summary

* added resource

* Update content/roadmaps/100-frontend/content/120-static-site-generators/107-eleventy.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-15 20:50:15 +04:00
LJS
894eda60ad Update 104-accessibility.md (#1002)
* Update 104-accessibility.md

What I did: added new resource item
Why I chose it: Helped me several times to find a) a starting point on how to build an accessible web experience regarding a specific component and b) provides usually links with in-depth examples

* Update content/roadmaps/100-frontend/content/101-html/104-accessibility.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-15 12:27:48 +04:00
Anshul Yadav
48d8086884 🎯Added a resource - (YouTube Video) (#1001)
✌️Added a youtube video as a watchable resource I found very useful and enough. I think knowing that much about how the browsers work is enough for the Front-end journey. The video covered all the important topics from User-Interface to Rendering Engine.
2022-01-15 12:25:48 +04:00
Archit Sharma
efad09de7f GraphQL free Course for Beginners added (#997) 2022-01-14 20:06:09 +04:00
Santiago Bioletto
28e92ac515 Add Os and General KnowKnowledge content at backend roadmap (#998)
* Add Os and General KnowKnowledge content at backend roadmap

* Update content/roadmaps/101-backend/content/102-os-general-knowledge/readme.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-14 20:05:52 +04:00
Kamran Ahmed
a4d5c7c353 Add PostCSS content 2022-01-13 19:47:38 +04:00
Ragul
c2737d8a42 Update 106-cors.md (#995)
* Update 106-cors.md

* Update description

* Add resources for CORS

* Update content/roadmaps/101-backend/content/111-web-security-knowledge/106-cors.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-13 17:40:47 +04:00
Aroyan
f7dd8e71fd Add HTTPS content on Backend roadmap (#996)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap

* Add HTTPS content on Backend roadmap
2022-01-13 17:33:42 +04:00
Vijeth
791c402878 Added a new course (#994) 2022-01-12 17:37:18 +04:00
Karan Shah
8ed9d0c106 Update 100-go.md (#993)
- added a one liner explaining what Go does
- added the Go resources listed on the go.dev website
2022-01-12 10:18:00 +04:00
Aroyan
542b0ce117 Add Git content on Backend roadmap (#992)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap

* Add Git content on Backend roadmap
2022-01-11 22:26:57 +04:00
Aroyan
cacddd10f2 Add GitLab content on backend roadmap (#991)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content

* Add GitLab content at backend roadmap
2022-01-11 15:20:20 +04:00
Md. Jamal Uddin
350d160eb7 Chakra UI resources (#989)
* add react.js resources

* add css resources

* add graphql resources

* add redux resources

* add typescript resources

* add next.js resources

* add chakra-ui resources

* Remove duplicate links

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-11 11:25:01 +04:00
Chris
f22b73bb7a Add official Jest website (#990) 2022-01-11 11:24:00 +04:00
Emmanuel Allison
874437586e Add content for C#
* Update 103-csharp.md

* Fix broken link for resource

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2022-01-10 10:15:01 +04:00
Aroyan
40ab1f6c77 Add GitHub content (#987)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content

* Add GitHub content

* Add GitHub content

* Add GitHub content
2022-01-10 10:13:33 +04:00
Kamran Ahmed
5dce3dd7ab Add links to resources 2022-01-09 13:54:12 +04:00
Kamran Ahmed
13f018893a Add array data structure video 2022-01-09 12:04:54 +04:00
Kamran Ahmed
0400b1d6c0 Add interactivity for the backend roadmap 2022-01-09 11:29:22 +04:00
Aroyan
a0cb4e2568 Add Vite content (#984)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content

* Add Vite content
2022-01-08 11:23:14 +04:00
Aroyan
157dde2bfb Add Prettier content (#982)
* Add Bootstrap CSS content

* Add Bulma CSS content

* Add Prettier content
2022-01-07 10:21:58 +04:00
Aroyan
07ad7bb476 Add Bulma CSS content (#981)
* Add Bootstrap CSS content

* Add Bulma CSS content
2022-01-06 09:47:44 +04:00
Kamran Ahmed
f721af1251 Update dependencies 2022-01-05 19:29:32 +04:00
Aroyan
42ed79e117 Add Bootstrap CSS content (#979) 2022-01-05 19:28:30 +04:00
Justin Irabor
07916250f5 Suggest content to 'Testing your apps' component (#980) 2022-01-05 19:26:30 +04:00
Yankang LI
a7dd2df70e bug fix: added testing files (#978)
Co-authored-by: Loetsli <loetsli@MacBook-Pro-von-Loetsli.local>
2022-01-02 15:38:41 +04:00
Kamran Ahmed
22e0758c6e Update sponsors 2022-01-01 18:53:58 +04:00
Kamran Ahmed
b27a3abc10 Add typescript and next.js resources 2022-01-01 18:38:13 +04:00
Md. Jamal Uddin
b0e5530f24 Add Next.js Resources (#974)
* add react.js resources

* add css resources

* add graphql resources

* add redux resources

* add typescript resources

* add next.js resources
2022-01-01 18:35:24 +04:00
Kamran Ahmed
8da5180062 Update year 2022 2022-01-01 18:34:03 +04:00
Vineet Likhitkar
d82a96b693 Add CSS Preprocessor Resources (#975) 2022-01-01 18:29:32 +04:00
Kamran Ahmed
1277089793 Update typescript resources 2021-12-26 19:11:59 +04:00
Md. Jamal Uddin
623d9398f2 Add TypeScript resources (#973)
* add react.js resources

* add css resources

* add graphql resources

* add redux resources

* add typescript resources
2021-12-26 19:08:44 +04:00
Md. Jamal Uddin
09f92bf601 Redux resources (#956)
* add react.js resources

* add css resources

* add graphql resources

* add redux resources
2021-12-26 14:05:52 +04:00
Kamran Ahmed
3ae18b3d30 Add vuex resources 2021-12-26 14:05:34 +04:00
Hassan TAJIRI
c498adc530 Update 100-vuex.md (#963)
Vuex quick description
2021-12-26 14:03:13 +04:00
Kamran Ahmed
399c548570 Add typescript resources 2021-12-26 13:54:53 +04:00
sehajanand
acfca9f169 Update 100-typescript.md (#957) 2021-12-26 13:48:05 +04:00
Jody Zhou
0312a89d8c Updated the Electron section (#965)
* Updated the Electron section

Updated the Electron section in the front end road map

* Update 100-electron.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2021-12-22 00:10:02 +04:00
Eihab Khan
5e441f647b Added [course] Flexbox learning resource 2021-12-22 00:09:20 +04:00
Kamran Ahmed
8be9eb6101 Add translations link 2021-12-21 14:42:02 +04:00
Kamran Ahmed
0c799cb43b Update sponsors information 2021-12-20 14:31:18 +04:00
Kamran Ahmed
6fd69d71e0 Add doppler logo 2021-12-18 12:12:48 +04:00
Kamran Ahmed
0bb93aeef0 Add data structures video link 2021-12-12 22:17:39 +01:00
Felipe Sousa
fb55ccc5cf Add content to "Webpack" 2021-12-12 20:20:42 +01:00
Kamran Ahmed
8054ac8d0e Add JS course link 2021-12-11 20:04:10 +01:00
Kamran Ahmed
6846ed12f2 Add CSS architecture resources 2021-12-11 03:05:08 +01:00
Kamran Ahmed
684b9667a4 Fix broken license link 2021-12-11 02:54:16 +01:00
Kamran Ahmed
a35c7ffaf0 Add package managers content 2021-12-11 02:49:22 +01:00
Kamran Ahmed
8127fbb4ee Add security content for cors and owasp 2021-12-11 02:25:41 +01:00
Kamran Ahmed
7afa06fc95 Add web security resources 2021-12-11 02:17:47 +01:00
Kamran Ahmed
8991d2c934 Add keywords for roadmapsg 2021-12-11 01:39:36 +01:00
Kamran Ahmed
39542ffa37 Add resources for git and version control systems 2021-12-11 01:26:31 +01:00
Kamran Ahmed
6e05d1c992 Add JavaScript concepts resources 2021-12-11 01:02:26 +01:00
Kamran Ahmed
12fc4e671e Add Modern JavaScript resources 2021-12-11 00:24:55 +01:00
Kamran Ahmed
3f7d706f04 Add Fetch API resources 2021-12-11 00:19:14 +01:00
Kamran Ahmed
712d65d0e6 Add DOM and JavaScript resources 2021-12-10 23:31:26 +01:00
Kamran Ahmed
5f44649f5e Add sass links 2021-12-10 23:06:12 +01:00
sehajanand
873be4ad85 Update 100-sass.md (#955)
* Update 100-sass.md

* Update title for link

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2021-12-10 23:00:56 +01:00
sehajanand
8df92be9bc Update 104-accessibility.md (#953)
* Update 104-accessibility.md

* Append the resource

* Update badge text

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2021-12-10 22:56:16 +01:00
Kamran Ahmed
38a83316b1 Add responsive web design content 2021-12-10 19:45:36 +01:00
Kamran Ahmed
02826f10d3 Add SEO content 2021-12-10 19:38:20 +01:00
Kamran Ahmed
aa7413ce7a Add pinterest domain verification 2021-12-10 19:14:08 +01:00
Kamran Ahmed
fb8f14a0db Add support for rich snippets 2021-12-10 15:15:13 +01:00
Kamran Ahmed
220efadfaa Add rel=nofollow for resource links 2021-12-10 14:39:47 +01:00
Kamran Ahmed
77a9c31c6b Fix bad CLS score for frontend roadmapg 2021-12-10 14:21:51 +01:00
Kamran Ahmed
fb5a7fb09f Add making layouts and html best practices links 2021-12-10 14:02:17 +01:00
Kamran Ahmed
6eb10b4cfd Update accessibility resources 2021-12-10 13:54:26 +01:00
Samarth Gupta
de2b672760 Added Accessibility content (#949) 2021-12-10 13:52:33 +01:00
Md. Jamal Uddin
fe716af733 add graphql resources (#950)
* add react.js resources

* add css resources

* add graphql resources
2021-12-10 13:51:25 +01:00
Kamran Ahmed
fdacc02dcf Add forms and validations resources 2021-12-10 13:50:14 +01:00
Johan Melin
867e3f2a8c Update 102-forms-and-validations.md
Added information and link.
2021-12-10 13:33:32 +01:00
Kamran Ahmed
6e451ef5cf Add JavaScript and VCS content and fix rendering issue 2021-12-10 00:52:40 +01:00
Kamran Ahmed
56816d15f8 Add OOCSS content 2021-12-10 00:28:53 +01:00
Kamran Ahmed
15669982d9 Update resource styling for BEM 2021-12-10 00:24:50 +01:00
Kamran Ahmed
88c6b47d01 Update dependencies 2021-12-10 00:21:50 +01:00
Lucas Vargas
ed84e905ed Update 100-bem.md
Add info and resources of BEM
2021-12-10 00:21:28 +01:00
Kamran Ahmed
3d0153b2fe Fix invalid marking of done nodes 2021-12-09 23:13:37 +01:00
Kamran Ahmed
a174590424 Add semantic HTML section 2021-12-09 23:07:54 +01:00
Kamran Ahmed
a155832f69 Add flutter courses 2021-12-09 22:56:25 +01:00
Lucas Vargas
75eb3a0237 Update 102-flutter.md
Add links with more information about Flutter and tutorials
2021-12-09 22:56:25 +01:00
Kamran Ahmed
a1576fd348 Fix multiple group marking as done 2021-12-09 22:42:44 +01:00
Kamran Ahmed
8a296d99c4 Add CSS resources 2021-12-09 22:38:04 +01:00
Kamran Ahmed
10f9043516 Add CSS resources 2021-12-09 22:37:27 +01:00
Kamran Ahmed
37155e7d3c Add CSS resources 2021-12-09 22:32:53 +01:00
Kamran Ahmed
ff7d24d725 Update style of resources 2021-12-09 22:32:53 +01:00
Eihab Khan
7794386573 Added CSS Flexbox learning resource 2021-12-09 22:32:53 +01:00
Md. Jamal Uddin
952884ec99 add CSS resources (#946)
* add react.js resources

* add css resources
2021-12-09 22:32:31 +01:00
Kamran Ahmed
22fa464cca Add CSS resources 2021-12-09 20:54:06 +01:00
Kamran Ahmed
66f939f361 Update style of resources 2021-12-09 20:54:06 +01:00
Kamran Ahmed
25b6700812 Bump roadmap in GitHub ranking 2021-12-09 20:54:06 +01:00
Kamran Ahmed
7c53be8892 Change finished node marking 2021-12-09 20:54:06 +01:00
Kamran Ahmed
be61c144e0 Change finished node marking 2021-12-09 20:54:06 +01:00
Kamran Ahmed
537ffc365e Marking progress on roadmap 2021-12-09 20:54:06 +01:00
Kamran Ahmed
dd7306cd6d Make edit page less attention grabbing 2021-12-09 20:54:06 +01:00
Kamran Ahmed
ed1c8e3709 Update banner colors 2021-12-09 20:54:06 +01:00
Eihab Khan
36e2e95ab9 Added CSS Flexbox learning resource 2021-12-09 18:48:45 +01:00
Kamran Ahmed
7309e9640c Fix link on the frontend roadmap 2021-12-09 18:48:45 +01:00
Kamran Ahmed
be17f594fe Bump roadmap in GitHub ranking 2021-12-09 18:17:02 +01:00
Kamran Ahmed
06329b27c1 Change finished node marking 2021-12-09 18:09:32 +01:00
Kamran Ahmed
0e05128980 Change finished node marking 2021-12-09 18:05:01 +01:00
Kamran Ahmed
9a22a457f5 Marking progress on roadmap 2021-12-09 16:39:09 +01:00
Kamran Ahmed
985da9ae30 Make edit page less attention grabbing 2021-12-09 13:30:55 +01:00
Kamran Ahmed
47e2a9b968 Update banner colors 2021-12-09 13:25:01 +01:00
Kamran Ahmed
074adee8f0 Fix link on the frontend roadmap 2021-12-08 20:05:32 +01:00
Kamran Ahmed
9f68c096a9 Add github resources 2021-12-08 19:52:14 +01:00
Kamran Ahmed
e4654022f0 Fix positioning for frontend roadmaps 2021-12-08 19:40:34 +01:00
Kamran Ahmed
c4291394fe Add react resources 2021-12-08 19:40:34 +01:00
Kamran Ahmed
9b29d240e3 Add tailwind CSS content 2021-12-08 19:40:34 +01:00
Alen Abraham
d09c91247e feat: added github learning resources 2021-12-08 19:40:24 +01:00
Md. Jamal Uddin
51895be81e add react.js resources 2021-12-08 19:27:52 +01:00
Ahmad Moghazi
a79b65a1b4 Add interactive content for tailwind-css 2021-12-08 19:12:00 +01:00
Kamran Ahmed
3fe41d2071 Change hover interactions for mobile 2021-12-08 19:10:44 +01:00
Kamran Ahmed
b25111415f Change homepage roadmap items interaction 2021-12-08 18:59:56 +01:00
Kamran Ahmed
0c3ea386f5 Update sponsors 2021-12-08 18:55:09 +01:00
Kamran Ahmed
d1f6951da2 Fix roadmap responsivness 2021-12-08 16:22:21 +01:00
Kamran Ahmed
7ac1dd9b9c Add interactive frontend roadmap version 2021-12-08 14:59:16 +01:00
Kamran Ahmed
ba21172d20 Add interactive frontend roadmap version 2021-12-08 14:47:05 +01:00
Kamran Ahmed
93b538f4e1 Add interactive frontend roadmap version 2021-12-08 14:27:39 +01:00
Kamran Ahmed
7cac02f4b4 Update resources 2021-12-08 14:06:56 +01:00
Kamran Ahmed
42e98e9cc6 Add interactive button 2021-12-08 14:00:12 +01:00
Kamran Ahmed
0221964362 Add interactive button 2021-12-08 13:48:08 +01:00
Ryan Williams
cbf0b2c496 Fix DBA Link that 404s 2021-12-07 23:35:17 +01:00
Kamran Ahmed
1ff9c11361 Refactor and add json url 2021-12-07 14:13:13 +01:00
Kamran Ahmed
b681aaa52e Refactor and add json url 2021-12-07 14:12:40 +01:00
Kamran Ahmed
8a99ecbecd Refactor and add json url 2021-12-07 14:05:13 +01:00
Kamran Ahmed
82456021ad Refactor roadmap header 2021-12-07 13:10:17 +01:00
Kamran Ahmed
6eba4a2afd Add resources for internet and http 2021-12-06 22:55:09 +01:00
Kamran Ahmed
c3704107a3 Add interactive roadmap error handling and loading 2021-12-06 22:18:57 +01:00
Kamran Ahmed
102cd8885c Add interactive roadmap error handling and loading 2021-12-06 22:18:19 +01:00
Kamran Ahmed
8259a83921 Add loader screen 2021-12-06 21:54:14 +01:00
Kamran Ahmed
c1ecf9d8a5 Add doppler logo 2021-12-06 15:24:43 +01:00
Kamran Ahmed
381801120e Add doppler logo 2021-12-06 14:46:27 +01:00
Kamran Ahmed
fe458e0790 Unbind window listeners on content drawer 2021-12-05 02:46:27 +01:00
Kamran Ahmed
a42e92781a Styling for badge links 2021-12-05 02:38:42 +01:00
Kamran Ahmed
8255f69257 Fix broken build 2021-12-05 02:04:20 +01:00
Kamran Ahmed
30e6c15ddb Add resource group 2021-12-05 02:03:07 +01:00
Kamran Ahmed
3eb13043ce Interactive frontend roadmap with contribution links 2021-12-05 01:50:05 +01:00
Kamran Ahmed
16b2019d06 Fix drawer size 2021-12-05 00:44:17 +01:00
Kamran Ahmed
a0a5e74281 Fix pinch zoom not working on resources 2021-12-04 20:27:35 +01:00
Kamran Ahmed
5881c27526 Fetch roadmap json for interactive version 2021-12-04 20:11:24 +01:00
Kamran Ahmed
c16bed02ca Fix drawer width 2021-12-04 19:53:52 +01:00
Muhammad Asad Jivani
37432582c0 fix: link to golang road map. 2021-12-04 16:05:24 +01:00
Kamran Ahmed
0d71b2b1e6 Add drawer for interactive roadmap 2021-12-04 16:04:31 +01:00
Kamran Ahmed
ff3d0489cc Group page and content loading 2021-12-04 14:04:44 +01:00
Kamran Ahmed
a94af0ec14 Add group name to content dirs 2021-12-04 14:04:23 +01:00
Kamran Ahmed
4f1d4feff6 Add breadcrump on roadmap page 2021-12-04 13:11:20 +01:00
Kamran Ahmed
7bc3b4a0f3 Fix group page 2021-12-04 12:43:29 +01:00
Kamran Ahmed
9d9a6506cc Update roadmap 2021-12-04 12:41:57 +01:00
Kamran Ahmed
3b47cd3542 Add group age 2021-12-04 12:21:06 +01:00
Kamran Ahmed
f500d49275 Refactor roadmap page logic 2021-12-03 20:44:49 +01:00
Kamran Ahmed
098303b78b Refactor roadmap page logic 2021-12-03 19:58:25 +01:00
Kamran Ahmed
bf56db60bc Add logic for content file path generation 2021-12-03 15:01:23 +01:00
Kamran Ahmed
cdc362625a Add logic for content file path generation 2021-12-03 14:36:31 +01:00
Kamran Ahmed
2ec335edc8 Rename content path to landing path 2021-12-03 14:16:41 +01:00
Kamran Ahmed
064f97108e Update repository link 2021-12-02 18:20:48 +01:00
Kamran Ahmed
7d0bc2e8a2 Add website link 2021-12-02 18:10:50 +01:00
Kamran Ahmed
ea4de11e30 Update sponsors section 2021-12-02 17:53:30 +01:00
Kamran Ahmed
4e7d8512cc Update readme 2021-12-02 17:52:13 +01:00
Kamran Ahmed
91ef32722a Update deployment workflow 2021-12-02 17:47:15 +01:00
Kamran Ahmed
87fba80759 Trigger build 2021-12-02 17:46:27 +01:00
Kamran Ahmed
0acd1d1fcd Trigger build 2021-12-02 17:42:17 +01:00
Kamran Ahmed
5228fe936f Update badges 2021-12-02 17:37:39 +01:00
Kamran Ahmed
b221016269 Remove twitter link 2021-12-02 17:36:46 +01:00
Kamran Ahmed
f7d1d61528 Add license and code of conduct 2021-12-02 17:32:51 +01:00
Kamran Ahmed
1467865e45 Update readme 2021-12-02 17:27:00 +01:00
Kamran Ahmed
17e2ffd110 Update readme 2021-12-02 17:24:31 +01:00
Kamran Ahmed
d177a13aa6 Update readme 2021-12-02 17:22:01 +01:00
Kamran Ahmed
1afe684699 Add roadmap path generation 2021-12-02 16:57:13 +01:00
Kamran Ahmed
1fbdf68573 Add interactive roadmap setup 2021-12-01 22:53:40 +01:00
Kamran Ahmed
3feea57204 Add eventual consistency video 2021-11-30 23:52:03 +01:00
Kamran Ahmed
00d8877a12 Add sponsors 2021-11-30 23:47:49 +01:00
Kamran Ahmed
67c4407d30 Add docs for roadmap content 2021-11-27 21:05:03 +01:00
Kamran Ahmed
69679addc3 Add roadmap content skeleton generation command 2021-11-27 20:44:24 +01:00
Kamran Ahmed
272eafa013 Add roadmap content skeleton generation command 2021-11-27 20:10:26 +01:00
Kamran Ahmed
a19b4da20d Add content dir setup command 2021-11-27 19:12:37 +01:00
Kamran Ahmed
47349f00c2 Update video titles 2021-11-27 15:17:36 +01:00
Kamran Ahmed
dbedae78ca Fix broken hover state on mobile 2021-11-27 12:46:24 +01:00
Kamran Ahmed
5733476fd9 Update frontend roadmap files 2021-11-27 02:13:16 +01:00
Kamran Ahmed
5c17deddf5 Add SSH, TLS, SSL video 2021-11-25 21:35:36 +01:00
Kamran Ahmed
f1b5357358 Update sticky banner color 2021-11-22 17:34:42 +01:00
Kamran Ahmed
6a319fe6cc Update roadmap block color 2021-11-22 17:30:10 +01:00
Kamran Ahmed
269e9eb90b Upcoming roadmaps design 2021-11-22 16:53:12 +01:00
Kamran Ahmed
844a38e739 Redesign homepage 2021-11-22 16:49:32 +01:00
Kamran Ahmed
6c8b899a35 Add grouping to frontend roadmap 2021-11-19 18:25:23 +01:00
Kamran Ahmed
f246b065a1 Update dependencies 2021-11-19 14:01:14 +01:00
Kamran Ahmed
97826210fa Add sponsors 2021-11-15 14:25:04 +01:00
Kamran Ahmed
ff5706c82f Add video links 2021-11-15 14:05:00 +01:00
Kamran Ahmed
609cce403a Update sitemap 2021-11-05 21:36:16 +01:00
Kamran Ahmed
87ad491b2c Fix spelling mistakes 2021-11-03 20:30:27 +01:00
Kamran Ahmed
ef25a14af1 Upgrade dependencies 2021-10-28 23:51:16 +02:00
Kamran Ahmed
3ac1de7fb0 Rearrange sections on homepage 2021-10-27 00:34:56 +02:00
Kamran Ahmed
09e8796159 Add big-o notation video 2021-10-27 00:32:15 +02:00
Kamran Ahmed
0d3c3eea11 Add java developer roadmap title 2021-10-24 12:30:43 +02:00
Kamran Ahmed
992b6990a3 Add pdf URL 2021-10-23 01:31:02 +02:00
Kamran Ahmed
ffa18538ff Add pdf URL 2021-10-23 01:30:45 +02:00
Kamran Ahmed
65307e7cc1 Add yaml video link 2021-10-23 01:26:32 +02:00
Kamran Ahmed
46d9fd66f3 Add java developer roadmap 2021-10-23 01:24:15 +02:00
Kamran Ahmed
2344e6c4c3 Add sponsor link 2021-10-10 20:02:14 +02:00
Kamran Ahmed
8899b0d196 Add video for floating point math 2021-10-10 16:01:42 +02:00
Kamran Ahmed
d4613330f4 Update sponsors list 2021-10-09 18:38:58 +02:00
Kamran Ahmed
283632713a Add sponsor link 2021-10-09 18:33:36 +02:00
Kamran Ahmed
d3b96d20cc Enable carbon ads 2021-10-09 18:31:55 +02:00
Kamran Ahmed
374e8a04fd Add cap theorem video 2021-10-05 08:05:24 +02:00
Kamran Ahmed
f1b6d13928 Add youtube header on roadmap pages 2021-10-05 07:55:44 +02:00
Kamran Ahmed
6a4af77ba8 Compress roadmaps images 2021-10-01 11:19:38 +02:00
Kamran Ahmed
a2db93873b Redirect youtube videos to youtuube 2021-10-01 10:59:46 +02:00
Kamran Ahmed
f523b077a4 Update go roadmap title 2021-09-30 23:22:21 +02:00
Kamran Ahmed
412eaa004e Add golang pdf download 2021-09-30 23:20:34 +02:00
Kamran Ahmed
8e71b3c448 Add go developer roadmap 2021-09-30 23:10:41 +02:00
Kamran Ahmed
12030deeea Add sponsor info 2021-09-29 17:47:37 +02:00
Kamran Ahmed
5a89ecf2d8 Add angular developer roadmap 2021-09-29 17:36:57 +02:00
Kamran Ahmed
991d344a77 Add python roadmap pdf 2021-09-29 14:51:58 +02:00
Kamran Ahmed
cc06819a50 Update python roadmap 2021-09-27 20:34:46 +02:00
Kamran Ahmed
eb1beecfa7 Add python roadmap 2021-09-27 11:32:20 +02:00
Kamran Ahmed
135ef6a11a Fix date for proxy-servers guideg 2021-09-27 10:52:29 +02:00
Kamran Ahmed
e902c062fc Fix z-index issue on the ad 2021-09-26 22:04:14 +02:00
Kamran Ahmed
685c402f28 Add python roadmap 2021-09-26 22:02:59 +02:00
Kamran Ahmed
c88e04f809 Update project files 2021-09-26 20:47:26 +02:00
Kamran Ahmed
d2167555da Move content/project to public 2021-09-26 20:36:57 +02:00
Kamran Ahmed
3f61854ccc Add acid video 2021-09-26 17:09:58 +02:00
Kamran Ahmed
9ca201709d Add react-query to API calls in react roadmap 2021-09-26 16:48:07 +02:00
Kamran Ahmed
0c3486df37 Remove tweet links from guides 2021-09-26 09:47:47 +02:00
Kamran Ahmed
27d3704390 Remove sysadmin roadmap 2021-09-25 23:04:31 +02:00
Kamran Ahmed
86bd47c45d Fix styling for nested lists 2021-09-24 10:34:51 +02:00
Kamran Ahmed
b8c2056557 Fix styling for nested lists 2021-09-24 10:33:46 +02:00
Kamran Ahmed
c190a94bc6 Fix styling for nested lists 2021-09-24 10:33:05 +02:00
Kamran Ahmed
eafbcd5867 Disable ugly focus 2021-09-22 20:42:51 +02:00
Kamran Ahmed
170b14df4c Sticky banner update 2021-09-22 20:39:54 +02:00
Kamran Ahmed
694315026e Add studio3t sponsor 2021-09-22 14:56:16 +02:00
Kamran Ahmed
a9183dacc7 Add sysadmin roadmap 2021-09-22 14:50:03 +02:00
Kamran Ahmed
d46b543659 Add park.io sponsor 2021-09-18 12:03:03 +02:00
Kamran Ahmed
9a63e576c7 Add click tracking on YouTube banner 2021-09-14 20:34:24 +02:00
Kamran Ahmed
69ef7615fe Add guide for render blocking JavaScript 2021-09-13 13:12:27 +02:00
Kamran Ahmed
68950ab2c9 Add helmet to thanks page 2021-09-09 22:57:34 +02:00
Kamran Ahmed
305d0a41ac Add thanks page 2021-09-09 22:41:57 +02:00
Kamran Ahmed
e43c21a01d Fix responsiveness issues 2021-09-09 22:32:12 +02:00
Kamran Ahmed
b6205af02c Change youtube banner color 2021-09-09 22:09:20 +02:00
Kamran Ahmed
6de2867d8a Disable carbon ads 2021-09-09 22:00:43 +02:00
Kamran Ahmed
13612323d7 Disable carbon ads 2021-09-09 21:55:53 +02:00
Kamran Ahmed
edd10470a7 Right align the carbon ad 2021-09-09 21:50:02 +02:00
Kamran Ahmed
d5b8d761d5 Update sponsor ads and carbon ad styling 2021-09-09 21:48:31 +02:00
Kamran Ahmed
9f7119694b Revert custom ad changes 2021-09-09 21:36:06 +02:00
Kamran Ahmed
8fbde17c22 Add carbon ads 2021-09-09 21:13:20 +02:00
Kamran Ahmed
e16947bd78 Enable custom ad 2021-09-09 16:38:30 +02:00
Kamran Ahmed
33af054161 Enable carbon ads 2021-09-08 23:33:08 +02:00
Kamran Ahmed
8913d5c5e4 Add youtube logo 2021-09-07 17:41:06 +02:00
Kamran Ahmed
0040d568b1 Add sponsor 2021-09-06 14:28:39 +02:00
Kamran Ahmed
706070e42a Add resources page 2021-09-05 22:52:18 +02:00
Kamran Ahmed
f79fb62ff9 Add sli, slo and sla guide 2021-09-05 22:38:37 +02:00
Kamran Ahmed
5c428540dc Add web vitals png 2021-09-05 22:24:38 +02:00
Kamran Ahmed
35ae0a74b3 Add keywords to frontend roadmap 2021-09-05 22:19:09 +02:00
Kamran Ahmed
a1606521d4 Fix missing title and description on video page 2021-09-05 22:13:49 +02:00
Kamran Ahmed
6545c8de36 Add youtube link to video page 2021-09-05 22:09:22 +02:00
Kamran Ahmed
0f713cbfd8 Add sticky banner for youtube 2021-09-05 21:58:44 +02:00
Kamran Ahmed
333894b75b Fix style for sponsor button 2021-09-05 21:19:51 +02:00
Kamran Ahmed
c73a500ffd Add back to roadmaps button 2021-09-05 21:17:51 +02:00
Kamran Ahmed
a489bc0fde Update dimmed button 2021-09-05 21:08:28 +02:00
Kamran Ahmed
09ef6bfbb0 Header logo fix 2021-09-05 20:55:22 +02:00
Kamran Ahmed
67d2f5cb57 Add support for environment variables 2021-09-05 20:38:08 +02:00
Kamran Ahmed
b28deab192 Update build workflow 2021-09-05 20:28:35 +02:00
Kamran Ahmed
290a73c8b0 Update dependencies 2021-09-05 20:25:48 +02:00
Kamran Ahmed
579d39e104 Merge branch 'master' of github.com:kamranahmedse/roadmap-next 2021-09-05 20:22:27 +02:00
Kamran Ahmed
e7c32958c9 Remove initial version 2021-09-05 20:22:21 +02:00
Kamran Ahmed
4a31a757f1 Update build scripts 2021-09-05 20:06:41 +02:00
Kamran Ahmed
c7a141c024 Add logos 2021-09-05 20:04:41 +02:00
Kamran Ahmed
b4042cb183 Add readme and contribution docs 2021-09-05 20:03:30 +02:00
Kamran Ahmed
0d937384a4 Integrate husky 2021-09-05 20:01:22 +02:00
Kamran Ahmed
3ee4d49d05 Fix linting issues 2021-09-05 20:00:07 +02:00
Kamran Ahmed
bc9e58c155 Add custom ad 2021-09-05 18:46:38 +02:00
Kamran Ahmed
0a6d72f671 Add carbon integration 2021-09-05 18:45:32 +02:00
Kamran Ahmed
dd43969dfb Integrate google analytics 2021-09-05 18:40:02 +02:00
Kamran Ahmed
0067cfdbc6 Fix broken build UI issue 2021-09-05 18:27:34 +02:00
Kamran Ahmed
6bb1505db3 Fix build errors 2021-09-05 18:25:49 +02:00
Kamran Ahmed
7e0a392a87 Update gitignore 2021-09-05 17:30:30 +02:00
Kamran Ahmed
1c94fb8b95 Refactor page components 2021-09-05 17:28:37 +02:00
Kamran Ahmed
f03472127c Refactor page components 2021-09-05 17:26:54 +02:00
Kamran Ahmed
d5b091a5ed Fix linting issues 2021-09-05 16:12:54 +02:00
Kamran Ahmed
ba1b876e14 Add sitemap generation 2021-09-05 16:07:20 +02:00
Kamran Ahmed
af8a79c48d Add helmet to pages 2021-09-04 22:58:58 +02:00
Kamran Ahmed
6ba22799cd Remove podcasts link 2021-09-04 19:40:11 +02:00
Kamran Ahmed
63b297ca34 Integrate revue subscription 2021-09-04 19:25:07 +02:00
Kamran Ahmed
929e6c0a51 Add pdf links 2021-09-04 19:14:02 +02:00
Kamran Ahmed
9b97fce431 Refactor roadmap id 2021-09-04 18:51:49 +02:00
Kamran Ahmed
ad427eceee Add roadmaps listing 2021-09-04 18:50:38 +02:00
Kamran Ahmed
1b9bb03cde Add embed video links 2021-09-03 18:01:09 +02:00
Kamran Ahmed
68fc45104d Add youtube links to videos 2021-09-03 16:54:35 +02:00
Kamran Ahmed
96e02195a9 Refactor guide links and id 2021-09-03 16:27:30 +02:00
Kamran Ahmed
e800e3b6ce Normalize filename and url in videos 2021-09-03 16:21:20 +02:00
Kamran Ahmed
ac984346e8 Rename videos 2021-09-03 15:59:03 +02:00
Kamran Ahmed
afa0e032e7 Add video listing page 2021-09-03 13:07:13 +02:00
Kamran Ahmed
86f599b5b7 Add videos listing page 2021-09-03 12:59:44 +02:00
Kamran Ahmed
75c4f952dd Menu and guides listing changes 2021-09-03 10:52:43 +02:00
Kamran Ahmed
aa8aea9433 Guides listing to have all guides 2021-09-03 10:11:33 +02:00
Kamran Ahmed
93797cc5ee Make the guides page working 2021-09-03 09:45:46 +02:00
Kamran Ahmed
fc159ecb9b Guides listing 2021-09-02 18:08:02 +02:00
Kamran Ahmed
c097017520 Homepage links update 2021-09-01 14:45:26 +02:00
Kamran Ahmed
ec1725e312 Linking from homepage to roadmaps 2021-08-29 21:31:29 +02:00
Kamran Ahmed
67b8af3f6b Add roadmap rendering 2021-08-29 21:29:14 +02:00
Kamran Ahmed
74ef38cdb6 Add video and guides on homepage 2021-08-29 18:57:23 +02:00
Kamran Ahmed
0e90d53b8e Guides listing 2021-08-29 16:36:51 +02:00
Kamran Ahmed
ec0cd4692c Guides listing on homepage 2021-08-29 16:34:00 +02:00
Kamran Ahmed
964a87f605 Render roadmaps on homepage 2021-08-29 16:05:19 +02:00
Kamran Ahmed
7c3c552ff1 Add roadmap meta generation script 2021-08-29 14:05:59 +02:00
Kamran Ahmed
810cea40b3 Responsive components 2021-08-28 15:28:20 +02:00
Kamran Ahmed
ae463059dd Make opensource and updates banner responsive 2021-08-28 14:30:33 +02:00
Kamran Ahmed
3f2ef9ae48 Responsive homepage 2021-08-28 14:02:22 +02:00
Kamran Ahmed
8d05031e51 Make roadmaps page responsive 2021-08-28 13:50:44 +02:00
Kamran Ahmed
2c0d1ef77f Make homepage responsive 2021-08-28 13:38:29 +02:00
Kamran Ahmed
3a7099bebe Responsive homepage grid 2021-08-28 13:06:30 +02:00
Kamran Ahmed
8bb36c1451 Add responsive footer 2021-08-28 13:04:40 +02:00
Kamran Ahmed
d3ee830e26 Add responsive header 2021-08-28 12:48:48 +02:00
Kamran Ahmed
8013c64eb5 Add thanks page 2021-08-26 12:39:05 +02:00
Kamran Ahmed
3bdac7c7d9 Style signup page 2021-08-24 17:59:46 +02:00
Kamran Ahmed
101aed8257 Add sign up page 2021-08-24 16:35:23 +02:00
Kamran Ahmed
d1bdcfd1da Add terms and privacy pages 2021-08-22 22:32:50 +02:00
Kamran Ahmed
0a3fd7b894 Add about page 2021-08-22 22:21:34 +02:00
Kamran Ahmed
1c065f563d Add premium block 2021-08-22 16:01:55 +02:00
Kamran Ahmed
85ac2162bc Refactor content page header 2021-08-22 15:40:20 +02:00
Kamran Ahmed
fe34e7f8d7 Add video detail page 2021-08-22 15:36:03 +02:00
Kamran Ahmed
13817a4318 Jsx to Tsx conversion 2021-08-21 16:44:49 +02:00
Kamran Ahmed
197f1f6824 Add markdown rendering 2021-08-20 17:06:26 +02:00
Kamran Ahmed
c37297f822 Add support for markdown 2021-08-20 15:55:39 +02:00
Kamran Ahmed
a85497d7e7 Add guide header and guide page 2021-08-20 15:49:34 +02:00
Kamran Ahmed
4737dd8390 Disable powered by header 2021-08-19 15:01:18 +02:00
Kamran Ahmed
309731fe1b Add roadmap image page 2021-08-19 14:36:08 +02:00
Kamran Ahmed
8902100baa Add roadmap page 2021-08-16 18:15:54 +02:00
Kamran Ahmed
bdee14009b Add link to roadmaps page 2021-08-16 00:11:26 +02:00
Kamran Ahmed
55f7d00e83 Add roadmaps listing 2021-08-16 00:10:18 +02:00
Kamran Ahmed
4459b7d062 Change header button text to subcsribe 2021-08-15 18:31:53 +02:00
Kamran Ahmed
c188fc57ae Add video listing page 2021-08-15 18:28:05 +02:00
Kamran Ahmed
ef6709d2bf Refactor page header 2021-08-15 16:07:05 +02:00
Kamran Ahmed
51a5f570fe Refactor guides page 2021-08-15 15:57:21 +02:00
Kamran Ahmed
74791e1f7d Update UI 2021-08-15 10:42:56 +02:00
Kamran Ahmed
7d27cb0b9f Add guides listing page 2021-08-15 10:39:46 +02:00
Kamran Ahmed
6dbf170076 Design tweaks 2021-08-14 22:57:40 +02:00
Kamran Ahmed
461c9a03a7 Design tweaks 2021-08-14 22:55:17 +02:00
Kamran Ahmed
41ec8327c4 Refactor list and list items 2021-08-14 22:43:25 +02:00
Kamran Ahmed
c8395aa3df Refactor roadmap component 2021-08-14 20:43:23 +02:00
Kamran Ahmed
d80327c8e8 Fix badge alignment 2021-08-14 20:32:43 +02:00
Kamran Ahmed
b4ce36fb04 Add video and guide components 2021-08-14 20:29:05 +02:00
Kamran Ahmed
c84e7d41bb Divide home in components 2021-08-14 14:01:42 +02:00
Kamran Ahmed
14c03912f9 Add footer 2021-08-14 13:19:57 +02:00
Kamran Ahmed
0028d4f80c Add opensource section 2021-08-12 17:09:15 +02:00
Kamran Ahmed
46f1034163 Add videos section 2021-08-04 00:20:16 +02:00
Kamran Ahmed
c44fc62e8a Add videos section 2021-08-03 23:07:54 +02:00
Kamran Ahmed
7a6a8c94f9 Add visual guides navigation 2021-08-02 18:15:42 +02:00
Kamran Ahmed
cadf9ba4a7 Add visual guides navigation 2021-08-02 13:22:21 +02:00
Kamran Ahmed
4428e8d82b Guides listing 2021-08-02 12:49:35 +02:00
Kamran Ahmed
b080ed64ba Add visual guides navigation 2021-08-01 21:43:43 +02:00
Kamran Ahmed
3bfd06d704 Add guides listing design 2021-08-01 21:38:34 +02:00
Kamran Ahmed
0d21be3796 Add roadmap links 2021-08-01 19:09:04 +02:00
Kamran Ahmed
f15e7a18b8 Add homepage UI 2021-08-01 18:37:32 +02:00
Kamran Ahmed
9c81d818ed Add chakra and prettier 2021-08-01 13:19:54 +02:00
Kamran Ahmed
5cf17a3e0f Initial commit from Create Next App 2021-08-01 13:08:35 +02:00
611 changed files with 180846 additions and 53658 deletions

View File

@@ -1,13 +0,0 @@
{
"presets": [
"next/babel"
],
"plugins": [
[
"styled-components",
{
"ssr": true
}
]
]
}

View File

@@ -1,23 +0,0 @@
# EditorConfig for the node-soap library - head over to editorconfig.org to see if you editor supports this file.
# this is the topmost .editorconfig file
root = true
[*]
end_of_line = lf
insert_final_newline = true
[*.xml]
insert_final_newline = false
[*.js]
indent_style = space
indent_size = 2
[*.json]
indent_style = space
indent_size = 2
[{package.json, .travis.yml}]
indent_style = space
indent_size = 2

18
.eslintrc Normal file
View File

@@ -0,0 +1,18 @@
{
"extends": [
"next",
"next/core-web-vitals",
"prettier"
],
"rules": {
"@next/next/no-img-element": [
"off"
],
"react/display-name": [
"off"
],
"react/jsx-no-target-blank": [
"off"
]
}
}

1
.github/FUNDING.yml vendored
View File

@@ -1,3 +1,2 @@
# These are supported funding model platforms
github: kamranahmedse

BIN
.github/images/banner.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

1
.github/sponsors/doppler-logo.svg vendored Normal file
View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 3473 1069"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#111;}.cls-3{fill-rule:evenodd;fill:url(#linear-gradient);}</style><linearGradient id="linear-gradient" x1="658.73" y1="777.7" x2="341.45" y2="352.06" gradientTransform="matrix(1, 0, 0, -1, 0, 1070)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#33a9ff"/><stop offset="1" stop-color="#1673ff"/></linearGradient></defs><rect class="cls-1" width="3473" height="1069"/><path class="cls-2" d="M1054.06,633.32q4.93.45,11.23.9H1081q52.55,0,77.7-26.5,25.59-26.49,25.59-73.18,0-48.94-24.25-74.09t-76.79-25.14q-7.18,0-14.82.45-5.78,0-11,.51a3.73,3.73,0,0,0-3.33,3.74Zm202.54-98.78Q1256.6,575,1244,605t-35.92,49.84q-22.9,19.75-56.14,29.63t-74.55,9.88q-18.86,0-44-1.79A338.32,338.32,0,0,1,984,686.3V386.41a3.8,3.8,0,0,1,3.13-3.75,386.34,386.34,0,0,1,47.17-5.27q26.49-1.8,45.36-1.8,40,0,72.3,9,32.79,9,56.14,28.29T1244,462.25Q1256.61,492.33,1256.6,534.54Z"/><path class="cls-2" d="M1397.52,534.54q0,22.89,5.39,41.31a103.13,103.13,0,0,0,16.17,31.87,74.66,74.66,0,0,0,26.05,20.21q15.27,7.19,35,7.18,19.3,0,34.58-7.18a69.47,69.47,0,0,0,26-20.21A91.41,91.41,0,0,0,1557,575.85q5.83-18.42,5.84-41.31T1557,493.23q-5.39-18.86-16.17-31.88a67.73,67.73,0,0,0-26-20.65q-15.27-7.18-34.58-7.19-19.77,0-35,7.64a72.5,72.5,0,0,0-26.05,20.65q-10.33,13-16.17,31.88A145.23,145.23,0,0,0,1397.52,534.54Zm237.57,0q0,40-12.12,70.49-11.68,30.09-32.34,50.74a134.89,134.89,0,0,1-49.4,30.53,176.88,176.88,0,0,1-61.07,10.33A174.23,174.23,0,0,1,1420,686.3a140,140,0,0,1-49.4-30.53q-21.11-20.65-33.23-50.74-12.13-30.53-12.13-70.49t12.58-70q12.57-30.53,33.68-51.18a142,142,0,0,1,49.4-31A171.39,171.39,0,0,1,1480.16,372a174.08,174.08,0,0,1,60.18,10.33,136.87,136.87,0,0,1,49.4,31q21.1,20.65,33.23,51.18Q1635.09,494.58,1635.09,534.54Z"/><path class="cls-2" d="M1810.48,375.59q69.62,0,106.88,24.7,37.28,24.24,37.28,79.92,0,56.13-37.72,81.27-37.73,24.69-107.79,24.69H1791a3.83,3.83,0,0,0-3.83,3.83v96.51a3.83,3.83,0,0,1-3.83,3.83h-66.23V386.83a3.81,3.81,0,0,1,3.1-3.75,400.76,400.76,0,0,1,45.4-5.69Q1791.18,375.59,1810.48,375.59Zm4.49,59.72q-7.63,0-15.27.45-5,.3-9.06.62a3.8,3.8,0,0,0-3.51,3.8v86.28h22q36.38,0,54.79-9.88t18.42-36.82q0-13-4.94-21.55a32.47,32.47,0,0,0-13.48-13.47q-8.54-5.39-21.1-7.19A159.75,159.75,0,0,0,1815,435.31Z"/><path class="cls-2" d="M2123.07,375.59q69.61,0,106.89,24.7,37.27,24.24,37.27,79.92,0,56.13-37.72,81.27-37.73,24.69-107.78,24.69h-18.18a3.83,3.83,0,0,0-3.83,3.83v96.51a3.83,3.83,0,0,1-3.83,3.83h-66.23V386.82a3.8,3.8,0,0,1,3.1-3.74,400.76,400.76,0,0,1,45.4-5.69Q2103.77,375.59,2123.07,375.59Zm4.49,59.72q-7.64,0-15.27.45-5,.3-9.06.62a3.81,3.81,0,0,0-3.51,3.8v86.28h22q36.38,0,54.78-9.88t18.42-36.82q0-13-4.94-21.55a32.47,32.47,0,0,0-13.48-13.47q-8.52-5.39-21.1-7.19A159.75,159.75,0,0,0,2127.56,435.31Z"/><path class="cls-2" d="M2540.5,630.17a1.29,1.29,0,0,1,1.28,1.28v57.62a1.28,1.28,0,0,1-1.28,1.27H2342.25V401.41a3.83,3.83,0,0,1,2.81-3.69l67.25-18.54v251Z"/><path class="cls-2" d="M2618.88,690.34V383a3.84,3.84,0,0,1,3.83-3.83h215a1.28,1.28,0,0,1,1.23,1.64l-16.44,56.26a1.26,1.26,0,0,1-1.22.92H2692.77a3.83,3.83,0,0,0-3.83,3.83v57.24H2803.1a1.27,1.27,0,0,1,1.23,1.63l-16,54.92a1.28,1.28,0,0,1-1.22.92h-94.34a3.82,3.82,0,0,0-3.83,3.83v71.15h154.72a1.28,1.28,0,0,1,1.23,1.63l-16.34,56.27a1.27,1.27,0,0,1-1.22.92Z"/><path class="cls-2" d="M3006,375.59q70.07,0,107.34,25.15,37.28,24.69,37.27,77.22,0,32.79-15.27,53.44-14.82,20.19-43.11,31.87,9.43,11.68,19.76,26.94,10.34,14.82,20.21,31.43,10.32,16.17,19.76,34.13,8.93,16.58,16.65,32.75a1.28,1.28,0,0,1-1.16,1.82H3091.6a1.27,1.27,0,0,1-1.11-.65q-8.37-15-17.15-30.33-8.53-15.72-18-30.53-9-14.82-18-27.84a286.92,286.92,0,0,0-18-24.25h-30.76a3.83,3.83,0,0,0-3.82,3.83V686.51a3.83,3.83,0,0,1-3.83,3.83h-66.23V386.82a3.8,3.8,0,0,1,3.09-3.74,400,400,0,0,1,44.06-5.69Q2986.67,375.59,3006,375.59Zm4.05,59.72q-7.64,0-13.93.45-4,.3-7.71.61a3.82,3.82,0,0,0-3.51,3.81v80.89h19.76q39.51,0,56.58-9.88t17.07-33.67q0-22.9-17.52-32.33Q3043.71,435.31,3010,435.31Z"/><path class="cls-3" d="M307.26,310a1.79,1.79,0,0,0-1.5,2.75l89.7,140.38a14.19,14.19,0,0,0,12,6.58H528.38c39.92,0,64.87,35.28,64.72,74.79s-26.74,74.44-64.72,74.44H404.77a4.71,4.71,0,0,0-4.71,4.75V754.25a4.72,4.72,0,0,0,4.72,4.75H560.62C689.12,759,753,637.1,753.09,534.5S690,310,560.62,310ZM367,609.29H336.16C318.4,609.29,304,626,304,646.71V757.66a1.28,1.28,0,0,0,1.28,1.28h30.88c17.76,0,32.15-16.75,32.15-37.41v-111A1.27,1.27,0,0,0,367,609.29Z"/></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

59
.github/sponsors/oss-logo.svg vendored Normal file
View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 646.6 105.7" style="enable-background:new 0 0 646.6 105.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#104366;}
.st1{fill:#4086C6;}
</style>
<g>
<path class="st0" d="M21.1,79.8c-6.6-3.5-11.7-8.4-15.5-14.6C1.9,59,0,52,0,44.3c0-7.8,1.9-14.7,5.6-20.9
c3.7-6.2,8.9-11.1,15.5-14.6c6.6-3.5,14-5.3,22.2-5.3c8.2,0,15.6,1.8,22.1,5.3c6.6,3.5,11.7,8.4,15.5,14.6
c3.8,6.2,5.6,13.2,5.6,20.9c0,7.8-1.9,14.7-5.6,20.9c-3.8,6.2-8.9,11.1-15.5,14.6c-6.5,3.5-13.9,5.3-22.1,5.3
C35,85.1,27.6,83.4,21.1,79.8z M55.9,66.3c3.8-2.1,6.7-5.1,8.9-9c2.1-3.8,3.2-8.2,3.2-13.1c0-4.9-1.1-9.3-3.2-13.1
c-2.1-3.8-5.1-6.8-8.9-9c-3.8-2.1-8-3.2-12.6-3.2c-4.7,0-8.9,1.1-12.6,3.2s-6.7,5.1-8.9,9c-2.1,3.8-3.2,8.2-3.2,13.1
c0,4.9,1.1,9.3,3.2,13.1c2.1,3.8,5.1,6.8,8.9,9c3.8,2.1,8,3.2,12.6,3.2C47.9,69.5,52.1,68.5,55.9,66.3z"/>
<path class="st0" d="M108.1,82.6c-5.8-1.7-10.5-3.9-14.1-6.6l6.2-13.8c3.4,2.5,7.4,4.5,12.1,6c4.7,1.5,9.3,2.3,14,2.3
c5.2,0,9-0.8,11.5-2.3c2.5-1.5,3.7-3.6,3.7-6.2c0-1.9-0.7-3.4-2.2-4.7c-1.5-1.2-3.3-2.2-5.6-3c-2.3-0.8-5.4-1.6-9.3-2.5
c-6-1.4-11-2.9-14.8-4.3c-3.8-1.4-7.1-3.7-9.9-6.9c-2.7-3.2-4.1-7.4-4.1-12.6c0-4.6,1.2-8.7,3.7-12.5c2.5-3.7,6.2-6.7,11.2-8.9
c5-2.2,11.1-3.3,18.3-3.3c5,0,10,0.6,14.8,1.8c4.8,1.2,9,2.9,12.6,5.2l-5.6,13.9c-7.3-4.1-14.6-6.2-21.9-6.2
c-5.1,0-8.9,0.8-11.3,2.5c-2.4,1.7-3.7,3.8-3.7,6.5c0,2.7,1.4,4.7,4.2,6c2.8,1.3,7.1,2.6,12.9,3.9c6,1.4,11,2.9,14.8,4.3
c3.8,1.4,7.1,3.7,9.9,6.8c2.7,3.1,4.1,7.3,4.1,12.5c0,4.5-1.3,8.6-3.8,12.4c-2.5,3.7-6.3,6.7-11.3,8.9c-5,2.2-11.2,3.3-18.4,3.3
C120,85.1,113.9,84.3,108.1,82.6z"/>
<path class="st0" d="M180.1,82.6c-5.8-1.7-10.5-3.9-14.1-6.6l6.2-13.8c3.4,2.5,7.4,4.5,12.1,6c4.7,1.5,9.3,2.3,14,2.3
c5.2,0,9-0.8,11.5-2.3c2.5-1.5,3.7-3.6,3.7-6.2c0-1.9-0.7-3.4-2.2-4.7c-1.5-1.2-3.3-2.2-5.6-3c-2.3-0.8-5.4-1.6-9.3-2.5
c-6-1.4-10.9-2.9-14.8-4.3c-3.8-1.4-7.1-3.7-9.9-6.9c-2.7-3.2-4.1-7.4-4.1-12.6c0-4.6,1.2-8.7,3.7-12.5c2.5-3.7,6.2-6.7,11.2-8.9
s11.1-3.3,18.3-3.3c5,0,10,0.6,14.8,1.8c4.8,1.2,9,2.9,12.6,5.2l-5.6,13.9c-7.3-4.1-14.6-6.2-21.9-6.2c-5.1,0-8.9,0.8-11.3,2.5
c-2.4,1.7-3.7,3.8-3.7,6.5c0,2.7,1.4,4.7,4.2,6c2.8,1.3,7.1,2.6,12.9,3.9c6,1.4,10.9,2.9,14.8,4.3s7.1,3.7,9.9,6.8
c2.7,3.1,4.1,7.3,4.1,12.5c0,4.5-1.3,8.6-3.8,12.4c-2.5,3.7-6.3,6.7-11.3,8.9c-5,2.2-11.2,3.3-18.4,3.3
C192,85.1,186,84.3,180.1,82.6z"/>
<path class="st1" d="M293.2,79.1c-6.2-3.5-11.1-8.2-14.7-14.3c-3.6-6.1-5.4-12.9-5.4-20.5c0-7.6,1.8-14.5,5.4-20.5
c3.6-6.1,8.5-10.9,14.7-14.3c6.2-3.5,13.2-5.2,20.9-5.2c5.7,0,11,0.9,15.8,2.8c4.8,1.8,8.9,4.6,12.3,8.2l-3.6,3.7
c-6.3-6.2-14.4-9.4-24.3-9.4c-6.6,0-12.6,1.5-18.1,4.5c-5.4,3-9.7,7.2-12.8,12.5s-4.6,11.2-4.6,17.8s1.5,12.5,4.6,17.8
c3.1,5.3,7.3,9.5,12.8,12.5c5.4,3,11.4,4.5,18.1,4.5c9.8,0,17.9-3.2,24.3-9.5l3.6,3.7c-3.4,3.6-7.5,6.4-12.4,8.2
c-4.9,1.9-10.1,2.8-15.7,2.8C306.3,84.3,299.4,82.6,293.2,79.1z"/>
<path class="st1" d="M395.4,30c3.9,3.7,5.9,9.2,5.9,16.4v37.4h-5.4V73.3c-1.9,3.5-4.6,6.2-8.2,8.1c-3.6,1.9-7.9,2.9-13,2.9
c-6.5,0-11.7-1.5-15.5-4.6c-3.8-3.1-5.7-7.1-5.7-12.2c0-4.9,1.8-8.9,5.2-11.9c3.5-3,9.1-4.6,16.8-4.6h20.2v-4.7
c0-5.5-1.5-9.7-4.5-12.5c-3-2.9-7.3-4.3-13-4.3c-3.9,0-7.7,0.7-11.2,2c-3.6,1.4-6.6,3.2-9.1,5.4l-2.8-4.1c2.9-2.6,6.5-4.7,10.6-6.2
c4.1-1.5,8.5-2.2,13-2.2C385.9,24.4,391.5,26.3,395.4,30z M387.9,76.2c3.4-2.3,6-5.5,7.7-9.8V55.3h-20.1c-5.8,0-10,1.1-12.6,3.2
c-2.6,2.1-3.9,5-3.9,8.7c0,3.8,1.4,6.9,4.3,9.1c2.9,2.2,6.9,3.3,12.1,3.3C380.3,79.6,384.5,78.5,387.9,76.2z"/>
<path class="st1" d="M469,28.2c4.4,2.6,7.9,6.1,10.4,10.6c2.5,4.5,3.8,9.7,3.8,15.5c0,5.8-1.3,11-3.8,15.5
c-2.5,4.6-6,8.1-10.4,10.6c-4.4,2.5-9.4,3.8-14.9,3.8c-5.2,0-9.9-1.2-14.1-3.7c-4.2-2.4-7.5-5.9-9.8-10.2v35.3h-5.6V24.8h5.4v13.9
c2.3-4.5,5.6-8,9.9-10.6c4.2-2.5,9-3.8,14.3-3.8C459.6,24.4,464.6,25.7,469,28.2z M465.9,76c3.6-2.1,6.5-5,8.5-8.8
c2.1-3.8,3.1-8.1,3.1-12.9c0-4.8-1-9.1-3.1-12.9c-2.1-3.8-4.9-6.7-8.5-8.8c-3.6-2.1-7.7-3.2-12.2-3.2c-4.5,0-8.6,1.1-12.1,3.2
c-3.6,2.1-6.4,5-8.5,8.8c-2.1,3.8-3.1,8.1-3.1,12.9c0,4.8,1,9.1,3.1,12.9c2.1,3.8,4.9,6.7,8.5,8.8c3.6,2.1,7.6,3.2,12.1,3.2
C458.3,79.1,462.3,78.1,465.9,76z"/>
<path class="st1" d="M500.3,9.2c-0.9-0.9-1.4-1.9-1.4-3.2c0-1.3,0.5-2.4,1.4-3.3c0.9-0.9,2-1.4,3.3-1.4c1.3,0,2.4,0.4,3.3,1.3
c0.9,0.9,1.4,1.9,1.4,3.2c0,1.3-0.5,2.4-1.4,3.3c-0.9,0.9-2,1.4-3.3,1.4C502.3,10.5,501.2,10.1,500.3,9.2z M500.7,24.8h5.6v58.9
h-5.6V24.8z"/>
<path class="st1" d="M559.4,80c-1.4,1.4-3.2,2.4-5.4,3.1c-2.1,0.7-4.4,1.1-6.7,1.1c-5.1,0-9.1-1.4-11.9-4.2
c-2.8-2.8-4.2-6.8-4.2-11.8V29.7h-10.8v-4.9h10.8V12h5.6v12.9h18.7v4.9H537v37.9c0,3.8,0.9,6.8,2.8,8.8c1.8,2,4.6,3,8.2,3
c3.7,0,6.7-1.1,9.1-3.3L559.4,80z"/>
<path class="st1" d="M611.8,30c3.9,3.7,5.9,9.2,5.9,16.4v37.4h-5.4V73.3c-1.9,3.5-4.6,6.2-8.2,8.1c-3.6,1.9-7.9,2.9-13,2.9
c-6.5,0-11.7-1.5-15.5-4.6c-3.8-3.1-5.7-7.1-5.7-12.2c0-4.9,1.8-8.9,5.2-11.9c3.5-3,9.1-4.6,16.8-4.6H612v-4.7
c0-5.5-1.5-9.7-4.5-12.5c-3-2.9-7.3-4.3-13-4.3c-3.9,0-7.7,0.7-11.2,2c-3.6,1.4-6.6,3.2-9.1,5.4l-2.8-4.1c2.9-2.6,6.5-4.7,10.6-6.2
c4.1-1.5,8.5-2.2,13-2.2C602.3,24.4,607.9,26.3,611.8,30z M604.3,76.2c3.4-2.3,6-5.5,7.7-9.8V55.3h-20.1c-5.8,0-10,1.1-12.6,3.2
c-2.6,2.1-3.9,5-3.9,8.7c0,3.8,1.4,6.9,4.3,9.1c2.9,2.2,6.9,3.3,12.1,3.3C596.7,79.6,600.9,78.5,604.3,76.2z"/>
<path class="st1" d="M640.9,0h5.6v83.8h-5.6V0z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -0,0 +1,11 @@
<svg width="1354" height="420" viewBox="0 0 1354 420" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1354" height="420" rx="20" fill="white"/>
<path d="M434.751 133.122H466.637L489.595 227.729C493.852 245.585 494.697 256.219 494.697 256.219H495.128C495.128 256.219 496.61 245.808 500.867 227.729L522.757 133.122H558.9L582.066 227.729C586.53 246.223 587.598 256.219 587.598 256.219H588.236C588.236 256.219 588.666 246.223 592.907 227.729L615.02 133.122H646.907L606.523 288.313H571.017L546.576 194.344C541.474 173.936 541.044 164.801 541.044 164.801H540.614C540.614 164.801 540.183 173.936 535.512 194.344L512.553 288.313H475.996L434.751 133.122Z" fill="black"/>
<path d="M641.583 231.934C641.583 196.428 664.541 173.47 699.202 173.47C733.639 173.47 756.597 196.428 756.597 231.934C756.597 267.647 733.639 290.828 699.202 290.828C664.557 290.812 641.583 267.647 641.583 231.934ZM726.832 231.934C726.832 208.976 715.783 195.998 699.202 195.998C681.346 195.998 671.349 210.458 671.349 231.934C671.349 255.323 682.398 268.284 699.202 268.284C717.058 268.284 726.832 253.824 726.832 231.934Z" fill="black"/>
<path d="M770.836 175.21H799.103V196.048H799.741C804.635 185.207 816.322 174.365 836.299 174.365C839.695 174.365 841.831 174.796 843.314 175.21V203.478H842.469C842.469 203.478 839.918 202.633 832.903 202.633C811.013 202.633 799.103 215.594 799.103 239.828V288.295H770.836V175.21Z" fill="black"/>
<path d="M856.5 133.122H884.767V182.865C884.767 212.2 884.336 217.509 884.336 217.509H884.767L926.857 175.212H962.139L912.843 224.11L970.031 288.313H936.646L895.401 241.536L884.767 251.946V288.297H856.5V133.122Z" fill="black"/>
<path d="M970.444 211.285C970.444 163.455 1000.21 131.569 1044.85 131.569C1089.49 131.569 1119.26 163.455 1119.26 211.285C1119.26 259.114 1089.49 291.001 1044.85 291.001C1000.21 291.001 970.444 259.114 970.444 211.285ZM1088.42 211.285C1088.42 178.761 1071 156.855 1044.84 156.855C1018.67 156.855 1001.26 178.761 1001.26 211.285C1001.26 243.809 1018.69 265.715 1044.84 265.715C1070.98 265.715 1088.42 243.809 1088.42 211.285Z" fill="black"/>
<path d="M1130.08 236.656H1162.4C1162.4 254.943 1174.95 265.146 1194.08 265.146C1210.23 265.146 1221.29 257.063 1221.29 245.584C1221.29 232.622 1212.79 229.21 1185.79 223.901C1161.12 219.007 1134.98 210.716 1134.98 178.399C1134.98 151.408 1157.93 131 1193.01 131C1229.57 131 1252.11 150.132 1252.11 179.037H1219.79C1219.79 165.007 1208.95 156.286 1193.01 156.286C1176.86 156.286 1166.86 164.146 1166.86 175.625C1166.86 187.742 1173.88 192.413 1195.56 196.878C1227.65 203.685 1254.02 207.288 1254.02 243.001C1254.02 271.3 1229.36 290.432 1193.01 290.432C1156.02 290.432 1130.08 268.957 1130.08 236.656Z" fill="black"/>
<path d="M100 210C100 214.824 101.269 219.647 103.723 223.793L148.231 300.878C152.8 308.747 159.739 315.178 168.369 318.055C185.377 323.724 202.977 316.447 211.354 301.893L222.1 283.278L179.708 210L224.47 132.408L235.216 113.792C238.431 108.208 242.747 103.638 247.824 100H243.17H178.777C166.677 100 155.508 106.431 149.5 116.923L103.723 196.208C101.269 200.354 100 205.177 100 210Z" fill="#6363F1"/>
<path d="M353.847 210C353.847 205.177 352.578 200.353 350.124 196.207L305.024 118.107C296.647 103.638 279.047 96.3608 262.039 101.945C253.409 104.822 246.47 111.253 241.901 119.122L231.747 136.638L274.139 210L229.378 287.592L218.632 306.208C215.416 311.708 211.101 316.362 206.024 320H210.678H275.07C287.17 320 298.34 313.569 304.347 303.077L350.124 223.792C352.578 219.646 353.847 214.823 353.847 210Z" fill="#6363F1"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -1,4 +1,4 @@
name: Deployment to GitHub Pages
name: Deployment to GH Pages
on:
push:
branches: [ master ]
@@ -14,16 +14,15 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
node-version: 14
- name: Setup Environment
run: |
npm install -g yarn
yarn install
npm install
- name: Generate meta and builld
run: |
yarn meta
yarn build
- name: Deploy to GitHub Pages
npm run meta
npm run build
- name: Deploy to GH Pages
run: |
git config user.email "kamranahmed.se@gmail.com"
git config user.name "Kamran Ahmed"

48
.gitignore vendored
View File

@@ -1,14 +1,36 @@
_*
Thumbs.db
.DS_Store
.idea
.next
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
out
.env
build
node_modules
yarn-error.log
*.sublime-project
*.sublime-workspace
config/*.json
!config/dev.json
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.idea
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# vercel
.vercel

5
.prettierrc Normal file
View File

@@ -0,0 +1,5 @@
{
"semi": true,
"singleQuote": true,
"tabWidth": 2
}

View File

@@ -73,4 +73,4 @@ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.ht
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
https://www.contributor-covenant.org/faq

View File

@@ -1,22 +0,0 @@
import { AboutHeaderWrap } from './style';
import siteConfig from "content/site";
const AboutHeader = () => (
<AboutHeaderWrap>
<div className="container container-small">
<div className="author-info">
<img className='author-img d-none d-sm-none d-md-block d-lg-block d-xl-block' src="/kamran.jpeg" />
<div className="author-msg">
<h1>Hello, I'm Kamran Ahmed.</h1>
<p>I created <span className='flow-black'>roadmap.sh</span> to help developers find their path if they are confused and help them grow in their career.</p>
<div className="author-links">
<a href={`https://twitter.com/${siteConfig.twitter}`} target="_blank">@kamranahmedse</a>
<a href="mailto:kamran@roadmap.sh">kamran@roadmap.sh</a>
</div>
</div>
</div>
</div>
</AboutHeaderWrap>
);
export default AboutHeader;

View File

@@ -1,49 +0,0 @@
import styled from 'styled-components';
export const AboutHeaderWrap = styled.div`
text-align: left;
padding: 70px 0;
margin: 0 auto;
.author-info {
display: flex;
align-items: center;
flex-direction: row;
}
h1 {
font-weight: 700;
}
p {
font-size: 20px;
color: #333;
font-weight: 400;
margin-bottom: 0;
line-height: 35px;
}
a {
font-weight: 700;
color: #000;
}
.author-img {
height: 160px;
margin-right: 25px;
margin-top: 8px;
border-radius: 9px;
}
.author-links a {
display: inline-block;
margin-right: 5px;
background: #2d2d2d;
color: white;
padding: 5px 10px;
font-weight: 500;
margin-top: 12px;
border-radius: 5px;
text-decoration: none;
}
`;

View File

@@ -1,54 +0,0 @@
import styled from 'styled-components';
export const BadgesList = styled.p`
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 0;
`;
export const PrimaryBadge = styled.span`
font-size: 11px;
font-weight: 600;
background: #2929ff;
color: white;
padding: 2px 8px;
border-radius: 4px;
text-transform: uppercase;
display: inline-flex;
align-items: center;
justify-content: center;
margin-left: 10px;
svg {
height: 11px !important;
margin-right: 5px;
&.fa-clock {
height: 10px !important;
}
}
`;
export const SecondaryBadge = styled(PrimaryBadge)`
background: #696969;
color: white;
`;
export const InfoBadge = styled(PrimaryBadge)`
background: #039640;
color: white;
`;
export const DarkBadge = styled(PrimaryBadge)`
background: #101010;
color: white;
`;
export const BadgeLink = styled.a`
text-decoration: none;
&:hover {
text-decoration:none;
}
`;

View File

@@ -0,0 +1,60 @@
import { Box, Container, Flex, Heading, Image, Link, Text } from '@chakra-ui/react';
import React from 'react';
type ContentPageHeaderProps = {
formattedDate: string;
title: string;
subtitle: string;
author?: {
name: string;
twitter: string;
picture: string;
},
subLink?: {
text: string;
url: string;
}
};
export function ContentPageHeader(props: ContentPageHeaderProps) {
const { title, subtitle, author = null, formattedDate, subLink = null } = props;
return (
<Box pt={['35px', '35px', '70px']} pb={['35px', '35px', '55px']} borderBottomWidth={1} mb='30px'>
<Container maxW='container.md' position='relative' textAlign={['left', 'left', 'center']}>
<Flex alignItems='center' justifyContent={['flex-start', 'flex-start', 'center']}
fontSize={['12px', '12px', '14px']}>
{author?.name && (
<>
<Link
d={['none', 'flex', 'flex']}
target='_blank'
href={`https://twitter.com/${author.twitter}`}
alignItems='center'
fontWeight={600}
color='gray.500'
>
<Image alt={''} rounded={'full'} mr='7px' w='22px' src={author.picture} />
{author.name}
</Link>
<Text d={['none', 'inline', 'inline']} mx='7px' color='gray.500' as='span'>&middot;</Text>
</>
)}
<Text color='gray.500' as='span'>{formattedDate}</Text>
{subLink?.text && (
<>
<Text d={['none', 'none', 'inline']} mx='7px' color='gray.500' as='span'>&middot;</Text>
<Link d={['none', 'none', 'inline']} color='blue.500' fontWeight={500}
href={subLink.url} target={'_blank'}>{subLink.text}</Link>
</>
)}
</Flex>
<Heading as='h1' color='black' fontSize={['30px', '30px', '45px']} lineHeight={['40px', '40px', '53px']}
fontWeight={700} my={['5px', '5px', '10px']}>{title}</Heading>
<Text fontSize={['14px', '14px', '16px']} color='gray.700'>{subtitle}</Text>
</Container>
</Box>
);
}

37
components/custom-ad.tsx Normal file
View File

@@ -0,0 +1,37 @@
export const CustomAd = () => {
return (
<div id='carbonads'>
<span>
<span className='carbon-wrap'>
<a
href='https://freemote.com/strategy?sl=roadmap'
className='carbon-img'
target='_blank'
>
<img
src='/fm-img.png'
alt='Custom Logo'
height='100'
width='130'
style={{ maxWidth: '130px', border: 'none' }}
/>
</a>
<a
href='https://freemote.com/strategy?sl=roadmap'
className='carbon-text'
target='_blank'
>
He Went from ZERO TO $74,000 as a Full Time Developer in 7 Weeks
</a>
</span>
<a
href='https://github.com/sponsors/kamranahmedse'
className='carbon-poweredby'
target='_blank'
>
Sponsored by
</a>
</span>
</div>
);
};

View File

@@ -1,133 +0,0 @@
import { useState } from 'react';
import classNames from 'classnames';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faFacebookSquare, faTwitterSquare, faRedditSquare, faGithubSquare } from '@fortawesome/free-brands-svg-icons'
import {
PageHeader,
RoadmapMeta,
ShareRoadmap,
Sidebar,
Summary,
SummaryContainer,
MobileNavHeader,
SidebarButton,
MobileSidebar,
MobileSidebarWrap,
DesktopSidebarWrap,
PageTitle,
PageDetail
} from './style';
import { faBars } from '@fortawesome/free-solid-svg-icons'
import { getFacebookShareUrl } from 'lib/url';
import { ShareIcon } from 'components/share-icon';
import { getRedditShareUrl, getTwitterShareUrl } from 'lib/url';
import siteConfig from "content/site";
import MdRenderer from 'components/md-renderer';
const DetailedRoadmap = ({ roadmap }) => {
const [menuActive, setMenuState] = useState(false);
const {
sidebar = {},
page: currentPage = {},
author = {}
} = roadmap;
const roadmapPages = Object.keys(sidebar || {}).map((groupTitle, groupCounter) => {
if (groupTitle.startsWith('_')) {
return;
}
// @todo remove it after completing the frontend roadmap
const isInProgress = groupCounter !== 0;
return (
<div className={`links-group ${isInProgress ? 'in-progress' : ''}`} key={groupTitle}>
<h3>
{ groupTitle }
{ isInProgress && <span className='badge badge-warning progress-badge'>In Progress</span> }
</h3>
<ul>
{ sidebar[groupTitle].map(page => {
const isActivePage = page.url === currentPage.url;
// e.g. /frontend should mark `/frontend/landscape` as active
const isSummaryPage = page.url === `${currentPage.url}/summary`;
return (
<li className={classNames({ active: isActivePage || isSummaryPage })} key={page.url}>
<a href={ page.url }>
<span className="bullet"></span>
{ page.title }
</a>
</li>
);
}) }
</ul>
</div>
);
});
const filePath = currentPage.path.replace(/^\//, '');
const RoadmapContent = require(`../../content/${filePath}`).default;
return (
<SummaryContainer>
<PageHeader className="border-top border-bottom text-center text-md-left">
<div className="container d-flex align-items-center flex-column flex-md-row">
<RoadmapMeta>
<h3>{ roadmap.title }</h3>
<p>
Roadmap contributed by <a href={ author.url } target="_blank">{ author.name }</a>
{ roadmap.contributorsCount > 1 && ` and <a href="${roadmap.contributorsUrl}">${roadmap.contributorsCount} others</a>`}
</p>
</RoadmapMeta>
<ShareRoadmap className="mt-2 mt-md-0">
<ShareIcon href={ siteConfig.url.repo } target="_blank">
<FontAwesomeIcon icon={ faGithubSquare } />
</ShareIcon>
<ShareIcon href={ getFacebookShareUrl({ text: roadmap.title, url: roadmap.url }) } target="_blank">
<FontAwesomeIcon icon={ faFacebookSquare } />
</ShareIcon>
<ShareIcon href={ getTwitterShareUrl({ text: roadmap.title, url: roadmap.url }) } target="_blank">
<FontAwesomeIcon icon={ faTwitterSquare } />
</ShareIcon>
<ShareIcon href={ getRedditShareUrl({ text: roadmap.title, url: roadmap.url }) } target="_blank">
<FontAwesomeIcon icon={ faRedditSquare } />
</ShareIcon>
</ShareRoadmap>
</div>
</PageHeader>
<MobileNavHeader className="border-bottom d-block d-md-none">
<div className="container">
<SidebarButton onClick={() => setMenuState((prevMenuActive) => !prevMenuActive)}>
<FontAwesomeIcon icon={ faBars } />
{ currentPage.title }
</SidebarButton>
</div>
<MobileSidebarWrap className={classNames({ visible: menuActive })}>
<div className="container">
<MobileSidebar>
{ roadmapPages }
</MobileSidebar>
</div>
</MobileSidebarWrap>
</MobileNavHeader>
<Summary className="container">
<DesktopSidebarWrap className="d-none d-md-block">
<Sidebar>
{ roadmapPages }
</Sidebar>
</DesktopSidebarWrap>
<PageDetail>
<PageTitle>{ currentPage.title }</PageTitle>
<MdRenderer>
<RoadmapContent />
</MdRenderer>
</PageDetail>
</Summary>
</SummaryContainer>
)
};
export default DetailedRoadmap;

View File

@@ -1,199 +0,0 @@
import styled from 'styled-components';
export const SummaryContainer = styled.div``;
export const Summary = styled.div`
text-align: left;
min-height: 400px;
display: flex;
.container {
position: relative;
}
`;
export const PageHeader = styled.div`
padding-top: 20px;
padding-bottom: 20px;
h3 {
margin-bottom: 4px;
font-weight: 600;
font-size: 21px;
}
p {
margin-bottom: 0;
font-size: 14px;
color: #696969;
a {
color: #101010;
}
}
`;
export const RoadmapMeta = styled.div`
flex: 1;
`;
export const ShareRoadmap = styled.div`
display: flex;
align-items: center;
a {
margin-bottom: 0;
& + a {
margin-left: 5px;
}
}
`;
export const MobileNavHeader = styled.div`
padding: 10px 0;
display: flex;
align-items: center;
position: relative;
`;
export const SidebarButton = styled.button`
background: transparent;
border: none !important;
box-shadow: none !important;
outline: none !important;
-webkit-appearance: none;
display: flex;
align-items: center;
svg {
margin-right: 10px;
}
`;
export const PageDetail = styled.div`
padding: 25px 0 100px;
`;
export const PageTitle = styled.h1`
font-size: 40px;
font-weight: 700;
`;
export const Sidebar = styled.div`
padding-bottom: 150px;
ul {
list-style: none;
margin: 0;
padding: 0;
}
.bullet {
display: inline-block;
margin-right: 7px;
width: 7px;
height: 7px;
min-width: 7px;
border-radius: 100%;
background: #efefef;
transform: translateX(-4px);
transition: background 0.5s ease;
}
.links-group {
padding: 30px 0 10px;
width: 260px;
h3 {
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
padding-left: 20px;
}
}
.progress-badge {
position: relative;
top: -2px;
margin-left: 5px;
}
.links-group.in-progress {
opacity: 0.3;
}
.links-group li {
list-style: none;
margin: 7px 0;
a {
font-size: 14px;
font-weight: normal;
color: #696969;
}
.bullet {
display: inline-block;
margin-right: 12px;
width: 7px;
height: 7px;
min-width: 7px;
border-radius: 100%;
background: #efefef;
transform: translateX(-4px);
transition: background 0.5s ease;
}
&.active a {
color: #101010;
}
&.active .bullet {
background: #101010;
}
}
`;
export const DesktopSidebarWrap = styled.div`
border-left: 1px solid #efefef;
${Sidebar} {
position: sticky;
top: 0;
background: white;
}
`;
export const MobileSidebarWrap = styled.div`
position: absolute;
z-index: 999;
background: white;
width: 100%;
left: 0;
bottom: 100%;
overflow-y: scroll;
box-shadow: rgba(0, 0, 0, 0.1) 0 10px 20px;
top: calc(100% + 1px);
transition: bottom 0.5s ease 0s;
&.visible {
bottom: -50vh;
}
`;
export const MobileSidebar = styled(Sidebar)`
border-left: 1px solid #efefef;
margin-left: 12px;
padding-bottom: 20px;
.links-group {
width: auto;
}
.progress-badge {
position: relative;
top: -2px;
margin-left: 5px;
}
`;

View File

@@ -0,0 +1,46 @@
import { Box, Link, Text } from '@chakra-ui/react';
type DimmedMoreProps = {
text: string;
href: string;
};
export function DimmedMore(props: DimmedMoreProps) {
const { text, href } = props;
return (
<Box position='relative' textAlign='center' bottom='20px'>
<Box
opacity={1}
pointerEvents='none'
position='absolute'
bottom={0}
height='200px'
width='100%'
background='linear-gradient(180deg, rgb(255 255 255 / 40%), white)'
/>
<Link
rounded='20px'
display='inline'
bg='green.600'
color='white'
p='7px 20px'
href={href}
fontWeight={800}
fontSize='11px'
textTransform='uppercase'
my='25px'
position='relative'
_hover={{
textDecoration: 'none',
'& .forward-arrow': {
transform: 'translateX(3px)'
}
}}>
{text}
<Text d='inline-block' as='span' transition='200ms' ml='4px' className='forward-arrow'>&rarr;</Text>
</Link>
</Box>
);
}

View File

@@ -1,16 +0,0 @@
import { FaqContainer } from './style';
import MdRenderer from 'components/md-renderer';
const AboutPage = require(`../../content/pages/about.md`).default;
const FaqList = () => (
<FaqContainer className='border-top bg-light'>
<div className="container container-small">
<MdRenderer>
<AboutPage />
</MdRenderer>
</div>
</FaqContainer>
);
export default FaqList;

View File

@@ -1,25 +0,0 @@
import styled from 'styled-components';
export const FaqContainer = styled.div`
padding: 40px 0;
h4 {
margin-top: 30px;
font-weight: 700;
}
h4:first-child {
margin-top: 0;
}
p {
color: #333;
}
p:last-child {
margin-bottom: 0;
}
.container {
}
`;

View File

@@ -1,25 +0,0 @@
import Link from 'next/link';
import { FeaturedContentWrap } from './style';
import FeaturedGuide from 'components/featured-guide';
import { getFeaturedGuides } from 'lib/guide';
const FeaturedGuides = () => (
<FeaturedContentWrap className="featured-content-wrap">
<div className="container">
<p className='border-through featured-separator'>
<span>
Guides mostly visited by the community&nbsp;
<a href="/guides" className="dark-link d-none d-sm-none d-md-inline d-xl-inline">View all Guides &rarr;</a>
</span>
</p>
<div className="swim-lane row">
{ getFeaturedGuides()
.map(guide => (
<FeaturedGuide guide={ guide } key={ guide.url } />
)) }
</div>
</div>
</FeaturedContentWrap>
);
export default FeaturedGuides;

View File

@@ -1,16 +0,0 @@
import { FeaturedWrap } from './style';
import FeaturedGuides from './guides';
import FeaturedRoadmaps from './roadmaps';
const FeaturedContent = (props) => (
<FeaturedWrap className="border-top bg-light">
<FeaturedRoadmaps />
<FeaturedGuides />
</FeaturedWrap>
);
FeaturedContent.defaultProps = {
className: '',
};
export default FeaturedContent;

View File

@@ -1,27 +0,0 @@
import { FeaturedContentWrap } from './style';
import roadmaps from 'content/roadmaps';
import FeaturedRoadmap from 'components/featured-roadmap';
const FeaturedRoadmaps = () => (
<FeaturedContentWrap className="featured-content-wrap">
<div className="container">
<div className="featured-head">
<p className="border-through featured-separator">
<span>
Roadmaps mostly visited by the community&nbsp;
<a href='/roadmaps' className="dark-link d-none d-sm-none d-md-inline d-xl-inline">View all Roadmaps &rarr;</a>
</span>
</p>
</div>
<div className="swim-lane row">
{ roadmaps
.filter(({ featured }) => featured)
.map(roadmap => (
<FeaturedRoadmap roadmap={ roadmap } key={ roadmap.url } />
)) }
</div>
</div>
</FeaturedContentWrap>
);
export default FeaturedRoadmaps;

View File

@@ -1,110 +0,0 @@
import styled from 'styled-components';
export const FeaturedWrap = styled.div`
padding: 30px 0 50px;
`;
export const FeaturedContentWrap = styled.div`
.featured-head {
text-align: center;
display: block;
h3 {
font-weight: 700;
font-size: 35px;
margin-bottom: 30px;
}
}
.featured-separator {
font-size: 16px;
margin-bottom: 40px;
margin-top: 25px;
color: #999;
span {
background: #f8f9fa;
}
a {
background: black;
color: white;
padding: 3px 8px;
border-radius: 6px;
font-size: 14px;
text-decoration: none;
margin-left: 5px;
}
}
.swim-lane {
.featured-block {
}
}
.guide-item {
border-bottom: 1px solid #dee2e6;
padding: 15px 10px;
p {
margin-bottom: 0;
font-size: 15px;
color: #999;
}
&:last-child {
border-bottom: none;
}
}
.journey-block {
a {
border: 1px solid #f7f7f7;
display: block;
text-decoration: none;
color: #000000;
background: #ffffff;
box-shadow: rgba(0, 0, 0, 0.12) 0 5px 10px;
transition: box-shadow 0.2s ease 0s;
cursor: pointer;
margin-bottom: 32px;
border-radius: 0 0 10px 10px;
&:hover {
box-shadow: rgba(0, 0, 0, 0.12) 0 30px 60px;
img {
filter: grayscale(0);
}
}
}
.journey-meta {
padding: 18px 25px 20px;
h4 {
line-height: 27px;
font-weight: 600;
margin-bottom: 0;
font-size: 18px;
white-space: nowrap;
text-overflow: ellipsis;
flex: 0 0 auto;
overflow: hidden;
}
p {
font-size: 15px;
line-height: 25px;
color: #999999;
margin-bottom: 0;
}
}
img {
width: 100%;
filter: grayscale(1);
border-radius: 10px 10px 0 0;
}
}
`;

View File

@@ -1,25 +0,0 @@
import formatDate from 'date-fns/format';
import { Author, AuthorImage, AuthorName, BlockLink, BlockMeta, BlockSubtitle, BlockTitle, PublishDate } from './style';
import { findByUsername } from 'lib/author';
const FeaturedGuide = ({ guide }) => {
const author = findByUsername(guide.author) || {};
return (
<div className='col-xl-4 col-lg-6 col-md-6 col-sm-12 col-12 grid-item-container'>
<BlockLink href={guide.url}>
<BlockTitle>{guide.title}</BlockTitle>
<BlockSubtitle>{guide.featuredDescription || guide.description}</BlockSubtitle>
<BlockMeta>
<Author>
<AuthorImage src={author.picture} />
<AuthorName>{author.name}</AuthorName>
</Author>
<PublishDate>{formatDate(new Date(guide.createdAt), 'MMMM d, yyyy')}</PublishDate>
</BlockMeta>
</BlockLink>
</div>
);
};
export default FeaturedGuide;

View File

@@ -1,65 +0,0 @@
import styled from 'styled-components';
export const BlockLink = styled.a`
border: 1px solid #f7f7f7;
display: block;
text-decoration: none;
color: #000000;
background: #ffffff;
padding: 25px 25px 22px;
border-radius: 10px;
box-shadow: rgba(0, 0, 0, 0.12) 0 5px 10px;
transition: box-shadow 0.2s ease 0s;
cursor: pointer;
margin-bottom: 32px;
&:hover {
text-decoration: none;
color: #000000;
box-shadow: rgba(0, 0, 0, 0.12) 0 30px 60px;
}
`;
export const BlockTitle = styled.h4`
line-height: 27px;
font-weight: 600;
font-size: 22px;
white-space: nowrap;
text-overflow: ellipsis;
flex: 0 0 auto;
overflow: hidden;
`;
export const BlockSubtitle = styled.p`
font-size: 15px;
line-height: 25px;
color: #999999;
margin-bottom: 0;
`;
export const BlockMeta = styled.div`
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 19px;
`;
export const PublishDate = styled.time`
font-size: 13px;
color: #999;
`;
export const Author = styled.div`
display: flex;
align-items: center;
font-size: 15px;
color: #999;
`;
export const AuthorImage = styled.img`
height: 22px;
width: 22px;
border-radius: 100%;
margin-right: 10px;
`;
export const AuthorName = styled.div``;

View File

@@ -1,12 +0,0 @@
import { BlockLink, BlockSubtitle, BlockTitle } from './style';
const FeaturedRoadmap = ({ roadmap }) => (
<div className='col-xl-4 col-lg-4 col-md-6 col-sm-12 col-12 grid-item-container'>
<BlockLink href={roadmap.url}>
<BlockTitle>{roadmap.title}</BlockTitle>
<BlockSubtitle>{roadmap.featuredDescription || roadmap.description}</BlockSubtitle>
</BlockLink>
</div>
);
export default FeaturedRoadmap;

View File

@@ -1,38 +0,0 @@
import styled from 'styled-components';
export const BlockLink = styled.a`
border: 1px solid #f7f7f7;
display: block;
text-decoration: none;
color: #000000;
background: #ffffff;
padding: 26px 25px 25px;
border-radius: 10px;
box-shadow: rgba(0, 0, 0, 0.12) 0 5px 10px;
transition: box-shadow 0.2s ease 0s;
cursor: pointer;
margin-bottom: 32px;
&:hover {
text-decoration: none;
color: #000000;
box-shadow: rgba(0, 0, 0, 0.12) 0 30px 60px;
}
`;
export const BlockTitle = styled.h4`
line-height: 27px;
font-weight: 600;
font-size: 22px;
white-space: nowrap;
text-overflow: ellipsis;
flex: 0 0 auto;
overflow: hidden;
`;
export const BlockSubtitle = styled.p`
font-size: 15px;
line-height: 25px;
color: #999999;
margin-bottom: 0;
`;

69
components/footer.tsx Normal file
View File

@@ -0,0 +1,69 @@
import { Box, Container, Flex, Image, Link, Stack, Text } from '@chakra-ui/react';
import siteConfig from '../content/site.json';
import { CustomAd } from './custom-ad';
function NavigationLinks() {
return (
<>
<Stack isInline d={['none', 'none', 'flex']} color='gray.400' fontWeight={600} spacing='30px'>
<Link _hover={{ color: 'white' }} href='/roadmaps'>Roadmaps</Link>
<Link _hover={{ color: 'white' }} href='/guides'>Guides</Link>
<Link _hover={{ color: 'white' }} href='/watch'>Videos</Link>
<Link _hover={{ color: 'white' }} href='/about'>About</Link>
<Link _hover={{ color: 'white' }} href={siteConfig.url.youtube} target='_blank'>YouTube</Link>
</Stack>
<Stack d={['flex', 'flex', 'none']} color='gray.400' fontWeight={600} spacing={0}>
<Link py='7px' borderBottomWidth={1} borderBottomColor='gray.800' _hover={{ color: 'white' }}
href='/roadmaps'>Roadmaps</Link>
<Link py='7px' borderBottomWidth={1} borderBottomColor='gray.800' _hover={{ color: 'white' }}
href='/guides'>Guides</Link>
<Link py='7px' borderBottomWidth={1} borderBottomColor='gray.800' _hover={{ color: 'white' }}
href='/watch'>Videos</Link>
<Link py='7px' borderBottomWidth={1} borderBottomColor='gray.800' _hover={{ color: 'white' }}
href='/thanks'>Thanks</Link>
<Link py='7px' borderBottomWidth={1} borderBottomColor='gray.800' _hover={{ color: 'white' }}
href='/about'>About</Link>
<Link py='7px' _hover={{ color: 'white' }} target='_blank'
href={siteConfig.url.youtube}>YouTube</Link>
</Stack>
</>
);
}
export function Footer() {
return (
<Box bg='brand.hero' p={['25px 0', '25px 0', '40px 0']}>
<Container maxW='container.md'>
<NavigationLinks />
<Box mt={['40px', '40px', '50px']} mb='40px' maxW='500px'>
<Flex spacing={0} alignItems='center' color='gray.400'>
<Link d='flex' alignItems='center' fontWeight={600} _hover={{ textDecoration: 'none', color: 'white' }}
href='/'>
<Image alt='' h='25px' w='25px' src='/logo.svg' mr='6px' />
roadmap.sh
</Link>
<Text as='span' mx='7px'>by</Text>
<Link bg='blue.500' px='6px' py='2px' rounded='4px' color='white' fontWeight={600} fontSize='13px'
_hover={{ textDecoration: 'none', bg: 'blue.600' }} href={siteConfig.url.twitter}
target='_blank'>@kamranahmedse</Link>
</Flex>
<Text my='15px' fontSize='14px' color='gray.500'>Community created roadmaps, articles, resources and
journeys to help you choose your path and grow in your career.</Text>
<Text fontSize='14px' color='gray.500'>
<Text as='span' mr='10px'>&copy; roadmap.sh</Text>&middot;
<Link href='/about' _hover={{ textDecoration: 'none', color: 'white' }} color='gray.400'
mx='10px'>FAQs</Link>&middot;
<Link href='/terms' _hover={{ textDecoration: 'none', color: 'white' }} color='gray.400'
mx='10px'>Terms</Link>&middot;
<Link href='/privacy' _hover={{ textDecoration: 'none', color: 'white' }} color='gray.400'
mx='10px'>Privacy</Link>
</Text>
</Box>
</Container>
</Box>
);
}

View File

@@ -0,0 +1,119 @@
import { useState } from 'react';
import { HamburgerIcon } from '@chakra-ui/icons';
import { Box, CloseButton, Container, Flex, IconButton, Image, Link, Stack, Text } from '@chakra-ui/react';
import RoadmapLogo from '../components/icons/roadmap.svg';
import siteConfig from '../content/site.json';
type MenuLinkProps = {
text: string;
link: string;
};
function MenuLink(props: MenuLinkProps) {
const { text, link } = props;
return <Link
borderBottomWidth={0}
borderBottomColor='gray.500'
_hover={{ textDecoration: 'none', borderBottomColor: 'white' }}
fontWeight={500}
href={link}
>
{text}
</Link>;
}
function DesktopMenuLinks() {
return (
<Stack d={['none', 'flex', 'flex']} shouldWrapChildren isInline spacing='15px' alignItems='center' color='gray.50'
fontSize='15px'>
<MenuLink text={'Roadmaps'} link={'/roadmaps'} />
<MenuLink text={'Guides'} link={'/guides'} />
<MenuLink text={'Videos'} link={'/watch'} />
<MenuLink text={'Thanks'} link={'/thanks'} />
<Link ml='10px' bgGradient='linear(to-l, yellow.700, red.600)' p='7px 10px' rounded='4px'
_hover={{ textDecoration: 'none', bgGradient: 'linear(to-l, red.800, yellow.700)' }}
fontWeight={500} href={'/signup'}>Subscribe</Link>
</Stack>
);
}
function MobileMenuLinks() {
const [isOpen, setIsOpen] = useState(false);
return (
<>
<IconButton
rounded='5px'
padding={0}
aria-label={'Menu'}
d={['block', 'none', 'none']}
icon={<HamburgerIcon color='white' w='25px' height='25px' />}
color='white'
cursor='pointer'
h='auto'
bg='transparent'
_hover={{ bg: 'transparent' }}
_active={{ bg: 'transparent' }}
_focus={{ bg: 'transparent' }}
onClick={() => setIsOpen(true)}
/>
{isOpen && (
<Stack color='gray.100'
fontSize={['22px', '22px', '22px', '32px']}
alignItems='center'
justifyContent='center'
pos='fixed'
left={0}
right={0}
bottom={0}
top={0}
bg='gray.900'
spacing='12px'
zIndex={999}
>
<Link href='/roadmaps'>Roadmaps</Link>
<Link href='/guides'>Guides</Link>
<Link href='/watch'>Videos</Link>
<Link href='/thanks'>Thanks</Link>
<Link href='/signup'>Subscribe</Link>
<CloseButton onClick={() => setIsOpen(false)} pos='fixed' top='40px' right='15px' size='lg' />
</Stack>
)}
</>
);
}
type GlobalHeaderProps = {
variant?: 'transparent' | 'solid'
};
export function GlobalHeader(props: GlobalHeaderProps) {
const { variant = 'solid' } = props;
return (
<Box bg={variant === 'solid' ? 'gray.900' : 'transparent'} p='20px 0'>
<Container maxW='container.md'>
<Flex justifyContent='space-between' alignItems='center'>
<Box>
<Link w='100%'
d='flex'
href='/'
alignItems='center'
color='white'
fontWeight={600}
_hover={{ textDecoration: 'none' }}
fontSize='18px'>
<RoadmapLogo style={{ height: '30px', width: '30px', marginRight: '10px' }} />
<Text d={['block', 'none', 'block']} as='span'>roadmap.sh</Text>
</Link>
</Box>
<DesktopMenuLinks />
<MobileMenuLinks />
</Flex>
</Container>
</Box>
);
}

View File

@@ -1,23 +0,0 @@
import MdRenderer from 'components/md-renderer'
import SharePage from 'components/share-page';
import { GuideBodyWrap } from './style';
const GuideBody = ({ guide }) => {
const GuideContent = require(`../../content/guides/${guide.fileName}.md`).default;
return (
<GuideBodyWrap>
<MdRenderer>
<GuideContent />
{
guide.author && <SharePage
title={ guide.title }
url={ guide.url }
twitterUsername={ guide.author.twitter }
/>
}
</MdRenderer>
</GuideBodyWrap>
);
};
export default GuideBody;

View File

@@ -1,13 +0,0 @@
import styled from 'styled-components';
export const GuideBodyWrap = styled.div`
position: relative;
max-width: 750px;
margin: 0 auto;
padding: 0 20px;
min-height: 300px;
p:first-child, h1, h2, h3, h4, h5, h6, img, blockquote {
margin-top: 0;
}
`;

View File

@@ -1,83 +0,0 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faFacebookSquare, faGithub, faHackerNewsSquare, faRedditSquare, faTwitter, faTwitterSquare } from '@fortawesome/free-brands-svg-icons'
import { getContributionUrl } from "lib/guide";
import {
getTwitterUrl,
getTwitterShareUrl,
getFacebookShareUrl,
getRedditShareUrl,
getHnShareUrl
} from "lib/url";
import {
AuthorBio,
AuthorImg,
AuthorInfoWrap,
AuthorMeta,
ContributeIcon,
FooterBg,
FooterContainer,
FooterWrap,
ShareIcons,
ShareWrap
} from './style';
const GuideFooter = ({
guide,
guide: {
author = {}
} = {}
}) => (
<FooterWrap>
<FooterBg className="border-top">
<FooterContainer>
<ShareWrap>
<ContributeIcon>
<a href={ getContributionUrl(guide) } target="_blank">
<span className="d-none d-sm-none d-md-inline d-lg-inline d-xl-inline">Improve this Guide </span>
<span className="d-inline d-sm-inline d-md-none d-lg-none d-xl-none">Contribute </span>
<FontAwesomeIcon icon={faGithub}/>
</a>
</ContributeIcon>
<ContributeIcon hasMargins>
<a href={ getTwitterUrl(author.twitter) } target="_blank">
<span className="d-none d-sm-none d-md-inline d-lg-inline d-xl-inline">Follow the author </span>
<span className="d-inline d-sm-inline d-md-none d-lg-none d-xl-none">Author </span>
<FontAwesomeIcon icon={faTwitter}/>
</a>
</ContributeIcon>
<ShareIcons>
<span className="d-none d-sm-none d-md-none d-lg-inline d-xl-inline">Help spread the word</span>
<span className="d-inline d-sm-inline d-md-inline d-lg-none d-xl-none">Share</span>
<a href={ getTwitterShareUrl({ text: `${guide.title} by @${author.twitter}`, url: guide.url })} target="_blank">
<FontAwesomeIcon icon={faTwitterSquare}/>
</a>
<a href={ getFacebookShareUrl({ text: guide.title, url: guide.url }) } target="_blank">
<FontAwesomeIcon icon={faFacebookSquare}/>
</a>
<a href={ getRedditShareUrl({ text: guide.title, url: guide.url })} target="_blank">
<FontAwesomeIcon icon={faRedditSquare}/>
</a>
<a href={ getHnShareUrl({ text: guide.title, url: guide.url })} target="_blank">
<FontAwesomeIcon icon={faHackerNewsSquare}/>
</a>
</ShareIcons>
</ShareWrap>
</FooterContainer>
</FooterBg>
<FooterBg className="border-top">
<FooterContainer>
<AuthorInfoWrap>
<AuthorImg src={ author.picture } alt={ author.name }/>
<AuthorMeta>
<h4><a href={ getTwitterUrl(author.twitter) } target="_blank">{ author.name }</a></h4>
<AuthorBio>{ author.bio }</AuthorBio>
</AuthorMeta>
</AuthorInfoWrap>
</FooterContainer>
</FooterBg>
</FooterWrap>
);
export default GuideFooter;

View File

@@ -1,123 +0,0 @@
import styled from 'styled-components';
export const FooterWrap = styled.div`
display: block;
margin-top: 50px;
`;
export const FooterContainer = styled.div`
max-width: 750px;
margin: 0 auto;
padding: 0 20px;
`;
export const FooterBg = styled.div`
`;
export const ShareWrap = styled.div`
padding: 17px 0px;
align-items: center;
justify-content: center;
display: flex;
a {
display: flex;
align-items: center;
color: #101010;
svg {
height: 18px !important;
width: 18px !important;
color: #757575;
margin-left: 7px;
transition: all 0.2s ease;
}
&:hover {
svg {
color: #101010;
}
}
}
`;
export const ContributeIcon = styled.div`
display: flex;
align-items: center;
justify-content: center;
margin: ${props => props.hasMargins ? '0 30px' : '0'};
span {
margin-right: 4px;
}
a {
color: #757575;
font-size: 14px;
transition: all 0.2s ease;
&:hover {
color: #101010;
}
}
`;
export const ShareIcons = styled.div`
display: flex;
align-items: center;
color: #757575;
font-size: 14px;
span {
margin-right: 4px;
}
`;
export const AuthorInfoWrap = styled.div`
display: flex;
align-items: center;
padding: 40px 0;
h4 {
position: relative;
font-size: 22px;
margin: 10px 0;
line-height: 17px;
a {
font-weight: 700;
color: #101010;
}
}
.author-description {
margin-bottom: 14px;
}
`;
export const AuthorBio = styled.p`
font-size: 15px;
line-height: 24px;
color: #757575;
margin-bottom: 0;
a {
font-weight: 500;
}
`;
export const AuthorImg = styled.img`
border-radius: 100%;
height: 100px !important;
width: 100px !important;
margin-right: 22px;
display: block;
`;
export const AuthorMeta = styled.div`
display: flex;
justify-content: center;
flex-direction: column;
flex: 1;
`;

View File

@@ -1,57 +0,0 @@
import formatDate from 'date-fns/format'
import {
ActionItems,
AuthorImage,
EditGuide,
GuideAuthor,
GuideDate,
GuideMeta,
GuideSubtitle,
GuideTitle,
HeaderWrap,
} from './style';
import { getContributionUrl } from "lib/guide";
import { getTwitterUrl } from "lib/url";
import { faClock, faEnvelope, faArrowLeft } from '@fortawesome/free-solid-svg-icons';
import { BadgeLink, BadgesList, PrimaryBadge, SecondaryBadge, DarkBadge } from 'components/badges';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
const GuideHeader = ({
guide,
guide: {
author = {}
} = {}
}) => (
<HeaderWrap className="border-bottom">
<GuideMeta>
<GuideAuthor href={ getTwitterUrl(author.twitter) } target="_blank">
<AuthorImage src={ author.picture } />
{ author.name }
</GuideAuthor>
&middot;
<GuideDate>{ formatDate(new Date(guide.createdAt), 'EEEE, MMMM d yyyy') }</GuideDate>
&middot;
<EditGuide href={ getContributionUrl(guide) } target="_blank">Improve this Guide</EditGuide>
</GuideMeta>
<GuideTitle>{ guide.title }</GuideTitle>
<GuideSubtitle>{ guide.description }</GuideSubtitle>
<ActionItems>
<BadgesList className="mt-4">
<BadgeLink href="/guides">
<SecondaryBadge>
<FontAwesomeIcon icon={faArrowLeft}/>
Other Guides
</SecondaryBadge>
</BadgeLink>
<BadgeLink href="/signup">
<PrimaryBadge>
<FontAwesomeIcon icon={faEnvelope}/>
Send me Updates
</PrimaryBadge>
</BadgeLink>
</BadgesList>
</ActionItems>
</HeaderWrap>
);
export default GuideHeader;

View File

@@ -1,54 +0,0 @@
import styled from 'styled-components';
export const HeaderWrap = styled.div`
padding: 80px 15px 45px;
text-align: center;
margin-bottom: 35px;
`;
export const GuideTitle = styled.h1`
font-weight: 700;
font-size: 46px;
margin: 12px 0;
`;
export const GuideSubtitle = styled.p`
margin-bottom: 0;
font-size: 16px;
color: #444;
`;
export const GuideMeta = styled.p`
margin-bottom: 0;
color: #757575;
font-size: 13px;
font-weight: 400;
`;
export const GuideDate = styled.span`
margin-left: 7px;
margin-right: 7px;
`;
export const GuideAuthor = styled.a`
margin-right: 7px;
font-weight: 500;
color: #101010;
&:hover {
color: #101010;
}
`;
export const AuthorImage = styled.img`
width: 22px;
height: 22px;
border-radius: 100%;
margin-right: 10px;
`;
export const EditGuide = styled.a`
margin-left: 7px;
`;
export const ActionItems = styled.div``;

View File

@@ -0,0 +1,31 @@
import { Badge, Box, Heading, Link, Text } from '@chakra-ui/react';
type GuideGridItemProps = {
title: string;
href: string;
subtitle: string;
date: string;
isNew?: boolean;
colorIndex?: number;
};
const bgColorList = [
'gray.700',
'purple.800'
];
export function GuideGridItem(props: GuideGridItemProps) {
const { title, subtitle, date, isNew = false, colorIndex = 0, href } = props;
return (
<Box _hover={{ textDecoration: 'none', transform: 'scale(1.02)' }} as={Link} href={href} shadow='xl' p='20px'
rounded='10px' bg={bgColorList[colorIndex] ?? bgColorList[0]} flex={1}>
<Text mb='10px' fontSize='13px' color='gray.400'>
{isNew && <Badge colorScheme={'yellow'} mr='10px'>New</Badge>}
{date}
</Text>
<Heading color='white' mb={'6px'} fontSize='20px'>{title}</Heading>
<Text color='gray.300' fontSize='14px'>{subtitle}</Text>
</Box>
);
}

165
components/helmet.tsx Normal file
View File

@@ -0,0 +1,165 @@
import NextHead from 'next/head';
import siteConfig from '../content/site.json';
import { RoadmapType } from '../lib/roadmap';
import { roadmapTheme } from '../styles/theme';
type HelmetProps = {
title?: string;
keywords?: string[];
canonical?: string;
description?: string;
roadmap?: RoadmapType;
};
function getRichSnippetJson(roadmap: RoadmapType) {
return {
'@context': 'https://schema.org',
'@type': 'Article',
mainEntityOfPage: {
'@type': 'WebPage',
'@id': `https://roadmap.sh/${roadmap.id}`,
},
headline: roadmap.seo.title,
description: roadmap.seo.description,
image: roadmap.jsonUrl
? `https://roadmap.sh/roadmaps/${roadmap.id}.png`
: undefined,
author: {
'@type': 'Person',
name: 'Kamran Ahmed',
url: 'https://twitter.com/kamranahmedse',
},
publisher: {
'@type': 'Organization',
name: 'roadmap.sh',
logo: {
'@type': 'ImageObject',
url: 'https://roadmap.sh/brand-square.png',
},
},
};
}
const Helmet = (props: HelmetProps) => {
const { roadmap, title, canonical, description, keywords } = props;
return (
<NextHead>
<meta charSet="UTF-8" />
<title>{title || siteConfig.title}</title>
<meta
name="description"
content={description || siteConfig.description}
/>
<meta name="author" content={siteConfig.author} />
<meta
name="keywords"
content={keywords ? keywords.join(',') : siteConfig.keywords.join(',')}
/>
<meta
name="viewport"
content="width=device-width, user-scalable=yes, initial-scale=1.0, maximum-scale=3.0, minimum-scale=1.0"
/>
{canonical && <link rel="canonical" href={canonical} />}
<meta httpEquiv="Content-Language" content="en" />
<meta property="og:title" content={title || siteConfig.title} />
<meta
property="og:description"
content={description || siteConfig.description}
/>
<meta
property="og:image"
content={`${siteConfig.url.web}${siteConfig.logoSquare}`}
/>
<meta property="og:url" content={siteConfig.url.web} />
<meta property="og:type" content="website" />
<meta
property="article:publisher"
content={`https://facebook.com/${siteConfig.facebook}`}
/>
<meta property="og:site_name" content={siteConfig.name} />
<meta property="article:author" content={siteConfig.author} />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content={`@${siteConfig.twitter}`} />
<meta name="twitter:title" content={title || siteConfig.title} />
<meta
name="twitter:description"
content={description || siteConfig.description}
/>
<meta
name="twitter:image"
content={`${siteConfig.url.web}${siteConfig.logoSquare}`}
/>
<meta name="twitter:image:alt" content="roadmap.sh" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta
name="apple-mobile-web-app-status-bar-style"
content="black-translucent"
/>
<link
rel="apple-touch-icon"
sizes="180x180"
href="/manifest/apple-touch-icon.png"
/>
<meta name="msapplication-TileColor" content="#101010" />
<meta name="theme-color" content="#848a9a" />
<link rel="manifest" href="/manifest/manifest.json" />
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/manifest/icon32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/manifest/icon16.png"
/>
<link
rel="shortcut icon"
href="/manifest/favicon.ico"
type="image/x-icon"
/>
<link rel="icon" href="/manifest/favicon.ico" type="image/x-icon" />
{roadmap?.id && (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(getRichSnippetJson(roadmap)),
}}
/>
)}
{/* Global Site Tag (gtag.js) - Google Analytics */}
{process.env.GA_SECRET && (
<>
<script
async
src={`https://www.googletagmanager.com/gtag/js?id=${process.env.GA_SECRET}`}
/>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${process.env.GA_SECRET}');
`,
}}
/>
</>
)}
</NextHead>
);
};
export default Helmet;

View File

@@ -1,74 +0,0 @@
import NextHead from 'next/head';
import siteConfig from 'content/site';
const prepareTitle = (givenTitle) => {
return givenTitle || siteConfig.title;
};
const prepareDescription = (givenDescription) => {
return givenDescription || siteConfig.description;
};
// noinspection JSUnresolvedLibraryURL
const Helmet = (props) => (
<NextHead>
<meta charSet='UTF-8' />
<title>{ prepareTitle(props.title) }</title>
<meta name='description' content={ prepareDescription(props.description) } />
<meta name="author" content={ siteConfig.author } />
<meta name="keywords" content={ props.keywords ? props.keywords.join(',') : siteConfig.keywords.join(',') } />
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0, maximum-scale=3.0, minimum-scale=1.0" />
{ props.canonical && <link rel="canonical" href={ props.canonical } /> }
<meta httpEquiv="Content-Language" content="en" />
<meta property="og:title" content={ prepareTitle(props.title) } />
<meta property="og:description" content={ prepareDescription(props.description) } />
<meta property="og:image" content={ `${siteConfig.url.web}${siteConfig.logoSquare}` } />
<meta property="og:url" content={ siteConfig.url.web } />
<meta property="og:type" content="website" />
<meta property="article:publisher" content={ `https://facebook.com/${siteConfig.facebook}` } />
<meta property="og:site_name" content={ siteConfig.name } />
<meta property="article:author" content={ siteConfig.author } />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content={ `@${siteConfig.twitter}` } />
<meta name="twitter:title" content={ prepareTitle(props.title) } />
<meta name="twitter:description" content={ prepareDescription(props.description) } />
<meta name="twitter:image" content={ `${siteConfig.url.web}${siteConfig.logoSquare}` } />
<meta name="twitter:image:alt" content="roadmap.sh" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="apple-touch-icon" sizes="180x180" href="/manifest/apple-touch-icon.png" />
<meta name="msapplication-TileColor" content="#101010" />
<meta name="theme-color" content="#848a9a" />
<link rel="manifest" href="/manifest/manifest.json" />
<link rel="icon" type="image/png" sizes="32x32" href="/manifest/icon32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/manifest/icon16.png" />
<link rel="shortcut icon" href="/manifest/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/manifest/favicon.ico" type="image/x-icon" />
{ /* Global Site Tag (gtag.js) - Google Analytics */ }
{ process.env.GA_SECRET && (
<>
<script async src={ `https://www.googletagmanager.com/gtag/js?id=${process.env.GA_SECRET}` } />
<script dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${process.env.GA_SECRET}');
`,
}} />
</>
)}
</NextHead>
);
export default Helmet;

View File

@@ -1,13 +0,0 @@
import Link from 'next/link';
import { HeroSectionWrap } from './style';
const HeroSection = () => (
<HeroSectionWrap>
<div className="container">
<h1>Developer Roadmaps</h1>
<p>Community driven roadmaps, articles and resources for developers. <Link href="/signup"><a>Sign up</a></Link> for occasional updates on new roadmaps, updates and guides</p>
</div>
</HeroSectionWrap>
);
export default HeroSection;

View File

@@ -1,30 +0,0 @@
import styled from 'styled-components';
export const HeroSectionWrap = styled.div`
text-align: center;
padding: 70px 20px;
margin: 0 auto;
.container {
max-width: 800px;
}
h1 {
font-size: 70px;
font-weight: 700;
margin-bottom: 25px;
}
p {
font-size: 20px;
color: #333;
font-weight: 400;
margin-bottom: 0;
line-height: 35px;
}
a {
font-weight: 700;
color: #000;
}
`;

View File

@@ -1,15 +0,0 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import RowBlock from 'components/row-block';
import { SubmitText, SubmitWrap } from './style';
const IconRowBlock = ({ url, icon, text, openExternal=false }) => (
<RowBlock url={ url } openExternal={openExternal}>
<SubmitWrap>
<FontAwesomeIcon icon={ icon } />
<SubmitText>{ text }</SubmitText>
</SubmitWrap>
</RowBlock>
);
export default IconRowBlock;

View File

@@ -1,20 +0,0 @@
import styled from 'styled-components';
export const SubmitWrap = styled.div`
display: flex;
flex-direction: column;
height: 100%;
align-items: center;
justify-content: center;
svg {
height: 25px;
color: #d6d6d6;
}
`;
export const SubmitText = styled.p`
margin-bottom: 0;
color: dimgrey;
margin-top: 8px;
`;

View File

@@ -1,4 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" aria-label="GitHub" role="img" viewBox="0 0 512 512" width="22px" height="20px">
<rect width="512" height="512" rx="15%"/>
<path fill="#fff" d="M335 499c14 0 12 17 12 17H165s-2-17 12-17c13 0 16-6 16-12l-1-50c-71 16-86-28-86-28-12-30-28-37-28-37-24-16 1-16 1-16 26 2 40 26 40 26 22 39 59 28 74 22 2-17 9-28 16-35-57-6-116-28-116-126 0-28 10-51 26-69-3-6-11-32 3-67 0 0 21-7 70 26 42-12 86-12 128 0 49-33 70-26 70-26 14 35 6 61 3 67 16 18 26 41 26 69 0 98-60 120-117 126 10 8 18 24 18 48l-1 70c0 6 3 12 16 12z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>

Before

Width:  |  Height:  |  Size: 565 B

After

Width:  |  Height:  |  Size: 841 B

View File

@@ -0,0 +1,4 @@
<svg width="30" height="30" viewBox="0 0 283 283" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 39C0 17.4609 17.4609 0 39 0H244C265.539 0 283 17.4609 283 39V244C283 265.539 265.539 283 244 283H39C17.4609 283 0 265.539 0 244V39Z" fill="black"></path>
<path d="M121.215 210.72C119.348 211.28 116.361 211.84 112.255 212.4C108.335 212.96 104.228 213.24 99.9347 213.24C95.828 213.24 92.0947 212.96 88.7347 212.4C85.5614 211.84 82.8547 210.72 80.6147 209.04C78.3747 207.36 76.6014 205.12 75.2947 202.32C74.1747 199.333 73.6147 195.507 73.6147 190.84V106.84C73.6147 102.547 74.3614 98.9067 75.8547 95.92C77.5347 92.7467 79.868 89.9467 82.8547 87.52C85.8414 85.0933 89.4814 82.9467 93.7747 81.08C98.2547 79.0267 103.015 77.2533 108.055 75.76C113.095 74.2667 118.321 73.1467 123.735 72.4C129.148 71.4667 134.561 71 139.975 71C148.935 71 156.028 72.7733 161.255 76.32C166.481 79.68 169.095 85.28 169.095 93.12C169.095 95.7333 168.721 98.3467 167.975 100.96C167.228 103.387 166.295 105.627 165.175 107.68C161.255 107.68 157.241 107.867 153.135 108.24C149.028 108.613 145.015 109.173 141.095 109.92C137.175 110.667 133.441 111.507 129.895 112.44C126.535 113.187 123.641 114.12 121.215 115.24V210.72ZM166.387 188.32C166.387 180.48 168.813 173.947 173.667 168.72C178.52 163.493 185.147 160.88 193.547 160.88C201.947 160.88 208.573 163.493 213.427 168.72C218.28 173.947 220.707 180.48 220.707 188.32C220.707 196.16 218.28 202.693 213.427 207.92C208.573 213.147 201.947 215.76 193.547 215.76C185.147 215.76 178.52 213.147 173.667 207.92C168.813 202.693 166.387 196.16 166.387 188.32Z" fill="white"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,3 +1,3 @@
<svg width="29" height="29">
<svg width="29" height="29" fill="currentColor">
<path d="M22.05 7.54a4.47 4.47 0 0 0-3.3-1.46 4.53 4.53 0 0 0-4.53 4.53c0 .35.04.7.08 1.05A12.9 12.9 0 0 1 5 6.89a5.1 5.1 0 0 0-.65 2.26c.03 1.6.83 2.99 2.02 3.79a4.3 4.3 0 0 1-2.02-.57v.08a4.55 4.55 0 0 0 3.63 4.44c-.4.08-.8.13-1.21.16l-.81-.08a4.54 4.54 0 0 0 4.2 3.15 9.56 9.56 0 0 1-5.66 1.94l-1.05-.08c2 1.27 4.38 2.02 6.94 2.02 8.3 0 12.86-6.9 12.84-12.85.02-.24 0-.43 0-.65a8.68 8.68 0 0 0 2.26-2.34c-.82.38-1.7.62-2.6.72a4.37 4.37 0 0 0 1.95-2.51c-.84.53-1.81.9-2.83 1.13z"></path>
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 529 B

After

Width:  |  Height:  |  Size: 550 B

View File

@@ -0,0 +1,21 @@
export function VideoIcon(props: any) {
return (
<svg
stroke='currentColor'
fill='currentColor'
strokeWidth='0'
viewBox='0 0 24 24'
height='1em'
width='1em'
xmlns='http://www.w3.org/2000/svg'
{...props}
>
<g>
<path fill='none' d='M0 0h24v24H0z' />
<path
d='M3 3.993C3 3.445 3.445 3 3.993 3h16.014c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 20.007V3.993zm7.622 4.422a.4.4 0 0 0-.622.332v6.506a.4.4 0 0 0 .622.332l4.879-3.252a.4.4 0 0 0 0-.666l-4.88-3.252z'
/>
</g>
</svg>
);
}

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill='currentColor'>
<path d="M19.615 3.184c-3.604-.246-11.631-.245-15.23 0-3.897.266-4.356 2.62-4.385 8.816.029 6.185.484 8.549 4.385 8.816 3.6.245 11.626.246 15.23 0 3.897-.266 4.356-2.62 4.385-8.816-.029-6.185-.484-8.549-4.385-8.816zm-10.615 12.816v-8l8 3.993-8 4.007z"/>
</svg>

After

Width:  |  Height:  |  Size: 369 B

View File

@@ -1,9 +0,0 @@
export function BadgeLink({ target='_blank', variant ='success', badgeText, href, children }) {
return (
<p className='mb-0'>
<a href={href} target={ target }>
<span style={{ position: 'relative', top: '-2px'}} className={`badge badge-${variant}`}>{badgeText}</span> { children }
</a>
</p>
);
}

View File

@@ -1,13 +0,0 @@
import styled from 'styled-components';
export const StrongLink = styled.a`
border-bottom: 2px solid currentColor;
position: relative;
transition: background-color 120ms;
text-decoration: none;
font-weight: 600;
&:hover {
text-decoration: none;
}
`;

View File

@@ -0,0 +1,58 @@
import React from 'react';
import { Badge, Flex, Link, Text } from '@chakra-ui/react';
type LinksListItemProps = {
href: string;
title: string;
subtitle: string;
badgeText?: string;
target?: string;
icon?: React.ReactChild;
hideSubtitleOnMobile?: boolean;
};
export function LinksListItem(props: LinksListItemProps) {
const { title, subtitle, badgeText, icon, hideSubtitleOnMobile = false, href, target } = props;
return (
<Link
target={target || '_self'}
href={href}
fontSize={['14px', '14px', '15px']}
py='9px'
d='flex'
flexDirection={['column', 'row', 'row']}
fontWeight={500}
color='gray.600'
alignItems={['flex-start', 'center']}
justifyContent={'space-between'}
sx={{
'@media (hover: none)': {
'&:hover': {
'& .list-item-title': {
transform: 'none'
}
}
}
}}
_hover={{
textDecoration: 'none',
color: 'blue.400',
'& .list-item-title': {
transform: 'translateX(10px)'
}
}}
isTruncated
maxWidth='100%'
>
<Flex alignItems='center' className='list-item-title' transition={'200ms'}>
{icon}
<Text maxWidth={'345px'} isTruncated as='span'>{title}</Text>
{badgeText &&
<Badge pos='relative' top='1px' variant='subtle' colorScheme='purple' ml='10px'>{badgeText}</Badge>}
</Flex>
<Text d={[hideSubtitleOnMobile ? 'none' : 'inline', 'inline']} mt={['3px', 0]} as='span'
fontSize={['11px', '11px', '12px']} color='gray.500'>{subtitle}</Text>
</Link>
);
}

21
components/links-list.tsx Normal file
View File

@@ -0,0 +1,21 @@
import React from 'react';
import { StackDivider, VStack } from '@chakra-ui/react';
type LinksListProps = {
children: React.ReactNode
};
export function LinksList(props: LinksListProps) {
const { children } = props;
return (
<VStack
rounded='5px'
divider={<StackDivider borderColor='gray.200' />}
spacing={0}
align='stretch'
>
{children}
</VStack>
);
}

View File

@@ -1,11 +0,0 @@
import styled from 'styled-components';
export const Mark = styled.span`
background: #1b1e21;
color: #fff;
display: inline-block;
font-size: 18px;
font-weight: 600;
margin: 0 4px;
padding: 0 6px 0 7px;
`;

View File

@@ -1,10 +0,0 @@
import { MDXProvider } from '@mdx-js/react';
import MdxComponents from './mdx-components';
const MdRenderer = (props) => (
<MDXProvider components={ MdxComponents }>
{ props.children }
</MDXProvider>
);
export default MdRenderer;

View File

@@ -0,0 +1,20 @@
import React from 'react';
// @ts-ignore
import { MDXProvider } from '@mdx-js/react';
import { ChakraProvider } from '@chakra-ui/react';
import MdxComponents from './mdx-components';
import { roadmapTheme } from '../../styles/theme';
type MdRendererType = {
children: React.ReactNode
};
export default function MdRenderer(props: MdRendererType) {
return (
<ChakraProvider theme={roadmapTheme} resetCSS>
<MDXProvider components={MdxComponents}>
{props.children}
</MDXProvider>
</ChakraProvider>
);
};

View File

@@ -1,18 +0,0 @@
import styled from 'styled-components';
const Link = styled.a`
font-weight: 600;
`;
const EnrichedLink = props => {
// Is external URL or is a media URL
const isExternalUrl = /(^http(s)?:\/\/)|(\.(png|svg|jpeg|jpg)$)/.test(props.href);
return (
<Link href={ props.href } target={ isExternalUrl ? '_blank' : '_self' }>
{ props.children }
</Link>
);
};
export default EnrichedLink;

View File

@@ -0,0 +1,37 @@
import React from 'react';
import styled from 'styled-components';
type EnrichedLinkProps = {
href: string;
children: React.ReactNode;
};
const Link = styled.a`
font-weight: 600;
text-decoration: underline;
`;
const EnrichedLink = (props: EnrichedLinkProps) => {
// Is external URL or is a media URL
const isExternalUrl = /(^http(s)?:\/\/)|(\.(png|svg|jpeg|jpg)$)/.test(
props.href
);
const linkProps: Record<string, string> = {
target: '_self',
...(isExternalUrl
? {
rel: 'nofollow',
target: '_blank',
}
: {}),
};
return (
<Link href={props.href} {...linkProps}>
{props.children}
</Link>
);
};
export default EnrichedLink;

View File

@@ -0,0 +1,53 @@
import React from 'react';
import { Link, Text, Badge } from '@chakra-ui/react';
type BadgeLinkType = {
target: string;
badgeText: string;
href: string;
colorScheme?: string;
children: React.ReactNode;
};
export function BadgeLink(props: BadgeLinkType) {
const {
target = '_blank',
colorScheme = 'purple',
badgeText,
href,
children,
} = props;
// Is external URL or is a media URL
const isExternalUrl = /(^http(s)?:\/\/)|(\.(png|svg|jpeg|jpg)$)/.test(
props.href
);
const linkProps: Record<string, string> = {
...(isExternalUrl
? {
rel: 'nofollow',
}
: {}),
};
return (
<Text mb={'0px'}>
<Link
fontSize="14px"
color="blue.700"
fontWeight={500}
textDecoration="none"
href={href}
target={target}
_hover={{ textDecoration: 'none', color: 'purple.400' }}
{...linkProps}
>
<Badge fontSize="11px" mr="7px" colorScheme={colorScheme}>
{badgeText}
</Badge>
{children}
</Link>
</Text>
);
}

View File

@@ -5,20 +5,21 @@ const BlockQuote = styled.blockquote`
position: relative;
background: #e8e8e8;
border-radius: 5px;
margin-bottom: 18px;
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
}
p + h4 {
margin-top: 15px;
}
p {
margin: 0;
& + p {
margin-top: 10px;
margin-top: 10px;
}
}
`;

View File

@@ -0,0 +1,10 @@
import React from 'react';
import { Code as ChakraCode } from '@chakra-ui/react';
type CodeType = {
children: React.ReactNode;
}
export default function Code(props: CodeType) {
return <ChakraCode bg='blue.500'>{props.children}</ChakraCode>;
}

View File

@@ -1,21 +1,22 @@
import React from 'react';
import styled from 'styled-components';
import Link from 'components/icons/link.svg';
import LinkIcon from 'components/icons/link.svg';
const linkify = (Component) => {
return (props) => {
const linkify = (Component: React.FunctionComponent<any>) => {
return function EnrichedHeading(props: { children: string }): React.ReactNode {
const text = props.children;
const id = text.toLowerCase && text
const id = text?.toLowerCase && text
.toLowerCase()
.replace(/[^\x00-\x7F]/g, '')
.replace(/\s+/g, '-')
.replace(/[?!]/g, '');
return (
<Component id={ id }>
<HeaderLink href={ `#${id}` }>
<Link />
<Component id={id}>
<HeaderLink href={`#${id}`}>
<LinkIcon />
</HeaderLink>
{ props.children }
{props.children}
</Component>
);
};
@@ -34,22 +35,23 @@ const HeaderLink = styled.a`
const H1 = styled.h1`
position: relative;
font-size: 42px;
font-size: 32px;
line-height: 40px;
font-weight: 700;
margin: 32px 0 10px !important;
margin: 20px 0 10px !important;
&:hover ${HeaderLink} {
display: flex;
}
`;
const H2 = styled(H1).attrs({ as: 'h2' })`
font-size: 32px;
font-size: 30px;
`;
const H3 = styled(H1).attrs({ as: 'h3' })`
margin: 22px 0 8px;
font-size: 30px;
font-size: 28px;
`;
const H4 = styled(H1).attrs({ as: 'h4' })`
@@ -67,11 +69,13 @@ const H6 = styled(H1).attrs({ as: 'h6' })`
font-size: 18px;
`;
export const Headings = {
h1: linkify(H1),
h2: linkify(H2),
h3: linkify(H3),
h4: linkify(H4),
h5: linkify(H5),
h6: linkify(H6),
const Headings = {
h1: H1,
h2: H2,
h3: H3,
h4: H4,
h5: H5,
h6: H6
};
export default Headings;

View File

@@ -1,8 +0,0 @@
import styled from 'styled-components';
export const IFrame = styled.iframe`
display: block;
width: 100%;
border: none;
margin: 30px auto;
`;

View File

@@ -0,0 +1,47 @@
import styled from 'styled-components';
type IFrameProps = {
title: string;
src: string;
};
const AspectRatioBox = styled.div`
position: relative;
max-width: 100%;
margin-bottom: 18px;
&:before {
height: 0;
content: "";
display: block;
padding-bottom: 50%;
}
& > iframe {
overflow: hidden;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
`;
export default function IFrame(props: IFrameProps) {
return (
<AspectRatioBox>
<iframe
frameBorder={0}
title={props.title}
src={props.src}
allow={'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'}
allowFullScreen
/>
</AspectRatioBox>
);
}

View File

@@ -1,23 +0,0 @@
import P from './p';
import { Headings } from './heading';
import { Pre } from './pre';
import BlockQuote from './blockquote';
import { Table } from './table';
import { IFrame } from './iframe';
import { Img } from './img';
import EnrichedLink from './a';
import { BadgeLink } from '../../link/badge-link';
const MdxComponents = {
p: P,
...Headings,
pre: Pre,
blockquote: BlockQuote,
a: EnrichedLink,
table: Table,
iframe: IFrame,
img: Img,
BadgeLink: BadgeLink
};
export default MdxComponents;

View File

@@ -0,0 +1,32 @@
import { Code } from '@chakra-ui/react';
import { P } from './p';
import Headings from './heading';
import { Pre } from './pre';
import BlockQuote from './blockquote';
import { Table } from './table';
import IFrame from './iframe';
import { Img } from './img';
import EnrichedLink from './a';
import { BadgeLink } from './badge-link';
import { Li, Ul } from './ul';
import PremiumBlock from './premium-block';
import { ResourceGroupTitle } from './resource-group-title';
const MdxComponents = {
p: P,
...Headings,
pre: Pre,
blockquote: BlockQuote,
a: EnrichedLink,
table: Table,
iframe: IFrame,
img: Img,
code: Code,
BadgeLink: BadgeLink,
ResourceGroupTitle: ResourceGroupTitle,
PremiumBlock: PremiumBlock,
ul: Ul,
li: Li
};
export default MdxComponents;

View File

@@ -1,20 +0,0 @@
import styled from 'styled-components';
const P = styled.p`
color: inherit;
font-size: 16px;
font-weight: 400;
line-height: 26px;
margin: 0 0 12px;
img + em {
text-align: center;
color: #666666;
font-style: normal;
font-size: 14px;
margin: 5px 0 10px;
display: block;
}
`;
export default P;

View File

@@ -0,0 +1,14 @@
import React from 'react';
import { Text } from '@chakra-ui/react';
import styled from 'styled-components';
type EnrichedTextType = {
children: React.ReactNode;
}
export const P = styled.p`
line-height: 27px;
font-size: 16px;
color: black;
margin-bottom: 18px;
`;

View File

@@ -0,0 +1,19 @@
import React from 'react';
import { Box, Button, Heading, Text } from '@chakra-ui/react';
import { LockIcon } from '@chakra-ui/icons';
type PremiumBlockProps = {
title: string;
description: string;
};
export default function PremiumBlock(props: PremiumBlockProps) {
return (
<Box p='40px' textAlign='center' rounded='5px' mb='18px' bg='gray.50' borderWidth={1}>
<LockIcon color='gray.300' height='45px' w='45px' mb='18px' />
<Heading as='h3' fontSize='30px' mb='10px'>{props.title}</Heading>
<Text mb='18px'>{props.description}</Text>
<Button colorScheme='green'>Become a Member</Button>
</Box>
);
}

View File

@@ -0,0 +1,12 @@
import React from 'react';
import { Heading } from '@chakra-ui/react';
type ResourceGroupTitleProps = {
children: React.ReactNode;
};
export function ResourceGroupTitle(props: ResourceGroupTitleProps) {
const { children } = props;
return <Heading mt='20px' color='gray.800' fontSize='14px' pb='5px' borderBottomWidth={1} textTransform='uppercase' as="h2" mb={'10px'}>{children}</Heading>;
}

View File

@@ -5,7 +5,7 @@ export const Table = styled.table`
width: 100%;
border-spacing: 0;
margin: 20px 0;
th {
color: #666;
font-size: 12px;
@@ -16,10 +16,10 @@ export const Table = styled.table`
vertical-align: middle;
padding: 5px 10px;
}
td {
font-size: 14px;
padding: 10px;
border-bottom: 1px solid #EAEAEA;
}
`;
`;

View File

@@ -0,0 +1,16 @@
import React from 'react';
import { UnorderedList } from '@chakra-ui/react';
import styled from 'styled-components';
export const Ul = styled.ul`
margin-left: 40px;
margin-bottom: 18px;
ul {
margin-top: 18px;
}
`;
export const Li = styled.li`
margin-bottom: 7px;
`;

View File

@@ -0,0 +1,46 @@
import { Box, Container, Heading, Link, Text } from '@chakra-ui/react';
export function OpensourceBanner() {
return (
<Box bg='white' borderTopWidth={1} pt={['45px', '45px', '70px']} pb={['60px', '60px', '90px']} textAlign='center'>
<Container maxW='container.md'>
<Heading fontSize={['25px', '25px', '35px']} mb={['10px', '10px', '20px']}>Open Source</Heading>
<Text lineHeight='26px' fontSize={['15px', '15px', '16px']} mb='20px'>The project is OpenSource,&nbsp;
<Link
_hover={{ textDecoration: 'none' }}
href='https://github.com/search?o=desc&q=stars%3A%3E100000&s=stars&type=Repositories'
target='_blank'
borderBottomWidth={1}
fontWeight={600}
>7th most starred project on GitHub</Link> and is visited by hundreds of thousands of
developers every month.</Text>
<iframe
src='https://ghbtns.com/github-btn.html?user=kamranahmedse&repo=developer-roadmap&type=star&count=true&size=large'
frameBorder='0'
scrolling='0'
width='170'
height='30'
style={{ margin: 'auto', marginBottom: '30px' }}
title='GitHub'
/>
<Text lineHeight={['25px', '25px', '26px']} fontSize={['15px', '15px', '16px']} mb='15px'>A considerable amount of my time is spent doing unpaid
community work on things that I hope will help humanity in some way. Your sponsorship helps me continue to
produce more open-source and free educational material consumed by hundreds of thousands of developers every
month.</Text>
<Box>
<iframe
src='https://ghbtns.com/github-btn.html?user=kamranahmedse&type=sponsor&size=large'
frameBorder='0'
scrolling='0'
width='260'
height='30'
title='GitHub'
style={{ margin: 'auto' }}
/>
</Box>
</Container>
</Box>
);
}

View File

@@ -1,41 +0,0 @@
export const CustomAd = () => {
return (
<div id="carbonads">
<span>
<span className="carbon-wrap">
<a
href="https://freemote.com/strategy?sl=roadmap"
className="carbon-img"
target="_blank"
rel="noopener sponsored"
>
<img
src="/fm-img.png"
alt="FM Logo"
border="0"
height="100"
width="130"
style={{ maxWidth: "130px" }}
/>
</a>
<a
href="https://freemote.com/strategy?sl=roadmap"
className="carbon-text"
target="_blank"
rel="noopener sponsored"
>
He Went from ZERO TO $74,000 as a Full Time Developer in 7 Weeks
</a>
</span>
<a
href="https://github.com/sponsors/kamranahmedse"
className="carbon-poweredby"
target="_blank"
rel="noopener sponsored"
>
Sponsored by
</a>
</span>
</div>
);
};

View File

@@ -1,71 +0,0 @@
import siteConfig from 'content/site';
import { FooterWrap } from './style.js';
import './carbon.scss';
import { CustomAd } from "./custom-ad";
const PageFooter = () => (
<FooterWrap className="border-top">
<div className="container">
<div className="foot-cols-wrap row">
<div className="site-meta-wrap col-12 col-sm-12 col-lg col-xl col-md-12">
<div className="site-meta">
<div className="brand-detail">
<a href="/" className='brand'><img src="/brand.png" alt="" /> roadmap.sh</a>
<span className="preposition">by</span>
<a href="https://twitter.com/kamranahmedse" target="_blank" className='follow-author'>@kamranahmedse</a>
</div>
<div className="brand-explanation">
<p>Community created roadmaps, articles, resources and journeys to help you choose your path and grow in your career.</p>
</div>
<p className='meta-links'>
&copy; roadmap.sh &middot;
&nbsp; <a href="/about">FAQ</a> &middot;
&nbsp; <a href="/terms">Terms</a> &middot;
&nbsp; <a href="/privacy">Privacy</a>
</p>
</div>
</div>
<div className="site-contribute foot-col col-12 col-sm-4 col-lg-2">
<ul>
<li className='foot-header'>Contribute</li>
<li><a href='https://gum.co/roadmap-sh' target="_blank">Sponsor us</a></li>
<li><a href={ siteConfig.url.addGuide } target="_blank">Write a Guide</a></li>
<li><a href={ siteConfig.url.addRoadmap } target="_blank">Submit a Roadmap</a></li>
<li><a href='/about'>About this Site</a></li>
</ul>
</div>
<div className="site-learn foot-col col-12 col-sm-4 col-lg-2">
<ul>
<li className="foot-header">Learn</li>
<li><a href="/guides">Read Guides</a></li>
<li><a href="/watch">Watch Videos</a></li>
<li><a href="/podcasts">Podcasts</a></li>
<li><a href="https://www.youtube.com/channel/UCA0H2KIWgWTwpTFjSxp0now?sub_confirmation=1" target="_blank">YouTube</a></li>
</ul>
</div>
<div className="site-learn foot-col col-12 col-sm-4 col-lg-2">
<ul>
<li className="foot-header">Most Visited</li>
<li><a href="/frontend">Frontend Roadmap</a></li>
<li><a href="/backend">Backend Roadmap</a></li>
<li><a href="/devops">DevOps Roadmap</a></li>
<li><a href="/roadmaps">Upcoming</a></li>
</ul>
</div>
</div>
</div>
<CustomAd />
{/* Do not show on local */}
{ process.env.GA_SECRET && false && (
<>
<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CE7DLK3Y&placement=roadmapsh" id="_carbonads_js"></script>
{/*<div id="codefund"></div>*/}
{/*<script src="https://app.codefund.io/properties/681/funder.js" async></script>*/}
</>
) }
</FooterWrap>
);
export default PageFooter;

View File

@@ -1,94 +0,0 @@
import styled from 'styled-components';
export const FooterWrap = styled.div`
padding: 65px 0;
.site-meta {
margin-bottom: 30px;
width: 350px;
.brand-detail {
display: flex;
align-items: center;
}
.brand {
display: flex;
align-items: center;
font-weight: 600;
color: #000;
text-decoration: none;
img {
height: 25px;
width: 25px;
margin-right: 8px;
}
}
.preposition {
margin: 0 7px;
}
.follow-author {
background-color: #1e99e6;
border-radius: 3px;
color: #fff;
cursor: pointer;
font-size: 12px;
font-weight: 600;
line-height: 20px;
padding: 0 6px;
white-space: nowrap;
text-decoration: none;
&:hover {
background: #43aaea;
}
}
.brand-explanation {
color: #999;
p {
font-size: 15px;
line-height: 24px;
margin: 15px 0;
}
}
.meta-links {
color: #a3a3a3;
font-size: 15px;
a {
color: #000;
text-decoration: none;
}
}
}
.foot-col {
margin-bottom: 20px;
a {
color: #999;
}
.foot-header {
font-weight: 500;
margin-bottom: 7px;
}
ul {
margin: 0;
padding: 0;
li {
margin-bottom: 2px;
font-size: 15px;
list-style: none;
margin-left: 0;
}
}
}
`;

View File

@@ -0,0 +1,38 @@
import { Badge, Box, Container, Heading, Link, Text } from '@chakra-ui/react';
import React from 'react';
import siteConfig from '../content/site.json';
type PageHeaderProps = {
title: string;
subtitle: string;
children?: React.ReactNode;
beforeTitle?: React.ReactNode;
};
export function PageHeader(props: PageHeaderProps) {
const { title, subtitle, children, beforeTitle = null } = props;
return (
<Box pt={['25px', '20px', '45px']} pb={['20px', '15px', '30px']} borderBottomWidth={1} mb='30px'>
<Container maxW='container.md' position='relative'>
{beforeTitle}
<Heading
as='h1'
color='black'
fontSize={['28px', '33px', '40px']}
fontWeight={700}
mb={['2px', '2px', '5px']}
>
{title}
</Heading>
<Text fontSize={['13px', '14px', '15px']}>{subtitle}</Text>
</Container>
{children && (
<Container maxW='container.md'>
{children}
</Container>
)}
</Box>
);
}

View File

@@ -1,16 +0,0 @@
import { HeaderWrap, Subtitle, Title } from './style';
const PageHeader = ({
title,
subtitle,
children,
}) => (
<HeaderWrap>
<Title>{ title }</Title>
<Subtitle dangerouslySetInnerHTML={{ __html: subtitle }} />
{ children }
</HeaderWrap>
);
export default PageHeader;

View File

@@ -1,22 +0,0 @@
import styled from 'styled-components';
export const HeaderWrap = styled.div`
text-align: center;
padding: 45px 30px;
`;
export const Title = styled.h1`
font-size: 48px;
font-weight: 700;
margin-bottom: 12px;
`;
export const Subtitle = styled.p`
font-size: 16px;
color: #444;
a {
color: inherit;
font-weight: 700;
}
`;

View File

@@ -1,13 +0,0 @@
import { HeaderWrap, Subtitle, Title, Logo } from './style';
const PageLogoHeader = ({ title, subtitle, children, }) => (
<HeaderWrap>
<Logo src='/brand.png' alt='' />
<Title>{ title }</Title>
<Subtitle dangerouslySetInnerHTML={{ __html: subtitle }} />
{ children }
</HeaderWrap>
);
export default PageLogoHeader;

View File

@@ -1,30 +0,0 @@
import styled from 'styled-components';
export const HeaderWrap = styled.div`
text-align: center;
padding: 45px 30px;
`;
export const Title = styled.h1`
font-size: 40px;
font-weight: 700;
margin-bottom: 12px;
`;
export const Subtitle = styled.p`
font-size: 16px;
color: #444;
margin-bottom: 0;
a {
color: inherit;
font-weight: 700;
}
`;
export const Logo = styled.img`
width: 75px;
height: 75px;
margin-bottom: 26px;
`;

View File

@@ -0,0 +1,16 @@
import React from 'react';
import { Box } from '@chakra-ui/react';
type PageWrapperProps = {
children: React.ReactNode;
}
export function PageWrapper(props: PageWrapperProps) {
const { children } = props;
return (
<Box bgColor='brand.bg' bgImage='url(/bg.jpg)' bgRepeat='no-repeat' bgSize='100%' w='100%' minH='100vh'>
{ children }
</Box>
);
}

View File

@@ -1,62 +0,0 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faArrowLeft, faClock, faEnvelope, faHandshake } from '@fortawesome/free-solid-svg-icons';
import { BadgeLink, BadgesList, DarkBadge, PrimaryBadge, SecondaryBadge } from 'components/badges';
import siteConfig from "content/site";
import { Description, Header, Title, MenuItemLink, MenuItems } from './style';
import Link from 'next/link';
import classNames from 'classnames';
const RoadmapHeader = ({ roadmap, page = 'landscape' }) => (
<Header>
<Title>{ roadmap.title }</Title>
<Description>{ roadmap.description }</Description>
<BadgesList className="mt-4">
<BadgeLink href="/roadmaps">
<DarkBadge>
<FontAwesomeIcon className='d-none d-md-block' icon={ faArrowLeft } />
Other Roadmaps
</DarkBadge>
</BadgeLink>
{ roadmap.upcoming && (
<BadgeLink href="/signup">
<SecondaryBadge>
<FontAwesomeIcon className='d-none d-md-block' icon={ faClock } />
Upcoming Roadmap
</SecondaryBadge>
</BadgeLink>
) }
{ !roadmap.upcoming && (
<BadgeLink href={ `${siteConfig.url.issue}?title=[${roadmap.title}] - Title Here` } target="_blank" className='d-none d-md-block' >
<SecondaryBadge>
<FontAwesomeIcon icon={ faHandshake } />
Suggest Changes
</SecondaryBadge>
</BadgeLink>
) }
<BadgeLink href="/signup">
<PrimaryBadge>
<FontAwesomeIcon className='d-none d-md-block' icon={ faEnvelope } />
Send me Updates
</PrimaryBadge>
</BadgeLink>
</BadgesList>
<MenuItems className="border-bottom">
<div className={ classNames({ 'd-none': roadmap.title.toLowerCase() !== 'frontend developer' })}>
<Link href={ `${roadmap.url}` } passHref>
<MenuItemLink className={ classNames({ active: page === 'landscape', }) }>Landscape</MenuItemLink>
</Link>
<Link href={ `${roadmap.url}/resources` } passHref>
<MenuItemLink className={ classNames({ active: page === 'resources', }) }>Resources</MenuItemLink>
</Link>
{/*<Link href={ `${roadmap.url}/resources` } passHref>*/}
{/* <MenuItemLink className={ classNames({ active: false, }) }>Project Ideas</MenuItemLink>*/}
{/*</Link>*/}
</div>
</MenuItems>
</Header>
);
export default RoadmapHeader;

View File

@@ -1,50 +0,0 @@
import styled from 'styled-components';
export const Header = styled.div`
text-align: center;
padding: 45px 30px 10px;
`;
export const Title = styled.h1`
font-weight: 700;
margin-bottom: 12px;
font-size: 48px;
`;
export const Description = styled.p`
font-size: 16px;
color: #444444;
`;
export const MenuItems = styled.div`
margin: 35px 0 15px;
`;
export const MenuItemLink = styled.a`
display: inline-block;
position: relative;
padding: 5px 10px 8px;
text-decoration: none;
color: rgb(102, 102, 102);
font-size: 14px;
font-weight: 400;
&.active, &.active:hover {
color: #2d2d2d;
&:after {
position: absolute;
content: "";
display: block;
height: 0;
left: 9px;
right: 9px;
bottom: -1px;
border-bottom: 2px solid currentColor;
}
}
&:hover {
text-decoration: none;
color: #111111;
}
`;

View File

@@ -1,35 +0,0 @@
import { Summary, SummaryContainer, UpcomingContainer } from './style';
import GuideBody from 'components/guide-body';
import RoadmapHeader from 'components/roadmap-header';
import SharePage from 'components/share-page';
import MdRenderer from 'components/md-renderer';
const RoadmapResources = ({ roadmap }) => {
if (roadmap.upcoming) {
return (
<>
<RoadmapHeader roadmap={ roadmap } />
<UpcomingContainer>
<GuideBody guide={{ fileName: 'upcoming' }} />
</UpcomingContainer>
</>
);
}
const filePath = roadmap.resources.replace(/^\//, '');
const ResourcesContent = require(`../../content/${filePath}`).default;
return (
<SummaryContainer>
<RoadmapHeader roadmap={ roadmap } page='resources' />
<Summary className="container">
<MdRenderer>
<ResourcesContent />
</MdRenderer>
<SharePage title={ roadmap.description } url={ roadmap.url } />
</Summary>
</SummaryContainer>
)
};
export default RoadmapResources;

View File

@@ -1,21 +0,0 @@
import styled from 'styled-components';
export const SummaryContainer = styled.div``;
export const UpcomingContainer = styled.div`
text-align: center;
padding: 40px 0 50px;
.container {
position: relative;
}
`;
export const Summary = styled.div`
margin-top: 35px;
min-height: 400px;
max-width: 1000px;
display: block;
position: relative;
text-align: left;
`;

View File

@@ -1,36 +0,0 @@
import { Summary, SummaryContainer, UpcomingContainer } from './style';
import classNames from 'classnames';
import GuideBody from 'components/guide-body';
import RoadmapHeader from 'components/roadmap-header';
import SharePage from 'components/share-page';
import MdRenderer from 'components/md-renderer';
const RoadmapSummary = ({ roadmap }) => {
if (roadmap.upcoming) {
return (
<>
<RoadmapHeader roadmap={ roadmap } />
<UpcomingContainer>
<GuideBody guide={{ fileName: 'upcoming' }} />
</UpcomingContainer>
</>
);
}
const filePath = roadmap.path.replace(/^\//, '');
const RoadmapContent = require(`../../content/${filePath}`).default;
return (
<SummaryContainer>
<RoadmapHeader roadmap={ roadmap } />
<Summary className={classNames("container", { "container-small": roadmap.isTextHeavy })}>
<MdRenderer>
<RoadmapContent />
</MdRenderer>
<SharePage title={ roadmap.description } url={ roadmap.url } />
</Summary>
</SummaryContainer>
)
};
export default RoadmapSummary;

View File

@@ -1,21 +0,0 @@
import styled from 'styled-components';
export const SummaryContainer = styled.div``;
export const UpcomingContainer = styled.div`
text-align: center;
padding: 40px 0 50px;
.container {
position: relative;
}
`;
export const Summary = styled.div`
margin-top: 35px;
min-height: 400px;
max-width: 1000px;
display: block;
position: relative;
text-align: left;
`;

View File

@@ -0,0 +1,116 @@
import { Box, Button, Flex, Text } from '@chakra-ui/react';
import { RemoveScroll } from 'react-remove-scroll';
import { RoadmapType } from '../../lib/roadmap';
import RoadmapGroup from '../../pages/[roadmap]/[group]';
import { CheckIcon, CloseIcon, RepeatIcon } from '@chakra-ui/icons';
import { queryGroupElementsById } from '../../lib/renderer/utils';
type ContentDrawerProps = {
roadmap: RoadmapType;
groupId: string;
onClose?: () => void;
};
export function ContentDrawer(props: ContentDrawerProps) {
const { roadmap, groupId, onClose = () => null } = props;
if (!groupId) {
return null;
}
const isDone = localStorage.getItem(groupId) === 'done';
return (
<Box zIndex={99999} pos="relative">
<Box
onClick={onClose}
pos="fixed"
top={0}
left={0}
right={0}
bottom={0}
bg="black"
opacity={0.4}
/>
<RemoveScroll allowPinchZoom>
<Box
p="0px 30px 30px"
position="fixed"
w={['100%', '60%', '40%']}
bg="white"
top={0}
right={0}
bottom={0}
borderLeftWidth={'1px'}
overflowY="scroll"
>
<Flex
mt="20px"
justifyContent="space-between"
alignItems="center"
zIndex={1}
>
{!isDone && (
<Button
onClick={() => {
localStorage.setItem(groupId, 'done');
queryGroupElementsById(groupId).forEach((item) =>
item?.classList?.add('done')
);
onClose();
}}
colorScheme="green"
leftIcon={<CheckIcon />}
size="xs"
iconSpacing={0}
>
<Text
as="span"
d={['block', 'none', 'none', 'block']}
ml="10px"
>
Mark as Done
</Text>
</Button>
)}
{isDone && (
<Button
onClick={() => {
localStorage.removeItem(groupId);
queryGroupElementsById(groupId).forEach((item) =>
item?.classList?.remove('done')
);
onClose();
}}
colorScheme="red"
leftIcon={<RepeatIcon />}
size="xs"
iconSpacing={0}
>
<Text
as="span"
d={['block', 'none', 'none', 'block']}
ml="10px"
>
Mark as Pending
</Text>
</Button>
)}
<Button
onClick={onClose}
colorScheme="yellow"
ml="5px"
leftIcon={<CloseIcon width="8px" />}
iconSpacing={0}
size="xs"
>
<Text as="span" d={['none', 'none', 'none', 'block']} ml="10px">
Close
</Text>
</Button>
</Flex>
<RoadmapGroup isOutlet roadmap={roadmap} group={groupId} />
</Box>
</RemoveScroll>
</Box>
);
}

View File

@@ -0,0 +1,39 @@
import React from 'react';
import { Box, Button, Divider, Link, Text } from '@chakra-ui/react';
type EditContentPageLinkProps = {
href: string;
};
export function EditContentPageLink(props: EditContentPageLinkProps) {
const { href } = props;
return (
<Box my='30px'>
<Divider mb="15px" orientation="horizontal" />
<Text
lineHeight="23px"
fontWeight={500}
fontSize="14px"
color="gray.500"
mb="10px"
>
This page is a work in progress. Help us by writing a small
introduction to the topic and suggesting a few links to read more
about this topic.
</Text>
<Button
size="sm"
py="20px"
as={Link}
href={href}
target="_blank"
isFullWidth
colorScheme={'gray'}
_hover={{ textDecoration: 'none', bg: 'gray.200' }}
>
Edit this Page
</Button>
</Box>
);
}

View File

@@ -0,0 +1,114 @@
import { Box, Flex, Heading, Link, Text, Tooltip } from '@chakra-ui/react';
import { InfoIcon } from '@chakra-ui/icons';
type RoadmapGridItemProps = {
title: string;
subtitle: string;
isCommunity?: boolean;
isUpcoming?: boolean;
colorIndex?: number;
url: string;
};
const bgColorList = [
'red.100',
'yellow.100',
'green.200',
'teal.200',
'blue.200',
'red.200',
'gray.200',
'teal.200',
'yellow.100',
'green.200',
'red.200',
];
export function HomeRoadmapItem(props: RoadmapGridItemProps) {
const {
title,
subtitle,
isCommunity,
colorIndex = 0,
url,
isUpcoming,
} = props;
return (
<Box
as={Link}
href={url}
_hover={{
textDecoration: 'none',
bg: 'rgba(255,255,255,.10)',
}}
sx={{
// On mobile devices, don't change the scale
'@media (hover: none)': {
'&:hover': {
bg: 'rgba(255,255,255,.05)',
},
},
}}
flex={1}
shadow="2xl"
className={'home-roadmap-item'}
bg={'rgba(255,255,255,.05)'}
color="white"
p="15px"
rounded="10px"
pos="relative"
>
{isCommunity && (
<Tooltip label={'Community contribution'} hasArrow placement="top">
<InfoIcon opacity={0.5} position="absolute" top="10px" right="10px" />
</Tooltip>
)}
<Heading
fontSize={['17px', '17px', '22px']}
color={bgColorList[colorIndex]}
mb="5px"
>
{title}
</Heading>
<Text color="gray.200" fontSize={['13px']}>
{subtitle}
</Text>
{isUpcoming && (
<Flex
alignItems="center"
justifyContent="center"
pos="absolute"
left={0}
right={0}
top={0}
bottom={0}
rounded="10px"
>
<Text
color="white"
bg="gray.600"
zIndex={1}
fontWeight={600}
p={'5px 10px'}
rounded="10px"
>
Upcoming
</Text>
<Box
bg={'black'}
pos="absolute"
top={0}
left={0}
right={0}
bottom={0}
rounded={'10px'}
opacity={0.5}
/>
</Flex>
)}
</Box>
);
}

View File

@@ -0,0 +1,50 @@
import { Badge, Link, Text } from '@chakra-ui/react';
import siteConfig from '../../content/site.json';
import { event } from '../../lib/gtag';
import React from 'react';
export function NewAlertBanner() {
return (
<Text
_hover={{
textDecoration: 'none',
color: 'blue.700',
'& .new-badge': { bg: 'blue.700' },
}}
as={Link}
href={siteConfig.url.youtube}
d="block"
target="_blank"
color="red.700"
fontSize="sm"
mb="10px"
fontWeight={500}
onClick={() =>
event({
category: 'Subscription',
action: 'Clicked the YouTube banner',
label: 'YouTube Alert on Roadmap',
})
}
>
<Badge
transition={'all 300ms'}
className="new-badge"
mr="7px"
colorScheme="red"
variant="solid"
>
New
</Badge>
<Text textDecoration="underline" as="span" d={['none', 'inline']}>
Roadmap topics to be covered on our YouTube Channel
</Text>
<Text textDecoration="underline" as="span" d={['inline', 'none']}>
Topic videos being made on YouTube
</Text>
<Text as="span" ml="5px">
&raquo;
</Text>
</Text>
);
}

View File

@@ -0,0 +1,26 @@
import { RoadmapType } from '../../lib/roadmap';
import { Container, Heading, Link, Text } from '@chakra-ui/react';
import siteConfig from '../../content/site.json';
type RoadmapProps = {
roadmap: RoadmapType;
};
export function RoadmapError(props: RoadmapProps) {
const { roadmap } = props;
return (
<Container
bg={'red.600'}
maxW={'container.md'}
position="relative"
mt="50px"
p='20px'
rounded='5px'
color='white'
>
<Heading mb='4px' size='md'>Oops! There&apos;s an error</Heading>
<Text>Try refreshing or <Link target='_blank' fontWeight={700} textDecoration={'underline'} fontSize='14px' href={siteConfig.url.issue}>report a bug</Link> and use the <Link fontWeight={700} textDecoration={'underline'} href={`/roadmaps/${roadmap.id}.png`}>non-interactive version</Link></Text>
</Container>
);
}

View File

@@ -0,0 +1,89 @@
import { Badge, Box, Flex, Heading, Link, Text, Tooltip } from '@chakra-ui/react';
import { InfoIcon } from '@chakra-ui/icons';
type RoadmapGridItemProps = {
title: string;
subtitle: string;
href: string;
isCommunity?: boolean;
isUpcoming?: boolean;
colorIndex?: number;
};
const bgColorList = [
'gray.900',
'purple.900',
'blue.900',
'red.900',
'green.900',
'teal.900',
'yellow.900',
'cyan.900',
'pink.900',
'gray.800',
'purple.800',
'blue.800',
'red.800',
'green.800',
'teal.800',
'yellow.800',
'cyan.800',
'pink.800',
'gray.700',
'purple.700',
'blue.700',
'red.700',
'green.700',
'teal.700',
'yellow.700',
'cyan.700',
'pink.700',
'gray.600',
'purple.600',
'blue.600',
'red.600',
'green.600',
'teal.600',
'yellow.600',
'cyan.600',
'pink.600'
];
export function RoadmapGridItem(props: RoadmapGridItemProps) {
const { title, subtitle, isCommunity = false, isUpcoming = false, colorIndex = 0, href = '/' } = props;
return (
<Box _hover={{ textDecoration: 'none', transform: 'scale(1.02)' }} as={Link} href={href} shadow='xl' p='20px'
rounded='10px' bg={bgColorList[colorIndex] ?? bgColorList[0]} flex={1} pos='relative'>
{isCommunity && (
<Tooltip label={'Community contribution'} hasArrow placement='top'>
<InfoIcon opacity={0.5} color='gray.100' position='absolute' top='10px' right='10px' />
</Tooltip>
)}
<Heading color='white' mb={'6px'} fontSize='20px'>{title}</Heading>
<Text color='gray.300' fontSize='14px'>{subtitle}</Text>
{isUpcoming && (
<Flex
alignItems='center'
justifyContent='center'
pos='absolute'
left={0}
right={0}
top={0}
bottom={0}
rounded='10px'
>
<Text color='white' bg='yellow.900' zIndex={1} fontWeight={600} p={'5px 10px'}
rounded='10px'>Upcoming</Text>
<Box bg={'black'} pos='absolute' top={0} left={0} right={0} bottom={0} rounded={'10px'} opacity={0.5} />
</Flex>
)}
</Box>
);
}

View File

@@ -0,0 +1,20 @@
import { Container, Spinner } from '@chakra-ui/react';
export function RoadmapLoader() {
return (
<Container
maxW={'container.md'}
position="relative"
mt="60px"
textAlign="center"
>
<Spinner
thickness="7px"
speed="0.65s"
emptyColor="gray.200"
color="gray.500"
size="xl"
/>
</Container>
);
}

View File

@@ -0,0 +1,113 @@
import { isInteractiveRoadmap, RoadmapType } from '../../lib/roadmap';
import { NewAlertBanner } from './new-alert-banner';
import {
Badge,
Box,
Button,
Container,
Flex,
Heading,
Link,
Stack,
Text,
} from '@chakra-ui/react';
import { AtSignIcon, DownloadIcon } from '@chakra-ui/icons';
import React from 'react';
type RoadmapPageHeaderType = {
roadmap: RoadmapType;
};
export function RoadmapPageHeader(props: RoadmapPageHeaderType) {
const { roadmap } = props;
return (
<Box
pt={['25px', '20px', '45px']}
pb={['20px', '15px', '30px']}
borderBottomWidth={1}
mb="30px"
>
<Container maxW="container.md" position="relative">
<NewAlertBanner />
<Heading
as="h1"
color="black"
fontSize={['28px', '33px', '40px']}
fontWeight={700}
mb={['2px', '2px', '5px']}
>
{roadmap.title}
</Heading>
<Text fontSize={['13px', '14px', '15px']}>{roadmap.description}</Text>
<Flex justifyContent="space-between" alignItems={'center'} mt="20px">
<Stack isInline>
<Button
d={['flex', 'flex']}
as={Link}
href={'/roadmaps'}
size="xs"
py="14px"
px="10px"
colorScheme="teal"
variant="solid"
_hover={{ textDecoration: 'none' }}
>
&larr;
<Text as="span" d={['none', 'inline']} ml="5px">
All Roadmaps
</Text>
</Button>
{roadmap.pdfUrl && (
<Button
as={Link}
href={roadmap.pdfUrl}
target="_blank"
size="xs"
py="14px"
px="10px"
leftIcon={<DownloadIcon />}
colorScheme="yellow"
variant="solid"
_hover={{ textDecoration: 'none' }}
>
Download
</Button>
)}
<Button
as={Link}
href={'/signup'}
size="xs"
py="14px"
px="10px"
variant="solid"
colorScheme="yellow"
leftIcon={<AtSignIcon />}
_hover={{ textDecoration: 'none' }}
>
Subscribe
</Button>
</Stack>
</Flex>
{isInteractiveRoadmap(roadmap.id) && (
<Text
mt="30px"
mb={['-37px', '-32px', '-47px']}
fontWeight={500}
fontSize="14px"
bg="white"
borderWidth={1}
p="5px 7px"
rounded="3px"
>
<Badge pos="relative" top={'-1px'} mr="6px" colorScheme="yellow">
New
</Badge>
Resources are here, try clicking any nodes.
</Text>
)}
</Container>
</Box>
);
}

View File

@@ -1,28 +0,0 @@
import { Badge, BlockItem, ItemSubtitle, ItemTitle, ItemWrap } from './style';
const RowBlock = ({
title,
subtitle,
url,
badge,
openExternal = false,
disabled = false,
children = null
}) => (
<ItemWrap className="col-md-6 col-lg-4 col-xl-4">
<BlockItem href={ url } disabled={ disabled } target={openExternal ? '_blank' : '_self'}>
{ !children && (
<>
<ItemTitle>
{ title }
{ badge && <Badge>{ badge }</Badge>}
</ItemTitle>
<ItemSubtitle>{ subtitle }</ItemSubtitle>
</>
) }
{ children }
</BlockItem>
</ItemWrap>
);
export default RowBlock;

View File

@@ -1,62 +0,0 @@
import styled from 'styled-components';
export const ItemWrap = styled.div`
padding: 0 10px 20px;
`;
export const BlockItem = styled.a`
min-height: 114px;
box-shadow: rgba(0, 0, 0, 0.12) 0 5px 10px;
transition: box-shadow 0.2s ease 0s;
align-items: stretch;
flex: 1;
display: flex;
flex-direction: column;
min-width: 1px;
max-width: 100%;
background: white;
padding: 20px;
border-radius: 10px;
justify-content: center;
text-decoration:none;
opacity: ${ props => props.disabled ? 0.5 : 1 };
&:hover {
text-decoration:none;
box-shadow: rgba(0, 0, 0, 0.12) 0 30px 60px;
z-index: 1;
}
`;
export const ItemTitle = styled.h3`
font-weight: 600;
font-size: 18px;
line-height: 24px;
color: #101010;
display: flex;
align-items: center;
justify-content: flex-start;
`;
export const Badge = styled.span`
font-size: 10px;
font-weight: 600;
background: #8a8a8a;
color: white;
padding: 0 8px;
border-radius: 4px;
text-transform: uppercase;
display: flex;
align-items: center;
justify-content: center;
margin-left: 10px;
height: 18px;
`;
export const ItemSubtitle = styled.p`
font-size: 14px;
color: rgb(102, 102, 102);
white-space: normal;
line-height: 1.5;
margin: 0;
`;

Some files were not shown because too many files have changed in this diff Show More