From 88aa7e40240e3aaa41ade97fa071db01805be94a Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Fri, 12 May 2023 12:51:19 +0100 Subject: [PATCH] Add fullstack roadmap --- public/jsons/roadmaps/full-stack.json | 4020 ++++++++++++++++- .../FrameRenderer/FrameRenderer.css | 5 + .../114-js-first/100-tailwind-css.md | 6 +- .../roadmaps/full-stack/content/100-html.md | 12 +- .../roadmaps/full-stack/content/101-css.md | 16 +- .../content/102-checkpoint-static-websites.md | 20 +- .../full-stack/content/103-javascript.md | 14 +- .../content/104-checkpoint-interactivity.md | 19 +- .../roadmaps/full-stack/content/105-npm.md | 12 +- .../content/106-external-packages.md | 11 +- .../roadmaps/full-stack/content/107-git.md | 10 +- .../roadmaps/full-stack/content/108-github.md | 14 +- .../content/109-collaborative-work.md | 11 +- .../full-stack/content/110-tailwind.md | 12 +- .../roadmaps/full-stack/content/111-react.md | 14 +- .../full-stack/content/112-frontend-apps.md | 18 +- .../roadmaps/full-stack/content/113-nodejs.md | 11 +- .../full-stack/content/114-cli-apps.md | 20 +- .../full-stack/content/115-postgresql.md | 12 +- .../roadmaps/full-stack/content/116-crud.md | 14 +- .../full-stack/content/117-restful-apis.md | 11 +- .../full-stack/content/118-jwt-auth.md | 13 +- .../roadmaps/full-stack/content/119-redis.md | 10 +- .../full-stack/content/120-complete-app.md | 16 +- .../full-stack/content/121-linux-basics.md | 11 +- .../content/122-basic-aws-services/100-ec2.md | 8 +- .../content/122-basic-aws-services/101-vpc.md | 8 +- .../122-basic-aws-services/103-route53.md | 7 + .../content/122-basic-aws-services/104-ses.md | 5 + .../content/122-basic-aws-services/105-s3.md | 6 + .../content/122-basic-aws-services/index.md | 23 +- .../full-stack/content/123-deployment.md | 20 +- .../roadmaps/full-stack/content/124-monit.md | 18 +- .../full-stack/content/125-monitoring.md | 47 +- .../full-stack/content/126-github-actions.md | 9 +- .../roadmaps/full-stack/content/127-ci-cd.md | 11 +- .../full-stack/content/128-ansible.md | 6 +- .../full-stack/content/129-automation.md | 4 +- .../full-stack/content/130-terraform.md | 6 +- .../full-stack/content/131-infrastructure.md | 4 +- .../content/ba1sic-aws-services/102-vpc.md | 1 - .../ba1sic-aws-services/103-route53.md | 1 - .../content/ba1sic-aws-services/104-ses.md | 1 - .../content/ba1sic-aws-services/index.md | 1 - src/data/roadmaps/full-stack/content/index.md | 1 - .../react/content/107-styling/103-tailwind.md | 6 +- .../content/102-ecosystem/110-tailwind-css.md | 6 +- src/styles/global.css | 1 + 48 files changed, 4483 insertions(+), 49 deletions(-) create mode 100644 src/data/roadmaps/full-stack/content/122-basic-aws-services/103-route53.md create mode 100644 src/data/roadmaps/full-stack/content/122-basic-aws-services/104-ses.md create mode 100644 src/data/roadmaps/full-stack/content/122-basic-aws-services/105-s3.md delete mode 100644 src/data/roadmaps/full-stack/content/ba1sic-aws-services/102-vpc.md delete mode 100644 src/data/roadmaps/full-stack/content/ba1sic-aws-services/103-route53.md delete mode 100644 src/data/roadmaps/full-stack/content/ba1sic-aws-services/104-ses.md delete mode 100644 src/data/roadmaps/full-stack/content/ba1sic-aws-services/index.md delete mode 100644 src/data/roadmaps/full-stack/content/index.md diff --git a/public/jsons/roadmaps/full-stack.json b/public/jsons/roadmaps/full-stack.json index 64f899530..7590338fe 100644 --- a/public/jsons/roadmaps/full-stack.json +++ b/public/jsons/roadmaps/full-stack.json @@ -1 +1,4019 @@ -{"mockup":{"controls":{"control":[{"ID":"2262","typeID":"Label","zOrder":"21","measuredW":"148","measuredH":"40","x":"361","y":"377","properties":{"size":"32","text":"Full Stack "}},{"ID":"2263","typeID":"Canvas","zOrder":"22","w":"361","h":"150","measuredW":"100","measuredH":"70","x":"997","y":"244"},{"ID":"2264","typeID":"Label","zOrder":"23","measuredW":"332","measuredH":"26","x":"1013","y":"262","properties":{"size":"18","text":"Find the detailed version of this checklist"}},{"ID":"2265","typeID":"Label","zOrder":"24","measuredW":"318","measuredH":"26","x":"1013","y":"290","properties":{"size":"18","text":"With details on how to implement these"}},{"ID":"2266","typeID":"__group__","zOrder":"25","measuredW":"329","measuredH":"51","w":"329","h":"51","x":"1013","y":"326","properties":{"controlName":"ext_link:roadmap.sh"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"329","h":"51","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"4273622","borderColor":"4273622"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"172","measuredH":"28","x":"79","y":"12","properties":{"color":"16777215","size":"20","text":"https://roadmap.sh"}}]}}},{"ID":"2271","typeID":"Arrow","zOrder":"26","w":"1","h":"152","measuredW":"150","measuredH":"100","x":"445","y":"205","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":0,"y":-0.5},"p1":{"x":0.4999999999999996,"y":0},"p2":{"x":0,"y":151.7942452326543}}},{"ID":"2452","typeID":"Arrow","zOrder":"28","w":"881","h":"1","measuredW":"150","measuredH":"100","x":"445","y":"1216","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":-0.2324758426682365,"y":-0.20575476734575204},"p1":{"x":0.4999999999999991,"y":0},"p2":{"x":880.971517875545,"y":-0.20575476734575204}}},{"ID":"2465","typeID":"Arrow","zOrder":"16","w":"1","h":"222","measuredW":"150","measuredH":"100","x":"445","y":"441","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0.05892607650582704},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":0,"y":222}}},{"ID":"2473","typeID":"Arrow","zOrder":"17","w":"877","h":"1","measuredW":"150","measuredH":"100","x":"448","y":"663","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":-0.47611064428963346,"y":-0.20575476734575204},"p1":{"x":0.4999999999999994,"y":0},"p2":{"x":877,"y":-0.20575476734575204}}},{"ID":"2480","typeID":"Arrow","zOrder":"15","w":"1","h":"106","measuredW":"150","measuredH":"100","x":"852","y":"667","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":0,"y":-0.06514400623188976},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":0,"y":106.12070867681257}}},{"ID":"2494","typeID":"Arrow","zOrder":"14","w":"1","h":"105","measuredW":"150","measuredH":"100","x":"1186","y":"668","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":0,"y":0.30573956210059805},"p1":{"x":0.4999999999999996,"y":0},"p2":{"x":0,"y":105.12070867681257}}},{"ID":"2495","typeID":"Arrow","zOrder":"30","w":"1","h":"298","measuredW":"150","measuredH":"100","x":"1326","y":"664","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":298.325993023479}}},{"ID":"2500","typeID":"Arrow","zOrder":"32","w":"226","h":"1","measuredW":"150","measuredH":"100","x":"1096","y":"858","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":0.12070867681256914},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":225.53175987254372,"y":0.12070867681256914}}},{"ID":"2503","typeID":"Arrow","zOrder":"34","w":"880","h":"1","measuredW":"150","measuredH":"100","x":"445","y":"964","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0.09019887269550964,"y":-0.20575476734575204},"p1":{"x":0.49999999999999944,"y":0},"p2":{"x":880,"y":-0.20575476734575204}}},{"ID":"2504","typeID":"Arrow","zOrder":"13","w":"1","h":"93","measuredW":"150","measuredH":"100","x":"852","y":"870","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":0,"y":0.24609978251851317},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":0,"y":93.12070867681257}}},{"ID":"2509","typeID":"Arrow","zOrder":"12","w":"1","h":"250","measuredW":"150","measuredH":"100","x":"445","y":"965","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0.45578755817643923},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":250.74987188583827}}},{"ID":"2510","typeID":"Label","zOrder":"40","measuredW":"220","measuredH":"26","x":"524","y":"1000","properties":{"size":"18","text":"Feel free to skip and revisit"}},{"ID":"2517","typeID":"Canvas","zOrder":"38","w":"271","h":"149","measuredW":"100","measuredH":"70","x":"512","y":"922","properties":{"borderColor":"16777215"}},{"ID":"2518","typeID":"Label","zOrder":"43","measuredW":"237","measuredH":"26","x":"524","y":"1030","properties":{"size":"18","text":"after learning some backend."}},{"ID":"2519","typeID":"Arrow","zOrder":"11","w":"119","h":"1","measuredW":"150","measuredH":"100","x":"444","y":"1128","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":119.38938788584869,"y":0.12070867681256914},"p1":{"x":0.4999999999999996,"y":0},"p2":{"x":0,"y":0.12070867681256914}}},{"ID":"2522","typeID":"Canvas","zOrder":"45","w":"271","h":"54","measuredW":"100","measuredH":"70","x":"512","y":"1187","properties":{"borderColor":"16777215"}},{"ID":"2523","typeID":"Label","zOrder":"46","measuredW":"229","measuredH":"26","x":"533","y":"1201","properties":{"size":"18","text":"Start Backend Development"}},{"ID":"2530","typeID":"__group__","zOrder":"47","measuredW":"429","measuredH":"85","w":"429","h":"85","x":"916","y":"1067","children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"405","measuredH":"26","x":"0","y":"0","properties":{"size":"18","text":"You can pick any backend programming language."}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"388","measuredH":"26","x":"0","y":"29","properties":{"size":"18","text":"My recommendation is Node.js because you are"}},{"ID":"2","typeID":"Label","zOrder":"2","measuredW":"429","measuredH":"26","x":"0","y":"59","properties":{"size":"18","text":"already familiar with JavaScript and it’s easier to pick."}}]}}},{"ID":"2531","typeID":"Arrow","zOrder":"48","w":"1","h":"289","measuredW":"150","measuredH":"100","x":"1326","y":"1216","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":288.9594087182493}}},{"ID":"2532","typeID":"Arrow","zOrder":"49","w":"229","h":"1","measuredW":"150","measuredH":"100","x":"1096","y":"1297","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":0.12070867681256914},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":229,"y":0.12070867681256914}}},{"ID":"2540","typeID":"Arrow","zOrder":"52","w":"229","h":"1","measuredW":"150","measuredH":"100","x":"1096","y":"1431","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":0.12070867681256914},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":229,"y":0.12070867681256914}}},{"ID":"2543","typeID":"Arrow","zOrder":"54","w":"881","h":"1","measuredW":"150","measuredH":"100","x":"445","y":"1506","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":-0.2324758426682365,"y":-0.20575476734575204},"p1":{"x":0.4999999999999991,"y":0},"p2":{"x":880.971517875545,"y":-0.20575476734575204}}},{"ID":"2544","typeID":"Arrow","zOrder":"55","w":"1","h":"250","measuredW":"150","measuredH":"100","x":"852","y":"1084","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"3355443","p0":{"x":0,"y":0.2769850029135341},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":0,"y":250.7539131759347}}},{"ID":"2545","typeID":"Label","zOrder":"56","measuredW":"170","measuredH":"26","x":"661","y":"1300","properties":{"size":"18","text":"Backend Starts Here"}},{"ID":"2546","typeID":"Arrow","zOrder":"57","w":"1","h":"48","measuredW":"150","measuredH":"100","x":"847","y":"1287","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","p0":{"x":0,"y":0.013075579052838293},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":48.325993023478986},"color":"3355443"}},{"ID":"2547","typeID":"Arrow","zOrder":"58","w":"1","h":"48","measuredW":"150","measuredH":"100","x":"849","y":"1287","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","p0":{"x":0,"y":0.013075579052838293},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":48.325993023478986},"color":"3355443"}},{"ID":"2548","typeID":"Arrow","zOrder":"59","w":"1","h":"48","measuredW":"150","measuredH":"100","x":"853","y":"1287","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","p0":{"x":0,"y":0.013075579052838293},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":48.325993023478986},"color":"3355443"}},{"ID":"2556","typeID":"Arrow","zOrder":"63","w":"1","h":"331","measuredW":"150","measuredH":"100","x":"444","y":"1507","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0.45578755817643923},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":0,"y":331.5}}},{"ID":"2562","typeID":"Arrow","zOrder":"10","w":"229","h":"1","measuredW":"150","measuredH":"100","x":"443","y":"1634","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":0.12070867681256914},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":229,"y":0.12070867681256914}}},{"ID":"2563","typeID":"Arrow","zOrder":"9","w":"93","h":"1","measuredW":"150","measuredH":"100","x":"351","y":"1577","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"14540253","p0":{"x":0,"y":0},"p1":{"x":0.5008960573476694,"y":0.0011062084265900647},"p2":{"x":93,"y":0}}},{"ID":"2564","typeID":"Arrow","zOrder":"65","w":"1","h":"718","measuredW":"150","measuredH":"100","x":"351","y":"859","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"14540253","p0":{"x":0,"y":0},"p1":{"x":0.49979684489989734,"y":0},"p2":{"x":0,"y":718}}},{"ID":"2565","typeID":"Arrow","zOrder":"66","w":"194","h":"1","measuredW":"150","measuredH":"100","x":"351","y":"857","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"14540253","p0":{"x":0,"y":0},"p1":{"x":0.4999934253780398,"y":0.0005275763265275694},"p2":{"x":195,"y":0}}},{"ID":"2566","typeID":"Arrow","zOrder":"8","w":"1","h":"71","measuredW":"150","measuredH":"100","x":"547","y":"858","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"14540253","p0":{"x":-0.33333333333337123,"y":70.33333333333337},"p1":{"x":0.49999999999999906,"y":0},"p2":{"x":-0.33333333333337123,"y":-0.20575476734575204}}},{"ID":"2567","typeID":"Label","zOrder":"68","measuredW":"230","measuredH":"26","x":"314","y":"1321","properties":{"size":"18","text":"Learn Frontend Frameworks"}},{"ID":"2568","typeID":"Label","zOrder":"69","measuredW":"170","measuredH":"26","x":"314","y":"1349","properties":{"size":"18","text":"If you skipped earlier"}},{"ID":"2569","typeID":"Canvas","zOrder":"67","w":"271","h":"80","measuredW":"100","measuredH":"70","x":"293","y":"1310","properties":{"borderColor":"16777215"}},{"ID":"2570","typeID":"Arrow","zOrder":"70","w":"315","h":"1","measuredW":"150","measuredH":"100","x":"351","y":"1724","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"3355443","p0":{"x":314.84917963190844,"y":-0.24608682406528715},"p1":{"x":0.4999999999999997,"y":-1.851258080486789e-18},"p2":{"x":0,"y":-0.24608682406528715}}},{"ID":"2572","typeID":"Arrow","zOrder":"71","w":"74","h":"1","measuredW":"150","measuredH":"100","x":"590","y":"1727","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"3355443","p0":{"x":74,"y":0},"p1":{"x":0.5046441213217208,"y":-0.0016627488112519412},"p2":{"x":0,"y":0}}},{"ID":"2573","typeID":"Arrow","zOrder":"72","w":"74","h":"1","measuredW":"150","measuredH":"100","x":"590","y":"1731","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"3355443","p0":{"x":74,"y":0},"p1":{"x":0.5046441213217208,"y":-0.0016627488112519412},"p2":{"x":0,"y":0}}},{"ID":"2574","typeID":"Label","zOrder":"73","measuredW":"246","measuredH":"26","x":"506","y":"1744","properties":{"size":"18","text":"Get Some DevOps Knowledge"}},{"ID":"2580","typeID":"Arrow","zOrder":"7","w":"879","h":"1","measuredW":"150","measuredH":"100","x":"445","y":"1838","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":-0.2324758426682365,"y":-0.20575476734575204},"p1":{"x":0.49999999999999906,"y":0},"p2":{"x":878.8417317755348,"y":-0.20575476734575204}}},{"ID":"2583","typeID":"Arrow","zOrder":"6","w":"1","h":"69","measuredW":"150","measuredH":"100","x":"823","y":"1753","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":-0.5},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":-0.4638780906282136,"y":68.5}}},{"ID":"2588","typeID":"Arrow","zOrder":"5","w":"1","h":"69","measuredW":"150","measuredH":"100","x":"893","y":"1759","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":-0.5},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":-0.4638780906282136,"y":68.5}}},{"ID":"2599","typeID":"Arrow","zOrder":"4","w":"1","h":"69","measuredW":"150","measuredH":"100","x":"960","y":"1759","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":-0.5},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":-0.4638780906282136,"y":68.5}}},{"ID":"2603","typeID":"Arrow","zOrder":"81","w":"1","h":"289","measuredW":"150","measuredH":"100","x":"1326","y":"1838","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":288.9594087182493}}},{"ID":"2615","typeID":"Arrow","zOrder":"2","w":"94","h":"1","measuredW":"150","measuredH":"100","x":"1230","y":"2038","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":0.2886071293653458,"y":-0.02339096824744047},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":94.53612190937179,"y":-0.02339096824744047}}},{"ID":"2616","typeID":"Arrow","zOrder":"85","w":"881","h":"1","measuredW":"150","measuredH":"100","x":"444","y":"2127","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":-0.10054691206102007,"y":-0.20575476734575204},"p1":{"x":0.499999999999999,"y":0},"p2":{"x":880.8417317755348,"y":-0.20575476734575204}}},{"ID":"2619","typeID":"Arrow","zOrder":"3","w":"94","h":"1","measuredW":"150","measuredH":"100","x":"1233","y":"1921","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":0.2886071293653458,"y":-0.02339096824744047},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":94.53612190937179,"y":-0.02339096824744047}}},{"ID":"2620","typeID":"Arrow","zOrder":"1","w":"1","h":"86","measuredW":"150","measuredH":"100","x":"848","y":"2040","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":-0.056906605600943294},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":-0.4638780906282136,"y":86.21773558030964}}},{"ID":"2623","typeID":"Arrow","zOrder":"89","w":"1","h":"86","measuredW":"150","measuredH":"100","x":"566","y":"2040","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":-0.4638780906282136,"y":-0.056906605600943294},"p1":{"x":0.4999999999999997,"y":0},"p2":{"x":-0.4638780906282136,"y":86.21773558030964}}},{"ID":"2626","typeID":"Arrow","zOrder":"91","w":"1","h":"274","measuredW":"150","measuredH":"100","x":"443","y":"2127","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0.45578755817643923},"p1":{"x":0.4999999999999996,"y":0},"p2":{"x":0,"y":274.50913558489674}}},{"ID":"2629","typeID":"TextArea","zOrder":"93","w":"370","h":"155","measuredW":"200","measuredH":"140","x":"1045","y":"1585"},{"ID":"2630","typeID":"Label","zOrder":"94","measuredW":"311","measuredH":"26","x":"1066","y":"1603","properties":{"color":"4985136","size":"18","text":"Use the checkpoints and do not forget"}},{"ID":"2631","typeID":"Label","zOrder":"95","measuredW":"296","measuredH":"26","x":"1066","y":"1633","properties":{"color":"4985136","size":"18","text":"to practice what you learn. There are"}},{"ID":"2632","typeID":"Label","zOrder":"96","measuredW":"302","measuredH":"26","x":"1066","y":"1663","properties":{"color":"4985136","size":"18","text":"project ideas at each checkpoint that"}},{"ID":"2633","typeID":"Label","zOrder":"97","measuredW":"320","measuredH":"26","x":"1066","y":"1693","properties":{"color":"4985136","size":"18","text":"you can build to solidify your knowledge."}},{"ID":"2636","typeID":"Arrow","zOrder":"0","w":"118","h":"1","measuredW":"150","measuredH":"100","x":"444","y":"2293","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","stroke":"dotted","p0":{"x":117.74886541217052,"y":0.21773558030963613},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":-0.4638780906282136,"y":0.21773558030963613}}},{"ID":"2637","typeID":"Arrow","zOrder":"99","w":"504","h":"1","measuredW":"150","measuredH":"100","x":"443","y":"2401","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":-0.10054691206102007,"y":-0.20575476734575204},"p1":{"x":0.499999999999999,"y":0},"p2":{"x":503.7236123379937,"y":-0.20575476734575204}}},{"ID":"2638","typeID":"Arrow","zOrder":"100","w":"1","h":"289","measuredW":"150","measuredH":"100","x":"949","y":"2401","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"10027263","p0":{"x":0,"y":0},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":288.9594087182493}}},{"ID":"2640","typeID":"TextArea","zOrder":"101","w":"635","h":"112","measuredW":"200","measuredH":"140","x":"630","y":"2476"},{"ID":"2641","typeID":"Label","zOrder":"102","measuredW":"366","measuredH":"25","x":"765","y":"2493","properties":{"size":"17","text":"Continue Learning with following relevant tracks"}},{"ID":"2642","typeID":"__group__","zOrder":"103","measuredW":"198","measuredH":"44","w":"198","h":"44","x":"1052","y":"2530","properties":{"controlName":"ext_link:roadmap.sh/devops"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"198","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"141","measuredH":"25","x":"28","y":"9","properties":{"size":"17","text":"DevOps Roadmap"}}]}}},{"ID":"2643","typeID":"__group__","zOrder":"104","measuredW":"198","measuredH":"44","w":"198","h":"44","x":"846","y":"2530","properties":{"controlName":"ext_link:roadmap.sh/backend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"198","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"147","measuredH":"25","x":"25","y":"9","properties":{"size":"17","text":"Backend Roadmap"}}]}}},{"ID":"2644","typeID":"__group__","zOrder":"105","measuredW":"198","measuredH":"44","w":"198","h":"44","x":"640","y":"2530","properties":{"controlName":"ext_link:roadmap.sh/frontend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"198","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"149","measuredH":"25","x":"24","y":"9","properties":{"size":"17","text":"Frontend Roadmap"}}]}}},{"ID":"2657","typeID":"Canvas","zOrder":"106","w":"381","h":"302","measuredW":"100","measuredH":"70","x":"594","y":"244"},{"ID":"2658","typeID":"Label","zOrder":"107","measuredW":"318","measuredH":"26","x":"613","y":"305","properties":{"size":"18","text":"If you are already a full-stack developer"}},{"ID":"2659","typeID":"Label","zOrder":"108","measuredW":"328","measuredH":"26","x":"613","y":"335","properties":{"size":"18","text":"you should visit these roadmaps instead."}},{"ID":"2661","typeID":"__group__","zOrder":"109","measuredW":"106","measuredH":"44","w":"106","h":"44","x":"614","y":"374","properties":{"controlName":"ext_link:roadmap.sh/frontend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"106","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"70","measuredH":"25","x":"18","y":"9","properties":{"size":"17","text":"Frontend"}}]}}},{"ID":"2662","typeID":"__group__","zOrder":"110","measuredW":"113","measuredH":"44","w":"113","h":"44","x":"731","y":"374","properties":{"controlName":"ext_link:roadmap.sh/frontend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"113","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"68","measuredH":"25","x":"23","y":"9","properties":{"size":"17","text":"Backend"}}]}}},{"ID":"2663","typeID":"__group__","zOrder":"111","measuredW":"101","measuredH":"44","w":"101","h":"44","x":"856","y":"374","properties":{"controlName":"ext_link:roadmap.sh/frontend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"101","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"62","measuredH":"25","x":"20","y":"9","properties":{"size":"17","text":"DevOps"}}]}}},{"ID":"2664","typeID":"Label","zOrder":"112","measuredW":"288","measuredH":"26","x":"616","y":"433","properties":{"size":"18","text":"Target audience for this roadmap is"}},{"ID":"2665","typeID":"Label","zOrder":"113","measuredW":"311","measuredH":"26","x":"616","y":"463","properties":{"size":"18","text":"absolute beginners wanting to get into"}},{"ID":"2666","typeID":"Label","zOrder":"114","measuredW":"186","measuredH":"26","x":"616","y":"493","properties":{"size":"18","text":"full stack development."}},{"ID":"2667","typeID":"Label","zOrder":"115","measuredW":"135","measuredH":"28","x":"613","y":"264","properties":{"size":"20","text":"Audience Note"}},{"ID":"2668","typeID":"Canvas","zOrder":"116","w":"363","h":"136","measuredW":"100","measuredH":"70","x":"997","y":"410"},{"ID":"2669","typeID":"Canvas","zOrder":"117","w":"26","h":"26","measuredW":"100","measuredH":"70","x":"1013","y":"426","properties":{"color":"3355443"}},{"ID":"2670","typeID":"Label","zOrder":"118","measuredW":"249","measuredH":"26","x":"1051","y":"426","properties":{"size":"18","text":"Project Ideas and Suggestions"}},{"ID":"2671","typeID":"Canvas","zOrder":"119","w":"26","h":"26","measuredW":"100","measuredH":"70","x":"1013","y":"461","properties":{"color":"16776960"}},{"ID":"2672","typeID":"Label","zOrder":"120","measuredW":"150","measuredH":"26","x":"1051","y":"461","properties":{"size":"18","text":"Key topics to learn"}},{"ID":"2675","typeID":"Arrow","zOrder":"121","w":"1","h":"20","measuredW":"150","measuredH":"100","x":"1024","y":"502","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"3355443","p0":{"x":0,"y":0.07526588698897285},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":19.753913175934713}}},{"ID":"2676","typeID":"Label","zOrder":"122","measuredW":"153","measuredH":"26","x":"1051","y":"499","properties":{"size":"18","text":"Change of Domain"}},{"ID":"2677","typeID":"Arrow","zOrder":"123","w":"1","h":"20","measuredW":"150","measuredH":"100","x":"1027","y":"502","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","color":"3355443","p0":{"x":0,"y":0.07526588698897285},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":0,"y":19.753913175934713}}},{"ID":"2679","typeID":"Arrow","zOrder":"124","w":"271","h":"1","measuredW":"150","measuredH":"100","x":"1193","y":"603","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","stroke":"dotted","color":"16777215","p0":{"x":-0.4638780906282136,"y":0.12070867681256914},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":270.18342568627713,"y":0.12070867681256914}}},{"ID":"2680","typeID":"Arrow","zOrder":"125","w":"228","h":"1","measuredW":"150","measuredH":"100","x":"268","y":"737","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","stroke":"dotted","color":"16777215","p0":{"x":0.49770846294279636,"y":0.12070867681256914},"p1":{"x":0.4999999999999998,"y":0},"p2":{"x":228.53175987254372,"y":0.12070867681256914}}},{"ID":"2681","typeID":"Arrow","zOrder":"126","w":"60","h":"1","measuredW":"150","measuredH":"100","x":"919","y":"2714","properties":{"curvature":"0","leftArrow":"false","rightArrow":"false","stroke":"dotted","color":"16777215","p0":{"x":0,"y":0.12070867681268282},"p1":{"x":0.49999999999999967,"y":0},"p2":{"x":60,"y":0.12070867681268282}}},{"ID":"2682","typeID":"__group__","zOrder":"20","measuredW":"115","measuredH":"49","w":"115","h":"49","x":"502","y":"639","properties":{"controlName":"100-html"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"115","h":"49","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"48","measuredH":"25","x":"34","y":"12","properties":{"size":"17","text":"HTML"}}]}}},{"ID":"2683","typeID":"__group__","zOrder":"18","measuredW":"99","measuredH":"49","w":"99","h":"49","x":"655","y":"639","properties":{"controlName":"101-css"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"99","h":"49","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"33","measuredH":"25","x":"33","y":"12","properties":{"size":"17","text":"CSS"}}]}}},{"ID":"2684","typeID":"__group__","zOrder":"19","measuredW":"146","measuredH":"50","w":"146","h":"50","x":"990","y":"639","properties":{"controlName":"103-javascript"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"146","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"81","measuredH":"25","x":"32","y":"12","properties":{"size":"17","text":"JavaScript"}}]}}},{"ID":"2685","typeID":"__group__","zOrder":"31","measuredW":"99","measuredH":"50","w":"99","h":"50","x":"1276","y":"737","properties":{"controlName":"105-npm"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"99","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"34","measuredH":"25","x":"33","y":"12","properties":{"size":"17","text":"npm"}}]}}},{"ID":"2686","typeID":"__group__","zOrder":"27","measuredW":"302","measuredH":"50","w":"302","h":"50","x":"597","y":"737","properties":{"controlName":"102-checkpoint-static-websites"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"302","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"253","measuredH":"26","x":"23","y":"12","properties":{"size":"18","text":"Checkpoint — Static Webpages","color":"16777215"}}]}}},{"ID":"2687","typeID":"__group__","zOrder":"29","measuredW":"307","measuredH":"50","w":"307","h":"50","x":"921","y":"737","properties":{"controlName":"104-checkpoint-interactivity"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"307","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"210","measuredH":"26","x":"49","y":"12","properties":{"size":"18","text":"Checkpoint — Interactivity","color":"16777215"}}]}}},{"ID":"2688","typeID":"__group__","zOrder":"33","measuredW":"307","measuredH":"50","w":"307","h":"50","x":"921","y":"833","properties":{"controlName":"106-external-packages"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"307","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"268","measuredH":"26","x":"21","y":"12","properties":{"size":"18","text":"Checkpoint — External Packages","color":"16777215"}}]}}},{"ID":"2689","typeID":"__group__","zOrder":"35","measuredW":"80","measuredH":"50","w":"80","h":"50","x":"1107","y":"937","properties":{"controlName":"107-git"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"80","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"22","measuredH":"25","x":"29","y":"12","properties":{"size":"17","text":"Git"}}]}}},{"ID":"2690","typeID":"__group__","zOrder":"36","measuredW":"101","measuredH":"50","w":"101","h":"50","x":"990","y":"937","properties":{"controlName":"108-github"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"101","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"54","measuredH":"25","x":"24","y":"12","properties":{"size":"17","text":"GitHub"}}]}}},{"ID":"2691","typeID":"__group__","zOrder":"37","measuredW":"302","measuredH":"50","w":"302","h":"50","x":"597","y":"833","properties":{"controlName":"109-collaborative-work"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"302","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"268","measuredH":"26","x":"17","y":"13","properties":{"size":"18","text":"Checkpoint — Collaborative Work","color":"16777215"}}]}}},{"ID":"2692","typeID":"__group__","zOrder":"42","measuredW":"120","measuredH":"50","w":"120","h":"50","x":"652","y":"938","properties":{"controlName":"110-tailwind"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"120","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"61","measuredH":"25","x":"29","y":"12","properties":{"size":"17","text":"Tailwind"}}]}}},{"ID":"2693","typeID":"__group__","zOrder":"41","measuredW":"120","measuredH":"50","w":"120","h":"50","x":"524","y":"938","properties":{"controlName":"111-react"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"120","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"47","measuredH":"25","x":"36","y":"12","properties":{"size":"17","text":"React"}}]}}},{"ID":"2694","typeID":"__group__","zOrder":"39","measuredW":"286","measuredH":"50","w":"286","h":"50","x":"502","y":"1103","properties":{"controlName":"112-frontend-apps"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"286","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"236","measuredH":"26","x":"28","y":"12","properties":{"size":"18","text":"Checkpoint — Frontend Apps","color":"16777215"}}]}}},{"ID":"2695","typeID":"__group__","zOrder":"44","measuredW":"120","measuredH":"50","w":"120","h":"50","x":"988","y":"1190","properties":{"controlName":"113-nodejs"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"120","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"58","measuredH":"25","x":"31","y":"12","properties":{"size":"17","text":"Node.js"}}]}}},{"ID":"2696","typeID":"__group__","zOrder":"50","measuredW":"280","measuredH":"50","w":"280","h":"50","x":"917","y":"1272","properties":{"controlName":"114-cli-apps"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"280","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"191","measuredH":"26","x":"44","y":"12","properties":{"size":"18","text":"Checkpoint — CLI Apps","color":"16777215"}}]}}},{"ID":"2697","typeID":"__group__","zOrder":"51","measuredW":"135","measuredH":"50","w":"135","h":"50","x":"1223","y":"1337","properties":{"controlName":"115-postgresql"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"135","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"93","measuredH":"25","x":"21","y":"12","properties":{"size":"17","text":"PostgreSQL"}}]}}},{"ID":"2698","typeID":"__group__","zOrder":"53","measuredW":"276","measuredH":"50","w":"276","h":"50","x":"917","y":"1406","properties":{"controlName":"116-crud"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"276","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"228","measuredH":"26","x":"24","y":"12","properties":{"size":"18","text":"Checkpoint — Simple CRUD","color":"16777215"}}]}}},{"ID":"2699","typeID":"__group__","zOrder":"60","measuredW":"145","measuredH":"50","w":"145","h":"50","x":"740","y":"1481","properties":{"controlName":"117-restful-apis"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"145","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"102","measuredH":"25","x":"22","y":"12","properties":{"size":"17","text":"RESTful APIs"}}]}}},{"ID":"2700","typeID":"__group__","zOrder":"61","measuredW":"111","measuredH":"50","w":"111","h":"50","x":"604","y":"1481","properties":{"controlName":"118-jwt-auth"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"111","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"74","measuredH":"25","x":"19","y":"12","properties":{"size":"17","text":"JWT Auth"}}]}}},{"ID":"2701","typeID":"__group__","zOrder":"64","measuredW":"89","measuredH":"50","w":"89","h":"50","x":"486","y":"1481","properties":{"controlName":"119-redis"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"89","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"45","measuredH":"25","x":"22","y":"12","properties":{"size":"17","text":"Redis"}}]}}},{"ID":"2702","typeID":"__group__","zOrder":"62","measuredW":"277","measuredH":"50","w":"277","h":"50","x":"484","y":"1607","properties":{"controlName":"120-complete-app"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"277","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"233","measuredH":"26","x":"21","y":"12","properties":{"size":"18","text":"Checkpoint — Complete App","color":"16777215"}}]}}},{"ID":"2703","typeID":"__group__","zOrder":"74","measuredW":"145","measuredH":"50","w":"145","h":"50","x":"371","y":"1814","properties":{"controlName":"121-linux-basics"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"145","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"97","measuredH":"25","x":"24","y":"12","properties":{"size":"17","text":"Linux Basics"}}]}}},{"ID":"2704","typeID":"__group__","zOrder":"75","measuredW":"198","measuredH":"50","w":"198","h":"50","x":"792","y":"1810","properties":{"controlName":"122-basic-aws-services"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"198","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"153","measuredH":"25","x":"22","y":"12","properties":{"size":"17","text":"Basic AWS Services"}}]}}},{"ID":"2705","typeID":"__group__","zOrder":"87","measuredW":"256","measuredH":"50","w":"256","h":"50","x":"987","y":"1897","properties":{"controlName":"123-deployment"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"256","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"214","measuredH":"26","x":"21","y":"12","properties":{"size":"18","text":"Checkpoint — Deployment","color":"16777215"}}]}}},{"ID":"2706","typeID":"__group__","zOrder":"83","measuredW":"87","measuredH":"50","w":"87","h":"50","x":"1282","y":"1956","properties":{"controlName":"124-monit"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"87","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"44","measuredH":"25","x":"22","y":"12","properties":{"size":"17","text":"Monit"}}]}}},{"ID":"2707","typeID":"__group__","zOrder":"84","measuredW":"251","measuredH":"50","w":"251","h":"50","x":"989","y":"2014","properties":{"controlName":"125-monitoring"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"251","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"204","measuredH":"26","x":"24","y":"12","properties":{"size":"18","text":"Checkpoint — Monitoring","color":"16777215"}}]}}},{"ID":"2708","typeID":"__group__","zOrder":"86","measuredW":"157","measuredH":"50","w":"157","h":"50","x":"1043","y":"2103","properties":{"controlName":"126-github-actions"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"157","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"114","measuredH":"25","x":"22","y":"12","properties":{"size":"17","text":"GitHub Actions"}}]}}},{"ID":"2709","typeID":"__group__","zOrder":"82","measuredW":"223","measuredH":"50","w":"223","h":"50","x":"737","y":"2015","properties":{"controlName":"127-ci-cd"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"223","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"179","measuredH":"26","x":"22","y":"12","properties":{"size":"18","text":"Checkpoint — CI / CD","color":"16777215"}}]}}},{"ID":"2710","typeID":"__group__","zOrder":"88","measuredW":"102","measuredH":"50","w":"102","h":"50","x":"661","y":"2102","properties":{"controlName":"128-ansible"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"102","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"56","measuredH":"25","x":"23","y":"12","properties":{"size":"17","text":"Ansible"}}]}}},{"ID":"2711","typeID":"__group__","zOrder":"90","measuredW":"245","measuredH":"50","w":"245","h":"50","x":"444","y":"2015","properties":{"controlName":"129-automation"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"245","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"208","measuredH":"26","x":"19","y":"12","properties":{"size":"18","text":"Checkpoint — Automation","color":"16777215"}}]}}},{"ID":"2712","typeID":"__group__","zOrder":"92","measuredW":"109","measuredH":"50","w":"109","h":"50","x":"388","y":"2181","properties":{"controlName":"130-terraform"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"109","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"75","measuredH":"25","x":"17","y":"12","properties":{"size":"17","text":"Terraform"}}]}}},{"ID":"2713","typeID":"__group__","zOrder":"98","measuredW":"265","measuredH":"50","w":"265","h":"50","x":"511","y":"2268","properties":{"controlName":"131-infrastructure"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"265","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"3355443"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"227","measuredH":"26","x":"17","y":"12","properties":{"size":"18","color":"16777215","text":"Checkpoint — Infrastructure"}}]}}},{"ID":"2714","typeID":"__group__","zOrder":"76","measuredW":"64","measuredH":"50","w":"64","h":"50","x":"792","y":"1730","properties":{"controlName":"100-basic-aws-services:ec2"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"64","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"36","measuredH":"26","x":"14","y":"12","properties":{"size":"18","text":"EC2"}}]}}},{"ID":"2715","typeID":"__group__","zOrder":"77","measuredW":"61","measuredH":"50","w":"61","h":"50","x":"862","y":"1730","properties":{"controlName":"101-basic-aws-services:vpc"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"61","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"36","measuredH":"26","x":"13","y":"12","properties":{"size":"18","text":"VPC"}}]}}},{"ID":"2716","typeID":"__group__","zOrder":"80","measuredW":"62","measuredH":"50","w":"62","h":"50","x":"928","y":"1730","properties":{"controlName":"102-ba1sic-aws-services:vpc"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"62","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"22","measuredH":"26","x":"20","y":"12","properties":{"size":"18","text":"S3"}}]}}},{"ID":"2717","typeID":"__group__","zOrder":"78","measuredW":"107","measuredH":"50","w":"107","h":"50","x":"793","y":"1676","properties":{"controlName":"103-ba1sic-aws-services:route53"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"107","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"71","measuredH":"26","x":"18","y":"12","properties":{"size":"18","text":"Route53"}}]}}},{"ID":"2718","typeID":"__group__","zOrder":"79","measuredW":"85","measuredH":"50","w":"85","h":"50","x":"906","y":"1676","properties":{"controlName":"104-ba1sic-aws-services:ses"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"85","h":"50","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"34","measuredH":"26","x":"28","y":"12","properties":{"size":"18","text":"SES"}}]}}}]},"attributes":{"name":"New Wireframe 9 copy","order":1000116.0868550346,"parentID":null,"notes":null},"branchID":"Master","resourceID":"73A38172-E66F-4B8C-9525-DB6AC79E153D","mockupH":"2510","mockupW":"1196","measuredW":"1464","measuredH":"2715","version":"1.0"},"groupOffset":{"x":0,"y":0},"dependencies":[],"projectID":"file:///Users/kamranahmed/Desktop/AWS%20Roadmap.bmpr"} \ No newline at end of file +{ + "mockup": { + "controls": { + "control": [ + { + "ID": "2262", + "typeID": "Label", + "zOrder": "21", + "measuredW": "148", + "measuredH": "40", + "x": "361", + "y": "377", + "properties": { + "size": "32", + "text": "Full Stack " + } + }, + { + "ID": "2263", + "typeID": "Canvas", + "zOrder": "22", + "w": "361", + "h": "150", + "measuredW": "100", + "measuredH": "70", + "x": "997", + "y": "244" + }, + { + "ID": "2264", + "typeID": "Label", + "zOrder": "23", + "measuredW": "332", + "measuredH": "26", + "x": "1013", + "y": "262", + "properties": { + "size": "18", + "text": "Find the detailed version of this checklist" + } + }, + { + "ID": "2265", + "typeID": "Label", + "zOrder": "24", + "measuredW": "318", + "measuredH": "26", + "x": "1013", + "y": "290", + "properties": { + "size": "18", + "text": "With details on how to implement these" + } + }, + { + "ID": "2266", + "typeID": "__group__", + "zOrder": "25", + "measuredW": "329", + "measuredH": "51", + "w": "329", + "h": "51", + "x": "1013", + "y": "326", + "properties": { + "controlName": "ext_link:roadmap.sh" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "329", + "h": "51", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "4273622", + "borderColor": "4273622" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "172", + "measuredH": "28", + "x": "79", + "y": "12", + "properties": { + "color": "16777215", + "size": "20", + "text": "https://roadmap.sh" + } + } + ] + } + } + }, + { + "ID": "2271", + "typeID": "Arrow", + "zOrder": "26", + "w": "1", + "h": "152", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "205", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4999999999999996, + "y": 0 + }, + "p2": { + "x": 0, + "y": 151.7942452326543 + } + } + }, + { + "ID": "2452", + "typeID": "Arrow", + "zOrder": "28", + "w": "881", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "1216", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.2324758426682365, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.4999999999999991, + "y": 0 + }, + "p2": { + "x": 880.971517875545, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2465", + "typeID": "Arrow", + "zOrder": "16", + "w": "1", + "h": "222", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "441", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0.05892607650582704 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 0, + "y": 222 + } + } + }, + { + "ID": "2473", + "typeID": "Arrow", + "zOrder": "17", + "w": "877", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "448", + "y": "663", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.47611064428963346, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.4999999999999994, + "y": 0 + }, + "p2": { + "x": 877, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2480", + "typeID": "Arrow", + "zOrder": "15", + "w": "1", + "h": "106", + "measuredW": "150", + "measuredH": "100", + "x": "852", + "y": "667", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.06514400623188976 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": 0, + "y": 106.12070867681257 + } + } + }, + { + "ID": "2494", + "typeID": "Arrow", + "zOrder": "14", + "w": "1", + "h": "105", + "measuredW": "150", + "measuredH": "100", + "x": "1186", + "y": "668", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0.30573956210059805 + }, + "p1": { + "x": 0.4999999999999996, + "y": 0 + }, + "p2": { + "x": 0, + "y": 105.12070867681257 + } + } + }, + { + "ID": "2495", + "typeID": "Arrow", + "zOrder": "30", + "w": "1", + "h": "298", + "measuredW": "150", + "measuredH": "100", + "x": "1326", + "y": "664", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 298.325993023479 + } + } + }, + { + "ID": "2500", + "typeID": "Arrow", + "zOrder": "32", + "w": "226", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1096", + "y": "858", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": 225.53175987254372, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2503", + "typeID": "Arrow", + "zOrder": "34", + "w": "880", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "964", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.09019887269550964, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.49999999999999944, + "y": 0 + }, + "p2": { + "x": 880, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2504", + "typeID": "Arrow", + "zOrder": "13", + "w": "1", + "h": "93", + "measuredW": "150", + "measuredH": "100", + "x": "852", + "y": "870", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0.24609978251851317 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": 0, + "y": 93.12070867681257 + } + } + }, + { + "ID": "2509", + "typeID": "Arrow", + "zOrder": "12", + "w": "1", + "h": "250", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "965", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0.45578755817643923 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 250.74987188583827 + } + } + }, + { + "ID": "2510", + "typeID": "Label", + "zOrder": "40", + "measuredW": "220", + "measuredH": "26", + "x": "524", + "y": "1000", + "properties": { + "size": "18", + "text": "Feel free to skip and revisit" + } + }, + { + "ID": "2517", + "typeID": "Canvas", + "zOrder": "38", + "w": "271", + "h": "149", + "measuredW": "100", + "measuredH": "70", + "x": "512", + "y": "922", + "properties": { + "borderColor": "16777215" + } + }, + { + "ID": "2518", + "typeID": "Label", + "zOrder": "43", + "measuredW": "237", + "measuredH": "26", + "x": "524", + "y": "1030", + "properties": { + "size": "18", + "text": "after learning some backend." + } + }, + { + "ID": "2519", + "typeID": "Arrow", + "zOrder": "11", + "w": "119", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "444", + "y": "1128", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 119.38938788584869, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.4999999999999996, + "y": 0 + }, + "p2": { + "x": 0, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2522", + "typeID": "Canvas", + "zOrder": "45", + "w": "271", + "h": "54", + "measuredW": "100", + "measuredH": "70", + "x": "512", + "y": "1187", + "properties": { + "borderColor": "16777215" + } + }, + { + "ID": "2523", + "typeID": "Label", + "zOrder": "46", + "measuredW": "229", + "measuredH": "26", + "x": "533", + "y": "1201", + "properties": { + "size": "18", + "text": "Start Backend Development" + } + }, + { + "ID": "2530", + "typeID": "__group__", + "zOrder": "47", + "measuredW": "429", + "measuredH": "85", + "w": "429", + "h": "85", + "x": "916", + "y": "1067", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "405", + "measuredH": "26", + "x": "0", + "y": "0", + "properties": { + "size": "18", + "text": "You can pick any backend programming language." + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "388", + "measuredH": "26", + "x": "0", + "y": "29", + "properties": { + "size": "18", + "text": "My recommendation is Node.js because you are" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "429", + "measuredH": "26", + "x": "0", + "y": "59", + "properties": { + "size": "18", + "text": "already familiar with JavaScript and it’s easier to pick." + } + } + ] + } + } + }, + { + "ID": "2531", + "typeID": "Arrow", + "zOrder": "48", + "w": "1", + "h": "289", + "measuredW": "150", + "measuredH": "100", + "x": "1326", + "y": "1216", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 288.9594087182493 + } + } + }, + { + "ID": "2532", + "typeID": "Arrow", + "zOrder": "49", + "w": "229", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1096", + "y": "1297", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 229, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2540", + "typeID": "Arrow", + "zOrder": "52", + "w": "229", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1096", + "y": "1431", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 229, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2543", + "typeID": "Arrow", + "zOrder": "54", + "w": "881", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "1506", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.2324758426682365, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.4999999999999991, + "y": 0 + }, + "p2": { + "x": 880.971517875545, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2544", + "typeID": "Arrow", + "zOrder": "55", + "w": "1", + "h": "250", + "measuredW": "150", + "measuredH": "100", + "x": "852", + "y": "1084", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "3355443", + "p0": { + "x": 0, + "y": 0.2769850029135341 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 0, + "y": 250.7539131759347 + } + } + }, + { + "ID": "2545", + "typeID": "Label", + "zOrder": "56", + "measuredW": "170", + "measuredH": "26", + "x": "661", + "y": "1300", + "properties": { + "size": "18", + "text": "Backend Starts Here" + } + }, + { + "ID": "2546", + "typeID": "Arrow", + "zOrder": "57", + "w": "1", + "h": "48", + "measuredW": "150", + "measuredH": "100", + "x": "847", + "y": "1287", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": 0.013075579052838293 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 48.325993023478986 + }, + "color": "3355443" + } + }, + { + "ID": "2547", + "typeID": "Arrow", + "zOrder": "58", + "w": "1", + "h": "48", + "measuredW": "150", + "measuredH": "100", + "x": "849", + "y": "1287", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": 0.013075579052838293 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 48.325993023478986 + }, + "color": "3355443" + } + }, + { + "ID": "2548", + "typeID": "Arrow", + "zOrder": "59", + "w": "1", + "h": "48", + "measuredW": "150", + "measuredH": "100", + "x": "853", + "y": "1287", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": 0.013075579052838293 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 48.325993023478986 + }, + "color": "3355443" + } + }, + { + "ID": "2556", + "typeID": "Arrow", + "zOrder": "63", + "w": "1", + "h": "331", + "measuredW": "150", + "measuredH": "100", + "x": "444", + "y": "1507", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0.45578755817643923 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 0, + "y": 331.5 + } + } + }, + { + "ID": "2562", + "typeID": "Arrow", + "zOrder": "10", + "w": "229", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "443", + "y": "1634", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 229, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2563", + "typeID": "Arrow", + "zOrder": "9", + "w": "93", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "351", + "y": "1577", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "14540253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.5008960573476694, + "y": 0.0011062084265900647 + }, + "p2": { + "x": 93, + "y": 0 + } + } + }, + { + "ID": "2564", + "typeID": "Arrow", + "zOrder": "65", + "w": "1", + "h": "718", + "measuredW": "150", + "measuredH": "100", + "x": "351", + "y": "859", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "14540253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49979684489989734, + "y": 0 + }, + "p2": { + "x": 0, + "y": 718 + } + } + }, + { + "ID": "2565", + "typeID": "Arrow", + "zOrder": "66", + "w": "194", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "351", + "y": "857", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "14540253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999934253780398, + "y": 0.0005275763265275694 + }, + "p2": { + "x": 195, + "y": 0 + } + } + }, + { + "ID": "2566", + "typeID": "Arrow", + "zOrder": "8", + "w": "1", + "h": "71", + "measuredW": "150", + "measuredH": "100", + "x": "547", + "y": "858", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "14540253", + "p0": { + "x": -0.33333333333337123, + "y": 70.33333333333337 + }, + "p1": { + "x": 0.49999999999999906, + "y": 0 + }, + "p2": { + "x": -0.33333333333337123, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2567", + "typeID": "Label", + "zOrder": "68", + "measuredW": "230", + "measuredH": "26", + "x": "314", + "y": "1321", + "properties": { + "size": "18", + "text": "Learn Frontend Frameworks" + } + }, + { + "ID": "2568", + "typeID": "Label", + "zOrder": "69", + "measuredW": "170", + "measuredH": "26", + "x": "314", + "y": "1349", + "properties": { + "size": "18", + "text": "If you skipped earlier" + } + }, + { + "ID": "2569", + "typeID": "Canvas", + "zOrder": "67", + "w": "271", + "h": "80", + "measuredW": "100", + "measuredH": "70", + "x": "293", + "y": "1310", + "properties": { + "borderColor": "16777215" + } + }, + { + "ID": "2570", + "typeID": "Arrow", + "zOrder": "70", + "w": "315", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "351", + "y": "1724", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "3355443", + "p0": { + "x": 314.84917963190844, + "y": -0.24608682406528715 + }, + "p1": { + "x": 0.4999999999999997, + "y": -1.851258080486789e-18 + }, + "p2": { + "x": 0, + "y": -0.24608682406528715 + } + } + }, + { + "ID": "2572", + "typeID": "Arrow", + "zOrder": "71", + "w": "74", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "590", + "y": "1727", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "3355443", + "p0": { + "x": 74, + "y": 0 + }, + "p1": { + "x": 0.5046441213217208, + "y": -0.0016627488112519412 + }, + "p2": { + "x": 0, + "y": 0 + } + } + }, + { + "ID": "2573", + "typeID": "Arrow", + "zOrder": "72", + "w": "74", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "590", + "y": "1731", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "3355443", + "p0": { + "x": 74, + "y": 0 + }, + "p1": { + "x": 0.5046441213217208, + "y": -0.0016627488112519412 + }, + "p2": { + "x": 0, + "y": 0 + } + } + }, + { + "ID": "2574", + "typeID": "Label", + "zOrder": "73", + "measuredW": "246", + "measuredH": "26", + "x": "506", + "y": "1744", + "properties": { + "size": "18", + "text": "Get Some DevOps Knowledge" + } + }, + { + "ID": "2580", + "typeID": "Arrow", + "zOrder": "7", + "w": "879", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "445", + "y": "1838", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.2324758426682365, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.49999999999999906, + "y": 0 + }, + "p2": { + "x": 878.8417317755348, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2583", + "typeID": "Arrow", + "zOrder": "6", + "w": "1", + "h": "69", + "measuredW": "150", + "measuredH": "100", + "x": "823", + "y": "1753", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": -0.5 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": -0.4638780906282136, + "y": 68.5 + } + } + }, + { + "ID": "2588", + "typeID": "Arrow", + "zOrder": "5", + "w": "1", + "h": "69", + "measuredW": "150", + "measuredH": "100", + "x": "893", + "y": "1759", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": -0.5 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": -0.4638780906282136, + "y": 68.5 + } + } + }, + { + "ID": "2599", + "typeID": "Arrow", + "zOrder": "4", + "w": "1", + "h": "69", + "measuredW": "150", + "measuredH": "100", + "x": "960", + "y": "1759", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": -0.5 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": -0.4638780906282136, + "y": 68.5 + } + } + }, + { + "ID": "2603", + "typeID": "Arrow", + "zOrder": "81", + "w": "1", + "h": "289", + "measuredW": "150", + "measuredH": "100", + "x": "1326", + "y": "1838", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 288.9594087182493 + } + } + }, + { + "ID": "2615", + "typeID": "Arrow", + "zOrder": "2", + "w": "94", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1230", + "y": "2038", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 0.2886071293653458, + "y": -0.02339096824744047 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 94.53612190937179, + "y": -0.02339096824744047 + } + } + }, + { + "ID": "2616", + "typeID": "Arrow", + "zOrder": "85", + "w": "881", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "444", + "y": "2127", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.10054691206102007, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.499999999999999, + "y": 0 + }, + "p2": { + "x": 880.8417317755348, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2619", + "typeID": "Arrow", + "zOrder": "3", + "w": "94", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1233", + "y": "1921", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 0.2886071293653458, + "y": -0.02339096824744047 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 94.53612190937179, + "y": -0.02339096824744047 + } + } + }, + { + "ID": "2620", + "typeID": "Arrow", + "zOrder": "1", + "w": "1", + "h": "86", + "measuredW": "150", + "measuredH": "100", + "x": "848", + "y": "2040", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": -0.056906605600943294 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": -0.4638780906282136, + "y": 86.21773558030964 + } + } + }, + { + "ID": "2623", + "typeID": "Arrow", + "zOrder": "89", + "w": "1", + "h": "86", + "measuredW": "150", + "measuredH": "100", + "x": "566", + "y": "2040", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4638780906282136, + "y": -0.056906605600943294 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": -0.4638780906282136, + "y": 86.21773558030964 + } + } + }, + { + "ID": "2626", + "typeID": "Arrow", + "zOrder": "91", + "w": "1", + "h": "274", + "measuredW": "150", + "measuredH": "100", + "x": "443", + "y": "2127", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0.45578755817643923 + }, + "p1": { + "x": 0.4999999999999996, + "y": 0 + }, + "p2": { + "x": 0, + "y": 274.50913558489674 + } + } + }, + { + "ID": "2629", + "typeID": "TextArea", + "zOrder": "93", + "w": "370", + "h": "155", + "measuredW": "200", + "measuredH": "140", + "x": "1045", + "y": "1585" + }, + { + "ID": "2630", + "typeID": "Label", + "zOrder": "94", + "measuredW": "311", + "measuredH": "26", + "x": "1066", + "y": "1603", + "properties": { + "color": "4985136", + "size": "18", + "text": "Use the checkpoints and do not forget" + } + }, + { + "ID": "2631", + "typeID": "Label", + "zOrder": "95", + "measuredW": "296", + "measuredH": "26", + "x": "1066", + "y": "1633", + "properties": { + "color": "4985136", + "size": "18", + "text": "to practice what you learn. There are" + } + }, + { + "ID": "2632", + "typeID": "Label", + "zOrder": "96", + "measuredW": "302", + "measuredH": "26", + "x": "1066", + "y": "1663", + "properties": { + "color": "4985136", + "size": "18", + "text": "project ideas at each checkpoint that" + } + }, + { + "ID": "2633", + "typeID": "Label", + "zOrder": "97", + "measuredW": "320", + "measuredH": "26", + "x": "1066", + "y": "1693", + "properties": { + "color": "4985136", + "size": "18", + "text": "you can build to solidify your knowledge." + } + }, + { + "ID": "2636", + "typeID": "Arrow", + "zOrder": "0", + "w": "118", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "444", + "y": "2293", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": 117.74886541217052, + "y": 0.21773558030963613 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": -0.4638780906282136, + "y": 0.21773558030963613 + } + } + }, + { + "ID": "2637", + "typeID": "Arrow", + "zOrder": "99", + "w": "504", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "443", + "y": "2401", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.10054691206102007, + "y": -0.20575476734575204 + }, + "p1": { + "x": 0.499999999999999, + "y": 0 + }, + "p2": { + "x": 503.7236123379937, + "y": -0.20575476734575204 + } + } + }, + { + "ID": "2638", + "typeID": "Arrow", + "zOrder": "100", + "w": "1", + "h": "289", + "measuredW": "150", + "measuredH": "100", + "x": "949", + "y": "2401", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 288.9594087182493 + } + } + }, + { + "ID": "2640", + "typeID": "TextArea", + "zOrder": "101", + "w": "635", + "h": "112", + "measuredW": "200", + "measuredH": "140", + "x": "630", + "y": "2476" + }, + { + "ID": "2641", + "typeID": "Label", + "zOrder": "102", + "measuredW": "366", + "measuredH": "25", + "x": "765", + "y": "2493", + "properties": { + "size": "17", + "text": "Continue Learning with following relevant tracks" + } + }, + { + "ID": "2642", + "typeID": "__group__", + "zOrder": "103", + "measuredW": "198", + "measuredH": "44", + "w": "198", + "h": "44", + "x": "1052", + "y": "2530", + "properties": { + "controlName": "ext_link:roadmap.sh/devops" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "141", + "measuredH": "25", + "x": "28", + "y": "9", + "properties": { + "size": "17", + "text": "DevOps Roadmap" + } + } + ] + } + } + }, + { + "ID": "2643", + "typeID": "__group__", + "zOrder": "104", + "measuredW": "198", + "measuredH": "44", + "w": "198", + "h": "44", + "x": "846", + "y": "2530", + "properties": { + "controlName": "ext_link:roadmap.sh/backend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "147", + "measuredH": "25", + "x": "25", + "y": "9", + "properties": { + "size": "17", + "text": "Backend Roadmap" + } + } + ] + } + } + }, + { + "ID": "2644", + "typeID": "__group__", + "zOrder": "105", + "measuredW": "198", + "measuredH": "44", + "w": "198", + "h": "44", + "x": "640", + "y": "2530", + "properties": { + "controlName": "ext_link:roadmap.sh/frontend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "149", + "measuredH": "25", + "x": "24", + "y": "9", + "properties": { + "size": "17", + "text": "Frontend Roadmap" + } + } + ] + } + } + }, + { + "ID": "2657", + "typeID": "Canvas", + "zOrder": "106", + "w": "381", + "h": "302", + "measuredW": "100", + "measuredH": "70", + "x": "594", + "y": "244" + }, + { + "ID": "2658", + "typeID": "Label", + "zOrder": "107", + "measuredW": "318", + "measuredH": "26", + "x": "613", + "y": "305", + "properties": { + "size": "18", + "text": "If you are already a full-stack developer" + } + }, + { + "ID": "2659", + "typeID": "Label", + "zOrder": "108", + "measuredW": "328", + "measuredH": "26", + "x": "613", + "y": "335", + "properties": { + "size": "18", + "text": "you should visit these roadmaps instead." + } + }, + { + "ID": "2661", + "typeID": "__group__", + "zOrder": "109", + "measuredW": "106", + "measuredH": "44", + "w": "106", + "h": "44", + "x": "614", + "y": "374", + "properties": { + "controlName": "ext_link:roadmap.sh/frontend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "106", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "70", + "measuredH": "25", + "x": "18", + "y": "9", + "properties": { + "size": "17", + "text": "Frontend" + } + } + ] + } + } + }, + { + "ID": "2662", + "typeID": "__group__", + "zOrder": "110", + "measuredW": "113", + "measuredH": "44", + "w": "113", + "h": "44", + "x": "731", + "y": "374", + "properties": { + "controlName": "ext_link:roadmap.sh/frontend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "113", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "68", + "measuredH": "25", + "x": "23", + "y": "9", + "properties": { + "size": "17", + "text": "Backend" + } + } + ] + } + } + }, + { + "ID": "2663", + "typeID": "__group__", + "zOrder": "111", + "measuredW": "101", + "measuredH": "44", + "w": "101", + "h": "44", + "x": "856", + "y": "374", + "properties": { + "controlName": "ext_link:roadmap.sh/frontend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "101", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "62", + "measuredH": "25", + "x": "20", + "y": "9", + "properties": { + "size": "17", + "text": "DevOps" + } + } + ] + } + } + }, + { + "ID": "2664", + "typeID": "Label", + "zOrder": "112", + "measuredW": "288", + "measuredH": "26", + "x": "616", + "y": "433", + "properties": { + "size": "18", + "text": "Target audience for this roadmap is" + } + }, + { + "ID": "2665", + "typeID": "Label", + "zOrder": "113", + "measuredW": "311", + "measuredH": "26", + "x": "616", + "y": "463", + "properties": { + "size": "18", + "text": "absolute beginners wanting to get into" + } + }, + { + "ID": "2666", + "typeID": "Label", + "zOrder": "114", + "measuredW": "186", + "measuredH": "26", + "x": "616", + "y": "493", + "properties": { + "size": "18", + "text": "full stack development." + } + }, + { + "ID": "2667", + "typeID": "Label", + "zOrder": "115", + "measuredW": "135", + "measuredH": "28", + "x": "613", + "y": "264", + "properties": { + "size": "20", + "text": "Audience Note" + } + }, + { + "ID": "2668", + "typeID": "Canvas", + "zOrder": "116", + "w": "363", + "h": "136", + "measuredW": "100", + "measuredH": "70", + "x": "997", + "y": "410" + }, + { + "ID": "2669", + "typeID": "Canvas", + "zOrder": "117", + "w": "26", + "h": "26", + "measuredW": "100", + "measuredH": "70", + "x": "1013", + "y": "426", + "properties": { + "color": "3355443" + } + }, + { + "ID": "2670", + "typeID": "Label", + "zOrder": "118", + "measuredW": "249", + "measuredH": "26", + "x": "1051", + "y": "426", + "properties": { + "size": "18", + "text": "Project Ideas and Suggestions" + } + }, + { + "ID": "2671", + "typeID": "Canvas", + "zOrder": "119", + "w": "26", + "h": "26", + "measuredW": "100", + "measuredH": "70", + "x": "1013", + "y": "461", + "properties": { + "color": "16776960" + } + }, + { + "ID": "2672", + "typeID": "Label", + "zOrder": "120", + "measuredW": "150", + "measuredH": "26", + "x": "1051", + "y": "461", + "properties": { + "size": "18", + "text": "Key topics to learn" + } + }, + { + "ID": "2675", + "typeID": "Arrow", + "zOrder": "121", + "w": "1", + "h": "20", + "measuredW": "150", + "measuredH": "100", + "x": "1024", + "y": "502", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "3355443", + "p0": { + "x": 0, + "y": 0.07526588698897285 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 19.753913175934713 + } + } + }, + { + "ID": "2676", + "typeID": "Label", + "zOrder": "122", + "measuredW": "153", + "measuredH": "26", + "x": "1051", + "y": "499", + "properties": { + "size": "18", + "text": "Change of Domain" + } + }, + { + "ID": "2677", + "typeID": "Arrow", + "zOrder": "123", + "w": "1", + "h": "20", + "measuredW": "150", + "measuredH": "100", + "x": "1027", + "y": "502", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "3355443", + "p0": { + "x": 0, + "y": 0.07526588698897285 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 19.753913175934713 + } + } + }, + { + "ID": "2679", + "typeID": "Arrow", + "zOrder": "124", + "w": "271", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1193", + "y": "603", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "color": "16777215", + "p0": { + "x": -0.4638780906282136, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": 270.18342568627713, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2680", + "typeID": "Arrow", + "zOrder": "125", + "w": "228", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "268", + "y": "737", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "color": "16777215", + "p0": { + "x": 0.49770846294279636, + "y": 0.12070867681256914 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 228.53175987254372, + "y": 0.12070867681256914 + } + } + }, + { + "ID": "2681", + "typeID": "Arrow", + "zOrder": "126", + "w": "60", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "919", + "y": "2714", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "color": "16777215", + "p0": { + "x": 0, + "y": 0.12070867681268282 + }, + "p1": { + "x": 0.49999999999999967, + "y": 0 + }, + "p2": { + "x": 60, + "y": 0.12070867681268282 + } + } + }, + { + "ID": "2682", + "typeID": "__group__", + "zOrder": "20", + "measuredW": "115", + "measuredH": "49", + "w": "115", + "h": "49", + "x": "502", + "y": "639", + "properties": { + "controlName": "100-html" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "115", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "48", + "measuredH": "25", + "x": "34", + "y": "12", + "properties": { + "size": "17", + "text": "HTML" + } + } + ] + } + } + }, + { + "ID": "2683", + "typeID": "__group__", + "zOrder": "18", + "measuredW": "99", + "measuredH": "49", + "w": "99", + "h": "49", + "x": "655", + "y": "639", + "properties": { + "controlName": "101-css" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "99", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "33", + "measuredH": "25", + "x": "33", + "y": "12", + "properties": { + "size": "17", + "text": "CSS" + } + } + ] + } + } + }, + { + "ID": "2684", + "typeID": "__group__", + "zOrder": "19", + "measuredW": "146", + "measuredH": "50", + "w": "146", + "h": "50", + "x": "990", + "y": "639", + "properties": { + "controlName": "103-javascript" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "146", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "81", + "measuredH": "25", + "x": "32", + "y": "12", + "properties": { + "size": "17", + "text": "JavaScript" + } + } + ] + } + } + }, + { + "ID": "2685", + "typeID": "__group__", + "zOrder": "31", + "measuredW": "99", + "measuredH": "50", + "w": "99", + "h": "50", + "x": "1276", + "y": "737", + "properties": { + "controlName": "105-npm" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "99", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "34", + "measuredH": "25", + "x": "33", + "y": "12", + "properties": { + "size": "17", + "text": "npm" + } + } + ] + } + } + }, + { + "ID": "2686", + "typeID": "__group__", + "zOrder": "27", + "measuredW": "302", + "measuredH": "50", + "w": "302", + "h": "50", + "x": "597", + "y": "737", + "properties": { + "controlName": "102-checkpoint-static-websites" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "302", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "253", + "measuredH": "26", + "x": "23", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Static Webpages", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2687", + "typeID": "__group__", + "zOrder": "29", + "measuredW": "307", + "measuredH": "50", + "w": "307", + "h": "50", + "x": "921", + "y": "737", + "properties": { + "controlName": "104-checkpoint-interactivity" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "307", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "210", + "measuredH": "26", + "x": "49", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Interactivity", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2688", + "typeID": "__group__", + "zOrder": "33", + "measuredW": "307", + "measuredH": "50", + "w": "307", + "h": "50", + "x": "921", + "y": "833", + "properties": { + "controlName": "106-external-packages" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "307", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "268", + "measuredH": "26", + "x": "21", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — External Packages", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2689", + "typeID": "__group__", + "zOrder": "35", + "measuredW": "80", + "measuredH": "50", + "w": "80", + "h": "50", + "x": "1107", + "y": "937", + "properties": { + "controlName": "107-git" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "80", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "22", + "measuredH": "25", + "x": "29", + "y": "12", + "properties": { + "size": "17", + "text": "Git" + } + } + ] + } + } + }, + { + "ID": "2690", + "typeID": "__group__", + "zOrder": "36", + "measuredW": "101", + "measuredH": "50", + "w": "101", + "h": "50", + "x": "990", + "y": "937", + "properties": { + "controlName": "108-github" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "101", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "54", + "measuredH": "25", + "x": "24", + "y": "12", + "properties": { + "size": "17", + "text": "GitHub" + } + } + ] + } + } + }, + { + "ID": "2691", + "typeID": "__group__", + "zOrder": "37", + "measuredW": "302", + "measuredH": "50", + "w": "302", + "h": "50", + "x": "597", + "y": "833", + "properties": { + "controlName": "109-collaborative-work" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "302", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "268", + "measuredH": "26", + "x": "17", + "y": "13", + "properties": { + "size": "18", + "text": "Checkpoint — Collaborative Work", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2692", + "typeID": "__group__", + "zOrder": "42", + "measuredW": "120", + "measuredH": "50", + "w": "120", + "h": "50", + "x": "652", + "y": "938", + "properties": { + "controlName": "110-tailwind" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "120", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "61", + "measuredH": "25", + "x": "29", + "y": "12", + "properties": { + "size": "17", + "text": "Tailwind" + } + } + ] + } + } + }, + { + "ID": "2693", + "typeID": "__group__", + "zOrder": "41", + "measuredW": "120", + "measuredH": "50", + "w": "120", + "h": "50", + "x": "524", + "y": "938", + "properties": { + "controlName": "111-react" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "120", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "47", + "measuredH": "25", + "x": "36", + "y": "12", + "properties": { + "size": "17", + "text": "React" + } + } + ] + } + } + }, + { + "ID": "2694", + "typeID": "__group__", + "zOrder": "39", + "measuredW": "286", + "measuredH": "50", + "w": "286", + "h": "50", + "x": "502", + "y": "1103", + "properties": { + "controlName": "112-frontend-apps" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "286", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "236", + "measuredH": "26", + "x": "28", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Frontend Apps", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2695", + "typeID": "__group__", + "zOrder": "44", + "measuredW": "120", + "measuredH": "50", + "w": "120", + "h": "50", + "x": "988", + "y": "1190", + "properties": { + "controlName": "113-nodejs" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "120", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "58", + "measuredH": "25", + "x": "31", + "y": "12", + "properties": { + "size": "17", + "text": "Node.js" + } + } + ] + } + } + }, + { + "ID": "2696", + "typeID": "__group__", + "zOrder": "50", + "measuredW": "280", + "measuredH": "50", + "w": "280", + "h": "50", + "x": "917", + "y": "1272", + "properties": { + "controlName": "114-cli-apps" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "280", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "191", + "measuredH": "26", + "x": "44", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — CLI Apps", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2697", + "typeID": "__group__", + "zOrder": "51", + "measuredW": "135", + "measuredH": "50", + "w": "135", + "h": "50", + "x": "1223", + "y": "1337", + "properties": { + "controlName": "115-postgresql" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "135", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "93", + "measuredH": "25", + "x": "21", + "y": "12", + "properties": { + "size": "17", + "text": "PostgreSQL" + } + } + ] + } + } + }, + { + "ID": "2698", + "typeID": "__group__", + "zOrder": "53", + "measuredW": "276", + "measuredH": "50", + "w": "276", + "h": "50", + "x": "917", + "y": "1406", + "properties": { + "controlName": "116-crud" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "276", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "228", + "measuredH": "26", + "x": "24", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Simple CRUD", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2699", + "typeID": "__group__", + "zOrder": "60", + "measuredW": "145", + "measuredH": "50", + "w": "145", + "h": "50", + "x": "740", + "y": "1481", + "properties": { + "controlName": "117-restful-apis" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "145", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "102", + "measuredH": "25", + "x": "22", + "y": "12", + "properties": { + "size": "17", + "text": "RESTful APIs" + } + } + ] + } + } + }, + { + "ID": "2700", + "typeID": "__group__", + "zOrder": "61", + "measuredW": "111", + "measuredH": "50", + "w": "111", + "h": "50", + "x": "604", + "y": "1481", + "properties": { + "controlName": "118-jwt-auth" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "111", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "74", + "measuredH": "25", + "x": "19", + "y": "12", + "properties": { + "size": "17", + "text": "JWT Auth" + } + } + ] + } + } + }, + { + "ID": "2701", + "typeID": "__group__", + "zOrder": "64", + "measuredW": "89", + "measuredH": "50", + "w": "89", + "h": "50", + "x": "486", + "y": "1481", + "properties": { + "controlName": "119-redis" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "89", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "45", + "measuredH": "25", + "x": "22", + "y": "12", + "properties": { + "size": "17", + "text": "Redis" + } + } + ] + } + } + }, + { + "ID": "2702", + "typeID": "__group__", + "zOrder": "62", + "measuredW": "277", + "measuredH": "50", + "w": "277", + "h": "50", + "x": "484", + "y": "1607", + "properties": { + "controlName": "120-complete-app" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "277", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "233", + "measuredH": "26", + "x": "21", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Complete App", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2703", + "typeID": "__group__", + "zOrder": "74", + "measuredW": "145", + "measuredH": "50", + "w": "145", + "h": "50", + "x": "371", + "y": "1814", + "properties": { + "controlName": "121-linux-basics" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "145", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "97", + "measuredH": "25", + "x": "24", + "y": "12", + "properties": { + "size": "17", + "text": "Linux Basics" + } + } + ] + } + } + }, + { + "ID": "2704", + "typeID": "__group__", + "zOrder": "75", + "measuredW": "198", + "measuredH": "50", + "w": "198", + "h": "50", + "x": "792", + "y": "1810", + "properties": { + "controlName": "122-basic-aws-services" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "153", + "measuredH": "25", + "x": "22", + "y": "12", + "properties": { + "size": "17", + "text": "Basic AWS Services" + } + } + ] + } + } + }, + { + "ID": "2705", + "typeID": "__group__", + "zOrder": "87", + "measuredW": "256", + "measuredH": "50", + "w": "256", + "h": "50", + "x": "987", + "y": "1897", + "properties": { + "controlName": "123-deployment" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "256", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "214", + "measuredH": "26", + "x": "21", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Deployment", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2706", + "typeID": "__group__", + "zOrder": "83", + "measuredW": "87", + "measuredH": "50", + "w": "87", + "h": "50", + "x": "1282", + "y": "1956", + "properties": { + "controlName": "124-monit" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "87", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "44", + "measuredH": "25", + "x": "22", + "y": "12", + "properties": { + "size": "17", + "text": "Monit" + } + } + ] + } + } + }, + { + "ID": "2707", + "typeID": "__group__", + "zOrder": "84", + "measuredW": "251", + "measuredH": "50", + "w": "251", + "h": "50", + "x": "989", + "y": "2014", + "properties": { + "controlName": "125-monitoring" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "251", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "204", + "measuredH": "26", + "x": "24", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Monitoring", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2708", + "typeID": "__group__", + "zOrder": "86", + "measuredW": "157", + "measuredH": "50", + "w": "157", + "h": "50", + "x": "1043", + "y": "2103", + "properties": { + "controlName": "126-github-actions" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "157", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "114", + "measuredH": "25", + "x": "22", + "y": "12", + "properties": { + "size": "17", + "text": "GitHub Actions" + } + } + ] + } + } + }, + { + "ID": "2709", + "typeID": "__group__", + "zOrder": "82", + "measuredW": "223", + "measuredH": "50", + "w": "223", + "h": "50", + "x": "737", + "y": "2015", + "properties": { + "controlName": "127-ci-cd" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "223", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "179", + "measuredH": "26", + "x": "22", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — CI / CD", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2710", + "typeID": "__group__", + "zOrder": "88", + "measuredW": "102", + "measuredH": "50", + "w": "102", + "h": "50", + "x": "661", + "y": "2102", + "properties": { + "controlName": "128-ansible" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "102", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "23", + "y": "12", + "properties": { + "size": "17", + "text": "Ansible" + } + } + ] + } + } + }, + { + "ID": "2711", + "typeID": "__group__", + "zOrder": "90", + "measuredW": "245", + "measuredH": "50", + "w": "245", + "h": "50", + "x": "444", + "y": "2015", + "properties": { + "controlName": "129-automation" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "245", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "208", + "measuredH": "26", + "x": "19", + "y": "12", + "properties": { + "size": "18", + "text": "Checkpoint — Automation", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2712", + "typeID": "__group__", + "zOrder": "92", + "measuredW": "109", + "measuredH": "50", + "w": "109", + "h": "50", + "x": "388", + "y": "2181", + "properties": { + "controlName": "130-terraform" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "109", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "75", + "measuredH": "25", + "x": "17", + "y": "12", + "properties": { + "size": "17", + "text": "Terraform" + } + } + ] + } + } + }, + { + "ID": "2713", + "typeID": "__group__", + "zOrder": "98", + "measuredW": "265", + "measuredH": "50", + "w": "265", + "h": "50", + "x": "511", + "y": "2268", + "properties": { + "controlName": "131-infrastructure" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "265", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "227", + "measuredH": "26", + "x": "17", + "y": "12", + "properties": { + "size": "18", + "color": "16777215", + "text": "Checkpoint — Infrastructure" + } + } + ] + } + } + }, + { + "ID": "2714", + "typeID": "__group__", + "zOrder": "76", + "measuredW": "64", + "measuredH": "50", + "w": "64", + "h": "50", + "x": "792", + "y": "1730", + "properties": { + "controlName": "100-basic-aws-services:ec2" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "64", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "36", + "measuredH": "26", + "x": "14", + "y": "12", + "properties": { + "size": "18", + "text": "EC2" + } + } + ] + } + } + }, + { + "ID": "2715", + "typeID": "__group__", + "zOrder": "77", + "measuredW": "61", + "measuredH": "50", + "w": "61", + "h": "50", + "x": "862", + "y": "1730", + "properties": { + "controlName": "101-basic-aws-services:vpc" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "61", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "36", + "measuredH": "26", + "x": "13", + "y": "12", + "properties": { + "size": "18", + "text": "VPC" + } + } + ] + } + } + }, + { + "ID": "2716", + "typeID": "__group__", + "zOrder": "80", + "measuredW": "62", + "measuredH": "50", + "w": "62", + "h": "50", + "x": "928", + "y": "1730", + "properties": { + "controlName": "102-basic-aws-services:s3" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "62", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "22", + "measuredH": "26", + "x": "20", + "y": "12", + "properties": { + "size": "18", + "text": "S3" + } + } + ] + } + } + }, + { + "ID": "2717", + "typeID": "__group__", + "zOrder": "78", + "measuredW": "107", + "measuredH": "50", + "w": "107", + "h": "50", + "x": "793", + "y": "1676", + "properties": { + "controlName": "103-basic-aws-services:route53" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "107", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "71", + "measuredH": "26", + "x": "18", + "y": "12", + "properties": { + "size": "18", + "text": "Route53" + } + } + ] + } + } + }, + { + "ID": "2718", + "typeID": "__group__", + "zOrder": "79", + "measuredW": "85", + "measuredH": "50", + "w": "85", + "h": "50", + "x": "906", + "y": "1676", + "properties": { + "controlName": "104-basic-aws-services:ses" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "85", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "34", + "measuredH": "26", + "x": "28", + "y": "12", + "properties": { + "size": "18", + "text": "SES" + } + } + ] + } + } + } + ] + }, + "attributes": { + "name": "New Wireframe 9 copy", + "order": 1000116.0868550346, + "parentID": null, + "notes": null + }, + "branchID": "Master", + "resourceID": "73A38172-E66F-4B8C-9525-DB6AC79E153D", + "mockupH": "2510", + "mockupW": "1196", + "measuredW": "1464", + "measuredH": "2715", + "version": "1.0" + }, + "groupOffset": { + "x": 0, + "y": 0 + }, + "dependencies": [], + "projectID": "file:///Users/kamranahmed/Desktop/AWS%20Roadmap.bmpr" +} diff --git a/src/components/FrameRenderer/FrameRenderer.css b/src/components/FrameRenderer/FrameRenderer.css index 2389f2796..e12a113f1 100644 --- a/src/components/FrameRenderer/FrameRenderer.css +++ b/src/components/FrameRenderer/FrameRenderer.css @@ -57,6 +57,11 @@ svg .learning rect { fill: #dad1fd !important; } +svg .learning rect[fill='rgb(51,51,51)'] + text, +svg .done rect[fill='rgb(51,51,51)'] + text { + fill: black !important; +} + svg .learning text { text-decoration: underline; } diff --git a/src/data/roadmaps/frontend/content/114-css-frameworks/114-js-first/100-tailwind-css.md b/src/data/roadmaps/frontend/content/114-css-frameworks/114-js-first/100-tailwind-css.md index 50428eecc..92e343740 100644 --- a/src/data/roadmaps/frontend/content/114-css-frameworks/114-js-first/100-tailwind-css.md +++ b/src/data/roadmaps/frontend/content/114-css-frameworks/114-js-first/100-tailwind-css.md @@ -5,7 +5,7 @@ CSS Framework that provides atomic CSS classes to help you style components e.g. Visit the following resources to learn more: - [Tailwind Website](https://tailwindcss.com) -- [Tailwind CSS: An Introduction](https://www.codemag.com/Article/2105091/Tailwind-CSS-An-Introduction) -- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) -- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) +- [Tailwind CSS Full Course for Beginners](https://www.youtube.com/watch?v=lCxcTsOHrjo) - [Tailwind CSS Crash Course](https://www.youtube.com/watch?v=UBOj6rqRUME) +- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) +- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) diff --git a/src/data/roadmaps/full-stack/content/100-html.md b/src/data/roadmaps/full-stack/content/100-html.md index bd6904a96..6b285ff8d 100644 --- a/src/data/roadmaps/full-stack/content/100-html.md +++ b/src/data/roadmaps/full-stack/content/100-html.md @@ -1 +1,11 @@ -# Html \ No newline at end of file +# HTML + +HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript. + +Visit the following resources to learn more: + +- [W3Schools: Learn HTML](https://www.w3schools.com/html/html_intro.asp) +- [Codecademy - Learn HTML](https://www.codecademy.com/learn/learn-html) +- [Interactive HTML Course](https://github.com/denysdovhan/learnyouhtml) +- [HTML Full Course - Build a Website Tutorial](https://www.youtube.com/watch?v=pQN-pnXPaVg) +- [HTML Tutorial for Beginners: HTML Crash Course](https://www.youtube.com/watch?v=qz0aGYrrlhU) diff --git a/src/data/roadmaps/full-stack/content/101-css.md b/src/data/roadmaps/full-stack/content/101-css.md index 77d84371c..a60786958 100644 --- a/src/data/roadmaps/full-stack/content/101-css.md +++ b/src/data/roadmaps/full-stack/content/101-css.md @@ -1 +1,15 @@ -# Css \ No newline at end of file +# CSS + +CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript. + +Visit the following resources to learn more: + +- [W3Schools — Learn CSS](https://www.w3schools.com/css/) +- [freeCodeCamp — Responsive Web Design](https://www.freecodecamp.org/learn/2022/responsive-web-design) +- [Learn to Code HTML & CSS](https://learn.shayhowe.com/html-css/building-your-first-web-page/) +- [What The Flexbox!](https://flexbox.io/) +- [Learn CSS | Codecademy](https://www.codecademy.com/learn/learn-css) +- [Learn Intermediate CSS | Codecademy](https://www.codecademy.com/learn/learn-intermediate-css) +- [CSS Crash Course For Absolute Beginners](https://www.youtube.com/watch?v=yfoY53QXEnI) +- [HTML and CSS Tutorial](https://www.youtube.com/watch?v=D-h8L5hgW-w) +- [CSS Masterclass - Tutorial & Course for Beginners](https://www.youtube.com/watch?v=FqmB-Zj2-PA) diff --git a/src/data/roadmaps/full-stack/content/102-checkpoint-static-websites.md b/src/data/roadmaps/full-stack/content/102-checkpoint-static-websites.md index 51403ac84..8f80b24ce 100644 --- a/src/data/roadmaps/full-stack/content/102-checkpoint-static-websites.md +++ b/src/data/roadmaps/full-stack/content/102-checkpoint-static-websites.md @@ -1 +1,19 @@ -# Checkpoint static websites \ No newline at end of file +# Checkpoint + +Now that you have learnt HTML and CSS, you should be able to build static webpages. I recommend you to build as many test projects at each yellow step of the roadmap as possible to solidify what you learn. + +The practice that I used to follow when I was learning was this: + +- While you are watching a course or reading a book, make sure to code along with the instructor/author — pause the video at regular intervals and code what you are being taught. +- Search on YouTube and watch a few project based tutorials on the topic that you are learning. Apart from coding along with the instructor: + - Try to build the same project at least 2 to 3 times on your own without looking at the video. If you get stuck, refer to the section of the video where the instructor builds that part of the project. + - Build something else that is similar to the project that you just built. For example, if you just built a todo app, try to build a notes app or a reminder app. + +## Project Ideas + +Now that you have learnt HTML and CSS, here are a few ideas for you to build: + +- Try to copy the design of a website that you like. + - Here is a [simple blog design in figma](https://www.figma.com/file/nh0V05z3NB87ue9v5PcO3R/writings.dev?type=design&node-id=0%3A1&t=2iQplaIojU3ydAfW-1) that you can try to copy. + - Or try to rebuild the [webpages of this website](https://cs.fyi/). +- Take some inspiration from [personal portfolios of others](https://astro.build/showcase/) and build your own personal portfolio diff --git a/src/data/roadmaps/full-stack/content/103-javascript.md b/src/data/roadmaps/full-stack/content/103-javascript.md index 446ae8e73..235f61772 100644 --- a/src/data/roadmaps/full-stack/content/103-javascript.md +++ b/src/data/roadmaps/full-stack/content/103-javascript.md @@ -1 +1,13 @@ -# Javascript \ No newline at end of file +# 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. + +Visit the following resources to learn more: + +- [W3Schools – JavaScript Tutorial](https://www.w3schools.com/js/) +- [The Modern JavaScript Tutorial](https://javascript.info/) +- [Exploring JS: JavaScript books for programmers](https://exploringjs.com/) +- [JavaScript Crash Course for Beginners](https://youtu.be/hdI2bqOjy3c?t=2) +- [Build a Netflix Landing Page Clone with HTML, CSS & JS](https://youtu.be/P7t13SGytRk) + +We also have this [JavaScript roadmap](/javascript). You don't need to follow it right now, just learn from some courses and revisit the roadmap later in your journey. diff --git a/src/data/roadmaps/full-stack/content/104-checkpoint-interactivity.md b/src/data/roadmaps/full-stack/content/104-checkpoint-interactivity.md index 599956e40..f8713e6eb 100644 --- a/src/data/roadmaps/full-stack/content/104-checkpoint-interactivity.md +++ b/src/data/roadmaps/full-stack/content/104-checkpoint-interactivity.md @@ -1 +1,18 @@ -# Checkpoint interactivity \ No newline at end of file +# Checkpoint + +At this point you should be able to add interactivity to your web pages using JavaScript. You should make sure that you have learnt the following: + +- Know about variables, loops, data types, conditionals, functions. +- Know about arrays and objects and different ways to access their data. +- Know how to select DOM elements. +- Add event listeners to DOM elements (e.g. click, focus, form submission). +- Use JavaScript to add and remove DOM elements +- Add and remove classes from DOM elements +- Use JavaScript to make HTTP requests to external APIs (i.e. `fetch`) +- Use JavaScript to store data in the browser's local storage + +Here are few ideas to practice your skills: + +- Create a simple to-do list app that allows users to search, add, edit, and delete items. Use local storage to store the data. +- Create a simple webpage where user can put in anyone's GitHub username and see their profile information. You can use GitHub's API to fetch the data. For example, here is the [sample URL to fetch my data](https://api.github.com/users/kamranahmedse). Make sure to add validation and error handling. +- Create a basic calculator app that allows users to perform basic arithmetic operations. diff --git a/src/data/roadmaps/full-stack/content/105-npm.md b/src/data/roadmaps/full-stack/content/105-npm.md index aa882e995..8d2c83bc3 100644 --- a/src/data/roadmaps/full-stack/content/105-npm.md +++ b/src/data/roadmaps/full-stack/content/105-npm.md @@ -1 +1,11 @@ -# Npm \ No newline at end of file +# npm + +npm is a package manager for the JavaScript programming language maintained by npm, Inc. npm is the default package manager for the JavaScript runtime environment Node.js. + +Visit the following resources to learn more: + +- [Modern JavaScript for Dinosaurs](https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html) +- [An Absolute Beginners Guide to Using npm](https://nodesource.com/blog/an-absolute-beginners-guide-to-using-npm/) +- [How to NPM](https://github.com/workshopper/how-to-npm) +- [NPM tutorial for Beginners](https://www.youtube.com/watch?v=2V1UUhBJ62Y) +- [NPM Crash Course](https://www.youtube.com/watch?v=jHDhaSSKmB0) diff --git a/src/data/roadmaps/full-stack/content/106-external-packages.md b/src/data/roadmaps/full-stack/content/106-external-packages.md index b9b438d4a..e535b541a 100644 --- a/src/data/roadmaps/full-stack/content/106-external-packages.md +++ b/src/data/roadmaps/full-stack/content/106-external-packages.md @@ -1 +1,10 @@ -# External packages \ No newline at end of file +# Checkpoint + +At this point, you should be able to install and use external packages using `npm`. You probably know about [npmjs.com](https://npmjs.com/) where you can search for packages and read their documentation. You should also be familiar with the `package.json` file and how to use it to manage your project dependencies. + +You don't need to get into the module bundlers and build tools just yet. Just make sure that you are able to use the dependencies installed in the `node_modules` folder using simple link and script tags in your HTML. + +Regarding projects, here are a few ideas that you can try: + +- Create a simple webpage that shows the current time of user. You can use use [dayjs](https://day.js.org/) to get the current time and display it on the page. Here is the [sample design for homepage](https://i.imgur.com/yGIMGkr.png). +- Install the [micromodal](https://micromodal.vercel.app/#introduction) library. Create a button on the page clicking which should open a modal and let the user select a timezone from a dropdown. Once the user selects a timezone, the modal should close and the time on the page should be updated to show the time in the selected timezone. Here is the [sample design for the modal](https://imgur.com/a/vFY6Sdl). diff --git a/src/data/roadmaps/full-stack/content/107-git.md b/src/data/roadmaps/full-stack/content/107-git.md index 65f57e71e..eb35be86b 100644 --- a/src/data/roadmaps/full-stack/content/107-git.md +++ b/src/data/roadmaps/full-stack/content/107-git.md @@ -1 +1,9 @@ -# Git \ No newline at end of file +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +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) diff --git a/src/data/roadmaps/full-stack/content/108-github.md b/src/data/roadmaps/full-stack/content/108-github.md index 1d347d3e4..25068b826 100644 --- a/src/data/roadmaps/full-stack/content/108-github.md +++ b/src/data/roadmaps/full-stack/content/108-github.md @@ -1 +1,13 @@ -# Github \ No newline at end of file +# GitHub + +GitHub is a provider of Internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. + +Visit the following resources to learn more: + +- [GitHub Website](https://github.com) +- [GitHub Documentation](https://docs.github.com/en/get-started/quickstart) +- [How to Use Git in a Professional Dev Team](https://ooloo.io/project/github-flow) +- [What is GitHub?](https://www.youtube.com/watch?v=w3jLJU7DT5E) +- [Git vs. GitHub: Whats the difference?](https://www.youtube.com/watch?v=wpISo9TNjfU) +- [Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) +- [Git and GitHub - CS50 Beyond 2019](https://www.youtube.com/watch?v=eulnSXkhE7I) diff --git a/src/data/roadmaps/full-stack/content/109-collaborative-work.md b/src/data/roadmaps/full-stack/content/109-collaborative-work.md index c2a88befe..c6077188e 100644 --- a/src/data/roadmaps/full-stack/content/109-collaborative-work.md +++ b/src/data/roadmaps/full-stack/content/109-collaborative-work.md @@ -1 +1,10 @@ -# Collaborative work \ No newline at end of file +# Checkpoint + +Now that you have learnt git and GitHub you should be ready to work with others. You should now setup your GitHub profile and push all the projects that you have built so far to your GitHub profile. Here are some of my recommendations for your GitHub profile: + +- Keep the repository names lowercase and use hyphens to separate words e.g. `todo-app` instead of `TodoApp` or `Todo-App`. +- Add a `README.md` file to each repository that you create. This file should contain a description of the project. Put some effort into the readme and make sure it clearly details what the project is about and how anyone can run it locally. +- Add snapshots of your project to the readme file so that anyone can see what the project looks like without having to run it locally. +- Add a `LICENSE` file to each repository that you create. This file should contain the license that you want to use for the project. You can use [choosealicense.com](https://choosealicense.com/) to help you choose a license. + +You can have a look at [my GitHub profile](https://github.com/kamranahmedse) and see how I have structured my repositories and how [some of my readme files look like](https://github.com/kamranahmedse/aws-cost-cli). diff --git a/src/data/roadmaps/full-stack/content/110-tailwind.md b/src/data/roadmaps/full-stack/content/110-tailwind.md index b4436439a..92e343740 100644 --- a/src/data/roadmaps/full-stack/content/110-tailwind.md +++ b/src/data/roadmaps/full-stack/content/110-tailwind.md @@ -1 +1,11 @@ -# Tailwind \ No newline at end of file +# Tailwind CSS + +CSS Framework that provides atomic CSS classes to help you style components e.g. `flex`, `pt-4`, `text-center` and `rotate-90` that can be composed to build any design, directly in your markup. + +Visit the following resources to learn more: + +- [Tailwind Website](https://tailwindcss.com) +- [Tailwind CSS Full Course for Beginners](https://www.youtube.com/watch?v=lCxcTsOHrjo) +- [Tailwind CSS Crash Course](https://www.youtube.com/watch?v=UBOj6rqRUME) +- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) +- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) diff --git a/src/data/roadmaps/full-stack/content/111-react.md b/src/data/roadmaps/full-stack/content/111-react.md index 90dcc5f62..968423cd8 100644 --- a/src/data/roadmaps/full-stack/content/111-react.md +++ b/src/data/roadmaps/full-stack/content/111-react.md @@ -1 +1,13 @@ -# React \ No newline at end of file +# React + +React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native. + +Visit the following resources to learn more: + +- [Visit Dedicated React Roadmap](/react) +- [React Website](https://reactjs.org/) +- [Official Getting Started](https://reactjs.org/tutorial/tutorial.html) +- [The Beginners Guide to React](https://egghead.io/courses/the-beginner-s-guide-to-react) +- [React JS Course for Beginners](https://www.youtube.com/watch?v=nTeuhbP7wdE) +- [React Course - Beginners Tutorial for React](https://www.youtube.com/watch?v=bMknfKXIFA8) +- [Understanding Reacts UI Rendering Process](https://www.youtube.com/watch?v=i793Qm6kv3U) diff --git a/src/data/roadmaps/full-stack/content/112-frontend-apps.md b/src/data/roadmaps/full-stack/content/112-frontend-apps.md index 30c04d589..a975af70e 100644 --- a/src/data/roadmaps/full-stack/content/112-frontend-apps.md +++ b/src/data/roadmaps/full-stack/content/112-frontend-apps.md @@ -1 +1,17 @@ -# Frontend apps \ No newline at end of file +# Checkpoint + +At this point you should be able to build a complete frontend application including: + +- Structuring your webpages with HTML +- Styling your webpages with CSS +- Adding interactivity to your webpages with JavaScript +- Using the DOM API to manipulate your webpages +- Using the Fetch API to make HTTP requests +- Understand promises and use `async`/`await` syntax to write asynchronous code +- Installing and using external libraries with npm +- Version controlling your code with Git +- Pushing your code to GitHub + +If you decided to skip React and Tailwind for now, that is fine also but you should be able to build a complete frontend application using vanilla HTML, CSS, and JavaScript. However, keep in mind that the modern frontend applications are mostly built with frameworks like React, Vue, and Angular. So, you should learn at least one of them at any point of time. + +This marks the end of frontend basics that you needed, we will now be moving to the backend development. While you continue with the backend development, know that there is more to frontend development and remember to checkout the [frontend roadmap](/frontend) later in your journey. diff --git a/src/data/roadmaps/full-stack/content/113-nodejs.md b/src/data/roadmaps/full-stack/content/113-nodejs.md index 0ef7b9475..945cfd352 100644 --- a/src/data/roadmaps/full-stack/content/113-nodejs.md +++ b/src/data/roadmaps/full-stack/content/113-nodejs.md @@ -1 +1,10 @@ -# Nodejs \ No newline at end of file +# Node.js + +Node.js is an open-source and cross-platform JavaScript runtime environment. It is a popular tool for almost any kind of project! Node.js runs the V8 JavaScript engine, Google Chrome's core, outside the browser. This allows Node.js to be very performant. A Node.js app runs in a single process, without creating a new thread for every request. Node.js provides a set of asynchronous I/O primitives in its standard library that prevent JavaScript code from blocking and generally, libraries in Node.js are written using non-blocking paradigms, making blocking behavior the exception rather than the norm. + +Visit the following resources to learn more: + +- [Official Website](https://nodejs.org/en/about/) +- [Learn Node.js — Official Website](https://nodejs.dev/en/learn/) +- [Node.JS Introduction](https://www.w3schools.com/nodejs/nodejs_intro.asp) +- [Node.js and Express.js Full Course](https://www.youtube.com/watch?v=Oe421EPjeBE) diff --git a/src/data/roadmaps/full-stack/content/114-cli-apps.md b/src/data/roadmaps/full-stack/content/114-cli-apps.md index 9cf58b158..c1da7ceeb 100644 --- a/src/data/roadmaps/full-stack/content/114-cli-apps.md +++ b/src/data/roadmaps/full-stack/content/114-cli-apps.md @@ -1 +1,19 @@ -# Cli apps \ No newline at end of file +# Checkpoint + +At this point you should be able to build CLI applications using Node.js or whatever backend programming language you picked. + +You should be able to build a CLI application that can: + +- Read and write files +- Parse command line arguments +- Make HTTP requests +- Parse JSON +- Use a third-party library (e.g. a library for parsing CSV files) +- Use a third-party API + +Here are some ideas for CLI applications you can build: + +- Create a CLI application that takes a URL and a CSS selector arguments and prints the text content of the element that matches the selector. **Hint** you can use [cheerio](https://github.com/cheeriojs/cheerio) +- An application that takes optionally takes two dates and prints the most starred GitHub projects in that date range. **Hint** you can use [GitHub's search API](https://developer.github.com/v3/search/#search-repositories) +- Bulk rename files in a directory. **Hint** you can use [fs](https://nodejs.org/api/fs.html) and [path](https://nodejs.org/api/path.html) +- Write a CLI application that takes a path as input and compresses all the images in that directory. It should accept an option for output path; if the output path is not given it should compress images in place otherwise write the compressed images to the output path. **Hint** you can use [sharp](https://github.com/lovell/sharp). diff --git a/src/data/roadmaps/full-stack/content/115-postgresql.md b/src/data/roadmaps/full-stack/content/115-postgresql.md index a6798acec..6c3bf154f 100644 --- a/src/data/roadmaps/full-stack/content/115-postgresql.md +++ b/src/data/roadmaps/full-stack/content/115-postgresql.md @@ -1 +1,11 @@ -# Postgresql \ No newline at end of file +# PostgreSQL + +PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance. + +Visit the following resources to learn more: + +- [Visit Dedicated PostgreSQL DBA Roadmap](/postgresql-dba) +- [Official Website](https://www.postgresql.org/) +- [Learn PostgreSQL - Full Tutorial for Beginners](https://www.postgresqltutorial.com/) +- [Learn PostgreSQL Tutorial - Full Course for Beginners](https://www.youtube.com/watch?v=qw--VYLpxG4) +- [Postgres tutorial for Beginners](https://www.youtube.com/watch?v=eMIxuk0nOkU) diff --git a/src/data/roadmaps/full-stack/content/116-crud.md b/src/data/roadmaps/full-stack/content/116-crud.md index 7e803ae87..bb829f1a2 100644 --- a/src/data/roadmaps/full-stack/content/116-crud.md +++ b/src/data/roadmaps/full-stack/content/116-crud.md @@ -1 +1,13 @@ -# Crud \ No newline at end of file +# Checkpoint + +**CRUD** stands for **Create, Read, Update, and Delete**. These are the four basic operations you can perform on any data when working with web applications, databases, and APIs. + +Now that you know about programming language and the databases, you should be able to build a simple CLI application that interacts with database. We haven't talked about the APIs yet but you don't need an API to practice CRUD operations. Here are some of the CLI applications you can build to practice CRUD operations: + +- A simple todo list application for the CLI with the following options: + - `--new` to add a new todo item + - `--list [all|pending|done]` to list the todo items + - `--done [id]` to update a todo item + - `--delete [id]` to delete a todo item + - `--help` to list all the available options + - `--version` to print the version of the application diff --git a/src/data/roadmaps/full-stack/content/117-restful-apis.md b/src/data/roadmaps/full-stack/content/117-restful-apis.md index 98ee6cf8b..47d318f77 100644 --- a/src/data/roadmaps/full-stack/content/117-restful-apis.md +++ b/src/data/roadmaps/full-stack/content/117-restful-apis.md @@ -1 +1,10 @@ -# Restful apis \ No newline at end of file +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +Visit the following resources to learn more: + +- [What is REST?](https://www.codecademy.com/article/what-is-rest) +- [What is a REST API?](https://www.redhat.com/en/topics/api/what-is-a-rest-api) +- [Roy Fieldings dissertation chapter, Representational State Transfer (REST)](https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm) +- [Learn REST: A RESTful Tutorial](https://restapitutorial.com/) diff --git a/src/data/roadmaps/full-stack/content/118-jwt-auth.md b/src/data/roadmaps/full-stack/content/118-jwt-auth.md index 5a213ee27..0c8f4fe9a 100644 --- a/src/data/roadmaps/full-stack/content/118-jwt-auth.md +++ b/src/data/roadmaps/full-stack/content/118-jwt-auth.md @@ -1 +1,12 @@ -# Jwt auth \ No newline at end of file +# JWT + +JWT stands for JSON Web Token is a token-based encryption open standard/methodology that is used to transfer information securely as a JSON object. Clients and Servers use JWT to securely share information, with the JWT containing encoded JSON objects and claims. JWT tokens are designed to be compact, safe to use within URLs, and ideal for SSO contexts. + +Visit the following resources to learn more: + +- [jwt.io Website](https://jwt.io/) +- [Introduction to JSON Web Tokens](https://jwt.io/introduction) +- [What is JWT?](https://www.akana.com/blog/what-is-jwt) +- [What Is JWT and Why Should You Use JWT](https://www.youtube.com/watch?v=7Q17ubqLfaM) +- [What is JWT? JSON Web Token Explained](https://www.youtube.com/watch?v=926mknSW9Lo) +- [JWT Authentication Tutorial - Node.js](https://www.youtube.com/watch?v=mbsmsi7l3r4) diff --git a/src/data/roadmaps/full-stack/content/119-redis.md b/src/data/roadmaps/full-stack/content/119-redis.md index 0de4bc736..a0a627b43 100644 --- a/src/data/roadmaps/full-stack/content/119-redis.md +++ b/src/data/roadmaps/full-stack/content/119-redis.md @@ -1 +1,9 @@ -# Redis \ No newline at end of file +# Redis + +Redis is an open source (BSD licensed), in-memory **data structure store** used as a database, cache, message broker, and streaming engine. Redis provides data structures such as [strings](https://redis.io/topics/data-types-intro#strings), [hashes](https://redis.io/topics/data-types-intro#hashes), [lists](https://redis.io/topics/data-types-intro#lists), [sets](https://redis.io/topics/data-types-intro#sets), [sorted sets](https://redis.io/topics/data-types-intro#sorted-sets) with range queries, [bitmaps](https://redis.io/topics/data-types-intro#bitmaps), [hyperloglogs](https://redis.io/topics/data-types-intro#hyperloglogs), [geospatial indexes](https://redis.io/commands/geoadd), and [streams](https://redis.io/topics/streams-intro). Redis has built-in [replication](https://redis.io/topics/replication), [Lua scripting](https://redis.io/commands/eval), [LRU eviction](https://redis.io/topics/lru-cache), [transactions](https://redis.io/topics/transactions), and different levels of [on-disk persistence](https://redis.io/topics/persistence), and provides high availability via [Redis Sentinel](https://redis.io/topics/sentinel) and automatic partitioning with [Redis Cluster](https://redis.io/topics/cluster-tutorial). + +Visit the following resources to learn more: + +- [Redis Website](https://redis.io/) +- [Redis in 100 Seconds](https://www.youtube.com/watch?v=G1rOthIU-uo) +- [Redis Caching in Node.js](https://www.youtube.com/watch?v=oaJq1mQ3dFI) diff --git a/src/data/roadmaps/full-stack/content/120-complete-app.md b/src/data/roadmaps/full-stack/content/120-complete-app.md index b586a45c7..82d320b03 100644 --- a/src/data/roadmaps/full-stack/content/120-complete-app.md +++ b/src/data/roadmaps/full-stack/content/120-complete-app.md @@ -1 +1,15 @@ -# Complete app \ No newline at end of file +# Checkpoint + +At this point, you should have everything that you need to build a complete application that: + +- Has a responsive frontend that users can interact with +- Has a backend API that is secured with JWT authentication +- Has a database that stores data + +At this point you should practice building as much as you can on your own to solidify your knowledge. If you need inspiration, here are some ideas: + +- Build a simple blogging application where users can register, login, setup their blog and write posts. +- A single page site builder where users can pick a template, modify it and publish it. **Hint** you will need filesystem to store the design templates. Template files will have placeholders that you will need to replace with user data. +- Build a simple e-commerce application which will have two types of users i.e. **Sellers** who can: Register as Seller, Login, Setup their store, Add products, Edit products, Delete products, View Received Orders, Update Order Status (Pending, Shipped, Delivered), **Buyers** who can register, Login, Browse products by all sellers, Add products to cart, Checkout, View order history, View order status, Cancel order, View seller profile, View seller products + +These are just some ideas to get you started. You can build anything you want. The goal is to practice building a complete application from scratch. diff --git a/src/data/roadmaps/full-stack/content/121-linux-basics.md b/src/data/roadmaps/full-stack/content/121-linux-basics.md index b9d902938..1e339e436 100644 --- a/src/data/roadmaps/full-stack/content/121-linux-basics.md +++ b/src/data/roadmaps/full-stack/content/121-linux-basics.md @@ -1 +1,10 @@ -# Linux basics \ No newline at end of file +# Linux / Unix + +Knowledge of UNIX is a must for almost all kind of development as most of the codes that you write is most likely going to be finally deployed on a UNIX/Linux machine. Linux has been the backbone of the free and open source software movement, providing a simple and elegant operating system for almost all your needs. + +Visit the following resources to learn more: + +- [Linux Operating System - Crash Course](https://www.youtube.com/watch?v=ROjZy1WbCIA) +- [Coursera - Unix Courses](https://www.coursera.org/courses?query=unix) +- [Linux Basics](https://dev.to/rudrakshi99/linux-basics-2onj) +- [Unix / Linux Tutorial](https://www.tutorialspoint.com/unix/index.htm) diff --git a/src/data/roadmaps/full-stack/content/122-basic-aws-services/100-ec2.md b/src/data/roadmaps/full-stack/content/122-basic-aws-services/100-ec2.md index e07052acb..e8c3a72f1 100644 --- a/src/data/roadmaps/full-stack/content/122-basic-aws-services/100-ec2.md +++ b/src/data/roadmaps/full-stack/content/122-basic-aws-services/100-ec2.md @@ -1 +1,7 @@ -# Ec2 \ No newline at end of file +# EC2 + +Amazon Elastic Compute Cloud (EC2) is a web service that provides resizable compute capacity in the form of virtual servers, known as instances. With EC2, you can quickly scale your infrastructure up or down as your computing requirements change. This service effectively reduces the time required to obtain and boot new server instances, allowing you to easily adjust capacity according to the needs of your application. + +- [Deploy Node App on AWS EC2](https://youtu.be/oHAQ3TzUTro) +- [Up and Running with AWS EC2](https://cs.fyi/guide/up-and-running-with-aws-ec2) +- [EC2 Essentials](https://cloudcasts.io/course/ec2-essentials) diff --git a/src/data/roadmaps/full-stack/content/122-basic-aws-services/101-vpc.md b/src/data/roadmaps/full-stack/content/122-basic-aws-services/101-vpc.md index 2f7c6baac..418588bfe 100644 --- a/src/data/roadmaps/full-stack/content/122-basic-aws-services/101-vpc.md +++ b/src/data/roadmaps/full-stack/content/122-basic-aws-services/101-vpc.md @@ -1 +1,7 @@ -# Vpc \ No newline at end of file +# VPC + +VPC stands for **Virtual Private Cloud** and is an essential service provided by AWS that allows you to create a private, isolated section within the AWS cloud, where you can define your own virtual network. It offers a more secure and controlled environment, enabling you to easily launch and manage your resources within your personal network. + +- [AWS VPC & Subnets For Beginners](https://youtu.be/TUTqYEZZUdc) +- [Up and Running with AWS VPC](https://cs.fyi/guide/up-and-running-with-aws-vpc) +- [VPC Basics](https://cloudcasts.io/course/vpc-basics) diff --git a/src/data/roadmaps/full-stack/content/122-basic-aws-services/103-route53.md b/src/data/roadmaps/full-stack/content/122-basic-aws-services/103-route53.md new file mode 100644 index 000000000..0d9615d48 --- /dev/null +++ b/src/data/roadmaps/full-stack/content/122-basic-aws-services/103-route53.md @@ -0,0 +1,7 @@ +# Route53 + +[Route53](https://aws.amazon.com/route53/) is AWS's Domain Name System (DNS) service that plays a critical role in connecting user requests to your web application or other resources within your infrastructure. With Route53, you can easily manage domains, redirect traffic, and configure domain-related settings. It has several advantages, including high availability, low latency, and integration with other AWS resources. + +- [Amazon Route 53](https://www.youtube.com/watch?v=RGWgfhZByAI) +- [AWS Route 53 Domain Name](https://www.youtube.com/watch?v=jDz4j_kkyLA) +- [DNS with AWS Route 53](https://www.youtube.com/watch?v=yRIY7BJohfo&t=2s) diff --git a/src/data/roadmaps/full-stack/content/122-basic-aws-services/104-ses.md b/src/data/roadmaps/full-stack/content/122-basic-aws-services/104-ses.md new file mode 100644 index 000000000..f0d95c52c --- /dev/null +++ b/src/data/roadmaps/full-stack/content/122-basic-aws-services/104-ses.md @@ -0,0 +1,5 @@ +# SES + +Amazon SES (Simple Email Service) is a scalable, flexible, and cost-effective cloud-based email service that is specifically designed for developers, marketers, and businesses to send and receive marketing, transactional, and notification emails. SES is useful, especially when you need to send a large volume of emails, as it offers high deliverability, reliability, and ease of use. + +- [Contact Form Submission With AWS SES](https://www.youtube.com/watch?v=HiHflLTqiwU) diff --git a/src/data/roadmaps/full-stack/content/122-basic-aws-services/105-s3.md b/src/data/roadmaps/full-stack/content/122-basic-aws-services/105-s3.md new file mode 100644 index 000000000..107ab35a2 --- /dev/null +++ b/src/data/roadmaps/full-stack/content/122-basic-aws-services/105-s3.md @@ -0,0 +1,6 @@ +# S3 + +S3 is a service that allows you to store files in the cloud. It's a simple service that you can use to store files and serve them to your users. + +- [Upload Images to S3 from Node Back End](https://www.youtube.com/watch?v=NZElg91l_ms) +- [S3 Bucket Hosting a Static Website](https://www.youtube.com/watch?v=RoY3ekCCxKc&list=PL0X6fGhFFNTcU-_MCPe9dkH6sqmgfhy_M) diff --git a/src/data/roadmaps/full-stack/content/122-basic-aws-services/index.md b/src/data/roadmaps/full-stack/content/122-basic-aws-services/index.md index 2ccf036a6..eeed4bc36 100644 --- a/src/data/roadmaps/full-stack/content/122-basic-aws-services/index.md +++ b/src/data/roadmaps/full-stack/content/122-basic-aws-services/index.md @@ -1 +1,22 @@ -# Basic aws services \ No newline at end of file +# Basic AWS Services + +AWS has several services but you don't need to know all of them. Here are the most common ones that you can get started with: + +- [EC2](https://aws.amazon.com/ec2/) - Virtual machines in the cloud +- [VPC](https://aws.amazon.com/vpc/) - Virtual private cloud +- [S3](https://aws.amazon.com/s3/) - Object storage +- [Route 53](https://aws.amazon.com/route53/) - DNS +- [SES](https://aws.amazon.com/ses/) - Email sending + +Here are some of the resources to get you started: + +- [Deploy Node App on AWS EC2](https://youtu.be/oHAQ3TzUTro) +- [AWS VPC & Subnets For Beginners](https://youtu.be/TUTqYEZZUdc) +- [Up and Running with AWS VPC](https://cs.fyi/guide/up-and-running-with-aws-vpc) +- [Up and Running with AWS EC2](https://cs.fyi/guide/up-and-running-with-aws-ec2) +- [VPC Basics](https://cloudcasts.io/course/vpc-basics) +- [EC2 Essentials](https://cloudcasts.io/course/ec2-essentials) +- [Sam Meech-Ward's AWS Videos](https://www.youtube.com/playlist?list=PL0X6fGhFFNTcU-_MCPe9dkH6sqmgfhy_M) +- [DNS with AWS Route 53](https://www.youtube.com/watch?v=yRIY7BJohfo) +- [Upload Images to S3 from Node Back End](https://www.youtube.com/watch?v=NZElg91l_ms) +- [S3 Bucket Hosting a Static Website](https://www.youtube.com/watch?v=RoY3ekCCxKc&list=PL0X6fGhFFNTcU-_MCPe9dkH6sqmgfhy_M) diff --git a/src/data/roadmaps/full-stack/content/123-deployment.md b/src/data/roadmaps/full-stack/content/123-deployment.md index 7a9e3e037..5b2ceaa62 100644 --- a/src/data/roadmaps/full-stack/content/123-deployment.md +++ b/src/data/roadmaps/full-stack/content/123-deployment.md @@ -1 +1,19 @@ -# Deployment \ No newline at end of file +# Deployment + +Now that you know the basics of AWS, you should be able to deploy your application to AWS. You don't need to use al the AWS services, here is what you can probably get started with: + +- Setup an EC2 instance using any AMI (e.g. latest version of Ubuntu) +- SSH into the EC2 instance using the key pair you created +- Install Node.js on the EC2 instance +- Install Git on the EC2 instance +- Clone your application from GitHub +- Install and configure database on the EC2 instance (e.g. PostgreSQL) +- Make sure that the security group of the EC2 instance allows HTTP and HTTPS traffic +- Try to access your application using the public IP address of the EC2 instance +- Purchase or setup a domain name using Route53 (or any other domain name provider) and point it to the public IP address of the EC2 instance +- Setup HTTPs using [certbot](https://roadmap.sh/guides/setup-and-auto-renew-ssl-certificates) +- And voilla! You have deployed your application to AWS! + +If you get stuck, here is a video that shows how to deploy a Node.js application to AWS EC2: + +- [Deploy Node App on AWS EC2](https://youtu.be/oHAQ3TzUTro) diff --git a/src/data/roadmaps/full-stack/content/124-monit.md b/src/data/roadmaps/full-stack/content/124-monit.md index f62d8bfa3..4325d7726 100644 --- a/src/data/roadmaps/full-stack/content/124-monit.md +++ b/src/data/roadmaps/full-stack/content/124-monit.md @@ -1 +1,17 @@ -# Monit \ No newline at end of file +# Monit + +When it comes to monitoring the health of your applications, there are several different options available. My favorite monitoring stack is Prometheus and Grafana, but it can be a bit overwhelming to set up and configure. If you're looking for a simpler solution, **Monit** is a great alternative that can be utilized to monitor and manage system resources such as services, processes, files, directories, devices, and network connections, making your application more reliable and resilient to issues like crashes, unresponsiveness, or resource exhaustion. + +Some of the key features of Monit are: + +- **Automatic Recovery:** Monit can automatically restart a service or process if it fails, making your application more resistant to unexpected issues. +- **Alert Notifications:** Monit can send email notifications when a problem is detected or when a certain condition is met, keeping you informed about the health of your application. +- **Event Logging:** All events detected by Monit are stored in a log for easy troubleshooting and analysis. +- **Resource Limit Monitoring:** Monit can monitor the resource utilization (CPU, memory, network, etc.) of a process or service and take action if a specific limit is exceeded. +- **Flexible Configuration:** Monit uses a simple, human-readable configuration syntax that allows you to tailor its behavior to your needs. +- **Web Interface:** Monit provides a built-in web interface for remotely monitoring your application's status and manage services. + +Have a look at the following resources to learn more about Monit: + +- [Monit - Opensource Self Healing Server Monitoring](https://www.youtube.com/watch?v=3cA5lNje1Ow) +- [Monit documentation](https://mmonit.com/monit/documentation/) diff --git a/src/data/roadmaps/full-stack/content/125-monitoring.md b/src/data/roadmaps/full-stack/content/125-monitoring.md index 2ddbe89cb..620186450 100644 --- a/src/data/roadmaps/full-stack/content/125-monitoring.md +++ b/src/data/roadmaps/full-stack/content/125-monitoring.md @@ -1 +1,46 @@ -# Monitoring \ No newline at end of file +# Checkpoint — Monitoring + +# Monitoring + +Monitoring is a crucial aspect of maintaining a healthy and well-performing full stack application. As a full stack developer, you need to understand and implement various monitoring tools and techniques to ensure the smooth functioning of your application throughout its life cycle. + +In this section, we'll cover the following topics: + +## Importance of Monitoring + +Monitoring helps you to: + +- Detect and fix issues before they affect users and result in system downtime. +- Optimize performance and resource usage. +- Predict and scale for future growth by identifying trends and predicting traffic spikes. +- Ensure security by identifying weak spots and tracking malicious activities. + +## Monitoring Tools + +There are various monitoring tools available, and it's essential to choose the right one based on your specific needs. Some popular monitoring tools include: + +- **Infrastructure Monitoring** (e.g., [Nagios](https://www.nagios.org/), [Zabbix](https://www.zabbix.com/), [Prometheus](https://prometheus.io/)) +- **Application Performance Monitoring (APM)** (e.g., [New Relic](https://newrelic.com/), [Dynatrace](https://www.dynatrace.com/), [AppDynamics](https://www.appdynamics.com/)) +- **Log Management** (e.g., [Elastic Stack](https://www.elastic.co/), [Graylog](https://www.graylog.org/), [Loggly](https://www.loggly.com/)) +- **Error Tracking** (e.g., [Sentry](https://sentry.io/), [Rollbar](https://rollbar.com/), [Airbrake](https://airbrake.io/)) + +## Key Metrics to Monitor + +When monitoring your full stack application, make sure to track the following key metrics: + +- **Availability:** Percentage of time the system is operational and accessible. +- **Response Time:** Time taken by the system to respond to a user request. +- **Throughput:** Number of requests processed by the system per unit of time. +- **Error Rate:** The frequency of errors occurring in the system. +- **Resource Utilization:** Percentage of system resources (CPU, memory, disk, etc.) being used. + +## Monitoring Best Practices + +Follow these best practices to ensure effective monitoring and smooth functioning of your application: + +1. **Establish Goals:** Define measurable objectives based on your business requirements and use them to set performance thresholds. +2. **Monitor Across Different Levels:** Monitor at the infrastructure, application, and individual user levels to get a complete view of your system's performance. +3. **Set Up Alerts:** Configure alerts for when critical thresholds are breached, ensuring you can react promptly and minimize downtime. +4. **Analyze and Optimize:** Regularly review monitoring data to identify trends and areas of improvement, and then make necessary changes to enhance your application's performance. + +Implementing robust monitoring solutions in your full stack application helps ensure it remains reliable, available, and secure while providing valuable insights to optimize performance and scalability for future growth. \ No newline at end of file diff --git a/src/data/roadmaps/full-stack/content/126-github-actions.md b/src/data/roadmaps/full-stack/content/126-github-actions.md index d1cf49177..d4e1e47c8 100644 --- a/src/data/roadmaps/full-stack/content/126-github-actions.md +++ b/src/data/roadmaps/full-stack/content/126-github-actions.md @@ -1 +1,8 @@ -# Github actions \ No newline at end of file +# Github Actions + +GitHub Actions is a workflow automation tool provided by GitHub that can be used to automate various tasks in the app development process. + +- [Github Actions](https://github.com/features/actions) +- [Github Actions Documentation](https://docs.github.com/en/actions) +- [5 Ways to DevOps-ify your App](https://www.youtube.com/watch?v=eB0nUzAI7M8) +- [DevOps CI/CD Explained in 100 Seconds](https://www.youtube.com/watch?v=scEDHsr3APg) diff --git a/src/data/roadmaps/full-stack/content/127-ci-cd.md b/src/data/roadmaps/full-stack/content/127-ci-cd.md index edee7d737..5926ec238 100644 --- a/src/data/roadmaps/full-stack/content/127-ci-cd.md +++ b/src/data/roadmaps/full-stack/content/127-ci-cd.md @@ -1 +1,10 @@ -# Ci cd \ No newline at end of file +# Checkpoint — CI / CD + +Now that you have the infrastructure setup, it's time to automate the deployment process. This is where CI / CD comes in. If you don't know what CI/CD are, you should watch [DevOps CI/CD Explained in 100 Seconds](https://www.youtube.com/watch?v=scEDHsr3APg). + +The next step at this point is to implement CI/CD for your application using GitHub actions. Setup a GitHub action that, whenever you push to master, will automatically: + +- Run your tests (ignore this step if you haven't learnt it yet) +- Deploy your application to AWS + +Regarding the deployment to AWS you can use `rsync` to copy the files to the server. diff --git a/src/data/roadmaps/full-stack/content/128-ansible.md b/src/data/roadmaps/full-stack/content/128-ansible.md index ab8b4fd1a..a445a9048 100644 --- a/src/data/roadmaps/full-stack/content/128-ansible.md +++ b/src/data/roadmaps/full-stack/content/128-ansible.md @@ -1 +1,5 @@ -# Ansible \ No newline at end of file +# Ansible + +Ansible is an open-source automation tool that simplifies complex software management, deployment, and configuration processes. It helps automate day-to-day IT tasks by defining them as simple, human-readable YAML files (called 'playbooks') that can be shared and understood easily by the whole team. + +> —— In Progress —— diff --git a/src/data/roadmaps/full-stack/content/129-automation.md b/src/data/roadmaps/full-stack/content/129-automation.md index 420e995b0..c2167e403 100644 --- a/src/data/roadmaps/full-stack/content/129-automation.md +++ b/src/data/roadmaps/full-stack/content/129-automation.md @@ -1 +1,3 @@ -# Automation \ No newline at end of file +# Checkpoint + +> —— In Progress —— diff --git a/src/data/roadmaps/full-stack/content/130-terraform.md b/src/data/roadmaps/full-stack/content/130-terraform.md index bffd293c1..5f94642a8 100644 --- a/src/data/roadmaps/full-stack/content/130-terraform.md +++ b/src/data/roadmaps/full-stack/content/130-terraform.md @@ -1 +1,5 @@ -# Terraform \ No newline at end of file +# Terraform + +Terraform is an open-source infrastructure as code (IaC) tool that allows you to define, provision, and manage cloud infrastructure in a declarative manner. It is developed by HashiCorp and is written in the Go programming language. Terraform supports multiple cloud providers such as AWS, Google Cloud, Microsoft Azure, and many others. It uses a configuration language called HashiCorp Configuration Language (HCL) to write infrastructure definitions, and it maintains the state of your infrastructure in a state file. + +> —— In Progress —— diff --git a/src/data/roadmaps/full-stack/content/131-infrastructure.md b/src/data/roadmaps/full-stack/content/131-infrastructure.md index 62fce5053..c2167e403 100644 --- a/src/data/roadmaps/full-stack/content/131-infrastructure.md +++ b/src/data/roadmaps/full-stack/content/131-infrastructure.md @@ -1 +1,3 @@ -# Infrastructure \ No newline at end of file +# Checkpoint + +> —— In Progress —— diff --git a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/102-vpc.md b/src/data/roadmaps/full-stack/content/ba1sic-aws-services/102-vpc.md deleted file mode 100644 index 2f7c6baac..000000000 --- a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/102-vpc.md +++ /dev/null @@ -1 +0,0 @@ -# Vpc \ No newline at end of file diff --git a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/103-route53.md b/src/data/roadmaps/full-stack/content/ba1sic-aws-services/103-route53.md deleted file mode 100644 index dd7374f7b..000000000 --- a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/103-route53.md +++ /dev/null @@ -1 +0,0 @@ -# Route53 \ No newline at end of file diff --git a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/104-ses.md b/src/data/roadmaps/full-stack/content/ba1sic-aws-services/104-ses.md deleted file mode 100644 index 2030c0a0d..000000000 --- a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/104-ses.md +++ /dev/null @@ -1 +0,0 @@ -# Ses \ No newline at end of file diff --git a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/index.md b/src/data/roadmaps/full-stack/content/ba1sic-aws-services/index.md deleted file mode 100644 index deb26ca96..000000000 --- a/src/data/roadmaps/full-stack/content/ba1sic-aws-services/index.md +++ /dev/null @@ -1 +0,0 @@ -# Ba1sic aws services \ No newline at end of file diff --git a/src/data/roadmaps/full-stack/content/index.md b/src/data/roadmaps/full-stack/content/index.md deleted file mode 100644 index 4e768b56d..000000000 --- a/src/data/roadmaps/full-stack/content/index.md +++ /dev/null @@ -1 +0,0 @@ -# \ No newline at end of file diff --git a/src/data/roadmaps/react/content/107-styling/103-tailwind.md b/src/data/roadmaps/react/content/107-styling/103-tailwind.md index 50428eecc..92e343740 100644 --- a/src/data/roadmaps/react/content/107-styling/103-tailwind.md +++ b/src/data/roadmaps/react/content/107-styling/103-tailwind.md @@ -5,7 +5,7 @@ CSS Framework that provides atomic CSS classes to help you style components e.g. Visit the following resources to learn more: - [Tailwind Website](https://tailwindcss.com) -- [Tailwind CSS: An Introduction](https://www.codemag.com/Article/2105091/Tailwind-CSS-An-Introduction) -- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) -- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) +- [Tailwind CSS Full Course for Beginners](https://www.youtube.com/watch?v=lCxcTsOHrjo) - [Tailwind CSS Crash Course](https://www.youtube.com/watch?v=UBOj6rqRUME) +- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) +- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) diff --git a/src/data/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md b/src/data/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md index c4e9f3936..92e343740 100644 --- a/src/data/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md +++ b/src/data/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md @@ -5,7 +5,7 @@ CSS Framework that provides atomic CSS classes to help you style components e.g. Visit the following resources to learn more: - [Tailwind Website](https://tailwindcss.com) -- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) -- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) -- [Tailwind CSS: An Introduction](https://www.codemag.com/Article/2105091/Tailwind-CSS-An-Introduction) +- [Tailwind CSS Full Course for Beginners](https://www.youtube.com/watch?v=lCxcTsOHrjo) - [Tailwind CSS Crash Course](https://www.youtube.com/watch?v=UBOj6rqRUME) +- [Should You Use Tailwind CSS?](https://www.youtube.com/watch?v=hdGsFpZ0J2E) +- [Official Screencasts](https://www.youtube.com/c/TailwindLabs/videos) diff --git a/src/styles/global.css b/src/styles/global.css index 92e76eea7..39b296a15 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -9,6 +9,7 @@ } .prose ul li > code, +.prose ol li > code, p > code, a > code, strong > code,