arikchakma-feat/badges
Arik Chakma 1 year ago
commit 01bf5397c8
  1. 8
      package.json
  2. 273
      pnpm-lock.yaml
  3. BIN
      public/images/partners/apollo-workshop.png
  4. 1
      public/jsons/roadmaps/frontend-beginner.json
  5. 1
      public/jsons/roadmaps/frontend.json
  6. BIN
      public/pdfs/roadmaps/code-review.pdf
  7. 19
      scripts/compress-jsons.cjs
  8. 4
      src/components/FrameRenderer/FrameRenderer.astro
  9. 31
      src/components/FrameRenderer/renderer.ts
  10. 0
      src/data/best-practices/api-security/api-security.json
  11. 0
      src/data/best-practices/aws/aws.json
  12. 0
      src/data/best-practices/code-review/code-review.json
  13. 0
      src/data/best-practices/frontend-performance/frontend-performance.json
  14. 0
      src/data/roadmaps/android/android.json
  15. 0
      src/data/roadmaps/angular/angular.json
  16. 0
      src/data/roadmaps/aspnet-core/aspnet-core.json
  17. 0
      src/data/roadmaps/backend/backend.json
  18. 1
      src/data/roadmaps/backend/content/102-os-general-knowledge/100-terminal-usage.md
  19. 2
      src/data/roadmaps/backend/content/104-version-control-systems/101-git.md
  20. 1
      src/data/roadmaps/backend/content/106-relational-databases/101-mysql.md
  21. 0
      src/data/roadmaps/blockchain/blockchain.json
  22. 1
      src/data/roadmaps/code-review/code-review.json
  23. 47
      src/data/roadmaps/code-review/code-review.md
  24. 6
      src/data/roadmaps/code-review/content/100-code-style.md
  25. 7
      src/data/roadmaps/code-review/content/101-tests.md
  26. 5
      src/data/roadmaps/code-review/content/102-documentation.md
  27. 10
      src/data/roadmaps/code-review/content/103-implementation-semantics.md
  28. 8
      src/data/roadmaps/code-review/content/104-api-semantics.md
  29. 1
      src/data/roadmaps/code-review/content/index.md
  30. 0
      src/data/roadmaps/code-review/faqs.astro
  31. 0
      src/data/roadmaps/computer-science/computer-science.json
  32. 3
      src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md
  33. 0
      src/data/roadmaps/cpp/cpp.json
  34. 0
      src/data/roadmaps/cyber-security/cyber-security.json
  35. 0
      src/data/roadmaps/design-system/design-system.json
  36. 1
      src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/100-argo-cd.md
  37. 0
      src/data/roadmaps/devops/devops.json
  38. 0
      src/data/roadmaps/docker/docker.json
  39. 3
      src/data/roadmaps/docker/docker.md
  40. 3
      src/data/roadmaps/flutter/content/111-state-management/106-value-notifier.md
  41. 3
      src/data/roadmaps/flutter/content/111-state-management/107-change-notifier.md
  42. 0
      src/data/roadmaps/flutter/flutter.json
  43. 1
      src/data/roadmaps/frontend/content/117-progressive-web-apps/112-lighthouse.md
  44. 1921
      src/data/roadmaps/frontend/frontend-beginner.json
  45. 14265
      src/data/roadmaps/frontend/frontend.json
  46. 0
      src/data/roadmaps/full-stack/full-stack.json
  47. 0
      src/data/roadmaps/golang/golang.json
  48. 0
      src/data/roadmaps/graphql/graphql.json
  49. 0
      src/data/roadmaps/java/java.json
  50. 0
      src/data/roadmaps/javascript/javascript.json
  51. 0
      src/data/roadmaps/kubernetes/kubernetes.json
  52. 0
      src/data/roadmaps/mongodb/mongodb.json
  53. 2
      src/data/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/index.md
  54. 0
      src/data/roadmaps/nodejs/nodejs.json
  55. 0
      src/data/roadmaps/postgresql-dba/postgresql-dba.json
  56. 0
      src/data/roadmaps/prompt-engineering/prompt-engineering.json
  57. 2
      src/data/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md
  58. 1
      src/data/roadmaps/python/content/107-python-testing/101-pytest.md
  59. 0
      src/data/roadmaps/python/python.json
  60. 0
      src/data/roadmaps/qa/qa.json
  61. 5
      src/data/roadmaps/react/content/102-components/103-props-vs-state.md
  62. 4
      src/data/roadmaps/react/content/102-components/104-conditional-rendering.md
  63. 5
      src/data/roadmaps/react/content/102-components/index.md
  64. 0
      src/data/roadmaps/react/react.json
  65. 0
      src/data/roadmaps/software-architect/software-architect.json
  66. 0
      src/data/roadmaps/software-design-architecture/software-design-architecture.json
  67. 0
      src/data/roadmaps/spring-boot/spring-boot.json
  68. 1
      src/data/roadmaps/system-design/content/110-application-layer/100-microservices.md
  69. 0
      src/data/roadmaps/system-design/system-design.json
  70. 0
      src/data/roadmaps/typescript/typescript.json
  71. 4
      src/data/roadmaps/ux-design/content/100-human-decision-making/frameworks/100-bj-frogg-behavior-model.md
  72. 4
      src/data/roadmaps/ux-design/content/100-human-decision-making/frameworks/101-stephen-wendell-create-action-funnel.md
  73. 0
      src/data/roadmaps/ux-design/ux-design.json
  74. 0
      src/data/roadmaps/vue/vue.json
  75. 1
      src/lib/roadmap.ts
  76. 7
      src/pages/[roadmapId]/index.astro
  77. 27
      src/pages/[roadmapId]/index.json.ts
  78. 30
      src/pages/best-practices/[bestPracticeId]/index.json.ts

