mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2026-03-13 02:01:57 +08:00
Compare commits
601 Commits
chore/prog
...
2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68950ab2c9 | ||
|
|
305d0a41ac | ||
|
|
e43c21a01d | ||
|
|
b6205af02c | ||
|
|
6de2867d8a | ||
|
|
13612323d7 | ||
|
|
edd10470a7 | ||
|
|
d5b8d761d5 | ||
|
|
9f7119694b | ||
|
|
8fbde17c22 | ||
|
|
e16947bd78 | ||
|
|
33af054161 | ||
|
|
8913d5c5e4 | ||
|
|
0040d568b1 | ||
|
|
706070e42a | ||
|
|
f79fb62ff9 | ||
|
|
5c428540dc | ||
|
|
35ae0a74b3 | ||
|
|
a1606521d4 | ||
|
|
6545c8de36 | ||
|
|
0f713cbfd8 | ||
|
|
333894b75b | ||
|
|
c73a500ffd | ||
|
|
a489bc0fde | ||
|
|
09ef6bfbb0 | ||
|
|
67d2f5cb57 | ||
|
|
b28deab192 | ||
|
|
290a73c8b0 | ||
|
|
579d39e104 | ||
|
|
e7c32958c9 | ||
|
|
7c5d28b68b | ||
|
|
2f8c0c5748 | ||
|
|
5e08af99b2 | ||
|
|
2882815313 | ||
|
|
e093f98a42 | ||
|
|
d3f8e0517b | ||
|
|
efc874163b | ||
|
|
3e8abbed13 | ||
|
|
244d336d8e | ||
|
|
9d24b98f67 | ||
|
|
007bd7feb0 | ||
|
|
7619945028 | ||
|
|
3265f9729d | ||
|
|
4591ad2336 | ||
|
|
163e03f578 | ||
|
|
2215174c20 | ||
|
|
aa52e08ac4 | ||
|
|
96acb6c93e | ||
|
|
69ebd50a90 | ||
|
|
e2eaf7d19c | ||
|
|
da7ba5bf4c | ||
|
|
0d17cf145c | ||
|
|
8a7f7a4a83 | ||
|
|
7d3255576b | ||
|
|
97529cbf54 | ||
|
|
52af178a19 | ||
|
|
f0425fd964 | ||
|
|
570d6a04b1 | ||
|
|
1e677183aa | ||
|
|
14a29b4634 | ||
|
|
bc66a805e3 | ||
|
|
f6c10d7344 | ||
|
|
4e96943374 | ||
|
|
1235459d7a | ||
|
|
0d35fe0364 | ||
|
|
76d6fab581 | ||
|
|
da39147539 | ||
|
|
9e230a01a2 | ||
|
|
4c3452926a | ||
|
|
b36c5b3c26 | ||
|
|
95fe79a0f1 | ||
|
|
850a9ffc9d | ||
|
|
2b8d18d880 | ||
|
|
9b551a69a7 | ||
|
|
cdb9201b2f | ||
|
|
ab15d91614 | ||
|
|
9d2fdfa7cf | ||
|
|
bcad685e27 | ||
|
|
74ae339fe1 | ||
|
|
5811fd8832 | ||
|
|
6c710a92c1 | ||
|
|
51f068085d | ||
|
|
1795bc1495 | ||
|
|
d4ef930187 | ||
|
|
54fae335c2 | ||
|
|
0f886e9def | ||
|
|
3f299cdd8b | ||
|
|
7fccd6b399 | ||
|
|
f75512e96a | ||
|
|
32ff9a700b | ||
|
|
6976202171 | ||
|
|
cf1cca7cb3 | ||
|
|
2236c3f93c | ||
|
|
4f067504a2 | ||
|
|
42747f4f97 | ||
|
|
1d952f75f8 | ||
|
|
9e61ef5dd1 | ||
|
|
c7770cc64c | ||
|
|
af7e25dc92 | ||
|
|
cf3365e778 | ||
|
|
bd69872059 | ||
|
|
746ee3d548 | ||
|
|
73c55a0eaa | ||
|
|
299d0f3ada | ||
|
|
98097f939a | ||
|
|
f4904da3f8 | ||
|
|
465c00b4d5 | ||
|
|
69c54e5dfe | ||
|
|
6f4898c216 | ||
|
|
b8cc07c29e | ||
|
|
eae0ad3ecb | ||
|
|
56bf52e641 | ||
|
|
689f24e0f1 | ||
|
|
63d66b3f4e | ||
|
|
4930c00f78 | ||
|
|
5745fc56bf | ||
|
|
55d5ced587 | ||
|
|
018be76895 | ||
|
|
b268106684 | ||
|
|
56e2108be2 | ||
|
|
9dfbceda7c | ||
|
|
c698265f42 | ||
|
|
752d4614b8 | ||
|
|
d73e08f8f6 | ||
|
|
cf648924cf | ||
|
|
2d15290566 | ||
|
|
06dd1934f3 | ||
|
|
316ada1259 | ||
|
|
30d2f15433 | ||
|
|
4ac1319d8d | ||
|
|
4e924981c1 | ||
|
|
fdf3fd050b | ||
|
|
79afd0a6a8 | ||
|
|
03e35ee928 | ||
|
|
eaaedb8034 | ||
|
|
84e87a501e | ||
|
|
8fca669787 | ||
|
|
3c1d41119f | ||
|
|
495fd37eae | ||
|
|
4cfeb1c372 | ||
|
|
91a47faec0 | ||
|
|
8c03aedea1 | ||
|
|
9a515f85c1 | ||
|
|
0a2468aad2 | ||
|
|
fc2eb36d58 | ||
|
|
3c5ea2131d | ||
|
|
75e1f67ee8 | ||
|
|
b40894cfdc | ||
|
|
4fb2e1f46d | ||
|
|
8eccfd22e3 | ||
|
|
d84800fcaf | ||
|
|
bb3260f4b7 | ||
|
|
9a2e1fd673 | ||
|
|
3f599fab35 | ||
|
|
cdc710123f | ||
|
|
bb43c8eba6 | ||
|
|
c01d595546 | ||
|
|
77a66fd25d | ||
|
|
a93ac86766 | ||
|
|
4044dbea91 | ||
|
|
3fc9ffe8b4 | ||
|
|
880475f6de | ||
|
|
a26945288b | ||
|
|
b97ae52a1b | ||
|
|
76ddeeedb2 | ||
|
|
00b7fe6e7f | ||
|
|
c43442f127 | ||
|
|
68c62d218d | ||
|
|
47b10a1a1a | ||
|
|
1fd135d1c1 | ||
|
|
61bdc80f5a | ||
|
|
4fbefd5ae9 | ||
|
|
835476ed31 | ||
|
|
83745ae1b4 | ||
|
|
9465cfb5c2 | ||
|
|
4edd398770 | ||
|
|
21b3b7cbdf | ||
|
|
ae6763bf83 | ||
|
|
be5a61b697 | ||
|
|
8e25dca636 | ||
|
|
b91d404f17 | ||
|
|
80f2cb8cbc | ||
|
|
2dc3d4fd24 | ||
|
|
2432ff9fd4 | ||
|
|
8f1f8846c9 | ||
|
|
7dac8665a0 | ||
|
|
f0181ff08f | ||
|
|
0ad95c2dd0 | ||
|
|
d184e93519 | ||
|
|
4ef31700a5 | ||
|
|
087f4e5c25 | ||
|
|
c5ae26458a | ||
|
|
0c6de5d89b | ||
|
|
124d113162 | ||
|
|
c88b0f3b1a | ||
|
|
06d72599d9 | ||
|
|
eb9cd6cdcc | ||
|
|
c7589b8325 | ||
|
|
4c07ac509b | ||
|
|
1240b6b1bc | ||
|
|
ad05c49570 | ||
|
|
c01a854a5a | ||
|
|
7b1dde1d62 | ||
|
|
56b0275b06 | ||
|
|
7a0d784d81 | ||
|
|
2c9eb1f9ee | ||
|
|
e4ca1c9598 | ||
|
|
2b8e06d651 | ||
|
|
56088a838c | ||
|
|
542d82c2dc | ||
|
|
980322bae0 | ||
|
|
56fbe9a685 | ||
|
|
6939240d59 | ||
|
|
4caaee3da5 | ||
|
|
e829af3e62 | ||
|
|
7ba0fa9004 | ||
|
|
74433cd0d3 | ||
|
|
dec3e992b3 | ||
|
|
7a4c27460f | ||
|
|
5553b411eb | ||
|
|
98cc968ed1 | ||
|
|
3de37468a6 | ||
|
|
3364eae0a6 | ||
|
|
a06eaec5d4 | ||
|
|
10e433f538 | ||
|
|
129deed6a9 | ||
|
|
ce35a8112f | ||
|
|
35f6070133 | ||
|
|
629f1058f2 | ||
|
|
199310df93 | ||
|
|
0d45fcbf79 | ||
|
|
47cbcde5dc | ||
|
|
5b12eb9e02 | ||
|
|
6632b46d98 | ||
|
|
25e009a63f | ||
|
|
9ae7eed1e3 | ||
|
|
8db62cb19f | ||
|
|
d1a991b18c | ||
|
|
8107e008ff | ||
|
|
944858bbb1 | ||
|
|
b864c60ea3 | ||
|
|
618b55f601 | ||
|
|
b5c65b408b | ||
|
|
21f2ef80ba | ||
|
|
ebd351e133 | ||
|
|
77dab81b92 | ||
|
|
0350da2929 | ||
|
|
59c07c9000 | ||
|
|
79ab31dec7 | ||
|
|
16983cb950 | ||
|
|
e29fe52cb1 | ||
|
|
7921acb666 | ||
|
|
b53f8c982c | ||
|
|
0b72a07147 | ||
|
|
5155a0c358 | ||
|
|
bd5663ab26 | ||
|
|
af3ccd5bb5 | ||
|
|
035eaa47e8 | ||
|
|
3541d4e717 | ||
|
|
e8dcfe97f2 | ||
|
|
8f3307e53e | ||
|
|
dcc825416d | ||
|
|
f8fcb8d600 | ||
|
|
40919dec14 | ||
|
|
f3592155bf | ||
|
|
927ee73be7 | ||
|
|
4f81d5374e | ||
|
|
e95fd69886 | ||
|
|
11d9da5afb | ||
|
|
cea8abc5ef | ||
|
|
7169d3bb8f | ||
|
|
ae9c1c4992 | ||
|
|
58e560af7d | ||
|
|
09fa166f56 | ||
|
|
6ed7d9c25f | ||
|
|
e59fc5e4e9 | ||
|
|
f5da05c3ec | ||
|
|
07b200b878 | ||
|
|
ccca782f25 | ||
|
|
77d9846d9b | ||
|
|
8da175e9d8 | ||
|
|
467634889b | ||
|
|
b46b425b41 | ||
|
|
9e23439f0c | ||
|
|
c6db625e35 | ||
|
|
672245e4e4 | ||
|
|
e4ce3475c6 | ||
|
|
d15b97db73 | ||
|
|
8f040e5e8a | ||
|
|
888800d2a0 | ||
|
|
51b2c70586 | ||
|
|
5b4cc86f61 | ||
|
|
9952ee5805 | ||
|
|
6c113fd148 | ||
|
|
745d93fbfe | ||
|
|
c07705a907 | ||
|
|
c94341f61c | ||
|
|
9bc160e28d | ||
|
|
3142223081 | ||
|
|
cd5849fcc7 | ||
|
|
3d105ec4e7 | ||
|
|
3214980039 | ||
|
|
32c2bef9d8 | ||
|
|
8fe4bc5472 | ||
|
|
fcab879f99 | ||
|
|
9aea5bc136 | ||
|
|
4b3b1496b7 | ||
|
|
c6dff9efde | ||
|
|
1ae125b184 | ||
|
|
dcef934aef | ||
|
|
5608939723 | ||
|
|
0accc56f05 | ||
|
|
c934375cd2 | ||
|
|
b32e8a721d | ||
|
|
eacb4eebd3 | ||
|
|
7532230ce1 | ||
|
|
ea9c0cf703 | ||
|
|
e0702bbb59 | ||
|
|
8d81679248 | ||
|
|
3704b89bea | ||
|
|
c96412b8e5 | ||
|
|
dc519b0fec | ||
|
|
27d220de87 | ||
|
|
c185804341 | ||
|
|
eee62c0f69 | ||
|
|
d8ed12fbf3 | ||
|
|
cd1d3d271d | ||
|
|
21b715dc57 | ||
|
|
565da5548b | ||
|
|
cf5d669f08 | ||
|
|
c1e01f70cf | ||
|
|
f188ef4296 | ||
|
|
09309dfef7 | ||
|
|
f45d00eb22 | ||
|
|
972bea55b7 | ||
|
|
c51bae8b9e | ||
|
|
796f1cdac0 | ||
|
|
159741f0af | ||
|
|
2cf22c1777 | ||
|
|
a4338eb00c | ||
|
|
a524ec68ae | ||
|
|
80027501b0 | ||
|
|
1502be2f50 | ||
|
|
4fa6747d6e | ||
|
|
62f8e0961f | ||
|
|
cbb5571e07 | ||
|
|
372845f6f8 | ||
|
|
380b39ec2f | ||
|
|
cb24556d2f | ||
|
|
132acfec00 | ||
|
|
9f38b4b2c8 | ||
|
|
b1ee86e1c0 | ||
|
|
acec5d610c | ||
|
|
72f155dd95 | ||
|
|
8b836c4125 | ||
|
|
03584d67d8 | ||
|
|
bdfe81ce1f | ||
|
|
0aeb86503e | ||
|
|
f10cfc2044 | ||
|
|
9d81ab75db | ||
|
|
7e9d477bc9 | ||
|
|
61a585614e | ||
|
|
9f98b30568 | ||
|
|
8f6ead0add | ||
|
|
0fa1a6642c | ||
|
|
3e71b7aca8 | ||
|
|
250f1d59e6 | ||
|
|
9827fd8406 | ||
|
|
2826a5302f | ||
|
|
1a2cd75e5d | ||
|
|
9c70c85356 | ||
|
|
24a54cf7fd | ||
|
|
fb197ae3b3 | ||
|
|
a1d5f9aadd | ||
|
|
cf71053e91 | ||
|
|
bffb482b61 | ||
|
|
2d0307a338 | ||
|
|
ea2a8007ab | ||
|
|
549e9a9753 | ||
|
|
4c25f0cc60 | ||
|
|
3681eafae1 | ||
|
|
33730144b2 | ||
|
|
c4b1eb76fd | ||
|
|
93db393474 | ||
|
|
7e7e0c456d | ||
|
|
a2b91efd38 | ||
|
|
32f63ec152 | ||
|
|
c927aa948e | ||
|
|
f35e10f08c | ||
|
|
0f5201b8bc | ||
|
|
0e95e2239b | ||
|
|
9e0e77e8e3 | ||
|
|
8cf49540f9 | ||
|
|
105df7a02a | ||
|
|
026830d836 | ||
|
|
b351edfa20 | ||
|
|
8c77a26627 | ||
|
|
93dc65b529 | ||
|
|
dacbf09f55 | ||
|
|
a16787ab58 | ||
|
|
7d45c8e462 | ||
|
|
796bde76c9 | ||
|
|
22d5622e1e | ||
|
|
2312fdd608 | ||
|
|
bc2ecea03b | ||
|
|
84a551f906 | ||
|
|
9fab5c7134 | ||
|
|
c61f4a845d | ||
|
|
025753b279 | ||
|
|
6b9901db28 | ||
|
|
34f0e483ec | ||
|
|
0ae9bc0e3e | ||
|
|
3f17f60daf | ||
|
|
7f2acba352 | ||
|
|
907fb9915f | ||
|
|
fd2e64ec50 | ||
|
|
3fd5b9e744 | ||
|
|
edff9156ff | ||
|
|
e1c89585e9 | ||
|
|
abaa839b26 | ||
|
|
1bc7384929 | ||
|
|
6a148295f7 | ||
|
|
ea25f2d99b | ||
|
|
08303c0623 | ||
|
|
f18f9fb5b3 | ||
|
|
dfc07e0753 | ||
|
|
64a19fdc3c | ||
|
|
1b3e8712ff | ||
|
|
f242c6e358 | ||
|
|
7e2121bed9 | ||
|
|
bb80ceb7ba | ||
|
|
25dfb28368 | ||
|
|
a1c75bb9f8 | ||
|
|
efdb628120 | ||
|
|
ac23dddeb9 | ||
|
|
b208eaa1bd | ||
|
|
8ebf97277c | ||
|
|
928d79e3fb | ||
|
|
9b95218eb8 | ||
|
|
8bcdd84f0f | ||
|
|
67a72aab11 | ||
|
|
771f3a9cb7 | ||
|
|
38b6b34437 | ||
|
|
548dfd85e7 | ||
|
|
971d23c43a | ||
|
|
3aac8de849 | ||
|
|
8d605735b2 | ||
|
|
7debdb90c1 | ||
|
|
f6f5c821b3 | ||
|
|
227e08b7c4 | ||
|
|
16651606fb | ||
|
|
0ea67f695d | ||
|
|
6c4386ed7d | ||
|
|
e65ba9365b | ||
|
|
e5843568dd | ||
|
|
7968151c44 | ||
|
|
9f0753f098 | ||
|
|
98d0aa5103 | ||
|
|
c1706e2c18 | ||
|
|
84e74096b7 | ||
|
|
3d96fdf1df | ||
|
|
a157605b2b | ||
|
|
ec83830577 | ||
|
|
6babeb3f21 | ||
|
|
0b9754c9ae | ||
|
|
c2f7754b0d | ||
|
|
4df519845f | ||
|
|
910bd371dd | ||
|
|
0aa6db6007 | ||
|
|
01be603780 | ||
|
|
55a3ce4def | ||
|
|
a21264eb5e | ||
|
|
8c216782e5 | ||
|
|
ed9823245b | ||
|
|
378e53eba4 | ||
|
|
66b68bc26f | ||
|
|
0785d28bb4 | ||
|
|
f43dda522d | ||
|
|
ba98142d5b | ||
|
|
43160d3058 | ||
|
|
d40a858c6a | ||
|
|
4024005c4a | ||
|
|
91d1fc7245 | ||
|
|
328efa6ff6 | ||
|
|
cb352aba68 | ||
|
|
625ca5dcf4 | ||
|
|
25d686ae5c | ||
|
|
0ab94faa95 | ||
|
|
5299a04acd | ||
|
|
f326a58bee | ||
|
|
d8d52a6e86 | ||
|
|
ba09cc4b86 | ||
|
|
5804deb8ac | ||
|
|
63b3f0199b | ||
|
|
0b0addaee4 | ||
|
|
aab6d380aa | ||
|
|
79b5c09a06 | ||
|
|
3bd4ad5874 | ||
|
|
79887dc7d5 | ||
|
|
dc8cb8e777 | ||
|
|
a8059e73c0 | ||
|
|
ee2b3e5de0 | ||
|
|
807e5ea2c1 | ||
|
|
f7b42203a4 | ||
|
|
93d4462ec8 | ||
|
|
3643a4cf1c | ||
|
|
9c382651ee | ||
|
|
e4b5b41cd7 | ||
|
|
eb96eb2ccd | ||
|
|
b18caf0ba4 | ||
|
|
9381df73a3 | ||
|
|
f45c7d89b4 | ||
|
|
1f25d174ec | ||
|
|
037798676f | ||
|
|
747e617462 | ||
|
|
f1fb4b7026 | ||
|
|
43c165d8e7 | ||
|
|
fcd75cb9fe | ||
|
|
d88ec26bb8 | ||
|
|
8418b20c59 | ||
|
|
cfbae595e5 | ||
|
|
d89b5857d5 | ||
|
|
a1fb402bca | ||
|
|
ac40601310 | ||
|
|
e75036a664 | ||
|
|
17e7e6f967 | ||
|
|
44e4bca38d | ||
|
|
cb5f6fc7a8 | ||
|
|
26bd9b036a | ||
|
|
fed688006e | ||
|
|
71a9524e8e | ||
|
|
d20292148b | ||
|
|
63458de408 | ||
|
|
00e07394ab | ||
|
|
f5a5c8a868 | ||
|
|
e194a66bb7 | ||
|
|
3aa397862b | ||
|
|
21ee836e31 | ||
|
|
d408b44d27 | ||
|
|
6994ae22b0 | ||
|
|
fb924ace65 | ||
|
|
6fcada4a5b | ||
|
|
1273051f2f | ||
|
|
e58548bd49 | ||
|
|
fa1025fb35 | ||
|
|
665dcdf242 | ||
|
|
da96caf9ae | ||
|
|
2ac11537e1 | ||
|
|
bc2904c485 | ||
|
|
02c9d57184 | ||
|
|
34261c5517 | ||
|
|
094ac8cfa0 | ||
|
|
ecfb7a539c | ||
|
|
f30f29756b | ||
|
|
3acd331c98 | ||
|
|
d6c168acb5 | ||
|
|
d714404201 | ||
|
|
e7dcba19c5 | ||
|
|
6b3ce4b062 | ||
|
|
018b039b97 | ||
|
|
c8bf790a03 | ||
|
|
c4c7225e55 | ||
|
|
e421765752 | ||
|
|
9ee6a14fd9 | ||
|
|
036f532779 | ||
|
|
64ae6c3dda | ||
|
|
5f46572569 | ||
|
|
bcd0bbee4c | ||
|
|
78e7d90c80 | ||
|
|
350511fddd | ||
|
|
b2f4f403dd | ||
|
|
62957d667d | ||
|
|
9562d9d956 | ||
|
|
a89221a32f | ||
|
|
42c197a162 | ||
|
|
4edf2fd587 | ||
|
|
3839acba26 | ||
|
|
cc9d02d859 | ||
|
|
07c7ab018d | ||
|
|
16a04a7137 | ||
|
|
40365be22b | ||
|
|
8d990b9233 | ||
|
|
863961db67 | ||
|
|
1d155a7448 | ||
|
|
a3e0a0f154 | ||
|
|
2216dd6990 | ||
|
|
02c30296d9 | ||
|
|
b54ac3368a | ||
|
|
8219aedd2d | ||
|
|
bf2744a5c0 | ||
|
|
6f87633afc | ||
|
|
c4f7b8e7ac | ||
|
|
00f358434c | ||
|
|
7dcc87fb94 | ||
|
|
39752c73b5 | ||
|
|
07162a9e4d | ||
|
|
c4f00e016f | ||
|
|
3db0687acf | ||
|
|
13d8dd364b | ||
|
|
9ac82fb8a7 | ||
|
|
f1075dc915 |
9
.github/workflows/deploy.yml
vendored
9
.github/workflows/deploy.yml
vendored
@@ -14,15 +14,14 @@ 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
|
||||
npm run meta
|
||||
npm run build
|
||||
- name: Deploy to GitHub Pages
|
||||
run: |
|
||||
git config user.email "kamranahmed.se@gmail.com"
|
||||
|
||||
@@ -17,7 +17,7 @@ export function DimmedMore(props: DimmedMoreProps) {
|
||||
bottom={0}
|
||||
height='200px'
|
||||
width='100%'
|
||||
background='linear-gradient(180deg, transparent, white)'
|
||||
background='linear-gradient(180deg, rgb(255 255 255 / 40%), white)'
|
||||
/>
|
||||
|
||||
<Link
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Box, CloseButton, Container, Flex, IconButton, Image, Link, Stack, Text } from '@chakra-ui/react';
|
||||
import { HamburgerIcon } from '@chakra-ui/icons';
|
||||
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 = {
|
||||
@@ -29,6 +30,7 @@ function DesktopMenuLinks() {
|
||||
<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)' }}
|
||||
@@ -75,9 +77,9 @@ function MobileMenuLinks() {
|
||||
<Link href='/roadmaps'>Roadmaps</Link>
|
||||
<Link href='/guides'>Guides</Link>
|
||||
<Link href='/watch'>Videos</Link>
|
||||
<Link target='_blank' href={siteConfig.url.youtube}>YouTube</Link>
|
||||
<Link href='/thanks'>Thanks</Link>
|
||||
<Link href='/signup'>Subscribe</Link>
|
||||
<CloseButton onClick={() => setIsOpen(false)} pos='fixed' top='3px' right='15px' size='lg' />
|
||||
<CloseButton onClick={() => setIsOpen(false)} pos='fixed' top='40px' right='15px' size='lg' />
|
||||
</Stack>
|
||||
)}
|
||||
</>
|
||||
@@ -86,7 +88,7 @@ function MobileMenuLinks() {
|
||||
|
||||
export function GlobalHeader() {
|
||||
return (
|
||||
<Box bg='gray.900' p='20px 0'>
|
||||
<Box bg='gray.900' p='58px 0 20px'>
|
||||
<Container maxW='container.md'>
|
||||
<Flex justifyContent='space-between' alignItems='center'>
|
||||
<Box>
|
||||
@@ -98,7 +100,7 @@ export function GlobalHeader() {
|
||||
fontWeight={600}
|
||||
_hover={{ textDecoration: 'none' }}
|
||||
fontSize='18px'>
|
||||
<Image alt='' h='30px' w='30px' src='/logo.svg' mr='10px' />
|
||||
<RoadmapLogo style={{ height: '30px', width: '30px', marginRight: '10px' }} />
|
||||
<Text d={['block', 'none', 'block']} as='span'>roadmap.sh</Text>
|
||||
</Link>
|
||||
</Box>
|
||||
|
||||
4
components/icons/roadmap.svg
Normal file
4
components/icons/roadmap.svg
Normal 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 |
3
components/icons/youtube.svg
Normal file
3
components/icons/youtube.svg
Normal 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 |
@@ -1,22 +1,21 @@
|
||||
import React from 'react';
|
||||
import { Link, Text, Badge } from '@chakra-ui/react';
|
||||
|
||||
type BadgeLinkType = {
|
||||
target: string;
|
||||
variant: string;
|
||||
badgeText: string;
|
||||
href: string;
|
||||
children: React.ReactNode
|
||||
};
|
||||
|
||||
export function BadgeLink(props: BadgeLinkType) {
|
||||
const { target = '_blank', variant = 'success', badgeText, href, children } = props;
|
||||
const { target = '_blank', badgeText, href, children } = props;
|
||||
|
||||
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>
|
||||
<Text mb={0}>
|
||||
<Link fontWeight={500} textDecoration='underline' href={href} target={target}>
|
||||
<Badge colorScheme={'purple'} style={{ position: 'relative', top: '-2px' }}>{badgeText}</Badge> {children}
|
||||
</Link>
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -16,13 +16,13 @@ export function PageHeader(props: PageHeaderProps) {
|
||||
<Heading
|
||||
as='h1'
|
||||
color='black'
|
||||
fontSize={['33px', '33px', '40px']}
|
||||
fontSize={['28px', '33px', '40px']}
|
||||
fontWeight={700}
|
||||
mb={['2px', '2px', '5px']}
|
||||
>
|
||||
{title}
|
||||
</Heading>
|
||||
<Text fontSize={['14px', '14px', '15px']}>{subtitle}</Text>
|
||||
<Text fontSize={['13px', '14px', '15px']}>{subtitle}</Text>
|
||||
</Container>
|
||||
|
||||
{children && (
|
||||
|
||||
31
components/sticky-banner.tsx
Normal file
31
components/sticky-banner.tsx
Normal file
@@ -0,0 +1,31 @@
|
||||
import { Flex, Link, Text } from '@chakra-ui/react';
|
||||
import YouTubeLogo from '../components/icons/youtube.svg';
|
||||
import siteConfig from '../content/site.json';
|
||||
|
||||
export function StickyBanner() {
|
||||
return (
|
||||
<Flex as={Link}
|
||||
href={siteConfig.url.youtube}
|
||||
bg={'yellow.300'}
|
||||
color='gray.900'
|
||||
// bg={'teal.900'}
|
||||
// color='gray.300'
|
||||
alignItems='center'
|
||||
position='fixed'
|
||||
left={0}
|
||||
right={0}
|
||||
zIndex={999}
|
||||
justifyContent='center'
|
||||
py='8px'
|
||||
_hover={{ textDecoration: 'none', bg: 'yellow.400' }}
|
||||
// _hover={{ textDecoration: 'none', bg: 'teal.800', color: 'gray.100' }}
|
||||
target='_blank'
|
||||
>
|
||||
<YouTubeLogo style={{ height: '20px', display: 'inline-block', marginRight: '7px' }} />
|
||||
<Text as='span' fontWeight={500} fontSize='14px'>
|
||||
<Text as='span'>We now have a YouTube Channel. <Text as='span' d={['none', 'inline']}>Subscribe for the video
|
||||
content.</Text></Text>
|
||||
</Text>
|
||||
</Flex>
|
||||
);
|
||||
}
|
||||
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"id": "what-are-web-vitals",
|
||||
"title": "What are Web Vitals?",
|
||||
"description": "Learn what are the core web vitals and how to measure them.",
|
||||
"isPro": false,
|
||||
"authorUsername": "kamranahmedse",
|
||||
"updatedAt": "2021-09-05T19:59:14.191Z",
|
||||
"createdAt": "2021-09-05T19:59:14.191Z"
|
||||
},
|
||||
{
|
||||
"id": "what-is-sli-slo-sla",
|
||||
"title": "SLIs, SLOs and SLAs",
|
||||
"description": "Learn what are different indicators for performance identification of any service.",
|
||||
"isPro": false,
|
||||
"authorUsername": "kamranahmedse",
|
||||
"updatedAt": "2021-08-31T19:59:14.191Z",
|
||||
"createdAt": "2021-08-31T19:59:14.191Z"
|
||||
},
|
||||
{
|
||||
"id": "ci-cd",
|
||||
"title": "What is CI and CD?",
|
||||
|
||||
3
content/guides/what-are-web-vitals.md
Normal file
3
content/guides/what-are-web-vitals.md
Normal file
@@ -0,0 +1,3 @@
|
||||
[](/guides/web-vitals.png)
|
||||
|
||||
Here is the [original tweet](https://twitter.com/kamranahmedse/status/1425476526770987012) where this image was posted.
|
||||
3
content/guides/what-is-sli-slo-sla.md
Normal file
3
content/guides/what-is-sli-slo-sla.md
Normal file
@@ -0,0 +1,3 @@
|
||||
[](/guides/sli-slo-sla.jpeg)
|
||||
|
||||
Here is the [original tweet](https://twitter.com/kamranahmedse/status/1421778722865229824) where this image was posted.
|
||||
@@ -4,6 +4,10 @@
|
||||
"title": "Learn to become a modern frontend developer",
|
||||
"description": "Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development. Learn to become a modern frontend developer by following the steps, skills, resources and guides listed in this roadmap.",
|
||||
"keywords": [
|
||||
"frontend roadmap",
|
||||
"javascript roadmap",
|
||||
"frontend roadmap 2021",
|
||||
"javascript roadmap 2021",
|
||||
"guide to becoming a developer",
|
||||
"guide to becoming a frontend developer",
|
||||
"frontend developer",
|
||||
@@ -281,4 +285,4 @@
|
||||
},
|
||||
"id": "qa"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -10,12 +10,12 @@ Before I go ahead and list down the resources, please know that the roadmap and
|
||||
Get the basic understanding of internet, browsers, networks and other relevant knowledge.
|
||||
|
||||
* <BadgeLink badgeText='Read' href='/guides/what-is-internet'>What is Internet?</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=7_LPdttKXPc'>How the internet works in 5 minutes</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=7_LPdttKXPc'>How the internet works in 5 minutes</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://kamranahmed.info/blog/2016/08/13/http-in-depth/'>What is HTTP and how it evolved?</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://blog.cloudflare.com/http3-the-past-present-and-future/'>HTTP/3: the past, the present, and the future</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://kinsta.com/blog/http3/'>What Is HTTP/3 – Lowdown on the Fast New UDP-Based Protocol</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/'>How Browsers Work: Behind the scenes of modern web browsers</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=Rck3BALhI5c'>DNS as Fast As Possible</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=Rck3BALhI5c'>DNS as Fast As Possible</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://howdns.works/'>How DNS works?</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='/guides/dns-in-one-picture'>DNS in One Picture</BadgeLink>
|
||||
|
||||
@@ -25,9 +25,9 @@ HTML provides the skeleton of a webpage. Learn the basics of HTML; learn the bas
|
||||
Please know that I have put multiple links for each resource. While you may pick something new while going through each, you don't need to go through all of them - if you feel like you have understood the concepts and are just repeating what you learnt, you may skip the resource and move to exercises section.
|
||||
|
||||
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=UB1O30fR-EE'>HTML Crash Course For Absolute Beginners</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=UB1O30fR-EE'>HTML Crash Course For Absolute Beginners</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://www.w3schools.com/html/default.asp'>W3Schools – HTML Tutorial</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=pQN-pnXPaVg'>HTML Full Course - Build a Website Tutorial</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=pQN-pnXPaVg'>HTML Full Course - Build a Website Tutorial</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://hacks.mozilla.org/2016/08/a-few-html-tips/'>A few HTML tips</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://hackernoon.com/six-tips-to-set-up-a-better-html-document-ud1033z3z'>Six tips to set up a better HTML document</BadgeLink>
|
||||
* <BadgeLink badgeText='Read' href='https://www.w3schools.com/html/html5_semantic_elements.asp'>HTML Semantic Elements</BadgeLink>
|
||||
@@ -37,16 +37,16 @@ Please know that I have put multiple links for each resource. While you may pick
|
||||
With the help of HTML, you create structure for your pages. CSS allows you to style your pages and make them pretty. If you take the analogy of human body, the skeleton would be the HTML, skin would be the CSS and muscles that help us move would be JavaScript - we will learn more about JavaScript in the coming sections.
|
||||
|
||||
* <BadgeLink badgeText='Read' href='https://www.w3schools.com/css/'>W3Schools – CSS Tutorial</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=yfoY53QXEnI'>CSS Crash Course For Absolute Beginners</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=Wm6CUkswsNw'>Build An HTML5 Website With A Responsive Layout</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://youtu.be/JJSoEo8JSnc?t=46'>Flexbox CSS In 20 Minutes</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=yfoY53QXEnI'>CSS Crash Course For Absolute Beginners</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=Wm6CUkswsNw'>Build An HTML5 Website With A Responsive Layout</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://youtu.be/JJSoEo8JSnc?t=46'>Flexbox CSS In 20 Minutes</BadgeLink>
|
||||
|
||||
## Basics of JavaScript
|
||||
JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on. In this section, you will learn the basics of JavaScript.
|
||||
|
||||
* <BadgeLink badgeText='Read' href='https://www.w3schools.com/js/'>W3Schools – JavaScript Tutorial</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://youtu.be/hdI2bqOjy3c?t=2'>JavaScript Crash Course for Beginners</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://youtu.be/P7t13SGytRk?t=22'>Build a Netflix Landing Page Clone with HTML, CSS & JS</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://youtu.be/hdI2bqOjy3c?t=2'>JavaScript Crash Course for Beginners</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://youtu.be/P7t13SGytRk?t=22'>Build a Netflix Landing Page Clone with HTML, CSS & JS</BadgeLink>
|
||||
|
||||
## Version Control Systems and Git
|
||||
|
||||
@@ -54,9 +54,9 @@ Version control systems allow you to track changes to your codebase/files over t
|
||||
|
||||
In this section, you will learn what version control systems are and understand how to use Git which is the de facto VCS.
|
||||
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=zbKdDsNNOhg'>Version Control System Introduction</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=SWYqp7iY_Tc'>Git & GitHub Crash Course For Beginners</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://youtu.be/Y9XZQO1n_7c?t=21'>Learn Git in 20 Minutes</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=zbKdDsNNOhg'>Version Control System Introduction</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=SWYqp7iY_Tc'>Git & GitHub Crash Course For Beginners</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://youtu.be/Y9XZQO1n_7c?t=21'>Learn Git in 20 Minutes</BadgeLink>
|
||||
|
||||
Now that you know what git is go ahead and create an account on [GitHub](https://github.com) and push everything that you do from now on to GitHub so that you can get the practice and get it reviewed from the other people in the community.
|
||||
|
||||
@@ -65,8 +65,8 @@ Now that you know what git is go ahead and create an account on [GitHub](https:/
|
||||
In this section you will learn how to use package managers and get started with the "modern JavaScript".
|
||||
|
||||
* <BadgeLink badgeText='Read' href='https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70'>Modern JavaScript for Dinosaurs (Don't worry if you don't understand some parts of it)</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=8Rmj5UY5mJk'>What is NPM and how to use it</BadgeLink>
|
||||
* <BadgeLink variant='primary' badgeText='Watch' href='https://www.youtube.com/watch?v=jHDhaSSKmB0'>NPM Crash Course</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=8Rmj5UY5mJk'>What is NPM and how to use it</BadgeLink>
|
||||
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=jHDhaSSKmB0'>NPM Crash Course</BadgeLink>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
@@ -1,6 +1,31 @@
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const rehypePrism = require('@mapbox/rehype-prism');
|
||||
|
||||
/**
|
||||
* Loads the configuration for the given environment
|
||||
* @param env
|
||||
* @returns {*}
|
||||
*/
|
||||
const loadConfig = (env = 'dev') => {
|
||||
const configPath = `./config/${env}.json`;
|
||||
if (!fs.existsSync(configPath)) {
|
||||
console.warn(`Config file not found: ${configPath}. Using environment variables only.`);
|
||||
}
|
||||
|
||||
const appConfig = {};
|
||||
|
||||
for (let key in process.env) {
|
||||
if (!key.startsWith('ROADMAP_')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
appConfig[key.replace('ROADMAP_', '')] = process.env[key];
|
||||
}
|
||||
|
||||
return appConfig;
|
||||
};
|
||||
|
||||
const withMDX = require('@next/mdx')({
|
||||
extension: /\.(md|mdx)?$/,
|
||||
options: {
|
||||
@@ -11,6 +36,7 @@ const withMDX = require('@next/mdx')({
|
||||
let nextConfig = {
|
||||
reactStrictMode: true,
|
||||
poweredByHeader: false,
|
||||
env: loadConfig(process.env.NODE_ENV),
|
||||
|
||||
webpack(config, options) {
|
||||
config.resolve.modules.push(path.resolve('./'));
|
||||
|
||||
12463
package-lock.json
generated
12463
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,13 @@
|
||||
import { Box, Button, Container, Link, Stack } from '@chakra-ui/react';
|
||||
import { DownloadIcon, EmailIcon } from '@chakra-ui/icons';
|
||||
import { GlobalHeader } from '../components/global-header';
|
||||
import { OpensourceBanner } from '../components/opensource-banner';
|
||||
import { UpdatesBanner } from '../components/updates-banner';
|
||||
import { Footer } from '../components/footer';
|
||||
import { PageHeader } from '../components/page-header';
|
||||
import { getAllRoadmaps, getRoadmapById, RoadmapType } from '../lib/roadmap';
|
||||
import MdRenderer from '../components/md-renderer';
|
||||
import Helmet from '../components/helmet';
|
||||
import { Box, Button, Text, Container, Link, Stack } from '@chakra-ui/react';
|
||||
import { ArrowBackIcon, AtSignIcon, DownloadIcon } from '@chakra-ui/icons';
|
||||
import { GlobalHeader } from '../../components/global-header';
|
||||
import { OpensourceBanner } from '../../components/opensource-banner';
|
||||
import { UpdatesBanner } from '../../components/updates-banner';
|
||||
import { Footer } from '../../components/footer';
|
||||
import { PageHeader } from '../../components/page-header';
|
||||
import { getAllRoadmaps, getRoadmapById, RoadmapType } from '../../lib/roadmap';
|
||||
import MdRenderer from '../../components/md-renderer';
|
||||
import Helmet from '../../components/helmet';
|
||||
|
||||
type RoadmapProps = {
|
||||
roadmap: RoadmapType;
|
||||
@@ -36,7 +36,7 @@ function TextualRoadmap(props: RoadmapProps) {
|
||||
|
||||
// Remove trailing slashes
|
||||
const normalizedPath = roadmap.contentPath.replace(/^\//, '');
|
||||
const RoadmapContent = require(`../content/${normalizedPath}`).default;
|
||||
const RoadmapContent = require(`../../content/${normalizedPath}`).default;
|
||||
|
||||
return (
|
||||
<Container maxW={'container.md'} position='relative'>
|
||||
@@ -64,6 +64,11 @@ export default function Roadmap(props: RoadmapProps) {
|
||||
subtitle={roadmap.description}
|
||||
>
|
||||
<Stack mt='20px' isInline>
|
||||
<Button d={['flex', 'flex']} as={Link} href={'/roadmaps'} size='xs' py='14px' px='10px'
|
||||
colorScheme='teal' variant='solid' _hover={{ textDecoration: 'none' }}>
|
||||
← <Text as='span' d={['none', 'inline']} ml='5px'>All Roadmaps</Text>
|
||||
</Button>
|
||||
|
||||
{roadmap.pdfUrl && (
|
||||
<Button as={Link}
|
||||
href={roadmap.pdfUrl}
|
||||
@@ -75,10 +80,10 @@ export default function Roadmap(props: RoadmapProps) {
|
||||
colorScheme='yellow'
|
||||
variant='solid'
|
||||
_hover={{ textDecoration: 'none' }}>
|
||||
Download PDF
|
||||
Download
|
||||
</Button>
|
||||
)}
|
||||
<Button as={Link} href={'/signup'} size='xs' py='14px' px='10px' leftIcon={<EmailIcon />}
|
||||
<Button as={Link} href={'/signup'} size='xs' py='14px' px='10px' leftIcon={<AtSignIcon />}
|
||||
colorScheme='yellow' variant='solid' _hover={{ textDecoration: 'none' }}>
|
||||
Subscribe
|
||||
</Button>
|
||||
121
pages/[roadmap]/resources.tsx
Normal file
121
pages/[roadmap]/resources.tsx
Normal file
@@ -0,0 +1,121 @@
|
||||
import { Box, Button, Container, Link, Stack } from '@chakra-ui/react';
|
||||
import { ArrowBackIcon, AtSignIcon, DownloadIcon } from '@chakra-ui/icons';
|
||||
import { GlobalHeader } from '../../components/global-header';
|
||||
import { OpensourceBanner } from '../../components/opensource-banner';
|
||||
import { UpdatesBanner } from '../../components/updates-banner';
|
||||
import { Footer } from '../../components/footer';
|
||||
import { PageHeader } from '../../components/page-header';
|
||||
import { getAllRoadmaps, getRoadmapById, RoadmapType } from '../../lib/roadmap';
|
||||
import MdRenderer from '../../components/md-renderer';
|
||||
import Helmet from '../../components/helmet';
|
||||
|
||||
type RoadmapProps = {
|
||||
roadmap: RoadmapType;
|
||||
};
|
||||
|
||||
function TextualRoadmap(props: RoadmapProps) {
|
||||
const { roadmap } = props;
|
||||
if (!roadmap.resourcesPath) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Remove trailing slashes
|
||||
const normalizedPath = roadmap.resourcesPath.replace(/^\//, '');
|
||||
const RoadmapContent = require(`../../content/${normalizedPath}`).default;
|
||||
|
||||
return (
|
||||
<Container maxW={'container.md'} position='relative'>
|
||||
<MdRenderer>
|
||||
<RoadmapContent />
|
||||
</MdRenderer>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Roadmap(props: RoadmapProps) {
|
||||
const { roadmap } = props;
|
||||
|
||||
return (
|
||||
<Box bg='white' minH='100vh'>
|
||||
<GlobalHeader />
|
||||
<Helmet
|
||||
title={roadmap?.seo?.title || roadmap.title}
|
||||
description={roadmap?.seo?.description || roadmap.description}
|
||||
keywords={roadmap?.seo.keywords || []}
|
||||
/>
|
||||
<Box mb='60px'>
|
||||
<PageHeader
|
||||
title={roadmap.title}
|
||||
subtitle={roadmap.description}
|
||||
>
|
||||
<Stack mt='20px' isInline>
|
||||
<Button d={['none', 'flex']} as={Link} href={'/roadmaps'} size='xs' py='14px' px='10px'
|
||||
leftIcon={<ArrowBackIcon />}
|
||||
colorScheme='teal' variant='solid' _hover={{ textDecoration: 'none' }}>
|
||||
All Roadmaps
|
||||
</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 PDF
|
||||
</Button>
|
||||
)}
|
||||
<Button as={Link} href={'/signup'} size='xs' py='14px' px='10px' leftIcon={<AtSignIcon />}
|
||||
colorScheme='yellow' variant='solid' _hover={{ textDecoration: 'none' }}>
|
||||
Subscribe
|
||||
</Button>
|
||||
</Stack>
|
||||
</PageHeader>
|
||||
|
||||
<TextualRoadmap roadmap={roadmap} />
|
||||
</Box>
|
||||
|
||||
<OpensourceBanner />
|
||||
<UpdatesBanner />
|
||||
<Footer />
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
type StaticPathItem = {
|
||||
params: {
|
||||
roadmap: string
|
||||
}
|
||||
};
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const roadmaps = getAllRoadmaps();
|
||||
const paramsList: StaticPathItem[] = roadmaps.map(roadmap => ({
|
||||
params: { 'roadmap': roadmap.id }
|
||||
}));
|
||||
|
||||
return {
|
||||
paths: paramsList,
|
||||
fallback: false
|
||||
};
|
||||
}
|
||||
|
||||
type ContextType = {
|
||||
params: {
|
||||
roadmap: string
|
||||
}
|
||||
};
|
||||
|
||||
export async function getStaticProps(context: ContextType) {
|
||||
const roadmapId: string = context?.params?.roadmap;
|
||||
|
||||
return {
|
||||
props: {
|
||||
roadmap: getRoadmapById(roadmapId)
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import 'prism-themes/themes/prism-shades-of-purple.css';
|
||||
import { roadmapTheme } from '../styles/theme';
|
||||
import { firePageView } from '../lib/gtag';
|
||||
import '../styles/carbon.css';
|
||||
import { StickyBanner } from '../components/sticky-banner';
|
||||
|
||||
function MyApp({ Component, pageProps }: AppProps) {
|
||||
useEffect(() => {
|
||||
@@ -13,6 +14,7 @@ function MyApp({ Component, pageProps }: AppProps) {
|
||||
|
||||
return (
|
||||
<ChakraProvider theme={roadmapTheme}>
|
||||
<StickyBanner />
|
||||
<Component {...pageProps} />
|
||||
</ChakraProvider>
|
||||
);
|
||||
|
||||
@@ -17,11 +17,13 @@ import { OpensourceBanner } from '../components/opensource-banner';
|
||||
import { UpdatesBanner } from '../components/updates-banner';
|
||||
import { Footer } from '../components/footer';
|
||||
import siteConfig from '../content/site.json';
|
||||
import Helmet from '../components/helmet';
|
||||
|
||||
export default function Thanks() {
|
||||
return (
|
||||
<Box bg='gray.50' minH='100vh'>
|
||||
<GlobalHeader />
|
||||
<Helmet title={'Thanks to Sponsors'} />
|
||||
<Box mb='60px'>
|
||||
<Container maxW={'container.sm'} position='relative'>
|
||||
<Box mt='60px'>
|
||||
@@ -74,17 +76,24 @@ export default function Thanks() {
|
||||
<Box mt='40px'>
|
||||
<Heading mb='15px' fontSize='25px' as='h2'>Monthly Sponsors</Heading>
|
||||
<UnorderedList>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/MelnikovAG'>Alexander
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/Stuart-cmd'>Stuart Bowles</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/MelnikovAG'>Alexander
|
||||
Blake</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/josephjacks'>Joseph
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/josephjacks'>Joseph
|
||||
Jacks</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/MustafaMagdi'>Mustafa
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/MustafaMagdi'>Mustafa
|
||||
Magdi</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/dmytbolko'>Dmytro
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/dmytbolko'>Dmytro
|
||||
Bolkachov</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500}
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/liquidaty'>Liquidaty</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/Lazy-AL'>Anri
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/Lazy-AL'>Anri
|
||||
Lazash</Link></ListItem>
|
||||
</UnorderedList>
|
||||
</Box>
|
||||
@@ -92,17 +101,24 @@ export default function Thanks() {
|
||||
<Box mt='40px'>
|
||||
<Heading mb='15px' fontSize='25px' as='h2'>Past or One Time Sponsors</Heading>
|
||||
<UnorderedList>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500}
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/mian-muhammad'>Mian Muhammad</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://digitalocean.com'>DigitalOcean</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/gabcvit'>Gabriel
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/gabcvit'>Gabriel
|
||||
Checchia</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/hadasbro'>Slawomir
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/hadasbro'>Slawomir
|
||||
Hadas</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/tugotron'>Victor
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/tugotron'>Victor
|
||||
Sevelev</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/matheusfelipeog'>Matheus
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/matheusfelipeog'>Matheus
|
||||
Felipe</Link></ListItem>
|
||||
<ListItem mb='5px'><Link color='blue.500' fontWeight={500} href='https://github.com/emretanriverdi'>Emre
|
||||
<ListItem mb='5px'><Link color='blue.500' target='_blank' fontWeight={500}
|
||||
href='https://github.com/emretanriverdi'>Emre
|
||||
Tanriverdi</Link></ListItem>
|
||||
</UnorderedList>
|
||||
</Box>
|
||||
@@ -110,7 +126,8 @@ export default function Thanks() {
|
||||
<Box mt='40px' borderWidth={1} padding='20px' rounded='5px'>
|
||||
<Heading as='h2' mb='10px'>Support the Project</Heading>
|
||||
<Text mb='15px'>Sponsor me on GitHub to help ensure the continuity of the project.</Text>
|
||||
<Button as={Link} href={siteConfig.url.sponsor} colorScheme='green'>Sponsor me on GitHub</Button>
|
||||
<Button _hover={{ textDecoration: 'none' }} as={Link} href={siteConfig.url.sponsor} colorScheme='green'>Sponsor
|
||||
me on GitHub</Button>
|
||||
</Box>
|
||||
</Box>
|
||||
</Container>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Box, Container } from '@chakra-ui/react';
|
||||
import { Box, Container, Link, Text } from '@chakra-ui/react';
|
||||
import { GlobalHeader } from '../../components/global-header';
|
||||
import { OpensourceBanner } from '../../components/opensource-banner';
|
||||
import { UpdatesBanner } from '../../components/updates-banner';
|
||||
@@ -6,6 +6,7 @@ import { Footer } from '../../components/footer';
|
||||
import { ContentPageHeader } from '../../components/content-page-header';
|
||||
import MdRenderer from '../../components/md-renderer';
|
||||
import { getAllVideos, getVideoById, VideoType } from '../../lib/video';
|
||||
import Helmet from '../../components/helmet';
|
||||
|
||||
type VideoProps = {
|
||||
video: VideoType;
|
||||
@@ -18,6 +19,7 @@ export default function Video(props: VideoProps) {
|
||||
return (
|
||||
<Box bg='white' minH='100vh'>
|
||||
<GlobalHeader />
|
||||
<Helmet title={video.title} description={video.description} />
|
||||
<Box mb='60px'>
|
||||
<ContentPageHeader
|
||||
title={video.title}
|
||||
@@ -34,6 +36,12 @@ export default function Video(props: VideoProps) {
|
||||
}}
|
||||
/>
|
||||
<Container maxW={'container.md'} position='relative'>
|
||||
{video.youtubeLink && (
|
||||
<Text mb='18px'>We are working on a better watch page — for now this <Link fontWeight={600}
|
||||
textDecoration={'underline'}
|
||||
href={video.youtubeLink}
|
||||
target='_blank'>video is best
|
||||
viewed on YouTube</Link>.</Text>)}
|
||||
<MdRenderer>
|
||||
<VideoContent />
|
||||
</MdRenderer>
|
||||
|
||||
BIN
public/guides/sli-slo-sla.jpeg
Normal file
BIN
public/guides/sli-slo-sla.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 168 KiB |
BIN
public/guides/web-vitals.png
Normal file
BIN
public/guides/web-vitals.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
5
public/sponsors/youtube.svg
Normal file
5
public/sponsors/youtube.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<path style="fill:#D8362A;" d="M506.703,145.655c0,0-5.297-37.959-20.303-54.731c-19.421-22.069-41.49-22.069-51.2-22.952 C363.697,62.676,256,61.793,256,61.793l0,0c0,0-107.697,0.883-179.2,6.179c-9.71,0.883-31.779,1.766-51.2,22.952 C9.71,107.697,5.297,145.655,5.297,145.655S0,190.676,0,235.697v41.49c0,45.021,5.297,89.159,5.297,89.159 s5.297,37.959,20.303,54.731c19.421,22.069,45.021,21.186,56.497,23.835C122.703,449.324,256,450.207,256,450.207 s107.697,0,179.2-6.179c9.71-0.883,31.779-1.766,51.2-22.952c15.007-16.772,20.303-54.731,20.303-54.731S512,321.324,512,277.186 v-41.49C512,190.676,506.703,145.655,506.703,145.655"/>
|
||||
<polygon style="fill:#FFFFFF;" points="194.207,166.841 194.207,358.4 361.931,264.828 "/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 940 B |
Reference in New Issue
Block a user