Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 158 additions & 0 deletions data/career_roadmaps.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
[
{
"id": "frontend",
"title": "Frontend Development",
"description": "Build modern user interfaces with HTML, CSS, JavaScript, and popular frontend frameworks.",
"topics": [
"HTML & Semantic Markup",
"CSS Layout & Responsive Design",
"JavaScript Fundamentals",
"DOM Manipulation",
"React Basics",
"State Management",
"Accessibility (a11y)",
"Browser DevTools"
],
"skills": ["HTML", "CSS", "JavaScript", "React", "Git", "Responsive Design", "REST APIs"],
"duration": "3–6 months",
"duration_weeks": 20,
"difficulty": "Beginner",
"difficulty_score": 2,
"career_opportunities": [
"Frontend Developer",
"UI Developer",
"Web Designer",
"React Developer"
]
},
{
"id": "fullstack",
"title": "Full Stack Development",
"description": "End-to-end web development covering both client-side UI and server-side APIs, databases, and deployment.",
"topics": [
"Frontend Fundamentals",
"Backend APIs (REST)",
"Database Design (SQL)",
"Authentication & Sessions",
"Server Deployment",
"Testing Full Applications",
"DevOps Basics",
"Project Architecture"
],
"skills": ["HTML", "CSS", "JavaScript", "Python", "Flask", "SQL", "Git", "REST APIs", "Deployment"],
"duration": "6–12 months",
"duration_weeks": 36,
"difficulty": "Intermediate",
"difficulty_score": 4,
"career_opportunities": [
"Full Stack Developer",
"Software Engineer",
"Web Application Developer",
"Startup Engineer"
]
},
{
"id": "react",
"title": "React Development",
"description": "Specialize in building component-based UIs with React, hooks, routing, and modern frontend tooling.",
"topics": [
"JSX & Components",
"Props & State",
"React Hooks (useState, useEffect)",
"React Router",
"Context API",
"API Integration with fetch",
"Component Testing",
"Build Tools (Vite/CRA)"
],
"skills": ["JavaScript", "React", "HTML", "CSS", "Git", "REST APIs", "npm"],
"duration": "2–4 months",
"duration_weeks": 14,
"difficulty": "Beginner",
"difficulty_score": 2,
"career_opportunities": [
"React Developer",
"Frontend Engineer",
"UI Engineer",
"JavaScript Developer"
]
},
{
"id": "angular",
"title": "Angular Development",
"description": "Build enterprise-grade single-page applications with Angular, TypeScript, and RxJS.",
"topics": [
"TypeScript Fundamentals",
"Angular Components & Modules",
"Services & Dependency Injection",
"RxJS & Observables",
"Angular Routing",
"Forms (Template & Reactive)",
"HTTP Client",
"Unit Testing with Jasmine"
],
"skills": ["TypeScript", "Angular", "RxJS", "HTML", "CSS", "Git", "REST APIs"],
"duration": "3–5 months",
"duration_weeks": 18,
"difficulty": "Intermediate",
"difficulty_score": 3,
"career_opportunities": [
"Angular Developer",
"Frontend Engineer",
"Enterprise Web Developer",
"TypeScript Developer"
]
},
{
"id": "devops",
"title": "DevOps Engineering",
"description": "Automate software delivery with CI/CD pipelines, containerization, infrastructure as code, and monitoring.",
"topics": [
"Linux & Shell Scripting",
"Git & Version Control Workflows",
"CI/CD Pipelines",
"Docker & Containers",
"Kubernetes Basics",
"Infrastructure as Code (Terraform)",
"Monitoring & Logging",
"Cloud Deployment"
],
"skills": ["Linux", "Docker", "Kubernetes", "Git", "CI/CD", "Terraform", "AWS", "Python", "Bash"],
"duration": "4–8 months",
"duration_weeks": 28,
"difficulty": "Intermediate",
"difficulty_score": 4,
"career_opportunities": [
"DevOps Engineer",
"Site Reliability Engineer (SRE)",
"Platform Engineer",
"Release Engineer"
]
},
{
"id": "cloud",
"title": "Cloud Engineering",
"description": "Design, deploy, and manage scalable cloud-native applications on AWS, Azure, or GCP.",
"topics": [
"Cloud Computing Fundamentals",
"Virtual Machines & Networking",
"Serverless Architecture",
"Cloud Storage & Databases",
"Identity & Access Management (IAM)",
"Auto-scaling & Load Balancing",
"Cloud Security Best Practices",
"Cost Optimization"
],
"skills": ["AWS", "Azure", "Linux", "Docker", "Terraform", "Python", "Networking", "SQL"],
"duration": "4–8 months",
"duration_weeks": 28,
"difficulty": "Intermediate",
"difficulty_score": 4,
"career_opportunities": [
"Cloud Engineer",
"Cloud Architect",
"Solutions Architect",
"Cloud Security Engineer"
]
}
]
36 changes: 35 additions & 1 deletion routes/main_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from utils.recommender import get_recommendations, validate_recommendation_inputs
from utils.data_loader import find_project_by_id, load_all_projects, get_available_levels, get_project_stats
from utils.roadmap_comparer import load_all_career_roadmaps, compare_roadmaps
from utils.file_server import read_starter_code, resolve_starter_file, get_starter_code_dir
from config import Config
import os
Expand Down Expand Up @@ -38,6 +39,39 @@ def index():
def contact():
return render_template("contact.html")


@main.route("/compare")
def compare_page():
"""Render the career roadmap comparison page."""
roadmaps = load_all_career_roadmaps()
return render_template("compare.html", roadmaps=roadmaps, config=Config)


@main.route("/api/roadmaps")
def list_roadmaps():
"""Return all career roadmaps as JSON."""
return jsonify(load_all_career_roadmaps()), 200


@main.route("/api/compare")
def compare_roadmaps_api():
"""Return a side-by-side comparison of two career roadmaps."""
roadmap_a = (request.args.get("a") or "").strip()
roadmap_b = (request.args.get("b") or "").strip()

if not roadmap_a or not roadmap_b:
return jsonify({"error": "Both 'a' and 'b' query parameters are required."}), 400

result = compare_roadmaps(roadmap_a, roadmap_b)

if result is None:
return jsonify({"error": "One or both roadmap IDs were not found."}), 404

if result.get("error"):
return jsonify(result), 400

return jsonify(result), 200

@main.route("/health")
def health_check():
"""
Expand Down Expand Up @@ -151,7 +185,7 @@ def sitemap():
base = request.host_url.rstrip("/")
projects = load_all_projects()

urls = [f"<url><loc>{base}/</loc></url>"]
urls = [f"<url><loc>{base}/</loc></url>", f"<url><loc>{base}/compare</loc></url>"]
for p in projects:
urls.append(f"<url><loc>{base}/project/{p['id']}</loc></url>")

Expand Down
Loading
Loading