@ -21,12 +21,12 @@
"test:e2e": "playwright test"
},
"dependencies": {
"@astrojs/preact": "^2.2.0",
"@astrojs/sitemap": "^1.3.1",
"@astrojs/preact": "^2.2.1",
"@astrojs/sitemap": "^1.3.3",
"@astrojs/tailwind": "^3.1.3",
"@fingerprintjs/fingerprintjs": "^3.4.1",
"@nanostores/preact": "^0.5.0",
"astro": "^2.5.5",
"astro": "^2.5.7",
"astro-compress": "^1.1.46",
"jose": "^4.14.4",
"js-cookie": "^3.0.5",
@ -48,7 +48,7 @@
"markdown-it": "^13.0.1",
"openai": "^3.2.1",
"prettier": "^2.8.8",
"prettier-plugin-astro": "^0.9.1",
"prettier-plugin-astro": "^0.10.0",
"prettier-plugin-tailwindcss": "^0.3.0"
}
}

@ -1,15 +1,15 @@
lockfileVersion: 5.4
specifiers:
'@astrojs/preact': ^2.2.0
'@astrojs/sitemap': ^1.3.1
'@astrojs/preact': ^2.2.1
'@astrojs/sitemap': ^1.3.3
'@astrojs/tailwind': ^3.1.3
'@fingerprintjs/fingerprintjs': ^3.4.1
'@nanostores/preact': ^0.5.0
'@playwright/test': ^1.34.3
'@tailwindcss/typography': ^0.5.9
'@types/js-cookie': ^3.0.3
astro: ^2.5.5
astro: ^2.5.7
astro-compress: ^1.1.46
csv-parser: ^3.0.0
gh-pages: ^5.0.0
@ -23,19 +23,19 @@ specifiers:
openai: ^3.2.1
preact: ^10.15.1
prettier: ^2.8.8
prettier-plugin-astro: ^0.9.1
prettier-plugin-astro: ^0.10.0
prettier-plugin-tailwindcss: ^0.3.0
rehype-external-links: ^2.1.0
roadmap-renderer: ^1.0.6
tailwindcss: ^3.3.2
dependencies:
'@astrojs/preact': 2.2.0_preact@10.15.1
'@astrojs/sitemap': 1.3.1
'@astrojs/tailwind': 3.1.3_w4mihal45edfrnncnioktvfyqy
'@astrojs/preact': 2.2.1_preact@10.15.1
'@astrojs/sitemap': 1.3.3
'@astrojs/tailwind': 3.1.3_cyxi2rbbvaq22julk2hkhgjf7u
'@fingerprintjs/fingerprintjs': 3.4.1
'@nanostores/preact': 0.5.0_m2wbkjxz7237icvaxqi7ignbgm
astro: 2.5.5
astro: 2.5.7
astro-compress: 1.1.46
jose: 4.14.4
js-cookie: 3.0.5
@ -57,8 +57,8 @@ devDependencies:
markdown-it: 13.0.1
openai: 3.2.1
prettier: 2.8.8
prettier-plugin-astro: 0.9.1
prettier-plugin-tailwindcss: 0.3.0_lt2urjvx44zpywt7u6o2ilexia
prettier-plugin-astro: 0.10.0
prettier-plugin-tailwindcss: 0.3.0_pe5dke5lusx3jwzlx77xu7mxju
packages:
@ -76,12 +76,16 @@ packages:
/@astrojs/compiler/1.4.2:
resolution: {integrity: sha512-xoRp7JpiMZPK/beUcZEM5kM44Z/h20wwwQcl54duPqQMyySG9vZ5xMM6dYiQmn7b3XzpZs0cT6TRDoJJ5gwHAQ==}
dev: false
/@astrojs/compiler/1.5.0:
resolution: {integrity: sha512-k04X/7nlMklU0HQUScxbCTf5n8/Vr+0U0bawb9QWulWxd6qJf3FmBrNATgTYiltjB4pc5HBqmmttAfFi7m4lLg==}
/@astrojs/language-server/1.0.0:
resolution: {integrity: sha512-oEw7AwJmzjgy6HC9f5IdrphZ1GVgfV/+7xQuyf52cpTiRWd/tJISK3MsKP0cDkVlfodmNABNFnAaAWuLZEiiiA==}
hasBin: true
dependencies:
'@astrojs/compiler': 1.4.2
'@astrojs/compiler': 1.5.0
'@jridgewell/trace-mapping': 0.3.18
'@vscode/emmet-helper': 2.8.7
events: 3.3.0
@ -97,13 +101,13 @@ packages:
vscode-uri: 3.0.7
dev: false
/@astrojs/markdown-remark/2.2.1_astro@2.5.5:
/@astrojs/markdown-remark/2.2.1_astro@2.5.7:
resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==}
peerDependencies:
astro: ^2.5.0
dependencies:
'@astrojs/prism': 2.1.2
astro: 2.5.5
astro: 2.5.7
github-slugger: 1.5.0
import-meta-resolve: 2.2.2
rehype-raw: 6.1.1
@ -120,8 +124,8 @@ packages:
- supports-color
dev: false
/@astrojs/preact/2.2.0_preact@10.15.1:
resolution: {integrity: sha512-SP8ODC/ywPFytVF9jX0Nrf9JoMFgXdsRPritLV9v4zPnarIwypW0kIFgm3rjT4ot8CQQj9J5cztqmD+hrDOvMg==}
/@astrojs/preact/2.2.1_preact@10.15.1:
resolution: {integrity: sha512-lObgrX/qfK2sEnGDWoyQ8KojFJ54FIKB4TeywWmgj4ZTg0yLnvvOz6ReyPQ8VfR/1MU+vWs22jE4cuZJ/vPnOA==}
engines: {node: '>=16.12.0'}
peerDependencies:
preact: ^10.6.5
@ -143,21 +147,21 @@ packages:
prismjs: 1.29.0
dev: false
/@astrojs/sitemap/1.3.1:
resolution: {integrity: sha512-4ZBug4ml+2Nl5/Uh4VSja8Kij/DU7/RaNMciXCNm1EzQkP/jm+nqMG1liDDcQK5zXPAoLeaat06IbhNlruvQjg==}
/@astrojs/sitemap/1.3.3:
resolution: {integrity: sha512-TPyyb/hKxc+bHPpSoNPhsuI0QOTVzq2tueg2r0CTH1HqigYIAA2LQkCBlQzz85R+LrOZpv4kXYmhxdDcSkJCmA==}
dependencies:
sitemap: 7.1.1
zod: 3.21.4
dev: false
/@astrojs/tailwind/3.1.3_w4mihal45edfrnncnioktvfyqy:
/@astrojs/tailwind/3.1.3_cyxi2rbbvaq22julk2hkhgjf7u:
resolution: {integrity: sha512-10S1omrv5K5HRVAZ0fBgN5vQykn2HRL332LAVFyBASMn1Ff6gDfSK+CPUeUu94eZUOEaPnECLK8EHAqZ8iY9CA==}
peerDependencies:
astro: ^2.5.0
tailwindcss: ^3.0.24
dependencies:
'@proload/core': 0.3.3
astro: 2.5.5
astro: 2.5.7
autoprefixer: 10.4.14_postcss@8.4.23
postcss: 8.4.23
postcss-load-config: 4.0.1_postcss@8.4.23
@ -182,8 +186,8 @@ packages:
- supports-color
dev: false
/@astrojs/webapi/2.1.1:
resolution: {integrity: sha512-mHZ7VgPNMeV3TYIw3SGHTKaJosBxA8bTzZ3QhNw509qvCJca4Lkjes8JywimuwTn+TMjEiv7ksNfwRluad3jqA==}
/@astrojs/webapi/2.2.0:
resolution: {integrity: sha512-mHAOApWyjqSe5AQMOUD9rsZJqbMQqe3Wosb1a40JV6Okvyxj1G6GTlthwYadWCymq/lbgwh0PLiY8Fr4eFxtuQ==}
dependencies:
undici: 5.22.0
dev: false
@ -200,6 +204,11 @@ packages:
engines: {node: '>=6.9.0'}
dev: false
/@babel/compat-data/7.22.3:
resolution: {integrity: sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/core/7.21.5:
resolution: {integrity: sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==}
engines: {node: '>=6.9.0'}
@ -223,6 +232,29 @@ packages:
- supports-color
dev: false
/@babel/core/7.22.1:
resolution: {integrity: sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.21.4
'@babel/generator': 7.22.3
'@babel/helper-compilation-targets': 7.22.1_@babel+core@7.22.1
'@babel/helper-module-transforms': 7.22.1
'@babel/helpers': 7.22.3
'@babel/parser': 7.22.4
'@babel/template': 7.21.9
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
convert-source-map: 1.9.0
debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.0
transitivePeerDependencies:
- supports-color
dev: false
/@babel/generator/7.21.5:
resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==}
engines: {node: '>=6.9.0'}
@ -233,6 +265,16 @@ packages:
jsesc: 2.5.2
dev: false
/@babel/generator/7.22.3:
resolution: {integrity: sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
jsesc: 2.5.2
dev: false
/@babel/helper-annotate-as-pure/7.18.6:
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
engines: {node: '>=6.9.0'}
@ -254,24 +296,43 @@ packages:
semver: 6.3.0
dev: false
/@babel/helper-compilation-targets/7.22.1_@babel+core@7.22.1:
resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/compat-data': 7.22.3
'@babel/core': 7.22.1
'@babel/helper-validator-option': 7.21.0
browserslist: 4.21.5
lru-cache: 5.1.1
semver: 6.3.0
dev: false
/@babel/helper-environment-visitor/7.21.5:
resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-environment-visitor/7.22.1:
resolution: {integrity: sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-function-name/7.21.0:
resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.20.7
'@babel/types': 7.21.5
'@babel/template': 7.21.9
'@babel/types': 7.22.4
dev: false
/@babel/helper-hoist-variables/7.18.6:
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.21.5
'@babel/types': 7.22.4
dev: false
/@babel/helper-module-imports/7.21.4:
@ -297,6 +358,22 @@ packages:
- supports-color
dev: false
/@babel/helper-module-transforms/7.22.1:
resolution: {integrity: sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-environment-visitor': 7.22.1
'@babel/helper-module-imports': 7.21.4
'@babel/helper-simple-access': 7.21.5
'@babel/helper-split-export-declaration': 7.18.6
'@babel/helper-validator-identifier': 7.19.1
'@babel/template': 7.21.9
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
transitivePeerDependencies:
- supports-color
dev: false
/@babel/helper-plugin-utils/7.21.5:
resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==}
engines: {node: '>=6.9.0'}
@ -342,6 +419,17 @@ packages:
- supports-color
dev: false
/@babel/helpers/7.22.3:
resolution: {integrity: sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.21.9
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
transitivePeerDependencies:
- supports-color
dev: false
/@babel/highlight/7.18.6:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
@ -356,7 +444,15 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.21.5
'@babel/types': 7.22.4
dev: false
/@babel/parser/7.22.4:
resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.22.4
dev: false
/@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.5:
@ -369,6 +465,16 @@ packages:
'@babel/helper-plugin-utils': 7.21.5
dev: false
/@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.22.1:
resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.22.1
'@babel/helper-plugin-utils': 7.21.5
dev: false
/@babel/plugin-transform-react-jsx/7.21.5_@babel+core@7.21.5:
resolution: {integrity: sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==}
engines: {node: '>=6.9.0'}
@ -383,6 +489,20 @@ packages:
'@babel/types': 7.21.5
dev: false
/@babel/plugin-transform-react-jsx/7.21.5_@babel+core@7.22.1:
resolution: {integrity: sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.22.1
'@babel/helper-annotate-as-pure': 7.18.6
'@babel/helper-module-imports': 7.21.4
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.22.1
'@babel/types': 7.21.5
dev: false
/@babel/template/7.20.7:
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
engines: {node: '>=6.9.0'}
@ -392,18 +512,45 @@ packages:
'@babel/types': 7.21.5
dev: false
/@babel/template/7.21.9:
resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
dev: false
/@babel/traverse/7.21.5:
resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/generator': 7.21.5
'@babel/generator': 7.22.3
'@babel/helper-environment-visitor': 7.21.5
'@babel/helper-function-name': 7.21.0
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
'@babel/parser': 7.21.5
'@babel/types': 7.21.5
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: false
/@babel/traverse/7.22.4:
resolution: {integrity: sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/generator': 7.22.3
'@babel/helper-environment-visitor': 7.22.1
'@babel/helper-function-name': 7.21.0
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
@ -419,6 +566,15 @@ packages:
to-fast-properties: 2.0.0
dev: false
/@babel/types/7.22.4:
resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.21.5
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
dev: false
/@colors/colors/1.5.0:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
@ -810,6 +966,7 @@ packages:
picocolors: 1.0.0
tiny-glob: 0.2.9
tslib: 2.5.0
dev: false
/@playwright/test/1.34.3:
resolution: {integrity: sha512-zPLef6w9P6T/iT6XDYG3mvGOqOyb6eHaV9XtkunYs0+OzxBtrPAAaHotc0X+PJ00WPPnLfFBTl7mf45Mn8DBmw==}
@ -918,8 +1075,8 @@ packages:
/@types/babel__core/7.20.0:
resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
dependencies:
'@babel/parser': 7.21.5
'@babel/types': 7.21.5
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
'@types/babel__traverse': 7.18.5
@ -928,20 +1085,20 @@ packages:
/@types/babel__generator/7.6.4:
resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
dependencies:
'@babel/types': 7.21.5
'@babel/types': 7.22.4
dev: false
/@types/babel__template/7.4.1:
resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
dependencies:
'@babel/parser': 7.21.5
'@babel/types': 7.21.5
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
dev: false
/@types/babel__traverse/7.18.5:
resolution: {integrity: sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==}
dependencies:
'@babel/types': 7.21.5
'@babel/types': 7.22.4
dev: false
/@types/css-tree/2.3.1:
@ -1186,8 +1343,8 @@ packages:
terser: 5.17.6
dev: false
/astro/2.5.5:
resolution: {integrity: sha512-VRwnlfRtPALeOxfE4e7To5Vlu9pGwlTRWN1zkn1QTizwfg0rLirFTm6t2MCG/fUhlu/p3QO9tz8SpAIyDq53/Q==}
/astro/2.5.7:
resolution: {integrity: sha512-qYKMIN4tXAOAsm10vU4f+Q7LfC05JmEbQiJmSBqIEhp+wnQcEUFkGLrHMSsps3oBzMtjErUdDDW5tGJcn5eVlA==}
engines: {node: '>=16.12.0', npm: '>=6.14.0'}
hasBin: true
peerDependencies:
@ -1198,13 +1355,13 @@ packages:
dependencies:
'@astrojs/compiler': 1.4.2
'@astrojs/language-server': 1.0.0
'@astrojs/markdown-remark': 2.2.1_astro@2.5.5
'@astrojs/markdown-remark': 2.2.1_astro@2.5.7
'@astrojs/telemetry': 2.1.1
'@astrojs/webapi': 2.1.1
'@babel/core': 7.21.5
'@astrojs/webapi': 2.2.0
'@babel/core': 7.22.1
'@babel/generator': 7.21.5
'@babel/parser': 7.21.5
'@babel/plugin-transform-react-jsx': 7.21.5_@babel+core@7.21.5
'@babel/plugin-transform-react-jsx': 7.21.5_@babel+core@7.22.1
'@babel/traverse': 7.21.5
'@babel/types': 7.21.5
'@types/babel__core': 7.20.0
@ -1754,6 +1911,7 @@ packages:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
dev: false
/crypto-random-string/4.0.0:
resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==}
@ -1872,6 +2030,7 @@ packages:
/define-lazy-prop/2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'}
dev: false
/delayed-stream/1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
@ -2421,6 +2580,7 @@ packages:
/globalyzer/0.1.0:
resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
dev: false
/globby/11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
@ -2447,6 +2607,7 @@ packages:
/globrex/0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
dev: false
/got/12.6.0:
resolution: {integrity: sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==}
@ -2790,6 +2951,7 @@ packages:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
hasBin: true
dev: false
/is-docker/3.0.0:
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
@ -2877,6 +3039,7 @@ packages:
engines: {node: '>=8'}
dependencies:
is-docker: 2.2.1
dev: false
/is-yarn-global/0.4.1:
resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==}
@ -2885,6 +3048,7 @@ packages:
/isexe/2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: false
/jackspeak/2.1.1:
resolution: {integrity: sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw==}
@ -4042,6 +4206,7 @@ packages:
define-lazy-prop: 2.0.0
is-docker: 2.2.1
is-wsl: 2.2.0
dev: false
/openai/3.2.1:
resolution: {integrity: sha512-762C9BNlJPbjjlWZi4WYK9iM2tAVAv0uUp1UmI34vb0CN5T2mjB/qM6RYBmNKMh/dN9fC+bxqPwWJZUTWW052A==}
@ -4209,6 +4374,7 @@ packages:
/path-key/3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
dev: false
/path-key/4.0.0:
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
@ -4399,27 +4565,26 @@ packages:
which-pm: 2.0.0
dev: false
/prettier-plugin-astro/0.8.0:
resolution: {integrity: sha512-kt9wk33J7HvFGwFaHb8piwy4zbUmabC8Nu+qCw493jhe96YkpjscqGBPy4nJ9TPy9pd7+kEx1zM81rp+MIdrXg==}
/prettier-plugin-astro/0.10.0:
resolution: {integrity: sha512-dPzop0gKZyVGpTDQmfy+e7FKXC9JT3mlpfYA2diOVz+Ui+QR1U4G/s+OesKl2Hib2JJOtAYJs/l+ovgT0ljlFA==}
engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'}
dependencies:
'@astrojs/compiler': 1.4.2
'@astrojs/compiler': 1.5.0
prettier: 2.8.8
sass-formatter: 0.7.6
synckit: 0.8.5
dev: false
dev: true
/prettier-plugin-astro/0.9.1:
resolution: {integrity: sha512-pYZXSbdq0eElvzoIMArzv1SBn1NUXzopjlcnt6Ql8VW32PjC12NovwBjXJ6rh8qQLi7vF8jNqAbraKW03UPfag==}
/prettier-plugin-astro/0.8.0:
resolution: {integrity: sha512-kt9wk33J7HvFGwFaHb8piwy4zbUmabC8Nu+qCw493jhe96YkpjscqGBPy4nJ9TPy9pd7+kEx1zM81rp+MIdrXg==}
engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'}
dependencies:
'@astrojs/compiler': 1.4.2
'@astrojs/compiler': 1.5.0
prettier: 2.8.8
sass-formatter: 0.7.6
synckit: 0.8.5
dev: true
dev: false
/prettier-plugin-tailwindcss/0.3.0_lt2urjvx44zpywt7u6o2ilexia:
/prettier-plugin-tailwindcss/0.3.0_pe5dke5lusx3jwzlx77xu7mxju:
resolution: {integrity: sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==}
engines: {node: '>=12.17.0'}
peerDependencies:
@ -4472,7 +4637,7 @@ packages:
optional: true
dependencies:
prettier: 2.8.8
prettier-plugin-astro: 0.9.1
prettier-plugin-astro: 0.10.0
dev: true
/prettier/2.8.8:
@ -4929,10 +5094,12 @@ packages:
engines: {node: '>=8'}
dependencies:
shebang-regex: 3.0.0
dev: false
/shebang-regex/3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
dev: false
/shiki/0.14.2:
resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==}
@ -5254,6 +5421,7 @@ packages:
dependencies:
'@pkgr/utils': 2.3.1
tslib: 2.5.0
dev: false
/tailwindcss/3.3.2:
resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==}
@ -5345,6 +5513,7 @@ packages:
dependencies:
globalyzer: 0.1.0
globrex: 0.1.2
dev: false
/to-fast-properties/2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
@ -5388,6 +5557,7 @@ packages:
/tslib/2.5.0:
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
dev: false
/tuf-js/1.1.4:
resolution: {integrity: sha512-Lw2JRM3HTYhEtQJM2Th3aNCPbnXirtWMl065BawwmM2pX6XStH/ZO9e8T2hh0zk/HUa+1i6j+Lv6eDitKTau6A==}
@ -5770,6 +5940,7 @@ packages:
hasBin: true
dependencies:
isexe: 2.0.0
dev: false
/which/3.0.0:
resolution: {integrity: sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==}

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,19 +0,0 @@
const fs = require('node:fs');
const path = require('node:path');
const jsonsDir = path.join(process.cwd(), 'public/jsons');
const childJsonDirs = fs.readdirSync(jsonsDir);
childJsonDirs.forEach((childJsonDir) => {
const fullChildJsonDirPath = path.join(jsonsDir, childJsonDir);
const jsonFiles = fs.readdirSync(fullChildJsonDirPath);
jsonFiles.forEach((jsonFileName) => {
console.log(`Compressing ${jsonFileName}...`);
const jsonFilePath = path.join(fullChildJsonDirPath, jsonFileName);
const json = require(jsonFilePath);
fs.writeFileSync(jsonFilePath, JSON.stringify(json));
});
});

@ -5,14 +5,13 @@ import './FrameRenderer.css';
export interface Props {
resourceType: 'roadmap' | 'best-practice';
resourceId: string;
jsonUrl: string;
dimensions?: {
width: number;
height: number;
};
}
const { resourceId, resourceType, jsonUrl, dimensions = null } = Astro.props;
const { resourceId, resourceType, dimensions = null } = Astro.props;
---
<div
@ -22,7 +21,6 @@ const { resourceId, resourceType, jsonUrl, dimensions = null } = Astro.props;
: null}
data-resource-type={resourceType}
data-resource-id={resourceId}
data-json-url={jsonUrl}
>
<div id='resource-loader'>
<Loader />

@ -51,7 +51,6 @@ export class Renderer {
this.resourceType = dataset.resourceType!;
this.resourceId = dataset.resourceId!;
this.jsonUrl = dataset.jsonUrl!;
return true;
}
@ -130,13 +129,19 @@ export class Renderer {
this.trackVisit();
if (roadmapType) {
this.switchRoadmap(`/jsons/roadmaps/${roadmapType}.json`);
this.switchRoadmap(`/${roadmapType}.json`);
} else {
this.jsonToSvg(this.jsonUrl);
this.jsonToSvg(
this.resourceType === 'roadmap'
? `/${this.resourceId}.json`
: `/best-practices/${this.resourceId}.json`
);
}
}
switchRoadmap(newJsonUrl: string) {
this.containerEl?.setAttribute('style', '');
const newJsonFileSlug = newJsonUrl.split('/').pop()?.replace('.json', '');
// Update the URL and attach the new roadmap type
@ -145,25 +150,15 @@ export class Renderer {
const type = this.resourceType[0]; // r for roadmap, b for best-practices
url.searchParams.delete(type);
url.searchParams.set(type, newJsonFileSlug!);
if (newJsonFileSlug !== this.resourceId) {
url.searchParams.set(type, newJsonFileSlug!);
}
window.history.pushState(null, '', url.toString());
}
const pageType = this.resourceType.replace(/\b\w/g, (l) => l.toUpperCase());
window.fireEvent({
// RoadmapClick, BestPracticesClick, etc
category: `${pageType.replace('-', '')}Click`,
// roadmap/frontend/switch-version
action: `${this.resourceId}/switch-version`,
// roadmap/frontend/switch-version
label: `${newJsonFileSlug}`,
});
this.jsonToSvg(newJsonUrl)?.then(() => {
this.containerEl?.setAttribute('style', '');
});
this.jsonToSvg(newJsonUrl)?.then(() => {});
}
handleSvgClick(e: any) {

@ -6,3 +6,4 @@ Visit the following resources to learn more:
- [Command line crash course](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line)
- [Basic Terminal Usage - Cheat Sheet to make the command line EASY](https://www.youtube.com/watch?v=jDINUSK7rXE)
- [50+ Linux Commands You Must Know](https://www.digitalocean.com/community/tutorials/linux-commands)

@ -7,3 +7,5 @@ Visit the following resources to learn more:
- [Git & GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc)
- [Learn Git with Tutorials, News and Tips - Atlassian](https://www.atlassian.com/git)
- [Git Cheat Sheet](https://cs.fyi/guide/git-cheatsheet)
- [Learn Git Branching](https://learngitbranching.js.org/)
- [Git Tutorial](https://www.w3schools.com/git/)

@ -7,3 +7,4 @@ Visit the following resources to learn more:
- [MySQL website](https://www.mysql.com/)
- [W3Schools - MySQL tutorial ](https://www.w3schools.com/mySQl/default.asp)
- [MySQL tutorial for beginners](https://www.youtube.com/watch?v=7S_tz1z_5bA)
- [MySQL for Developers](https://planetscale.com/courses/mysql-for-developers/introduction/course-introduction)

File diff suppressed because one or more lines are too long

@ -0,0 +1,47 @@
---
jsonUrl: '/jsons/roadmaps/code-review.json'
pdfUrl: '/pdfs/roadmaps/code-review.pdf'
order: 14
briefTitle: 'Code Review'
briefDescription: 'Learn what to focus on when conducting a code review.'
title: 'Code Review Pyramid'
description: 'Learn what to focus on when conducting a code review.'
isNew: true
hasTopics: true
dimensions:
width: 968
height: 506.06
schema:
headline: 'Code Review Guide'
description: 'Learn what to review when conducting Code Reviews with this interactive guide. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'
imageUrl: 'https://roadmap.sh/roadmaps/code-review.png'
datePublished: '2023-06-03'
dateModified: '2023-06-03'
seo:
title: 'Code Review - roadmap.sh'
description: 'Learn what to review when conducting code reviews. We also have questions to ask yourself under each node of the pyramid to guide you further.'
keywords:
- 'code review tutorial'
- 'code review guide'
- 'code review for beginners'
- 'code reviews'
- 'code review best practices'
- 'code review roadmap 2023'
- 'guide to learning code review'
- 'code review roadmap'
- 'code review learning path'
- 'code review learning roadmap'
- 'what is code review'
relatedRoadmaps:
- 'backend'
- 'frontend'
- 'devops'
- 'system-design'
sitemap:
priority: 1
changefreq: 'monthly'
tags:
- 'roadmap'
- 'main-sitemap'
- 'skill-roadmap'
---

@ -0,0 +1,6 @@
# Questions to Ask
- Is the project's formatting style applied?
- Does it adhere to the agreed-upon naming conventions?
- Is it DRY?
- Is the code sufficiently "readable" (method lengths, etc.)?

@ -0,0 +1,7 @@
# Questions to Ask
- Are all tests passing?
- Are new features reasonably tested?
- Are corner cases tested?
- Is it using unit tests where possible, integration tests where necessary?
- Are there tests for NFRs, e.g. performance?

@ -0,0 +1,5 @@
# Questions to Ask
- New features reasonably documented?
- Are the relevant kinds of does covered: README, API docs, user quide, reference docs, etc?
- Are docs understandable, are there no signiticant typos and grammar mistakes?

@ -0,0 +1,10 @@
# Questions to Ask
- Does it satisfy the original requirements?
- Is it logically correct?
- Is there no unnecessary complexity?
- Is it robust (no concurrency issues, proper error handling, etc.)?
- Is it performant?
- Is it secure e.g., no SQL injections, etc?
- Is it observable e.g., metrics, logging, tracing, etc.?
- Do newly added dependencies pull their weight? Is their license acceptable?

@ -0,0 +1,8 @@
# Questions to Ask
- API as small as possible, as large as needed?
- Is there one way of doing one thing, not multiple ones?
- Is it consistent, does it follow the principle of least surprise?
- Clean split of API/internals without internals leaking into the API?
- Are there no breaking changes to user-facing parts (API classes, configuration, metrics, log formats, etc)?
- Is a new API generally useful and not overly specific to a single use case?

@ -1,4 +1,5 @@
# What is C++?
C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language. It was first introduced in 1985 and provides object-oriented features like classes and inheritance. C++ is widely used in various applications like game development, system programming, embedded systems, and high-performance computing.
C++ is a statically-typed language, meaning that the type of a variable is determined during compilation, and has an extensive library called the C++ Standard Library, which provides a rich set of functions, algorithms, and data structures for various tasks.
@ -44,4 +45,4 @@ int main() {
In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic.
- [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y)
- [C++ Tutorial for Beginners - Full Course](https://youtu.be/vlnpwxzdw4y)

@ -9,3 +9,4 @@ Argo CD is designed to be a simple and efficient way to manage cloud-native appl
Visit the following resources to learn more:
- [Argo CD - Argo Project](https://argoproj.github.io/docs/argo-cd/)
- [ArgoCD Tutorial for Beginners](https://www.youtube.com/watch?v=meu5_k9ssrs&list=ply7nrywoggjxtn4ybsmyffdpaxb-fr4zc&index=6)

@ -29,6 +29,9 @@ seo:
- 'docker roadmap 2023'
- 'guide to learning docker'
- 'docker roadmap'
- 'docker learning path'
- 'docker learning roadmap'
- 'container roadmap'
- 'docker'
- 'docker learning guide'
- 'docker skills'

@ -1 +1,4 @@
# Value Notifier
- [ValueNotifier class - Flutter](https://api.flutter.dev/flutter/foundation/valuenotifier-class.html)
- [ValuerNotifier & ValueListenableBuilder](https://medium.com/@avnishnishad/flutter-communication-between-widgets-using-valuenotifier-and-valuelistenablebuilder-b51ef627a58b)

@ -1 +1,4 @@
# Change Notifier
- [ChangeNotifier class - Flutter](https://api.flutter.dev/flutter/foundation/changenotifier-class.html)
- [Simple app state management](https://docs.flutter.dev/data-and-backend/state-mgmt/simple)

@ -9,3 +9,4 @@ Lighthouse provides a comprehensive and easy-to-use tool for identifying and fix
Visit the following resources to learn more:
- [Lighthouse - Google Developers](https://developers.google.com/web/tools/lighthouse)
- [Improving Load Performance - Chrome DevTools 101](https://www.youtube.com/watch?v=5flw5q5odie)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,3 +1,5 @@
# Taking input
Node.js provides a few ways to take inputs from user, including the built-in `process.stdin` and `readline` module. There are also several third party packages like `prompts` and `Enquirer` built on top of `readline` that provide an easy to use and intuitive interface.
- [How to read from stdin line by line in Node](https://stackoverflow.com/questions/20086849/how-to-read-from-stdin-line-by-line-in-node)

@ -4,5 +4,5 @@ Python Lambda Functions are anonymous function means that the function is withou
Visit the following resources to learn more:
- [Python Lambda Functions](https://www.geeksforgeeks.org/python-lambda-anonymous-functions-filter-map-reduce/)
- [Lambdas in Python](https://www.w3schools.com/python/python_lambda.asp)
- [How to use Lambda functions](https://realpython.com/python-lambda/)

@ -6,3 +6,4 @@ Visit the following resources to learn more:
- [Official Docs](https://docs.pytest.org/)
- [Pytest Tutorial](https://www.tutorialspoint.com/pytest/index.htm)
- [Effective Python Testing With Pytest](https://realpython.com/pytest-python-testing/)

@ -4,8 +4,7 @@ Props (short for “properties”) and state are both plain JavaScript objects.
Visit the following resources to learn more:
- [Component State](https://reactjs.org/docs/faq-state.html)
- [State: A Component's Memory](https://react.dev/learn/state-a-components-memory)
- [How to use Props in React](https://www.robinwieruch.de/react-pass-props-to-component/)
- [What is the difference between state and props in React?](https://stackoverflow.com/questions/27991366/what-is-the-difference-between-state-and-props-in-react)
- [How to update state from props in React](https://www.robinwieruch.de/react-derive-state-props/)
- [Putting props to useState](https://tkdodo.eu/blog/putting-props-to-use-state)
- [How to update state from props in React](https://www.robinwieruch.de/react-derive-state-props/)

@ -6,5 +6,5 @@ Conditional rendering in React works the same way conditions work in JavaScript.
Visit the following resources to learn more:
- [Conditional Rendering](https://reactjs.org/docs/conditional-rendering.html)
- [Different techniques for conditional rendering in React](https://www.robinwieruch.de/conditional-rendering-react/)
- [Conditional Rendering](https://react.dev/learn/conditional-rendering)
- [Different techniques for conditional rendering in React](https://www.robinwieruch.de/conditional-rendering-react/)

@ -4,7 +4,6 @@ Components are the building blocks of React applications. They let us split the
Visit the following resources to learn more:
- [Components and Props](https://reactjs.org/docs/components-and-props.html)
- [Components in Depth](https://reactjs.org/docs/react-component.html)
- [Creating and nesting components](https://react.dev/learn#components)
- [Explore the different types of components in React](https://www.robinwieruch.de/react-component-types/)
- [What is the difference between components, elements, and instances?](https://www.robinwieruch.de/react-element-component/)
- [What is the difference between components, elements, and instances?](https://www.robinwieruch.de/react-element-component/)

@ -8,3 +8,4 @@ To learn more, visit the following links:
- [Introduction to Microservices](https://aws.amazon.com/microservices/)
- [Microservices - Wikipedia](https://en.wikipedia.org/wiki/Microservices)
- [Microservices](https://martinfowler.com/articles/microservices.html)

@ -1,4 +1,4 @@
# BJ Foggs Behavior Model
# BJ Fogg's Behavior Model
B.J. Fogg, a renowned psychologist, and researcher at Stanford University, proposed the [Fogg Behavior Model (FBM)](https://www.behaviormodel.org/). This insightful model helps UX designers understand and influence user behavior by focusing on three core elements. These key factors are motivation, ability, and triggers.
@ -9,3 +9,5 @@ B.J. Fogg, a renowned psychologist, and researcher at Stanford University, propo
- **Triggers**: Triggers are the cues, notifications, or prompts that signal users to take an action. For an action to occur, triggers should be presented at the right time when the user has adequate motivation and ability.
UX designers should strive to find the balance between these three factors to facilitate the desired user behavior. By understanding your audience and their needs, implementing clear and concise triggers, and minimizing the effort required for action, the FBM can be an effective tool for designing user-centered products.
- [meaning of BJ fogg's behavior model](https://behaviormodel.org/)

@ -1,4 +1,4 @@
# Stephen Wendells CREATE Action Funnel
# Stephen Wendell's CREATE Action Funnel
Stephen Wendell's Create Action Funnel is a UX design framework focused on converting website visitors into active customers through a systematic and engaging process. The approach emphasizes on understanding user behavior, catering to their needs, and directing them towards specific actions. The Action Funnel consists of four major steps:
@ -11,3 +11,5 @@ Stephen Wendell's Create Action Funnel is a UX design framework focused on conve
- **Refine and Test the Experience:** Use wireframes and prototypes to test and iteratively refine the user experience. Employ user testing, A/B testing, and analytics to gather insight on user behavior, preferences, and engagement. Continuously use feedback to make improvements, ensuring that the design effectively leads visitors down the action funnel.
By implementing Stephen Wendell's `Create Action Funnel`, you can effectively guide users through an engaging journey that motivates them to become active customers, ultimately increasing conversion rates and overall satisfaction.
- [Behavioral Science Crash Course: Steve Wendel's CREATE Action Funnel](https://www.prodify.group/blog/behavioral-science-crash-course-steve-wendels-create-action-funnel)

@ -2,7 +2,6 @@ import type { PageSponsorType } from '../components/PageSponsor';
import type { MarkdownFileType } from './file';
export interface RoadmapFrontmatter {
jsonUrl: string;
pdfUrl: string;
order: number;
briefTitle: string;

@ -54,8 +54,6 @@ if (roadmapData.schema) {
if (roadmapFAQs.length) {
jsonLdSchema.push(generateFAQSchema(roadmapFAQs));
}
const contentContributionLink = `https://github.com/kamranahmedse/developer-roadmap/tree/master/src/data/roadmaps/${roadmapId}/content`;
---
<BaseLayout
@ -89,7 +87,7 @@ const contentContributionLink = `https://github.com/kamranahmedse/developer-road
<div class='bg-gray-50 pt-4 sm:pt-12'>
{
!roadmapData.isUpcoming && roadmapData.jsonUrl && (
!roadmapData.isUpcoming && roadmapData.briefTitle !== 'Android' && (
<div class='container relative max-w-[1000px]'>
<ShareIcons
description={roadmapData.briefDescription}
@ -100,7 +98,6 @@ const contentContributionLink = `https://github.com/kamranahmedse/developer-road
<FrameRenderer
resourceType={'roadmap'}
resourceId={roadmapId}
jsonUrl={roadmapData.jsonUrl}
dimensions={roadmapData.dimensions}
/>
</div>
@ -108,7 +105,7 @@ const contentContributionLink = `https://github.com/kamranahmedse/developer-road
}
{
!roadmapData.isUpcoming && !roadmapData.jsonUrl && (
!roadmapData.isUpcoming && roadmapData.briefTitle === 'Android' && (
<div class='mt-0 pb-14 sm:-mt-6'>
<MarkdownFile>
<roadmapFile.Content />

@ -0,0 +1,27 @@
import type { APIRoute } from 'astro';
export async function getStaticPaths() {
const roadmapJsons = await import.meta.glob('/src/data/roadmaps/**/*.json', {
eager: true,
});
return Object.keys(roadmapJsons).map((filePath) => {
const roadmapId = filePath.split('/').pop()?.replace('.json', '');
const roadmapJson = roadmapJsons[filePath] as Record<string, any>;
return {
params: {
roadmapId,
},
props: {
roadmapJson: roadmapJson?.default,
},
};
});
}
export const get: APIRoute = async function ({ params, request, props }) {
return {
body: JSON.stringify(props.roadmapJson),
};
};

@ -0,0 +1,30 @@
import type { APIRoute } from 'astro';
export async function getStaticPaths() {
const bestPracticeJsons = await import.meta.glob(
'/src/data/best-practices/**/*.json',
{
eager: true,
}
);
return Object.keys(bestPracticeJsons).map((filePath) => {
const bestPracticeId = filePath.split('/').pop()?.replace('.json', '');
const bestPracticeJson = bestPracticeJsons[filePath] as Record<string, any>;
return {
params: {
bestPracticeId,
},
props: {
bestPracticeJson: bestPracticeJson?.default,
},
};
});
}
export const get: APIRoute = async function ({ params, request, props }) {
return {
body: JSON.stringify(props.bestPracticeJson),
};
};
Loading…
Cancel
Save