total_hours = weekly_hours * total_weeks;
// Determine learning profile
learning_profile = {
let profile = {
level: "beginner",
track: "general",
depth: "practical",
time_budget: total_hours
};
// Determine level
if (background.includes("Complete beginner")) {
profile.level = "beginner";
} else if (background.includes("developer") || background.includes("engineer") || background.includes("professional")) {
profile.level = "intermediate";
} else {
profile.level = "beginner-plus";
}
// Adjust for prior knowledge
if (prior_knowledge.length >= 4) {
profile.level = profile.level === "beginner" ? "beginner-plus" : "intermediate";
}
if (prior_knowledge.length >= 6) {
profile.level = "advanced";
}
// Determine track
if (primary_goal.includes("career")) profile.track = "career";
else if (primary_goal.includes("smart home")) profile.track = "maker";
else if (primary_goal.includes("Industrial")) profile.track = "industrial";
else if (primary_goal.includes("research")) profile.track = "research";
else if (primary_goal.includes("security")) profile.track = "security";
else if (primary_goal.includes("Data")) profile.track = "data";
else profile.track = "general";
// Determine depth
if (technical_depth.includes("Conceptual")) profile.depth = "conceptual";
else if (technical_depth.includes("Advanced")) profile.depth = "advanced";
else if (technical_depth.includes("Research")) profile.depth = "research";
else profile.depth = "practical";
return profile;
}
// Course module database
modules = [
// Foundation modules
{
id: "iot-overview",
name: "IoT Fundamentals",
hours: 4,
level: "beginner",
tracks: ["general", "maker", "career", "industrial", "research", "security", "data"],
type: "foundation",
chapters: [
{title: "Overview of IoT", url: "../applications-and-use-cases/overview-of-iot.qmd"},
{title: "IoT Use Cases", url: "../applications-and-use-cases/iot-use-cases.qmd"},
{title: "Application Domains", url: "../applications-and-use-cases/application-domains.qmd"}
],
description: "Core IoT concepts, history, and real-world applications"
},
{
id: "sensors-basics",
name: "Sensing and Actuation",
hours: 6,
level: "beginner",
tracks: ["general", "maker", "industrial", "research"],
type: "foundation",
chapters: [
{title: "Sensor Fundamentals", url: "../sensing-and-actuation/sensor-fundamentals-and-types.qmd"},
{title: "Actuators", url: "../sensing-and-actuation/actuators.qmd"},
{title: "Sensor Interfacing", url: "../sensing-and-actuation/sensor-interfacing-and-processing.qmd"}
],
description: "How IoT devices sense the physical world and take actions"
},
{
id: "networking-basics",
name: "Networking Fundamentals",
hours: 8,
level: "beginner",
tracks: ["general", "career", "industrial", "security"],
type: "foundation",
chapters: [
{title: "Networking Basics", url: "../networking-and-communications/fundamentals/networking-basics.qmd"},
{title: "IoT Protocols Overview", url: "../networking-and-communications/fundamentals/iot-protocols-overview.qmd"},
{title: "Network Topologies", url: "../networking-and-communications/fundamentals/topologies.qmd"}
],
description: "Essential networking concepts for IoT systems"
},
{
id: "architecture-basics",
name: "IoT Architecture",
hours: 6,
level: "beginner-plus",
tracks: ["general", "career", "industrial", "research"],
type: "foundation",
chapters: [
{title: "IoT Reference Models", url: "../architectures/foundations/iot-reference-models.qmd"},
{title: "Architectural Enablers", url: "../architectures/foundations/architectural-enablers.qmd"},
{title: "Cloud Computing", url: "../architectures/foundations/cloud-computing.qmd"}
],
description: "How IoT systems are structured and organized"
},
// Short-range protocols
{
id: "wifi",
name: "Wi-Fi for IoT",
hours: 4,
level: "beginner-plus",
tracks: ["general", "maker", "career"],
type: "protocol",
chapters: [
{title: "Wi-Fi Fundamentals", url: "../networking-and-communications/short-range/wifi-fundamentals-and-standards.qmd"},
{title: "Wi-Fi Architecture", url: "../networking-and-communications/short-range/wifi-architecture-and-mesh.qmd"}
],
description: "Using Wi-Fi in IoT applications"
},
{
id: "bluetooth",
name: "Bluetooth LE",
hours: 5,
level: "beginner-plus",
tracks: ["general", "maker", "career", "industrial"],
type: "protocol",
chapters: [
{title: "BLE Fundamentals", url: "../networking-and-communications/short-range/bluetooth-fundamentals-and-architecture.qmd"},
{title: "BLE Profiles and GATT", url: "../networking-and-communications/short-range/bluetooth-profiles-and-applications.qmd"}
],
description: "Low-energy Bluetooth for wearables and sensors"
},
{
id: "zigbee-thread",
name: "Zigbee and Thread",
hours: 6,
level: "intermediate",
tracks: ["maker", "career", "industrial"],
type: "protocol",
chapters: [
{title: "Zigbee Fundamentals", url: "../networking-and-communications/short-range/zigbee-fundamentals-and-architecture.qmd"},
{title: "Thread Fundamentals", url: "../networking-and-communications/short-range/thread-fundamentals-and-roles.qmd"}
],
description: "Mesh networking for smart home and industrial"
},
// Long-range protocols
{
id: "lorawan",
name: "LoRaWAN",
hours: 8,
level: "intermediate",
tracks: ["general", "career", "industrial", "research"],
type: "protocol",
chapters: [
{title: "LPWAN Fundamentals", url: "../networking-and-communications/long-range-app/lpwan-fundamentals.qmd"},
{title: "LoRaWAN Overview", url: "../networking-and-communications/long-range-app/lorawan-overview.qmd"},
{title: "LoRaWAN Architecture", url: "../networking-and-communications/long-range-app/lorawan-architecture.qmd"}
],
description: "Long-range, low-power wide area networking"
},
{
id: "cellular-iot",
name: "Cellular IoT",
hours: 6,
level: "intermediate",
tracks: ["career", "industrial"],
type: "protocol",
chapters: [
{title: "Cellular IoT Fundamentals", url: "../networking-and-communications/long-range-app/cellular-iot-fundamentals.qmd"},
{title: "NB-IoT Fundamentals", url: "../networking-and-communications/long-range-app/nb-iot-fundamentals.qmd"}
],
description: "NB-IoT and LTE-M for wide-area connectivity"
},
// Application protocols
{
id: "mqtt",
name: "MQTT Protocol",
hours: 5,
level: "beginner-plus",
tracks: ["general", "maker", "career", "industrial", "data"],
type: "protocol",
chapters: [
{title: "MQTT Fundamentals", url: "../networking-and-communications/long-range-app/mqtt.qmd"},
{title: "MQTT QoS", url: "../networking-and-communications/long-range-app/mqtt-qos-and-session.qmd"}
],
description: "Publish-subscribe messaging for IoT"
},
{
id: "coap",
name: "CoAP Protocol",
hours: 4,
level: "intermediate",
tracks: ["career", "research"],
type: "protocol",
chapters: [
{title: "CoAP Fundamentals", url: "../networking-and-communications/long-range-app/coap-fundamentals-and-architecture.qmd"}
],
description: "Constrained Application Protocol for resource-limited devices"
},
// Data and analytics
{
id: "data-basics",
name: "IoT Data Management",
hours: 6,
level: "beginner-plus",
tracks: ["general", "career", "data"],
type: "data",
chapters: [
{title: "Data Formats for IoT", url: "../fundamentals/data-formats-for-iot.qmd"},
{title: "Data Storage", url: "../data-management-and-analytics/data-storage-and-databases.qmd"},
{title: "Time Series Databases", url: "../data-management-and-analytics/time-series-databases.qmd"}
],
description: "Storing and managing IoT data"
},
{
id: "analytics",
name: "IoT Analytics",
hours: 8,
level: "intermediate",
tracks: ["data", "research"],
type: "data",
chapters: [
{title: "Stream Processing", url: "../data-management-and-analytics/stream-processing.qmd"},
{title: "Sensor Fusion", url: "../data-management-and-analytics/multi-sensor-data-fusion.qmd"},
{title: "ML and Inferencing", url: "../data-management-and-analytics/modeling-and-inferencing.qmd"}
],
description: "Real-time analytics and machine learning for IoT"
},
// Security
{
id: "security-basics",
name: "IoT Security Fundamentals",
hours: 6,
level: "beginner-plus",
tracks: ["general", "career", "security"],
type: "security",
chapters: [
{title: "Security Overview", url: "../privacy-and-security/security-and-privacy-overview.qmd"},
{title: "Threats and Vulnerabilities", url: "../privacy-and-security/threats-attacks-and-vulnerabilities.qmd"}
],
description: "Security challenges and threats in IoT"
},
{
id: "security-advanced",
name: "Advanced IoT Security",
hours: 8,
level: "advanced",
tracks: ["security", "research"],
type: "security",
chapters: [
{title: "Encryption Architecture", url: "../privacy-and-security/encryption-architecture-and-levels.qmd"},
{title: "Threat Modeling", url: "../privacy-and-security/threat-modelling-and-mitigation.qmd"},
{title: "Cyber Security Methods", url: "../privacy-and-security/cyber-security-methods.qmd"}
],
description: "Deep dive into IoT security mechanisms"
},
// Edge and distributed
{
id: "edge-computing",
name: "Edge and Fog Computing",
hours: 6,
level: "intermediate",
tracks: ["career", "industrial", "research", "data"],
type: "architecture",
chapters: [
{title: "Edge-Fog Computing", url: "../architectures/distributed-specialized/edge-fog-computing.qmd"},
{title: "Edge Compute Patterns", url: "../data-management-and-analytics/edge-compute-patterns.qmd"}
],
description: "Processing at the edge for low latency"
},
// Specialized
{
id: "wsn",
name: "Wireless Sensor Networks",
hours: 10,
level: "advanced",
tracks: ["research", "industrial"],
type: "specialized",
chapters: [
{title: "WSN Coverage", url: "../architectures/distributed-specialized/wsn-coverage-fundamentals.qmd"},
{title: "WSN Tracking", url: "../architectures/distributed-specialized/wsn-tracking-fundamentals.qmd"},
{title: "WSN Routing", url: "../architectures/distributed-specialized/wsn-routing.qmd"}
],
description: "Academic/research focus on sensor networks"
},
// Hands-on
{
id: "prototyping",
name: "IoT Prototyping",
hours: 10,
level: "beginner-plus",
tracks: ["maker", "career"],
type: "practical",
chapters: [
{title: "Prototyping Hardware", url: "../design-strategies-and-prototyping/prototyping-hardware.qmd"},
{title: "Programming Paradigms", url: "../design-strategies-and-prototyping/programming-paradigms-and-tools.qmd"}
],
description: "Build real IoT prototypes"
},
{
id: "capstone",
name: "Capstone Projects",
hours: 20,
level: "intermediate",
tracks: ["maker", "career"],
type: "practical",
chapters: [
{title: "Capstone Projects", url: "../design-strategies-and-prototyping/capstone-projects.qmd"}
],
description: "End-to-end project implementation"
}
];
// Generate personalized path
function generatePath(profile, modules) {
let path = [];
let hours_used = 0;
let hours_budget = profile.time_budget;
// Priority order based on track
let priority_types = [];
if (profile.track === "general") {
priority_types = ["foundation", "protocol", "data", "security", "practical"];
} else if (profile.track === "maker") {
priority_types = ["foundation", "practical", "protocol"];
} else if (profile.track === "career") {
priority_types = ["foundation", "protocol", "data", "security", "architecture"];
} else if (profile.track === "industrial") {
priority_types = ["foundation", "protocol", "architecture", "security"];
} else if (profile.track === "research") {
priority_types = ["foundation", "protocol", "specialized", "data"];
} else if (profile.track === "security") {
priority_types = ["foundation", "security", "protocol"];
} else if (profile.track === "data") {
priority_types = ["foundation", "data", "protocol", "architecture"];
}
// Level filtering
let acceptable_levels = ["beginner"];
if (profile.level === "beginner-plus") acceptable_levels.push("beginner-plus");
if (profile.level === "intermediate") acceptable_levels.push("beginner-plus", "intermediate");
if (profile.level === "advanced") acceptable_levels.push("beginner-plus", "intermediate", "advanced");
// Select modules in priority order
for (let type of priority_types) {
let type_modules = modules.filter(m =>
m.type === type &&
m.tracks.includes(profile.track) &&
acceptable_levels.includes(m.level) &&
hours_used + m.hours <= hours_budget
);
for (let mod of type_modules) {
if (!path.find(p => p.id === mod.id)) {
path.push({
...mod,
status: "planned",
week_start: Math.ceil((hours_used + 1) / weekly_hours),
week_end: Math.ceil((hours_used + mod.hours) / weekly_hours)
});
hours_used += mod.hours;
}
}
}
// If we have extra time, add bonus modules
let bonus_modules = modules.filter(m =>
!path.find(p => p.id === m.id) &&
acceptable_levels.includes(m.level) &&
hours_used + m.hours <= hours_budget
);
for (let mod of bonus_modules.slice(0, 3)) {
path.push({
...mod,
status: "bonus",
week_start: Math.ceil((hours_used + 1) / weekly_hours),
week_end: Math.ceil((hours_used + mod.hours) / weekly_hours)
});
hours_used += mod.hours;
}
return {
modules: path,
total_hours: hours_used,
total_modules: path.length,
completion_weeks: Math.ceil(hours_used / weekly_hours)
};
}
generated_path = generatePath(learning_profile, modules);