From 6a16f4d51dffa87a8565d892c796db81fc13f5d2 Mon Sep 17 00:00:00 2001 From: scaleborg <218523607+scaleborg@users.noreply.github.com> Date: Sun, 15 Mar 2026 18:22:17 +0100 Subject: [PATCH 1/4] fix(nav): canonicalize math routing and wire orphan pages into navigation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Navigation IA cleanup: math route consolidation and sidebar discoverability improvements across multiple sections. Math routing: - Add /math hub page (MathLandingView) linking to Refresh and Bridge - Add canonical routes /math/refresh and /math/bridge - Legacy /math-refresh and /math-bridge redirect with params preserved - Reference deep links untouched Sidebar wiring (Learning + Career): - Add Cognitive Toolkit and Behavioral Design to Learning section - Add Career Foundations to Career section - Extend Learning and Career header active states Sidebar wiring (Projects + Business): - Add OSS Projects and HF Projects to Projects section - Add Brand Studio and Execution Playbook to Business section - Extend parent header active states Section rename: - "Side Projects" → "Business" (label + aria only) Docs deep-dives: - Add 6 deep-dive sub-items under Docs > How It Works - Extend Docs header active state for deep-dive routes - Add mcp_ecosystem ViewId for /how-mcp-works - /how-gpu-works intentionally left in Reference --- frontend/src/components/Sidebar.tsx | 1263 +++++++++++++----------- frontend/src/router.tsx | 71 +- frontend/src/routes/math.tsx | 23 + frontend/src/views/MathLandingView.tsx | 64 ++ 4 files changed, 843 insertions(+), 578 deletions(-) create mode 100644 frontend/src/routes/math.tsx create mode 100644 frontend/src/views/MathLandingView.tsx diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index a521729..81d8b62 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -67,6 +67,8 @@ export type ViewId = | "product_lab" | "career" | "career_opportunities" + | "math_landing" + | "math_refresh_active" | "math_bridge" | "math_bridge_core_numeracy" | "math_bridge_high_school" @@ -144,6 +146,7 @@ export type ViewId = | "architecture_deep_dive_resilience" | "architecture_deep_dive_storage" | "architecture_deep_dive_stack" + | "mcp_ecosystem" | "changelog" | "design_system_components" | "design_system_coverage" @@ -1512,647 +1515,668 @@ export function Sidebar({ : url_tab === "build" ? "gpu_infra_build" : "gpu_infra_overview" - : pathname.startsWith("/changelog") - ? "changelog" - : pathname.startsWith( - "/design-system", - ) - ? url_tab === "coverage" - ? "design_system_coverage" - : "design_system_components" - : pathname.startsWith("/taxonomy") - ? url_tab === "skills" - ? "taxonomy_skills" - : url_tab === "domains" - ? "taxonomy_domains" - : url_tab === "composites" - ? "taxonomy_composites" - : url_tab === "roles" - ? "taxonomy_roles" - : "taxonomy_overview" + : pathname.startsWith( + "/how-mcp-works", + ) + ? "mcp_ecosystem" + : pathname.startsWith("/changelog") + ? "changelog" + : pathname.startsWith( + "/design-system", + ) + ? url_tab === "coverage" + ? "design_system_coverage" + : "design_system_components" : pathname.startsWith( - "/startup-challenge", + "/taxonomy", ) - ? "startup_challenge" + ? url_tab === "skills" + ? "taxonomy_skills" + : url_tab === "domains" + ? "taxonomy_domains" + : url_tab === "composites" + ? "taxonomy_composites" + : url_tab === "roles" + ? "taxonomy_roles" + : "taxonomy_overview" : pathname.startsWith( - "/sonic-dna", + "/startup-challenge", ) - ? "sonic_dna" + ? "startup_challenge" : pathname.startsWith( - "/chinese", + "/sonic-dna", ) - ? url_tab === "vocab" - ? "chinese_vocab" - : url_tab === "lessons" - ? "chinese_lessons" - : url_tab === "review" - ? "chinese_review" - : "chinese_dashboard" + ? "sonic_dna" : pathname.startsWith( - "/cantonese", + "/chinese", ) ? url_tab === "vocab" - ? "cantonese_vocab" + ? "chinese_vocab" : url_tab === "lessons" - ? "cantonese_lessons" + ? "chinese_lessons" : url_tab === "review" - ? "cantonese_review" - : "cantonese_dashboard" + ? "chinese_review" + : "chinese_dashboard" : pathname.startsWith( - "/module-48", + "/cantonese", ) - ? url_tab === "pnl" - ? "module48_pnl" + ? url_tab === "vocab" + ? "cantonese_vocab" : url_tab === - "pennylane" - ? "module48_pennylane" - : "module48_operations" + "lessons" + ? "cantonese_lessons" + : url_tab === + "review" + ? "cantonese_review" + : "cantonese_dashboard" : pathname.startsWith( - "/shopify-architect", - ) || - pathname.startsWith( - "/shopify", + "/module-48", ) - ? url_tab === - "skills" - ? "shopify_skills" - : "shopify_architect" + ? url_tab === "pnl" + ? "module48_pnl" + : url_tab === + "pennylane" + ? "module48_pennylane" + : "module48_operations" : pathname.startsWith( - "/linkedin-network", + "/shopify-architect", ) || pathname.startsWith( - "/linkedin-reset", - ) || - pathname.startsWith( - "/social", + "/shopify", ) ? url_tab === - "playbook" - ? "linkedin_playbook" - : url_tab === - "audit" - ? "linkedin_audit" - : "linkedin_network" + "skills" + ? "shopify_skills" + : "shopify_architect" : pathname.startsWith( - "/codex-productivity", + "/linkedin-network", + ) || + pathname.startsWith( + "/linkedin-reset", + ) || + pathname.startsWith( + "/social", ) - ? "codex_productivity" + ? url_tab === + "playbook" + ? "linkedin_playbook" + : url_tab === + "audit" + ? "linkedin_audit" + : "linkedin_network" : pathname.startsWith( - "/claude-productivity", + "/codex-productivity", ) - ? "claude_productivity" + ? "codex_productivity" : pathname.startsWith( - "/cowork-productivity", + "/claude-productivity", ) - ? "cowork_productivity" + ? "claude_productivity" : pathname.startsWith( - "/obsidian-productivity", + "/cowork-productivity", ) - ? "obsidian_productivity" + ? "cowork_productivity" : pathname.startsWith( - "/gmail-productivity", + "/obsidian-productivity", ) - ? "gmail_productivity" + ? "obsidian_productivity" : pathname.startsWith( - "/gemini-productivity", + "/gmail-productivity", ) - ? "gemini_productivity" + ? "gmail_productivity" : pathname.startsWith( - "/excel-productivity", + "/gemini-productivity", ) - ? "excel_productivity" + ? "gemini_productivity" : pathname.startsWith( - "/presentations-productivity", + "/excel-productivity", ) - ? "presentations_productivity" + ? "excel_productivity" : pathname.startsWith( - "/claude-video-productivity", + "/presentations-productivity", ) - ? "claude_video_productivity" + ? "presentations_productivity" : pathname.startsWith( - "/powerpoint-productivity", + "/claude-video-productivity", ) - ? "powerpoint_productivity" + ? "claude_video_productivity" : pathname.startsWith( - "/claude-frontend-productivity", + "/powerpoint-productivity", ) - ? "claude_frontend_productivity" + ? "powerpoint_productivity" : pathname.startsWith( - "/execution-playbook", - ) || - pathname.startsWith( - "/house-rules", + "/claude-frontend-productivity", ) - ? url_tab === - "prompt_tactics" - ? "execution_playbook_prompt_tactics" - : url_tab === - "parallel_ops" - ? "execution_playbook_parallel_ops" - : url_tab === - "remote_access" - ? "execution_playbook_remote_access" - : "execution_playbook_checklists" + ? "claude_frontend_productivity" : pathname.startsWith( - "/completion", + "/execution-playbook", + ) || + pathname.startsWith( + "/house-rules", ) - ? "completion" + ? url_tab === + "prompt_tactics" + ? "execution_playbook_prompt_tactics" + : url_tab === + "parallel_ops" + ? "execution_playbook_parallel_ops" + : url_tab === + "remote_access" + ? "execution_playbook_remote_access" + : "execution_playbook_checklists" : pathname.startsWith( - "/monitor", + "/completion", ) - ? url_tab === - "architecture" - ? "monitor_architecture" - : url_tab === - "evals" - ? "monitor_evals" + ? "completion" + : pathname.startsWith( + "/monitor", + ) + ? url_tab === + "architecture" + ? "monitor_architecture" : url_tab === - "test-cases" - ? "monitor_test_cases" + "evals" + ? "monitor_evals" : url_tab === - "databases" - ? "monitor_databases" + "test-cases" + ? "monitor_test_cases" : url_tab === - "costs" - ? "monitor_costs" + "databases" + ? "monitor_databases" : url_tab === - "tracing" - ? "monitor_tracing" + "costs" + ? "monitor_costs" : url_tab === - "plan-usage" - ? "monitor_plan_usage" + "tracing" + ? "monitor_tracing" : url_tab === - "playbook" - ? "monitor_playbook" + "plan-usage" + ? "monitor_plan_usage" : url_tab === - "codex-productivity" - ? "codex_productivity" + "playbook" + ? "monitor_playbook" : url_tab === - "claude-productivity" - ? "claude_productivity" + "codex-productivity" + ? "codex_productivity" : url_tab === - "cowork-productivity" - ? "cowork_productivity" - : "monitor_health" - : pathname.startsWith( - "/figma", - ) - ? "figma" + "claude-productivity" + ? "claude_productivity" + : url_tab === + "cowork-productivity" + ? "cowork_productivity" + : "monitor_health" : pathname.startsWith( - "/design-tools", + "/figma", ) - ? url_tab === - "tools" - ? "design_tools_tools" - : url_tab === - "compare" - ? "design_tools_compare" - : "design_tools_overview" + ? "figma" : pathname.startsWith( - "/career-accelerator", + "/design-tools", ) ? url_tab === - "opportunities" - ? "career_opportunities" - : "career" + "tools" + ? "design_tools_tools" + : url_tab === + "compare" + ? "design_tools_compare" + : "design_tools_overview" : pathname.startsWith( - "/math-bridge", + "/career-accelerator", ) ? url_tab === - "core_numeracy" - ? "math_bridge_core_numeracy" - : url_tab === - "high_school" - ? "math_bridge_high_school" - : url_tab === - "pre_university" - ? "math_bridge_pre_university" - : url_tab === - "engineering_prep" - ? "math_bridge_engineering_prep" - : "math_bridge" - : pathname.startsWith( - "/career-foundations", - ) - ? url_tab === - "msc_refresh" - ? "career_foundations_msc" - : url_tab === - "assessment" - ? "career_foundations_assessment" + "opportunities" + ? "career_opportunities" + : "career" + : pathname === + "/math" + ? "math_landing" + : pathname.startsWith( + "/math/bridge", + ) || + pathname.startsWith( + "/math-bridge", + ) + ? url_tab === + "core_numeracy" + ? "math_bridge_core_numeracy" : url_tab === - "ai_labs" - ? "career_foundations_ai_labs" + "high_school" + ? "math_bridge_high_school" : url_tab === - "forward_deployed" - ? "career_foundations_fde" + "pre_university" + ? "math_bridge_pre_university" : url_tab === - "cloud_consulting" - ? "career_foundations_cloud" + "engineering_prep" + ? "math_bridge_engineering_prep" + : "math_bridge" + : pathname.startsWith( + "/math/refresh", + ) || + pathname.startsWith( + "/math-refresh", + ) + ? "math_refresh_active" + : pathname.startsWith( + "/career-foundations", + ) + ? url_tab === + "msc_refresh" + ? "career_foundations_msc" + : url_tab === + "assessment" + ? "career_foundations_assessment" : url_tab === - "french_enterprise" - ? "career_foundations_french" + "ai_labs" + ? "career_foundations_ai_labs" : url_tab === - "adtech" - ? "career_foundations_adtech" + "forward_deployed" + ? "career_foundations_fde" : url_tab === - "faang" - ? "career_foundations_faang" + "cloud_consulting" + ? "career_foundations_cloud" : url_tab === - "data_platform" - ? "career_foundations_platform" + "french_enterprise" + ? "career_foundations_french" : url_tab === - "supply_chain" - ? "career_foundations_supply_chain" - : "career_foundations" - : pathname.startsWith( - "/high-performance", - ) - ? "high_performance" - : pathname.startsWith( - "/product-lab", - ) - ? "product_lab" - : pathname.startsWith( - "/apps", - ) - ? "my_apps" + "adtech" + ? "career_foundations_adtech" + : url_tab === + "faang" + ? "career_foundations_faang" + : url_tab === + "data_platform" + ? "career_foundations_platform" + : url_tab === + "supply_chain" + ? "career_foundations_supply_chain" + : "career_foundations" : pathname.startsWith( - "/brand-studio", + "/high-performance", ) - ? url_tab === - "collections" - ? "brand_studio_collections" - : "brand_studio_assets" + ? "high_performance" : pathname.startsWith( - "/events", + "/product-lab", ) - ? "events" + ? "product_lab" : pathname.startsWith( - "/reference-tracks", + "/apps", ) - ? "reference_tracks" + ? "my_apps" : pathname.startsWith( - "/oss-projects", + "/brand-studio", ) - ? "oss_projects" + ? url_tab === + "collections" + ? "brand_studio_collections" + : "brand_studio_assets" : pathname.startsWith( - "/hf-projects", + "/events", ) - ? "hf_projects" + ? "events" : pathname.startsWith( - "/elite-toolbox", + "/reference-tracks", ) - ? "elite_toolbox" + ? "reference_tracks" : pathname.startsWith( - "/dev-ref", - ) - ? get_dev_ref_view( - url_tab, + "/oss-projects", ) + ? "oss_projects" : pathname.startsWith( - "/prep", - ) - ? get_prep_view( - url_tab, + "/hf-projects", ) + ? "hf_projects" : pathname.startsWith( - "/applied-systems", + "/elite-toolbox", ) - ? url_tab === - "dataops" - ? "applied_systems_dataops" - : url_tab === - "recsys" - ? "applied_systems_recsys" - : url_tab === - "evals" - ? "applied_systems_evals" - : url_tab === - "worldmodels" - ? "applied_systems_worldmodels" - : url_tab === - "3d_vision" - ? "applied_systems_3d_vision" - : url_tab === - "distributed_ml" - ? "applied_systems_distributed_ml" - : "applied_systems_llmops" + ? "elite_toolbox" : pathname.startsWith( - "/embodied-ai", + "/dev-ref", + ) + ? get_dev_ref_view( + url_tab, ) - ? url_tab === - "humanoid" - ? "embodied_ai_humanoid" - : url_tab === - "service" - ? "embodied_ai_service" - : url_tab === - "autonomous" - ? "embodied_ai_autonomous" - : url_tab === - "agentic" - ? "embodied_ai_agentic" - : url_tab === - "edge_inference" - ? "embodied_ai_edge_inference" - : url_tab === - "world_models" - ? "embodied_ai_world_models" - : "embodied_ai_core" : pathname.startsWith( - "/ai-engineering", + "/prep", + ) + ? get_prep_view( + url_tab, ) - ? url_tab === - "agents" - ? "ai_engineering_agents" - : url_tab === - "evals" - ? "ai_engineering_evals" - : url_tab === - "retrieval" - ? "ai_engineering_retrieval" - : url_tab === - "memory" - ? "ai_engineering_memory" - : url_tab === - "fine_tuning" - ? "ai_engineering_fine_tuning" - : url_tab === - "multimodal" - ? "ai_engineering_multimodal" - : url_tab === - "reasoning" - ? "ai_engineering_reasoning" - : "ai_engineering_inference" : pathname.startsWith( - "/frontend-eng", + "/applied-systems", ) ? url_tab === - "components" - ? "frontend_eng_components" + "dataops" + ? "applied_systems_dataops" : url_tab === - "data_layer" - ? "frontend_eng_data_layer" + "recsys" + ? "applied_systems_recsys" : url_tab === - "performance" - ? "frontend_eng_performance" + "evals" + ? "applied_systems_evals" : url_tab === - "typescript" - ? "frontend_eng_typescript" + "worldmodels" + ? "applied_systems_worldmodels" : url_tab === - "testing" - ? "frontend_eng_testing" + "3d_vision" + ? "applied_systems_3d_vision" : url_tab === - "architecture" - ? "frontend_eng_architecture" - : "frontend_eng_state" + "distributed_ml" + ? "applied_systems_distributed_ml" + : "applied_systems_llmops" : pathname.startsWith( - "/agents", + "/embodied-ai", ) ? url_tab === - "resources" - ? "agents_resources" - : "agents_roadmap" + "humanoid" + ? "embodied_ai_humanoid" + : url_tab === + "service" + ? "embodied_ai_service" + : url_tab === + "autonomous" + ? "embodied_ai_autonomous" + : url_tab === + "agentic" + ? "embodied_ai_agentic" + : url_tab === + "edge_inference" + ? "embodied_ai_edge_inference" + : url_tab === + "world_models" + ? "embodied_ai_world_models" + : "embodied_ai_core" : pathname.startsWith( - "/tech-radar", + "/ai-engineering", ) ? url_tab === - "blogs" - ? "tech_radar_blogs" + "agents" + ? "ai_engineering_agents" : url_tab === - "tools" - ? "tech_radar_tools" - : "tech_radar_strategy" + "evals" + ? "ai_engineering_evals" + : url_tab === + "retrieval" + ? "ai_engineering_retrieval" + : url_tab === + "memory" + ? "ai_engineering_memory" + : url_tab === + "fine_tuning" + ? "ai_engineering_fine_tuning" + : url_tab === + "multimodal" + ? "ai_engineering_multimodal" + : url_tab === + "reasoning" + ? "ai_engineering_reasoning" + : "ai_engineering_inference" : pathname.startsWith( - "/mcp", + "/frontend-eng", ) ? url_tab === - "docs" - ? "mcp_docs" - : "mcp_dashboard" + "components" + ? "frontend_eng_components" + : url_tab === + "data_layer" + ? "frontend_eng_data_layer" + : url_tab === + "performance" + ? "frontend_eng_performance" + : url_tab === + "typescript" + ? "frontend_eng_typescript" + : url_tab === + "testing" + ? "frontend_eng_testing" + : url_tab === + "architecture" + ? "frontend_eng_architecture" + : "frontend_eng_state" : pathname.startsWith( - "/skills", + "/agents", ) - ? "skills" + ? url_tab === + "resources" + ? "agents_resources" + : "agents_roadmap" : pathname.startsWith( - "/gpu-for-ai", + "/tech-radar", ) ? url_tab === - "cuda" - ? "gpu_for_ai_cuda" + "blogs" + ? "tech_radar_blogs" : url_tab === - "distributed" - ? "gpu_for_ai_distributed" - : url_tab === - "memory" - ? "gpu_for_ai_memory" - : url_tab === - "cloud" - ? "gpu_for_ai_cloud" - : url_tab === - "profiling" - ? "gpu_for_ai_profiling" - : url_tab === - "networking" - ? "gpu_for_ai_networking" - : url_tab === - "alternatives" - ? "gpu_for_ai_alternatives" - : "gpu_for_ai_architecture" + "tools" + ? "tech_radar_tools" + : "tech_radar_strategy" : pathname.startsWith( - "/bio-augmentation", + "/mcp", ) ? url_tab === - "neurotech" - ? "bio_augmentation_neurotech" - : url_tab === - "wearables" - ? "bio_augmentation_wearables" - : url_tab === - "biohacking" - ? "bio_augmentation_biohacking" - : url_tab === - "translation" - ? "bio_augmentation_translation" - : url_tab === - "convergence" - ? "bio_augmentation_convergence" - : "bio_augmentation_foundations" + "docs" + ? "mcp_docs" + : "mcp_dashboard" : pathname.startsWith( - "/math-refresh", + "/skills", ) - ? url_track === - "prepa_ml" + ? "skills" + : pathname.startsWith( + "/gpu-for-ai", + ) ? url_tab === - "linear_algebra" - ? "math_refresh_pml_linear_algebra" + "cuda" + ? "gpu_for_ai_cuda" : url_tab === - "analysis" - ? "math_refresh_pml_analysis" + "distributed" + ? "gpu_for_ai_distributed" : url_tab === - "probability" - ? "math_refresh_pml_probability" + "memory" + ? "gpu_for_ai_memory" : url_tab === - "applied_ml" - ? "math_refresh_pml_applied_ml" + "cloud" + ? "gpu_for_ai_cloud" : url_tab === - "geometry_3d" - ? "math_refresh_pml_geometry_3d" + "profiling" + ? "gpu_for_ai_profiling" : url_tab === - "dynamics_physics" - ? "math_refresh_pml_dynamics_physics" + "networking" + ? "gpu_for_ai_networking" : url_tab === - "evaluation" - ? "math_refresh_pml_evaluation" - : "math_refresh_pml_methode" - : url_tab === - "diagnostic" - ? "math_refresh_z2o_diagnostic" - : url_tab === - "college" - ? "math_refresh_z2o_college" - : url_tab === - "lycee" - ? "math_refresh_z2o_lycee" - : url_tab === - "terminale" - ? "math_refresh_z2o_terminale" - : url_tab === - "evaluation" - ? "math_refresh_z2o_evaluation" - : "math_refresh_z2o_methode" - : pathname.startsWith( - "/culture-generale", - ) - ? url_track === - "humanites" - ? url_tab === - "french_philo" - ? "culture_generale_humanites_french_philo" - : url_tab === - "literature" - ? "culture_generale_humanites_literature" - : "culture_generale_humanites_philo_science" - : url_track === - "sciences_sociales" - ? url_tab === - "political_philo" - ? "culture_generale_sciences_sociales_political_philo" - : url_tab === - "history" - ? "culture_generale_sciences_sociales_history" - : "culture_generale_sciences_sociales_economics" - : url_tab === - "information_theory" - ? "culture_generale_sciences_information_theory" - : url_tab === - "biology_neuro" - ? "culture_generale_sciences_biology_neuro" - : "culture_generale_sciences_physics" + "alternatives" + ? "gpu_for_ai_alternatives" + : "gpu_for_ai_architecture" : pathname.startsWith( - "/cognitive-toolkit", + "/bio-augmentation", ) ? url_tab === - "operating_system" - ? "cognitive_toolkit_operating_system" + "neurotech" + ? "bio_augmentation_neurotech" : url_tab === - "techniques" - ? "cognitive_toolkit_techniques" + "wearables" + ? "bio_augmentation_wearables" : url_tab === - "worldview" - ? "cognitive_toolkit_worldview" + "biohacking" + ? "bio_augmentation_biohacking" : url_tab === - "library" - ? "cognitive_toolkit_library" + "translation" + ? "bio_augmentation_translation" : url_tab === - "playbook" - ? "cognitive_toolkit_playbook" + "convergence" + ? "bio_augmentation_convergence" + : "bio_augmentation_foundations" + : pathname.startsWith( + "/math-refresh", + ) + ? url_track === + "prepa_ml" + ? url_tab === + "linear_algebra" + ? "math_refresh_pml_linear_algebra" + : url_tab === + "analysis" + ? "math_refresh_pml_analysis" + : url_tab === + "probability" + ? "math_refresh_pml_probability" : url_tab === - "operators" - ? "cognitive_toolkit_operators" + "applied_ml" + ? "math_refresh_pml_applied_ml" : url_tab === - "social_dynamics" - ? "cognitive_toolkit_social_dynamics" + "geometry_3d" + ? "math_refresh_pml_geometry_3d" : url_tab === - "ai_leverage" - ? "cognitive_toolkit_ai_leverage" - : "cognitive_toolkit_foundation" - : pathname.startsWith( - "/behavioral-design", - ) - ? url_tab === - "feed_design" - ? "behavioral_design_feed_design" + "dynamics_physics" + ? "math_refresh_pml_dynamics_physics" + : url_tab === + "evaluation" + ? "math_refresh_pml_evaluation" + : "math_refresh_pml_methode" : url_tab === - "social_loops" - ? "behavioral_design_social_loops" + "diagnostic" + ? "math_refresh_z2o_diagnostic" : url_tab === - "variable_rewards" - ? "behavioral_design_variable_rewards" + "college" + ? "math_refresh_z2o_college" : url_tab === - "friction" - ? "behavioral_design_friction" + "lycee" + ? "math_refresh_z2o_lycee" : url_tab === - "notifications" - ? "behavioral_design_notifications" + "terminale" + ? "math_refresh_z2o_terminale" : url_tab === - "gamification" - ? "behavioral_design_gamification" - : url_tab === - "case_studies" - ? "behavioral_design_case_studies" - : "behavioral_design_frameworks" + "evaluation" + ? "math_refresh_z2o_evaluation" + : "math_refresh_z2o_methode" : pathname.startsWith( - "/elite-freelance", + "/culture-generale", ) - ? url_tab === - "realtime_systems" - ? "elite_freelance_realtime_systems" - : url_tab === - "apis_at_scale" - ? "elite_freelance_apis_at_scale" + ? url_track === + "humanites" + ? url_tab === + "french_philo" + ? "culture_generale_humanites_french_philo" : url_tab === - "ai_agent_infra" - ? "elite_freelance_ai_agent_infra" + "literature" + ? "culture_generale_humanites_literature" + : "culture_generale_humanites_philo_science" + : url_track === + "sciences_sociales" + ? url_tab === + "political_philo" + ? "culture_generale_sciences_sociales_political_philo" : url_tab === - "production_hardening" - ? "elite_freelance_production_hardening" - : url_tab === - "positioning" - ? "elite_freelance_positioning" - : "elite_freelance_realtime_systems" + "history" + ? "culture_generale_sciences_sociales_history" + : "culture_generale_sciences_sociales_economics" + : url_tab === + "information_theory" + ? "culture_generale_sciences_information_theory" + : url_tab === + "biology_neuro" + ? "culture_generale_sciences_biology_neuro" + : "culture_generale_sciences_physics" : pathname.startsWith( - "/tooling", + "/cognitive-toolkit", ) - ? "tooling" - : pathname === - "/learn" - ? "learn_concepts" - : pathname === - "/learn/tracks" - ? "curriculum_tracks" - : pathname.match( - /^\/learn\/tracks\/[^/]+\/modules\//, + ? url_tab === + "operating_system" + ? "cognitive_toolkit_operating_system" + : url_tab === + "techniques" + ? "cognitive_toolkit_techniques" + : url_tab === + "worldview" + ? "cognitive_toolkit_worldview" + : url_tab === + "library" + ? "cognitive_toolkit_library" + : url_tab === + "playbook" + ? "cognitive_toolkit_playbook" + : url_tab === + "operators" + ? "cognitive_toolkit_operators" + : url_tab === + "social_dynamics" + ? "cognitive_toolkit_social_dynamics" + : url_tab === + "ai_leverage" + ? "cognitive_toolkit_ai_leverage" + : "cognitive_toolkit_foundation" + : pathname.startsWith( + "/behavioral-design", + ) + ? url_tab === + "feed_design" + ? "behavioral_design_feed_design" + : url_tab === + "social_loops" + ? "behavioral_design_social_loops" + : url_tab === + "variable_rewards" + ? "behavioral_design_variable_rewards" + : url_tab === + "friction" + ? "behavioral_design_friction" + : url_tab === + "notifications" + ? "behavioral_design_notifications" + : url_tab === + "gamification" + ? "behavioral_design_gamification" + : url_tab === + "case_studies" + ? "behavioral_design_case_studies" + : "behavioral_design_frameworks" + : pathname.startsWith( + "/elite-freelance", + ) + ? url_tab === + "realtime_systems" + ? "elite_freelance_realtime_systems" + : url_tab === + "apis_at_scale" + ? "elite_freelance_apis_at_scale" + : url_tab === + "ai_agent_infra" + ? "elite_freelance_ai_agent_infra" + : url_tab === + "production_hardening" + ? "elite_freelance_production_hardening" + : url_tab === + "positioning" + ? "elite_freelance_positioning" + : "elite_freelance_realtime_systems" + : pathname.startsWith( + "/tooling", ) - ? "curriculum_module_detail" - : pathname.match( - /^\/learn\/tracks\/[^/]+$/, - ) - ? "curriculum_track_detail" + ? "tooling" + : pathname === + "/learn" + ? "learn_concepts" : pathname === - "/learn/lenses" - ? "learn_lenses" - : pathname === - "/learn/levels" - ? "learn_levels" - : pathname.startsWith( - "/learn/", + "/learn/tracks" + ? "curriculum_tracks" + : pathname.match( + /^\/learn\/tracks\/[^/]+\/modules\//, + ) + ? "curriculum_module_detail" + : pathname.match( + /^\/learn\/tracks\/[^/]+$/, ) - ? "learn_concept_detail" - : "none"; + ? "curriculum_track_detail" + : pathname === + "/learn/lenses" + ? "learn_lenses" + : pathname === + "/learn/levels" + ? "learn_levels" + : pathname.startsWith( + "/learn/", + ) + ? "learn_concept_detail" + : "none"; const current_conversation_id = active_view === "chat" ? (params.conversationId ?? null) : null; @@ -2384,6 +2408,104 @@ export function Sidebar({ onClick={() => navigate({ to: "/chat" })} className="nav-accent-glow-red" /> + {/* Learning */} +
+
+ } + label="Learning" + active={ + active_view.startsWith("learn_") || + active_view.startsWith("curriculum_") || + active_view.startsWith("chinese_") || + active_view.startsWith("cantonese_") || + active_view.startsWith("math_") || + active_view.startsWith("culture_generale_") || + active_view.startsWith("cognitive_toolkit_") || + active_view.startsWith("behavioral_design_") + } + onClick={() => navigate({ to: "/learn/tracks" })} + /> +
+ {sidebarExpanded && ( + toggle_expandable_nav("learning")} + className="p-1 text-[var(--sb-sidebar-text-muted)] hover:text-[var(--sb-text-primary)] transition-colors" + label={ + expandable_nav.learning + ? "Minimize learning tabs" + : "Expand learning tabs" + } + tooltipSide="right" + > + {expandable_nav.learning ? ( + + ) : ( + + )} + + )} +
+ + navigate({ to: "/learn/tracks" })} + /> + navigate({ to: "/learn" })} + /> + navigate({ to: "/learn/lenses" })} + /> + navigate({ to: "/learn/levels" })} + /> + navigate({ to: "/chinese" })} + /> + navigate({ to: "/cantonese" })} + /> + navigate({ to: "/math" })} + /> + navigate({ to: "/culture-generale" })} + /> + navigate({ to: "/cognitive-toolkit" })} + /> + navigate({ to: "/behavioral-design" })} + /> +
navigate({ to: "/career-accelerator" })} /> @@ -2456,6 +2579,12 @@ export function Sidebar({ }) } /> + } + label="Foundations" + active={active_view.startsWith("career_foundations")} + onClick={() => navigate({ to: "/career-foundations" })} + />
@@ -2463,7 +2592,10 @@ export function Sidebar({ icon={} label="Projects" active={ - active_view === "projects" || active_view === "projects_ai" + active_view === "projects" || + active_view === "projects_ai" || + active_view === "oss_projects" || + active_view === "hf_projects" } onClick={() => navigate({ to: "/projects/enterprise-projects" }) @@ -2504,6 +2636,18 @@ export function Sidebar({ navigate({ to: "/projects/ai-generated-projects" }) } /> + } + label="OSS Projects" + active={active_view === "oss_projects"} + onClick={() => navigate({ to: "/oss-projects" })} + /> + } + label="HF Projects" + active={active_view === "hf_projects"} + onClick={() => navigate({ to: "/hf-projects" })} + />
@@ -3977,87 +4121,6 @@ export function Sidebar({ )} - {/* Learning */} -
-
- } - label="Learning" - active={ - active_view.startsWith("learn_") || - active_view.startsWith("curriculum_") || - active_view.startsWith("chinese_") || - active_view.startsWith("cantonese_") || - active_view.startsWith("math_refresh_") || - active_view.startsWith("culture_generale_") - } - onClick={() => navigate({ to: "/learn/tracks" })} - /> -
- {sidebarExpanded && ( - toggle_expandable_nav("learning")} - className="p-1 text-[var(--sb-sidebar-text-muted)] hover:text-[var(--sb-text-primary)] transition-colors" - label={ - expandable_nav.learning - ? "Minimize learning tabs" - : "Expand learning tabs" - } - tooltipSide="right" - > - {expandable_nav.learning ? ( - - ) : ( - - )} - - )} -
- - navigate({ to: "/learn/tracks" })} - /> - navigate({ to: "/learn" })} - /> - navigate({ to: "/learn/lenses" })} - /> - navigate({ to: "/learn/levels" })} - /> - navigate({ to: "/chinese" })} - /> - navigate({ to: "/cantonese" })} - /> - navigate({ to: "/math-refresh" })} - /> - navigate({ to: "/culture-generale" })} - /> - {/* Personal */}
@@ -4162,19 +4225,21 @@ export function Sidebar({ } /> - {/* Side Projects */} + {/* Business */}
} - label="Side Projects" + label="Business" active={ active_view.startsWith("module48_") || active_view.startsWith("linkedin_") || active_view === "shopify_architect" || active_view === "shopify_skills" || active_view === "sonic_dna" || - active_view === "reference_tracks" + active_view === "reference_tracks" || + active_view.startsWith("brand_studio") || + active_view.startsWith("execution_playbook") } onClick={() => navigate({ to: "/module-48" })} /> @@ -4185,8 +4250,8 @@ export function Sidebar({ className="p-1 text-[var(--sb-sidebar-text-muted)] hover:text-[var(--sb-text-primary)] transition-colors" label={ expandable_nav.side_projects - ? "Minimize side projects tabs" - : "Expand side projects tabs" + ? "Minimize business tabs" + : "Expand business tabs" } tooltipSide="right" > @@ -4230,6 +4295,18 @@ export function Sidebar({ active={active_view === "reference_tracks"} onClick={() => navigate({ to: "/reference-tracks" })} /> + } + label="Brand Studio" + active={active_view.startsWith("brand_studio")} + onClick={() => navigate({ to: "/brand-studio" })} + /> + } + label="Execution Playbook" + active={active_view.startsWith("execution_playbook")} + onClick={() => navigate({ to: "/execution-playbook" })} + />
@@ -4451,7 +4528,13 @@ export function Sidebar({ active_view === "how_it_works_architecture" || active_view === "how_it_works_contracts" || active_view === "how_it_works_event_driven" || - active_view === "how_it_works_models" + active_view === "how_it_works_models" || + active_view.startsWith("ingestion_pipeline_") || + active_view.startsWith("chat_pipeline_") || + active_view.startsWith("career_intelligence_") || + active_view.startsWith("observability_") || + active_view.startsWith("architecture_deep_dive_") || + active_view === "mcp_ecosystem" } onClick={() => navigate({ to: "/how-it-works", search: { tab: "overview" } }) @@ -4532,6 +4615,42 @@ export function Sidebar({ }) } /> + } + label="Ingestion Pipeline" + active={active_view.startsWith("ingestion_pipeline_")} + onClick={() => navigate({ to: "/how-ingestion-works" })} + /> + } + label="Chat Pipeline" + active={active_view.startsWith("chat_pipeline_")} + onClick={() => navigate({ to: "/how-chat-works" })} + /> + } + label="Career Intelligence" + active={active_view.startsWith("career_intelligence_")} + onClick={() => navigate({ to: "/how-career-works" })} + /> + } + label="Observability" + active={active_view.startsWith("observability_")} + onClick={() => navigate({ to: "/how-monitor-works" })} + /> + } + label="Architecture Reference" + active={active_view.startsWith("architecture_deep_dive_")} + onClick={() => navigate({ to: "/how-architecture-works" })} + /> + } + label="MCP Ecosystem" + active={active_view === "mcp_ecosystem"} + onClick={() => navigate({ to: "/how-mcp-works" })} + /> diff --git a/frontend/src/router.tsx b/frontend/src/router.tsx index dae15a8..fc35e35 100644 --- a/frontend/src/router.tsx +++ b/frontend/src/router.tsx @@ -93,6 +93,7 @@ import { HowGpuWorksRoute } from "./routes/how-gpu-works"; import { PricingRoute } from "./routes/pricing"; import { CareerFoundationsRoute } from "./routes/career-foundations"; import { MathBridgeRoute } from "./routes/math-bridge"; +import { MathLandingRoute } from "./routes/math"; export type CareerTab = "accelerator" | "opportunities"; @@ -1939,9 +1940,19 @@ const VALID_CULTURE_GENERALE_TABS = new Set([ "history", ]); -const mathRefreshRoute = createRoute({ +/* ── Canonical /math hub ──────────────────────────────────────────── */ +const mathRoute = createRoute({ getParentRoute: () => appRoute, - path: "/math-refresh", + path: "/math", + errorComponent: ({ error, reset }) => ( + + ), + component: MathLandingRoute, +}); + +const mathRefreshCanonicalRoute = createRoute({ + getParentRoute: () => appRoute, + path: "/math/refresh", validateSearch: ( search: Record, ): MathRefreshSearchParams => { @@ -1966,6 +1977,52 @@ const mathRefreshRoute = createRoute({ component: MathRefreshRoute, }); +const mathBridgeCanonicalRoute = createRoute({ + getParentRoute: () => appRoute, + path: "/math/bridge", + validateSearch: (search: Record): MathBridgeSearchParams => { + const result: MathBridgeSearchParams = {}; + if ( + typeof search.tab === "string" && + VALID_MATH_BRIDGE_TABS.has(search.tab) + ) { + result.tab = search.tab as MathBridgeTab; + } + return result; + }, + errorComponent: ({ error, reset }) => ( + + ), + component: MathBridgeRoute, +}); + +/* ── Legacy redirects ────────────────────────────────────────────── */ +const mathRefreshRoute = createRoute({ + getParentRoute: () => appRoute, + path: "/math-refresh", + validateSearch: ( + search: Record, + ): MathRefreshSearchParams => { + const result: MathRefreshSearchParams = {}; + if ( + typeof search.track === "string" && + VALID_MATH_REFRESH_TRACKS.has(search.track) + ) { + result.track = search.track as MathRefreshTrack; + } + if ( + typeof search.tab === "string" && + VALID_MATH_REFRESH_TABS.has(search.tab) + ) { + result.tab = search.tab as MathRefreshTab; + } + return result; + }, + beforeLoad: ({ search }) => { + throw redirect({ to: "/math/refresh", search, replace: true }); + }, +}); + const cultureGeneraleRoute = createRoute({ getParentRoute: () => appRoute, path: "/culture-generale", @@ -2117,10 +2174,9 @@ const mathBridgeRoute = createRoute({ } return result; }, - errorComponent: ({ error, reset }) => ( - - ), - component: MathBridgeRoute, + beforeLoad: ({ search }) => { + throw redirect({ to: "/math/bridge", search, replace: true }); + }, }); const careerFoundationsRoute = createRoute({ @@ -2402,6 +2458,9 @@ const routeTree = rootRoute.addChildren([ harnessDevToolsRoute, gpuForAIRoute, bioAugmentationRoute, + mathRoute, + mathRefreshCanonicalRoute, + mathBridgeCanonicalRoute, mathRefreshRoute, cultureGeneraleRoute, cognitiveToolkitRoute, diff --git a/frontend/src/routes/math.tsx b/frontend/src/routes/math.tsx new file mode 100644 index 0000000..34b813a --- /dev/null +++ b/frontend/src/routes/math.tsx @@ -0,0 +1,23 @@ +import { lazy, Suspense } from "react"; + +const MathLandingView = lazy(() => + import("../views/MathLandingView").then((m) => ({ + default: m.MathLandingView, + })), +); + +function LoadingSpinner() { + return ( +
+
+
+ ); +} + +export function MathLandingRoute() { + return ( + }> + + + ); +} diff --git a/frontend/src/views/MathLandingView.tsx b/frontend/src/views/MathLandingView.tsx new file mode 100644 index 0000000..3331f7a --- /dev/null +++ b/frontend/src/views/MathLandingView.tsx @@ -0,0 +1,64 @@ +import { useNavigate } from "@tanstack/react-router"; +import { motion } from "framer-motion"; + +import { PremiumHero, PremiumPage } from "../components/layout/PremiumShell"; +import { useDocumentTitle } from "../hooks/useDocumentTitle"; + +const ENTRIES = [ + { + key: "refresh", + label: "Math Refresh", + description: + "Study the French math curriculum at your own pace - from arithmetic fundamentals through prepa-level linear algebra and probability.", + to: "/math/refresh" as const, + color: "#55cdff", + }, + { + key: "bridge", + label: "Math Bridge Program", + description: + "Test your skills across four levels, track your readiness, and close gaps with interactive micro-checks.", + to: "/math/bridge" as const, + color: "#ffc47c", + }, +] as const; + +export function MathLandingView() { + useDocumentTitle("Math"); + const navigate = useNavigate(); + + return ( + + +
+ {ENTRIES.map((entry, i) => ( + navigate({ to: entry.to })} + className="text-left rounded-[12px] border border-white/[0.08] bg-white/[0.02] p-6 transition-colors duration-150 hover:border-white/[0.12] hover:bg-white/[0.035]" + style={{ borderLeftWidth: 2, borderLeftColor: entry.color }} + > +

+ {entry.label} +

+

+ {entry.description} +

+
+ ))} +
+
+ ); +} From 82caf24700f5f2f5053468c181c51df877099583 Mon Sep 17 00:00:00 2001 From: scaleborg <218523607+scaleborg@users.noreply.github.com> Date: Sun, 15 Mar 2026 18:36:04 +0100 Subject: [PATCH 2/4] fix(nav): freeze left sidebar information architecture for v1 Separate Core (Ingest/Library/Chat) from Learning/Career/Projects/Organizer with a thin divider. Separate Mission Control from Reference/Personal/Business with a divider after Workspaces. Add Business section label for clarity. --- frontend/src/components/Sidebar.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 81d8b62..92beabb 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -2408,6 +2408,9 @@ export function Sidebar({ onClick={() => navigate({ to: "/chat" })} className="nav-accent-glow-red" /> + +
+ {/* Learning */}
@@ -2892,6 +2895,9 @@ export function Sidebar({ } /> + +
+ {/* Reference (collapsed by default) */}
@@ -4226,6 +4232,7 @@ export function Sidebar({ /> {/* Business */} + {sidebarExpanded && }
Date: Mon, 16 Mar 2026 13:42:32 +0100 Subject: [PATCH 3/4] fix(math): make /math the canonical navigator for both curriculum tracks Enhance MathLandingView to show inline navigation for Zero to One (6 topics) and Prepa ML (8 topics) as clickable pills that link directly to /math/refresh?track=...&tab=... No sidebar changes. Math Bridge card kept at bottom. --- frontend/src/views/MathLandingView.tsx | 138 ++++++++++++++++++++----- 1 file changed, 111 insertions(+), 27 deletions(-) diff --git a/frontend/src/views/MathLandingView.tsx b/frontend/src/views/MathLandingView.tsx index 3331f7a..d9026e6 100644 --- a/frontend/src/views/MathLandingView.tsx +++ b/frontend/src/views/MathLandingView.tsx @@ -1,28 +1,57 @@ import { useNavigate } from "@tanstack/react-router"; import { motion } from "framer-motion"; +import { ChevronRight } from "lucide-react"; import { PremiumHero, PremiumPage } from "../components/layout/PremiumShell"; import { useDocumentTitle } from "../hooks/useDocumentTitle"; -const ENTRIES = [ +/* ------------------------------------------------------------------ */ +/* Track topic data */ +/* ------------------------------------------------------------------ */ + +const ZERO_TO_ONE_TOPICS = [ + { tab: "methode", label: "Methode" }, + { tab: "diagnostic", label: "Diagnostic" }, + { tab: "college", label: "College (6e-3e)" }, + { tab: "lycee", label: "Seconde-Premiere" }, + { tab: "terminale", label: "Terminale S" }, + { tab: "evaluation", label: "Auto-evaluation" }, +] as const; + +const PREPA_ML_TOPICS = [ + { tab: "methode", label: "Methode" }, + { tab: "linear_algebra", label: "Algebre Lineaire" }, + { tab: "analysis", label: "Analyse" }, + { tab: "probability", label: "Probabilites & Stats" }, + { tab: "applied_ml", label: "Maths Appliquees ML" }, + { tab: "geometry_3d", label: "Geometrie & 3D" }, + { tab: "dynamics_physics", label: "Dynamique & Physique" }, + { tab: "evaluation", label: "Auto-evaluation" }, +] as const; + +const TRACKS = [ { - key: "refresh", - label: "Math Refresh", + key: "zero_to_one", + title: "Maths - Zero to One", description: - "Study the French math curriculum at your own pace - from arithmetic fundamentals through prepa-level linear algebra and probability.", - to: "/math/refresh" as const, + "French curriculum from arithmetic through Terminale S - build fluency from scratch.", color: "#55cdff", + topics: ZERO_TO_ONE_TOPICS, }, { - key: "bridge", - label: "Math Bridge Program", + key: "prepa_ml", + title: "Maths - Prepa ML", description: - "Test your skills across four levels, track your readiness, and close gaps with interactive micro-checks.", - to: "/math/bridge" as const, + "University-level math for machine learning - linear algebra, calculus, probability, and applied methods.", color: "#ffc47c", + topics: PREPA_ML_TOPICS, }, ] as const; +/* ------------------------------------------------------------------ */ +/* Component */ +/* ------------------------------------------------------------------ */ + export function MathLandingView() { useDocumentTitle("Math"); const navigate = useNavigate(); @@ -35,30 +64,85 @@ export function MathLandingView() { title="Math" description="Your math study hub - pick a curriculum track to review, or test your readiness with the bridge program." /> -
- {ENTRIES.map((entry, i) => ( - + {TRACKS.map((track, ti) => ( + navigate({ to: entry.to })} - className="text-left rounded-[12px] border border-white/[0.08] bg-white/[0.02] p-6 transition-colors duration-150 hover:border-white/[0.12] hover:bg-white/[0.035]" - style={{ borderLeftWidth: 2, borderLeftColor: entry.color }} + transition={{ delay: ti * 0.06, duration: 0.3 }} + className="rounded-[12px] border border-white/[0.08] bg-white/[0.02] p-5" + style={{ borderLeftWidth: 2, borderLeftColor: track.color }} > -

+ navigate({ + to: "/math/refresh", + search: { track: track.key, tab: "methode" }, + }) + } + className="flex w-full items-center justify-between text-left group" > - {entry.label} -

-

- {entry.description} -

-
+
+

+ {track.title} +

+

+ {track.description} +

+
+ + + +
+ {track.topics.map((topic, i) => ( + + navigate({ + to: "/math/refresh", + search: { track: track.key, tab: topic.tab }, + }) + } + className="rounded-[4px] border border-white/[0.08] bg-white/[0.04] px-3 py-1.5 text-[15px] text-[#d0d6e0] transition-colors duration-150 hover:border-white/[0.15] hover:bg-white/[0.07] hover:text-[#f7f8f8]" + > + {topic.label} + + ))} +
+ ))}
+ + {/* Bridge program */} + navigate({ to: "/math/bridge" })} + className="mt-6 w-full text-left rounded-[12px] border border-white/[0.08] bg-white/[0.02] p-6 transition-colors duration-150 hover:border-white/[0.12] hover:bg-white/[0.035]" + style={{ borderLeftWidth: 2, borderLeftColor: "#5e6ad2" }} + > +

+ Math Bridge Program +

+

+ Test your skills across four levels, track your readiness, and close + gaps with interactive micro-checks. +

+
); } From 1f34ca09578a34c66f0b1d1b4e92e5e5ee21dfdb Mon Sep 17 00:00:00 2001 From: scaleborg <218523607+scaleborg@users.noreply.github.com> Date: Mon, 16 Mar 2026 21:13:27 +0100 Subject: [PATCH 4/4] feat(curriculum): unified track system with resource tracks and sidebar collapse Backend: - Migration 0084: track_resources table, track_type on tracks, color on modules - Extend curriculum models, loader, store, and API for resource tracks - Resource tracks skip concept validation, support curated link collections - New endpoints: GET track resources, GET module resources - Seed job supports --type filter and skips _ prefixed files Data: - 11 resource track YAML files extracted from hardcoded frontend views - 569 resources across 79 modules seeded into database - Tracks: AI Engineering, Frontend Eng, GPU for AI, Embodied AI, Bio-Augmentation, Databases, Applied Systems, Interview Prep, Freelance Strategy, Cognitive Toolkit, Behavioral Design - Displaced prep resources saved in _prep-displaced.yaml for merging Frontend: - Generic TrackDetailView handles both concept and resource tracks - Resource tracks render with tabbed modules and ResourceCards - CurriculumTracksView shows both track types with correct metadata - Sidebar collapsed: removed entire Reference section (~1,300 lines) - Removed Lenses, Levels, Cognitive Toolkit, Behavioral Design from nav - Added Dev Reference nav item linking to existing dev-ref page - Added inline tab navigators to DevRefView and DomainOntologyView - Frontend types extended with TrackResource, track_type, color fields --- backend/api/curriculum.py | 55 +- backend/jobs/seed_curriculum.py | 65 +- backend/models/curriculum.py | 43 +- .../services/infrastructure/db_migrations.py | 45 + .../services/learning/curriculum_loader.py | 76 +- backend/services/learning/curriculum_store.py | 62 +- curriculum/tracks/_prep-displaced.yaml | 395 +++++ curriculum/tracks/ai-engineering.yaml | 407 +++++ curriculum/tracks/applied-systems.yaml | 229 +++ curriculum/tracks/behavioral-design.yaml | 317 ++++ curriculum/tracks/bio-augmentation.yaml | 385 +++++ curriculum/tracks/cognitive-toolkit.yaml | 1038 +++++++++++++ curriculum/tracks/databases.yaml | 372 +++++ curriculum/tracks/embodied-ai.yaml | 425 ++++++ curriculum/tracks/freelance-strategy.yaml | 156 ++ curriculum/tracks/frontend-engineering.yaml | 357 +++++ curriculum/tracks/gpu-for-ai.yaml | 512 +++++++ curriculum/tracks/interview-prep.yaml | 138 ++ frontend/src/components/Sidebar.tsx | 1324 +---------------- frontend/src/lib/api/endpoints.ts | 19 + frontend/src/lib/api/types.ts | 18 + frontend/src/lib/query/keys.ts | 2 + frontend/src/routes/curriculum.tsx | 16 +- frontend/src/views/CurriculumTracksView.tsx | 24 +- frontend/src/views/DevRefView.tsx | 159 +- frontend/src/views/DomainOntologyView.tsx | 35 +- frontend/src/views/TrackDetailView.tsx | 454 ++++++ 27 files changed, 5747 insertions(+), 1381 deletions(-) create mode 100644 curriculum/tracks/_prep-displaced.yaml create mode 100644 curriculum/tracks/ai-engineering.yaml create mode 100644 curriculum/tracks/applied-systems.yaml create mode 100644 curriculum/tracks/behavioral-design.yaml create mode 100644 curriculum/tracks/bio-augmentation.yaml create mode 100644 curriculum/tracks/cognitive-toolkit.yaml create mode 100644 curriculum/tracks/databases.yaml create mode 100644 curriculum/tracks/embodied-ai.yaml create mode 100644 curriculum/tracks/freelance-strategy.yaml create mode 100644 curriculum/tracks/frontend-engineering.yaml create mode 100644 curriculum/tracks/gpu-for-ai.yaml create mode 100644 curriculum/tracks/interview-prep.yaml create mode 100644 frontend/src/views/TrackDetailView.tsx diff --git a/backend/api/curriculum.py b/backend/api/curriculum.py index 471a5b1..d609695 100644 --- a/backend/api/curriculum.py +++ b/backend/api/curriculum.py @@ -1,4 +1,4 @@ -"""Curriculum API - read-only track and module retrieval.""" +"""Curriculum API - track, module, and resource retrieval.""" import logging @@ -11,6 +11,7 @@ CurriculumModuleSummary, CurriculumTrackDetail, CurriculumTrackSummary, + TrackResource, ) from backend.services.learning.curriculum_store import ( DEFAULT_USER_ID, @@ -18,6 +19,8 @@ get_module, get_module_progress, get_track, + list_module_resources, + list_track_resources, list_tracks, update_concept_progress, ) @@ -54,6 +57,19 @@ class ModuleProgressResponse(BaseModel): not_started: int +class ModuleResourcesResponse(BaseModel): + track_id: str + module_id: str + resources: list[TrackResource] + total: int + + +class TrackResourcesResponse(BaseModel): + track_id: str + resources: list[TrackResource] + total: int + + @router.get("/tracks", response_model=TrackListResponse) def list_curriculum_tracks(published_only: bool = Query(True)): """List all curriculum tracks.""" @@ -81,12 +97,16 @@ def get_curriculum_track(track_id: str): @router.get("/tracks/{track_id}/modules/{module_id}", response_model=CurriculumModuleDetail) def get_curriculum_module(track_id: str, module_id: str): - """Get a module with ordered concept refs and readiness state.""" + """Get a module with ordered concept refs, readiness state, and resources.""" module = get_module(track_id, module_id) if not module: raise HTTPException(status_code=404, detail="Module not found") return CurriculumModuleDetail( - **{**module, "concepts": [ConceptRef(**c) for c in module["concepts"]]} + **{ + **module, + "concepts": [ConceptRef(**c) for c in module["concepts"]], + "resources": [TrackResource(**r) for r in module["resources"]], + } ) @@ -106,6 +126,35 @@ def get_curriculum_module_progress( return ModuleProgressResponse(**{k: v for k, v in progress.items() if k != "concepts"}) +@router.get( + "/tracks/{track_id}/modules/{module_id}/resources", + response_model=ModuleResourcesResponse, +) +def get_module_resources_endpoint(track_id: str, module_id: str): + """List all resources for a specific module.""" + resources = list_module_resources(track_id, module_id) + return ModuleResourcesResponse( + track_id=track_id, + module_id=module_id, + resources=[TrackResource(**r) for r in resources], + total=len(resources), + ) + + +@router.get( + "/tracks/{track_id}/resources", + response_model=TrackResourcesResponse, +) +def get_track_resources_endpoint(track_id: str): + """List all resources for a track.""" + resources = list_track_resources(track_id) + return TrackResourcesResponse( + track_id=track_id, + resources=[TrackResource(**r) for r in resources], + total=len(resources), + ) + + @router.put("/progress/{concept_id}", response_model=ConceptProgressResponse) def update_progress(concept_id: str, body: ProgressUpdateRequest): """Update learning progress for a concept.""" diff --git a/backend/jobs/seed_curriculum.py b/backend/jobs/seed_curriculum.py index 8b8e34b..73879fa 100644 --- a/backend/jobs/seed_curriculum.py +++ b/backend/jobs/seed_curriculum.py @@ -3,9 +3,14 @@ Loads all YAML files from curriculum/tracks/, validates each against the canonical concept registry and dossier layer, and upserts into DB. +Supports two track types: + - concept: validated against canonical concepts (existing behavior) + - resource: curated link/reference collections (no concept validation) + Usage: python -m backend.jobs.seed_curriculum python -m backend.jobs.seed_curriculum --dry-run + python -m backend.jobs.seed_curriculum --type resource """ import argparse @@ -16,7 +21,7 @@ logger = logging.getLogger(__name__) -def seed(dry_run: bool = False) -> bool: +def seed(dry_run: bool = False, track_type_filter: str | None = None) -> bool: """Load and seed all curriculum track files. Returns True if all succeeded.""" from backend.services.chat.history import init_db @@ -34,7 +39,11 @@ def seed(dry_run: bool = False) -> bool: logger.warning("No curriculum track files found in curriculum/tracks/") return False + # Skip temporary/reference files (prefixed with _) + track_files = [p for p in track_files if not p.name.startswith("_")] + all_valid = True + seeded_count = 0 for path in track_files: logger.info("Loading %s", path.name) @@ -45,6 +54,11 @@ def seed(dry_run: bool = False) -> bool: all_valid = False continue + # Filter by track type if specified + if track_type_filter and track.track_type != track_type_filter: + logger.info("Skipping %s (type=%s, filter=%s)", track.id, track.track_type, track_type_filter) + continue + result = validate_track(track) # Print errors @@ -63,39 +77,50 @@ def seed(dry_run: bool = False) -> bool: if not result.valid: continue - # Readiness summary + # Summary total_concepts = sum(len(m.concepts) for m in track.modules) - print(f"\nValidated track '{track.id}'") + total_resources = sum(len(m.resources) for m in track.modules) + print(f"\nValidated track '{track.id}' (type={track.track_type})") print(f" Modules: {len(track.modules)}") - print(f" Concept links: {total_concepts}") - print(f" Warnings: {len(result.warnings)}") - - # Per-module readiness breakdown - from backend.services.learning.curriculum_loader import _get_conn - from backend.services.learning.curriculum_store import derive_readiness - - conn = _get_conn() - for module in track.modules: - counts: dict[str, int] = {"rich": 0, "grounded": 0, "scaffolded": 0} - for c in module.concepts: - r = derive_readiness(conn, c.concept_id) - counts[r] = counts.get(r, 0) + 1 - parts = [f"{v} {k}" for k, v in counts.items() if v > 0] - print(f" [{module.sort_order}] {module.title}: {len(module.concepts)} concepts ({', '.join(parts)})") + + if track.track_type == "concept": + print(f" Concept links: {total_concepts}") + + # Per-module readiness breakdown + from backend.services.learning.curriculum_loader import _get_conn + from backend.services.learning.curriculum_store import derive_readiness + + conn = _get_conn() + for module in track.modules: + counts: dict[str, int] = {"rich": 0, "grounded": 0, "scaffolded": 0} + for c in module.concepts: + r = derive_readiness(conn, c.concept_id) + counts[r] = counts.get(r, 0) + 1 + parts = [f"{v} {k}" for k, v in counts.items() if v > 0] + print(f" [{module.sort_order}] {module.title}: {len(module.concepts)} concepts ({', '.join(parts)})") + else: + print(f" Resources: {total_resources}") + for module in track.modules: + print(f" [{module.sort_order}] {module.title}: {len(module.resources)} resources") if dry_run: print("\n (dry run - not seeding)") else: + from backend.services.learning.curriculum_loader import _get_conn + conn = _get_conn() seed_track(track, conn) - print("\nSeeded curriculum successfully.") + seeded_count += 1 + print(" Seeded.") + print(f"\nDone. Seeded {seeded_count} tracks.") return all_valid if __name__ == "__main__": parser = argparse.ArgumentParser(description="Seed curriculum tracks from YAML files") parser.add_argument("--dry-run", action="store_true", help="Validate only, do not write to DB") + parser.add_argument("--type", choices=["concept", "resource"], default=None, help="Only seed tracks of this type") args = parser.parse_args() - success = seed(dry_run=args.dry_run) + success = seed(dry_run=args.dry_run, track_type_filter=args.type) sys.exit(0 if success else 1) diff --git a/backend/models/curriculum.py b/backend/models/curriculum.py index aa5e9d4..dc0d60b 100644 --- a/backend/models/curriculum.py +++ b/backend/models/curriculum.py @@ -10,13 +10,27 @@ class CurriculumModuleConceptFile(BaseModel): sort_order: int +class ResourceFile(BaseModel): + """A curated resource within a module (link, reference, or knowledge item).""" + + name: str + url: str | None = None + description: str = "" + detail: str | None = None + resource_type: str = "link" + sort_order: int = 0 + metadata_json: str | None = None + + class CurriculumModuleFile(BaseModel): id: str title: str objective: str - estimated_time_minutes: int + estimated_time_minutes: int = 30 sort_order: int - concepts: list[CurriculumModuleConceptFile] + color: str | None = None + concepts: list[CurriculumModuleConceptFile] = [] + resources: list[ResourceFile] = [] class CurriculumTrackFile(BaseModel): @@ -24,6 +38,7 @@ class CurriculumTrackFile(BaseModel): title: str description: str difficulty: str + track_type: str = "concept" is_published: bool = True modules: list[CurriculumModuleFile] @@ -31,6 +46,19 @@ class CurriculumTrackFile(BaseModel): # --- Runtime response models --- +class TrackResource(BaseModel): + """A curated resource attached to a track module.""" + + id: int + name: str + url: str | None = None + description: str = "" + detail: str | None = None + resource_type: str = "link" + sort_order: int = 0 + metadata_json: str | None = None + + class ConceptRef(BaseModel): """A concept referenced by a curriculum module, joined with concept metadata.""" @@ -52,7 +80,9 @@ class CurriculumModuleDetail(BaseModel): objective: str estimated_time_minutes: int sort_order: int - concepts: list[ConceptRef] + color: str | None = None + concepts: list[ConceptRef] = [] + resources: list[TrackResource] = [] class CurriculumModuleSummary(BaseModel): @@ -61,7 +91,9 @@ class CurriculumModuleSummary(BaseModel): objective: str estimated_time_minutes: int sort_order: int - concept_count: int + color: str | None = None + concept_count: int = 0 + resource_count: int = 0 class CurriculumTrackDetail(BaseModel): @@ -69,6 +101,7 @@ class CurriculumTrackDetail(BaseModel): title: str description: str difficulty: str + track_type: str = "concept" is_published: bool modules: list[CurriculumModuleSummary] @@ -78,9 +111,11 @@ class CurriculumTrackSummary(BaseModel): title: str description: str difficulty: str + track_type: str = "concept" is_published: bool module_count: int concept_count: int + resource_count: int = 0 # --- Validation results --- diff --git a/backend/services/infrastructure/db_migrations.py b/backend/services/infrastructure/db_migrations.py index d60ca2f..4af98d8 100644 --- a/backend/services/infrastructure/db_migrations.py +++ b/backend/services/infrastructure/db_migrations.py @@ -2961,6 +2961,50 @@ def _migration_083_concepts_lens_level(conn: sqlite3.Connection) -> None: ) +def _migration_084_track_resources(conn: sqlite3.Connection) -> None: + """Add track_type to tracks, color to modules, and track_resources table. + + Supports resource-oriented tracks (curated link collections) alongside + concept-oriented tracks (the existing curriculum model). + """ + # track_type on curriculum_tracks (concept vs resource) + try: + conn.execute( + "ALTER TABLE curriculum_tracks ADD COLUMN track_type TEXT NOT NULL DEFAULT 'concept'" + ) + except sqlite3.OperationalError: + pass # Column already exists + + # color on curriculum_modules (for tab coloring in resource tracks) + try: + conn.execute("ALTER TABLE curriculum_modules ADD COLUMN color TEXT") + except sqlite3.OperationalError: + pass + + # track_resources table + conn.executescript(""" + CREATE TABLE IF NOT EXISTS track_resources ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + track_id TEXT NOT NULL, + module_id TEXT NOT NULL, + name TEXT NOT NULL, + url TEXT, + description TEXT NOT NULL DEFAULT '', + detail TEXT, + resource_type TEXT NOT NULL DEFAULT 'link' + CHECK(resource_type IN ('link', 'reference', 'knowledge')), + sort_order INTEGER NOT NULL DEFAULT 0, + metadata_json TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + FOREIGN KEY (track_id) REFERENCES curriculum_tracks(id) ON DELETE CASCADE, + FOREIGN KEY (module_id, track_id) REFERENCES curriculum_modules(id, track_id) ON DELETE CASCADE + ); + + CREATE INDEX IF NOT EXISTS idx_track_resources_module + ON track_resources(track_id, module_id); + """) + + MIGRATIONS: tuple[MigrationStep, ...] = ( MigrationStep("0001", "chat_core_tables", _migration_001_chat_core), MigrationStep("0002", "messages_max_rerank_score", _migration_002_messages_max_rerank_score), @@ -3045,6 +3089,7 @@ def _migration_083_concepts_lens_level(conn: sqlite3.Connection) -> None: MigrationStep("0081", "curriculum_tables", _migration_081_curriculum_tables), MigrationStep("0082", "concept_progress_per_user", _migration_082_concept_progress_per_user), MigrationStep("0083", "concepts_lens_level", _migration_083_concepts_lens_level), + MigrationStep("0084", "track_resources", _migration_084_track_resources), ) diff --git a/backend/services/learning/curriculum_loader.py b/backend/services/learning/curriculum_loader.py index 12caf90..86b4630 100644 --- a/backend/services/learning/curriculum_loader.py +++ b/backend/services/learning/curriculum_loader.py @@ -2,9 +2,12 @@ Loads YAML track files from curriculum/tracks/, validates against the canonical concept registry and dossier layer, and upserts into -curriculum_tracks / curriculum_modules / curriculum_module_concepts tables. +curriculum_tracks / curriculum_modules / curriculum_module_concepts / +track_resources tables. -Curriculum contains NO knowledge content. It is a thin ordering layer. +Two track types: + - concept: thin ordering layer over canonical concepts (validated against DB) + - resource: curated link/reference collections (no concept validation) """ import difflib @@ -45,6 +48,7 @@ def validate_track( ) -> ValidationResult: """Validate a curriculum track against the canonical concept registry. + For resource tracks (track_type='resource'), concept validation is skipped. Returns a ValidationResult with blocking errors and non-blocking warnings. """ if conn is None: @@ -65,12 +69,6 @@ def validate_track( # Module-level checks seen_module_ids: set[str] = set() seen_module_sort_orders: set[int] = set() - all_concept_ids_in_track: dict[str, list[str]] = {} # concept_id -> [module_ids] - - # Pre-fetch all canonical concept IDs for fuzzy matching - all_canonical_ids = [ - r["id"] for r in conn.execute("SELECT id FROM concepts").fetchall() - ] for module in track.modules: # Duplicate module id @@ -94,6 +92,27 @@ def validate_track( message=f"Module '{module.id}' title is missing", field=f"modules[{module.id}].title", )) + + # Resource tracks skip concept validation entirely + if track.track_type == "resource": + # Validate resources instead + for module in track.modules: + if not module.resources and not module.concepts: + warnings.append(ValidationWarning( + message=f"Module '{module.id}' has no resources or concepts", + field=f"modules[{module.id}]", + )) + return ValidationResult(valid=len(errors) == 0, errors=errors, warnings=warnings) + + # --- Concept track validation (existing logic) --- + all_concept_ids_in_track: dict[str, list[str]] = {} + + # Pre-fetch all canonical concept IDs for fuzzy matching + all_canonical_ids = [ + r["id"] for r in conn.execute("SELECT id FROM concepts").fetchall() + ] + + for module in track.modules: if not module.objective: errors.append(ValidationError( message=f"Module '{module.id}' objective is missing", @@ -199,25 +218,31 @@ def seed_track(track: CurriculumTrackFile, conn: sqlite3.Connection | None = Non if conn is None: conn = _get_conn() - # Delete existing track data (CASCADE handles modules + concepts) + # Ensure FK cascade works + conn.execute("PRAGMA foreign_keys = ON") + + # Delete existing track data (CASCADE handles modules + concepts + resources) conn.execute("DELETE FROM curriculum_tracks WHERE id = ?", (track.id,)) # Insert track conn.execute( - """INSERT INTO curriculum_tracks (id, title, description, difficulty, sort_order, is_published) - VALUES (?, ?, ?, ?, ?, ?)""", - (track.id, track.title, track.description.strip(), track.difficulty, 0, int(track.is_published)), + """INSERT INTO curriculum_tracks (id, title, description, difficulty, track_type, sort_order, is_published) + VALUES (?, ?, ?, ?, ?, ?, ?)""", + (track.id, track.title, track.description.strip(), track.difficulty, + track.track_type, 0, int(track.is_published)), ) - # Insert modules and concept links + # Insert modules, concept links, and resources for module in track.modules: conn.execute( """INSERT INTO curriculum_modules - (id, track_id, title, objective, estimated_time_minutes, sort_order) - VALUES (?, ?, ?, ?, ?, ?)""", + (id, track_id, title, objective, estimated_time_minutes, sort_order, color) + VALUES (?, ?, ?, ?, ?, ?, ?)""", (module.id, track.id, module.title, module.objective.strip(), - module.estimated_time_minutes, module.sort_order), + module.estimated_time_minutes, module.sort_order, module.color), ) + + # Concept links (for concept tracks) for concept_ref in module.concepts: conn.execute( """INSERT INTO curriculum_module_concepts @@ -226,8 +251,25 @@ def seed_track(track: CurriculumTrackFile, conn: sqlite3.Connection | None = Non (module.id, track.id, concept_ref.concept_id, concept_ref.sort_order), ) + # Resources (for resource tracks) + for resource in module.resources: + conn.execute( + """INSERT INTO track_resources + (track_id, module_id, name, url, description, detail, + resource_type, sort_order, metadata_json) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""", + (track.id, module.id, resource.name, resource.url, + resource.description, resource.detail, resource.resource_type, + resource.sort_order, resource.metadata_json), + ) + conn.commit() - logger.info("Seeded track '%s' with %d modules", track.id, len(track.modules)) + resource_count = sum(len(m.resources) for m in track.modules) + concept_count = sum(len(m.concepts) for m in track.modules) + logger.info( + "Seeded track '%s' (%s) with %d modules, %d concepts, %d resources", + track.id, track.track_type, len(track.modules), concept_count, resource_count, + ) def load_all_tracks() -> list[Path]: diff --git a/backend/services/learning/curriculum_store.py b/backend/services/learning/curriculum_store.py index 52b0082..44c137f 100644 --- a/backend/services/learning/curriculum_store.py +++ b/backend/services/learning/curriculum_store.py @@ -82,16 +82,19 @@ def _concept_readiness(conn: sqlite3.Connection, concept_id: str) -> tuple[str, def list_tracks(published_only: bool = True) -> list[dict]: - """List all curriculum tracks with module/concept counts.""" + """List all curriculum tracks with module/concept/resource counts.""" conn = _get_conn() where = "WHERE t.is_published = 1" if published_only else "" rows = conn.execute(f""" - SELECT t.id, t.title, t.description, t.difficulty, t.is_published, + SELECT t.id, t.title, t.description, t.difficulty, t.track_type, + t.is_published, COUNT(DISTINCT m.id) as module_count, - COUNT(DISTINCT mc.concept_id) as concept_count + COUNT(DISTINCT mc.concept_id) as concept_count, + COUNT(DISTINCT tr.id) as resource_count FROM curriculum_tracks t LEFT JOIN curriculum_modules m ON m.track_id = t.id LEFT JOIN curriculum_module_concepts mc ON mc.track_id = t.id AND mc.module_id = m.id + LEFT JOIN track_resources tr ON tr.track_id = t.id AND tr.module_id = m.id {where} GROUP BY t.id ORDER BY t.sort_order, t.title @@ -100,7 +103,7 @@ def list_tracks(published_only: bool = True) -> list[dict]: def get_track(track_id: str) -> dict | None: - """Get a track with its modules (summary, no concept details).""" + """Get a track with its modules (summary, no concept/resource details).""" conn = _get_conn() track_row = conn.execute( "SELECT * FROM curriculum_tracks WHERE id = ?", (track_id,) @@ -109,10 +112,13 @@ def get_track(track_id: str) -> dict | None: return None module_rows = conn.execute( - """SELECT m.id, m.title, m.objective, m.estimated_time_minutes, m.sort_order, - COUNT(mc.concept_id) as concept_count + """SELECT m.id, m.title, m.objective, m.estimated_time_minutes, + m.sort_order, m.color, + COUNT(DISTINCT mc.concept_id) as concept_count, + COUNT(DISTINCT tr.id) as resource_count FROM curriculum_modules m LEFT JOIN curriculum_module_concepts mc ON mc.module_id = m.id AND mc.track_id = m.track_id + LEFT JOIN track_resources tr ON tr.module_id = m.id AND tr.track_id = m.track_id WHERE m.track_id = ? GROUP BY m.id ORDER BY m.sort_order""", @@ -124,6 +130,7 @@ def get_track(track_id: str) -> dict | None: "title": track_row["title"], "description": track_row["description"], "difficulty": track_row["difficulty"], + "track_type": track_row["track_type"], "is_published": bool(track_row["is_published"]), "modules": [dict(r) for r in module_rows], } @@ -158,6 +165,16 @@ def get_module(track_id: str, module_id: str) -> dict | None: "is_required": bool(cr["is_required"]), }) + # Resources for this module + resource_rows = conn.execute( + """SELECT id, name, url, description, detail, resource_type, + sort_order, metadata_json + FROM track_resources + WHERE track_id = ? AND module_id = ? + ORDER BY sort_order""", + (track_id, module_id), + ).fetchall() + return { "id": module_row["id"], "track_id": module_row["track_id"], @@ -165,10 +182,43 @@ def get_module(track_id: str, module_id: str) -> dict | None: "objective": module_row["objective"], "estimated_time_minutes": module_row["estimated_time_minutes"], "sort_order": module_row["sort_order"], + "color": module_row["color"], "concepts": concepts, + "resources": [dict(r) for r in resource_rows], } +def list_module_resources(track_id: str, module_id: str) -> list[dict]: + """List all resources for a specific module.""" + conn = _get_conn() + rows = conn.execute( + """SELECT id, name, url, description, detail, resource_type, + sort_order, metadata_json + FROM track_resources + WHERE track_id = ? AND module_id = ? + ORDER BY sort_order""", + (track_id, module_id), + ).fetchall() + return [dict(r) for r in rows] + + +def list_track_resources(track_id: str) -> list[dict]: + """List all resources for a track, grouped by module.""" + conn = _get_conn() + rows = conn.execute( + """SELECT tr.id, tr.module_id, tr.name, tr.url, tr.description, + tr.detail, tr.resource_type, tr.sort_order, tr.metadata_json, + m.title as module_title, m.sort_order as module_sort_order, + m.color as module_color + FROM track_resources tr + JOIN curriculum_modules m ON m.id = tr.module_id AND m.track_id = tr.track_id + WHERE tr.track_id = ? + ORDER BY m.sort_order, tr.sort_order""", + (track_id,), + ).fetchall() + return [dict(r) for r in rows] + + def update_concept_progress( concept_id: str, status: str, diff --git a/curriculum/tracks/_prep-displaced.yaml b/curriculum/tracks/_prep-displaced.yaml new file mode 100644 index 0000000..ba40dbe --- /dev/null +++ b/curriculum/tracks/_prep-displaced.yaml @@ -0,0 +1,395 @@ +# Displaced resources from Interview Prep (PrepView.tsx) +# These tabs are moving to other tracks. Copy-paste into the target track files. +# Generated 2026-03-16. + +# ============================================================================ +# sql → Dev Reference +# ============================================================================ +- id: sql + title: SQL Prep + objective: > + Get fast at SQL - pattern drills, timed exercises, and interview-style practice. + color: "#ffc47c" + target_track: dev-reference + resources: + - name: StrataScratch + url: https://www.stratascratch.com + description: Company-tagged SQL interview questions and data projects. + detail: Use as your primary timed SQL practice bank. + sort_order: 1 + - name: HelloInterview + url: https://www.hellointerview.com + description: Interview prep plans and guided data interview workflows. + detail: Use for framing, debriefing, and role-specific drill plans. + sort_order: 2 + - name: DesignGurus + url: https://www.designgurus.io + description: SQL patterns, database concepts, and interview strategy courses. + detail: Use for conceptual refresh before timed SQL sessions. + sort_order: 3 + - name: Interviewing.io + url: https://interviewing.io + description: Live interviewer feedback on SQL and analytics communication. + detail: Use to simulate back-and-forth SQL rounds. + sort_order: 4 + +# ============================================================================ +# docker → Dev Reference +# ============================================================================ +- id: docker + title: Docker + objective: > + Know Docker well enough to answer any interview question on it. + color: "#5e6ad2" + target_track: dev-reference + resources: + - name: Docker Official Docs + url: https://docs.docker.com/get-started/ + description: Authoritative reference for Docker concepts, CLI, and Compose. + detail: Use as the primary lookup for commands, Dockerfile syntax, and networking. + sort_order: 1 + - name: Docker Deep Dive (Nigel Poulton) + url: https://www.amazon.com/Docker-Deep-Dive-Nigel-Poulton/dp/1916585256 + description: Concept-to-production Docker book - images, containers, networking, volumes, security. + detail: Use for structured learning and interview scenario prep. + sort_order: 2 + - name: Dockerfile Best Practices + url: https://docs.docker.com/build/building/best-practices/ + description: Official guide to writing efficient, secure, and cacheable Dockerfiles. + detail: Use to drill multi-stage builds, layer ordering, and security hardening. + sort_order: 3 + - name: Play with Docker + url: https://labs.play-with-docker.com + description: Browser-based Docker playground for hands-on practice. + detail: Use for quick experimentation without local setup. + sort_order: 4 + +# ============================================================================ +# kubernetes → Dev Reference +# ============================================================================ +- id: kubernetes + title: Kubernetes + objective: > + Understand Kubernetes deeply enough to design and troubleshoot in an interview. + color: "#f472b6" + target_track: dev-reference + resources: + - name: Kubernetes Official Docs + url: https://kubernetes.io/docs/home/ + description: Authoritative reference for all K8s concepts, APIs, and operations. + detail: Use as the primary lookup - concepts, tasks, API reference. + sort_order: 1 + - name: Kubernetes Up & Running (Hightower, Burns, Beda) + url: https://www.amazon.com/Kubernetes-Running-Dive-Future-Infrastructure/dp/109811020X + description: The definitive K8s book - architecture, workloads, services, deployments. + detail: Use for structured concept building before interview prep. + sort_order: 2 + - name: KillerCoda / Killershell + url: https://killercoda.com + description: Interactive K8s scenarios and CKA/CKAD exam simulators. + detail: Use for hands-on cluster practice and timed kubectl drills. + sort_order: 3 + - name: Learnk8s + url: https://learnk8s.io + description: Visual guides, architecture deep dives, and production patterns. + detail: Use for the visual explainers on networking, scheduling, and scaling. + sort_order: 4 + - name: CKAD Exercises (dgkanatsios) + url: https://github.com/dgkanatsios/CKAD-exercises + description: Curated kubectl exercises mapped to CKAD exam domains. + detail: Use for daily CLI drill reps - pods, services, configmaps, RBAC. + sort_order: 5 + +# ============================================================================ +# nlp → AI Engineering +# ============================================================================ +- id: nlp + title: NLP + objective: > + Prepare for ML/NLP interviews - transformers, attention, and the topics that come up most. + color: "#eb5757" + target_track: ai-engineering + resources: + - name: Speech and Language Processing (Jurafsky & Martin) + url: https://web.stanford.edu/~jurafsky/slp3/ + description: Comprehensive NLP textbook - free online draft covering classical and neural methods. + detail: Use as the theory backbone - tokenization, parsing, semantics, transformers. + sort_order: 1 + - name: Hugging Face NLP Course + url: https://huggingface.co/learn/nlp-course + description: Hands-on transformer pipelines, fine-tuning, and tokenizer internals. + detail: Use for practical coding reps with real models and datasets. + sort_order: 2 + - name: The Illustrated Transformer (Jay Alammar) + url: https://jalammar.github.io/illustrated-transformer/ + description: Visual, intuitive explanation of attention and transformer architecture. + detail: Use before interviews to refresh self-attention, multi-head, positional encoding. + sort_order: 3 + - name: Papers With Code - NLP + url: https://paperswithcode.com/area/natural-language-processing + description: State-of-the-art benchmarks and papers across all NLP tasks. + detail: Use to stay current on which methods top leaderboards and why. + sort_order: 4 + - name: Stanford CS224N + url: https://web.stanford.edu/class/cs224n/ + description: Deep learning for NLP - lecture videos, assignments, and slides. + detail: Use for structured learning - word vectors, RNNs, attention, pretraining. + sort_order: 5 + +# ============================================================================ +# physical_ai → Embodied AI +# ============================================================================ +- id: physical_ai + title: Physical AI + objective: > + Prep for the next wave of AI roles - world models, sim-to-real, 3D vision, and physical AI. + color: "#ffc47c" + target_track: embodied-ai + resources: + - name: NVIDIA Physical AI + url: https://developer.nvidia.com/physical-ai + description: NVIDIA's physical AI platform - Isaac Sim, Cosmos, and the full sim-to-real stack. + detail: Study the end-to-end pipeline from simulation to real-world robot deployment. + sort_order: 1 + - name: World Labs + url: https://www.worldlabs.ai + description: Fei-Fei Li's spatial intelligence company building large world models. + detail: Track the spatial AI thesis and job openings in this space. + sort_order: 2 + - name: Figure AI Careers + url: https://www.figure.ai/careers + description: Humanoid robotics company hiring for world model, perception, and control roles. + detail: Study their job descriptions to understand the skill requirements for physical AI roles. + sort_order: 3 + - name: Physical Intelligence (pi) + url: https://www.physicalintelligence.company + description: General-purpose robot foundation models. Raised $400M+. + detail: Track the company building the GPT moment for robotics. + sort_order: 4 + - name: 1X Technologies + url: https://www.1x.tech + description: NEO humanoid built with learned neural network policies. + detail: Study the consumer humanoid thesis and their ML-first approach. + sort_order: 5 + +# ============================================================================ +# distributed_systems → Applied Systems +# ============================================================================ +- id: distributed_systems + title: Distributed Systems + objective: > + Master distributed systems fundamentals - CAP, consensus, and fault tolerance for interviews. + color: "#5bb86e" + target_track: applied-systems + resources: + - name: Designing Data-Intensive Applications + url: https://dataintensive.net + description: The bible of distributed systems - replication, partitioning, consistency, and consensus. + detail: Read chapters 5-9 thoroughly - this is the most tested material in system design interviews. + sort_order: 1 + - name: MIT 6.824 (Distributed Systems) + url: https://pdos.csail.mit.edu/6.824/ + description: Graduate-level course with labs on MapReduce, Raft, and fault-tolerant key-value stores. + detail: Work through the Raft lab at minimum - it's the gold standard for understanding consensus. + sort_order: 2 + - name: Jepsen + url: https://jepsen.io + description: Kyle Kingsbury's distributed systems correctness testing - real failure analysis of production databases. + detail: Read 2-3 analyses (e.g., Redis, MongoDB, CockroachDB) to see how real systems fail. + sort_order: 3 + - name: Fly.io Distributed Systems Challenges (Gossip Glomers) + url: https://fly.io/dist-sys/ + description: Hands-on challenges - broadcast, grow-only counters, Kafka-style logs, and total-order broadcast. + detail: Practice implementing distributed protocols. Work through all 6 challenges. + sort_order: 4 + - name: Martin Kleppmann's Blog + url: https://martin.kleppmann.com + description: Deep dives on CRDTs, distributed transactions, and consistency models from the DDIA author. + detail: Follow for precise technical writing on distributed systems edge cases. + sort_order: 5 + +# ============================================================================ +# deep_learning → ML Foundations (skip for now) +# ============================================================================ +- id: deep_learning + title: Deep Learning + objective: > + Know your architectures cold - CNNs, RNNs, transformers, attention, and training dynamics. + color: "#eb5757" + target_track: ml-foundations + resources: + - name: d2l.ai + url: https://d2l.ai + description: Interactive deep learning textbook with PyTorch, TensorFlow, and JAX. + detail: Best free textbook. Work through attention and transformer chapters. + sort_order: 1 + - name: Fast.ai + url: https://course.fast.ai + description: Practical deep learning for coders - top-down learning approach. + detail: Great for building intuition before diving into theory. + sort_order: 2 + - name: 3Blue1Brown Neural Networks + url: https://www.3blue1brown.com/topics/neural-networks + description: Visual explanations of backpropagation, gradient descent, and transformers. + detail: Watch before interviews to refresh geometric intuition. + sort_order: 3 + - name: The Illustrated Transformer + url: https://jalammar.github.io/illustrated-transformer/ + description: Step-by-step visual walkthrough of the transformer architecture. + detail: Go-to reference for explaining attention in interviews. + sort_order: 4 + +# ============================================================================ +# machine_learning → ML Foundations (skip for now) +# ============================================================================ +- id: machine_learning + title: Machine Learning + objective: > + Nail the fundamentals - bias-variance, regularization, feature engineering, and model selection. + color: "#5e6ad2" + target_track: ml-foundations + resources: + - name: StatQuest + url: https://statquest.org + description: Visual, intuitive explanations of ML algorithms and statistics. + detail: Watch before interviews to refresh fundamentals. + sort_order: 1 + - name: Scikit-Learn User Guide + url: https://scikit-learn.org/stable/user_guide.html + description: Practical ML algorithms with clear mathematical foundations. + detail: Reference for classical ML algorithm details and trade-offs. + sort_order: 2 + - name: ML Interview Prep (Chip Huyen) + url: https://huyenchip.com/ml-interviews-book/ + description: Comprehensive ML interview question bank from a Stanford instructor. + detail: Work through one chapter per week during active prep. + sort_order: 3 + - name: Made With ML + url: https://madewithml.com + description: End-to-end ML systems with production-grade patterns. + detail: Great for system design angle of ML interviews. + sort_order: 4 + +# ============================================================================ +# data_engineering → Applied Systems +# ============================================================================ +- id: data_engineering + title: Data Engineering + objective: > + Design pipelines that don't break - ETL patterns, data quality, medallion architecture, and orchestration. + color: "#f472b6" + target_track: applied-systems + resources: + - name: Fundamentals of Data Engineering (Reis & Housley) + url: https://www.oreilly.com/library/view/fundamentals-of-data/9781098108298/ + description: The canonical data engineering textbook - lifecycle, architecture, and trade-offs. + detail: Read chapters on storage, ingestion, and orchestration before interviews. + sort_order: 1 + - name: DataEngineer.io + url: https://dataengineer.io + description: Curated data engineering learning paths and interview prep. + detail: Use for structured prep when targeting DE roles. + sort_order: 2 + - name: Start Data Engineering + url: https://www.startdataengineering.com + description: Hands-on DE projects with real architectures. + detail: Build portfolio projects that demonstrate pipeline design. + sort_order: 3 + - name: Seattle Data Guy + url: https://www.youtube.com/@SeattleDataGuy + description: Data engineering career advice and system design walkthroughs. + detail: Great for understanding what companies actually look for. + sort_order: 4 + +# ============================================================================ +# mlops → Applied Systems +# ============================================================================ +- id: mlops + title: MLOps / LLMOps + objective: > + Ship models to production - experiment tracking, CI/CD for ML, monitoring, and cost optimization. + color: "#4ade80" + target_track: applied-systems + resources: + - name: MLOps Community + url: https://mlops.community + description: Community-driven MLOps knowledge base, podcasts, and meetups. + detail: Stay current on production ML patterns and tooling. + sort_order: 1 + - name: Full Stack Deep Learning + url: https://fullstackdeeplearning.com + description: End-to-end ML project lifecycle from data to deployment. + detail: Best course for ML systems design interview prep. + sort_order: 2 + - name: Evidently AI Blog + url: https://www.evidentlyai.com/blog + description: ML monitoring, data drift detection, and model quality tracking. + detail: Reference for monitoring and observability patterns. + sort_order: 3 + - name: Chip Huyen - Designing ML Systems + url: https://www.oreilly.com/library/view/designing-machine-learning/9781098107956/ + description: Production ML systems - data pipelines, deployment, monitoring. + detail: The canonical ML systems design book for interviews. + sort_order: 4 + +# ============================================================================ +# rag → AI Engineering +# ============================================================================ +- id: rag + title: RAG + objective: > + Build retrieval systems that actually work - chunking, embeddings, hybrid search, and reranking. + color: "#55cdff" + target_track: ai-engineering + resources: + - name: Anthropic Contextual Retrieval + url: https://www.anthropic.com/news/contextual-retrieval + description: Anthropic's technique for chunk-level context enrichment in RAG. + detail: Core reference for modern RAG architecture patterns. + sort_order: 1 + - name: LlamaIndex + url: https://docs.llamaindex.ai + description: RAG framework with indexing, retrieval, and response synthesis. + detail: Study the architecture for understanding RAG pipeline components. + sort_order: 2 + - name: Pinecone Learning Center + url: https://www.pinecone.io/learn/ + description: Vector search fundamentals, embedding models, and RAG patterns. + detail: Good visual explanations of similarity search and indexing. + sort_order: 3 + - name: RAGAS + url: https://docs.ragas.io + description: RAG evaluation framework - faithfulness, relevance, and context metrics. + detail: Essential for discussing how to evaluate RAG quality in interviews. + sort_order: 4 + +# ============================================================================ +# event_driven → Applied Systems +# ============================================================================ +- id: event_driven + title: Event-Driven Architecture + objective: > + Design reactive systems - pub/sub, CQRS, CDC, event sourcing, and async communication patterns. + color: "#ffc47c" + target_track: applied-systems + resources: + - name: Designing Event-Driven Systems (Confluent) + url: https://www.confluent.io/designing-event-driven-systems/ + description: Free book on event-driven architecture with Kafka patterns. + detail: Read chapters on event sourcing and CQRS before system design interviews. + sort_order: 1 + - name: Martin Fowler - Event-Driven + url: https://martinfowler.com/articles/201701-event-driven.html + description: Foundational article distinguishing event notification, state transfer, and sourcing. + detail: Know the four patterns and when to use each. + sort_order: 2 + - name: Enterprise Integration Patterns + url: https://www.enterpriseintegrationpatterns.com + description: Canonical messaging patterns - routers, transformers, and channels. + detail: Reference for message routing and integration design questions. + sort_order: 3 + - name: Kafka - The Definitive Guide + url: https://www.confluent.io/resources/kafka-the-definitive-guide-v2/ + description: Deep dive into Kafka internals, partitioning, and consumer groups. + detail: Essential if interviewing at companies using Kafka. + sort_order: 4 diff --git a/curriculum/tracks/ai-engineering.yaml b/curriculum/tracks/ai-engineering.yaml new file mode 100644 index 0000000..efd351a --- /dev/null +++ b/curriculum/tracks/ai-engineering.yaml @@ -0,0 +1,407 @@ +id: ai-engineering +title: AI Engineering +description: > + Build production AI systems - from inference to agents to evals. +difficulty: intermediate +track_type: resource + +modules: + - id: inference + title: Inference Infrastructure + objective: > + Learn how to serve models fast and cheap - from quantization to speculative decoding. + color: "#55cdff" + sort_order: 1 + resources: + - name: vLLM + url: https://github.com/vllm-project/vllm + description: > + High-throughput LLM serving with PagedAttention, continuous batching, and speculative decoding. + detail: > + The default choice for self-hosted inference. Study PagedAttention for memory-efficient KV-cache management. + sort_order: 1 + - name: NVIDIA TensorRT-LLM + url: https://github.com/NVIDIA/TensorRT-LLM + description: > + NVIDIA's optimized inference library with FP8 quantization, in-flight batching, and multi-GPU tensor parallelism. + detail: > + Best raw performance on NVIDIA hardware. Compare latency/throughput vs vLLM for production decisions. + sort_order: 2 + - name: SGLang + url: https://github.com/sgl-project/sglang + description: > + Fast structured generation with RadixAttention for prefix caching and constrained decoding. + detail: > + Study RadixAttention for KV-cache sharing across requests. Ideal for JSON/schema-constrained output. + sort_order: 3 + - name: llama.cpp + url: https://github.com/ggerganov/llama.cpp + description: > + CPU and mixed CPU/GPU inference with GGUF quantization formats. Runs LLMs on consumer hardware. + detail: > + Essential for edge/local deployment. Understand quantization levels (Q4_K_M, Q5_K_S) and their accuracy tradeoffs. + sort_order: 4 + - name: Ollama + url: https://ollama.com + description: > + Developer-friendly local LLM runner wrapping llama.cpp with Docker-like model management. + detail: > + Fast prototyping tool. Use for local dev loops, then graduate to vLLM/TensorRT-LLM for production. + sort_order: 5 + - name: Hugging Face TGI + url: https://github.com/huggingface/text-generation-inference + description: > + Production-ready inference server with flash attention, quantization, and watermarking support. + detail: > + Good middle ground between ease-of-use and performance. Native HF model hub integration. + sort_order: 6 + + - id: agents + title: Agent Architecture + objective: > + Build agents that actually work - tool use, memory, planning, and multi-agent patterns. + color: "#ffc47c" + sort_order: 2 + resources: + - name: LangGraph + url: https://github.com/langchain-ai/langgraph + description: > + Graph-based agent orchestration with cycles, persistence, and human-in-the-loop patterns. + detail: > + The most mature agent framework. Study the state machine pattern for reliable multi-step workflows. + sort_order: 1 + - name: CrewAI + url: https://github.com/crewAIInc/crewAI + description: > + Multi-agent framework with role-based agents, task delegation, and sequential/parallel execution. + detail: > + Good for rapid prototyping of multi-agent systems. Compare the role-play pattern vs LangGraph's graph approach. + sort_order: 2 + - name: AutoGen (Microsoft) + url: https://github.com/microsoft/autogen + description: > + Multi-agent conversation framework with customizable agents, code execution, and group chat patterns. + detail: > + Study the conversational agent pattern and how it handles tool use, code generation, and verification. + sort_order: 3 + - name: Anthropic Claude Tool Use + url: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview + description: > + Native function calling with structured outputs, parallel tool use, and streaming tool results. + detail: > + Master the tool-use protocol: schema definition, forced tool calls, and error handling patterns. + sort_order: 4 + - name: OpenAI Agents SDK + url: https://github.com/openai/openai-agents-python + description: > + Official agent framework with handoffs, guardrails, tracing, and multi-agent orchestration. + detail: > + Study the handoff pattern for agent-to-agent delegation and the built-in tracing for debugging. + sort_order: 5 + - name: Pydantic AI + url: https://ai.pydantic.dev + description: > + Type-safe agent framework with structured outputs, dependency injection, and model-agnostic design. + detail: > + Best for Python-heavy teams wanting type safety. The structured output + validation pattern is production-grade. + sort_order: 6 + + - id: evals + title: Evals & Observability + objective: > + Know when your LLM system is broken before your users do. + color: "#5bb86e" + sort_order: 3 + resources: + - name: Braintrust + url: https://www.braintrust.dev + description: > + End-to-end LLM eval platform with scoring, experiments, datasets, and production logging. + detail: > + Study the eval-driven development loop: define metrics, run experiments, compare prompts/models systematically. + sort_order: 1 + - name: LangSmith + url: https://smith.langchain.com + description: > + Tracing, evaluation, and monitoring platform for LLM applications with dataset management. + detail: > + Use for tracing complex chains/agents. The trace visualization is invaluable for debugging multi-step flows. + sort_order: 2 + - name: Arize Phoenix + url: https://github.com/Arize-ai/phoenix + description: > + Open-source LLM observability with tracing, evals, embeddings analysis, and retrieval diagnostics. + detail: > + Best open-source option. Study the embedding drift detection and retrieval quality metrics. + sort_order: 3 + - name: RAGAS + url: https://github.com/explodinggradients/ragas + description: > + RAG evaluation framework measuring faithfulness, answer relevancy, context precision, and recall. + detail: > + Essential for any RAG system. Implement the four core metrics as CI gates for retrieval quality. + sort_order: 4 + - name: Guardrails AI + url: https://github.com/guardrails-ai/guardrails + description: > + Input/output validation framework with validators for PII, toxicity, hallucination, and schema compliance. + detail: > + Production safety layer. Study the validator composability and how to build custom domain validators. + sort_order: 5 + - name: Promptfoo + url: https://github.com/promptfoo/promptfoo + description: > + CLI-first eval tool for testing prompts against datasets with assertions and model comparison. + detail: > + Fast iteration tool for prompt engineering. Run prompt A/B tests before deploying changes. + sort_order: 6 + + - id: retrieval + title: RAG & Retrieval + objective: > + Ground your LLM in real data - chunking, retrieval, reranking, and citations that work. + color: "#eb5757" + sort_order: 4 + resources: + - name: LlamaIndex + url: https://github.com/run-llama/llama_index + description: > + Data framework for LLM apps with advanced indexing, retrieval, and query engine abstractions. + detail: > + The most complete RAG toolkit. Study the node parser, retriever, and response synthesizer abstractions. + sort_order: 1 + - name: Pinecone + url: https://www.pinecone.io + description: > + Managed vector database with hybrid search, metadata filtering, and serverless scaling. + detail: > + Production vector DB for teams that want zero ops. Compare cost/latency vs self-hosted alternatives. + sort_order: 2 + - name: Weaviate + url: https://weaviate.io + description: > + Open-source vector database with hybrid search, multi-tenancy, and built-in vectorization modules. + detail: > + Best open-source option for hybrid (vector + keyword) search. Study the GraphQL API and module system. + sort_order: 3 + - name: Cohere Rerank + url: https://cohere.com/rerank + description: > + Cross-encoder reranking model that dramatically improves retrieval precision over bi-encoder search. + detail: > + Always add a reranking step. The lift from retrieve-then-rerank vs retrieve-only is significant. + sort_order: 4 + - name: Unstructured.io + url: https://github.com/Unstructured-IO/unstructured + description: > + Document parsing and chunking for PDFs, HTML, images, and office files with layout-aware extraction. + detail: > + The ingestion layer most RAG tutorials skip. Study table extraction, section detection, and chunk boundary quality. + sort_order: 5 + - name: ColBERT / RAGatouille + url: https://github.com/bclavie/RAGatouille + description: > + Late-interaction retrieval with token-level matching. Better than dense retrieval for domain-specific queries. + detail: > + Study the late-interaction pattern: why per-token matching outperforms single-vector similarity in many domains. + sort_order: 6 + + - id: memory + title: Memory & Personalization + objective: > + Give your AI a memory that persists across sessions and scales with usage. + color: "#5e6ad2" + sort_order: 5 + resources: + - name: Mem0 + url: https://github.com/mem0ai/mem0 + description: > + Memory layer for AI apps with automatic extraction, deduplication, and conflict resolution across conversations. + detail: > + Study the memory extraction pipeline: how raw conversations become structured, queryable memory entries. + sort_order: 1 + - name: Letta (MemGPT) + url: https://github.com/letta-ai/letta + description: > + Stateful agents with tiered memory (core/archival/recall) and self-editing memory management. + detail: > + The canonical reference for LLM self-managed memory. Study the virtual context window and memory paging. + sort_order: 2 + - name: Zep + url: https://github.com/getzep/zep + description: > + Memory server with auto-summarization, entity extraction, temporal awareness, and hybrid search. + detail: > + Good for chat applications needing conversation history compression and entity tracking. + sort_order: 3 + - name: LangMem (LangChain) + url: https://github.com/langchain-ai/langmem + description: > + Memory management for LangGraph agents with semantic memory extraction and consolidation. + detail: > + Study the memory formation patterns: how agents decide what to remember and what to forget. + sort_order: 4 + - name: Cognee + url: https://github.com/topoteretes/cognee + description: > + Knowledge graph memory with ECL pipelines for building structured memory from unstructured data. + detail: > + Study the graph-based memory approach: entities + relations vs flat vector stores for memory retrieval. + sort_order: 5 + - name: OpenAI Memory Research + url: https://openai.com/index/memory-and-new-controls-for-chatgpt/ + description: > + Production memory system in ChatGPT: what it remembers, user controls, and privacy considerations. + detail: > + Study the UX patterns: how to surface memory to users without being creepy or overwhelming. + sort_order: 6 + + - id: fine_tuning + title: Fine-Tuning & Alignment + objective: > + Make a foundation model yours - LoRA, RLHF, and alignment without breaking the bank. + color: "#f472b6" + sort_order: 6 + resources: + - name: Hugging Face PEFT + url: https://github.com/huggingface/peft + description: > + Parameter-efficient fine-tuning with LoRA, QLoRA, prefix tuning, and adapter methods. + detail: > + Start here for any fine-tuning task. LoRA + 4-bit quantization (QLoRA) runs on a single consumer GPU. + sort_order: 1 + - name: Axolotl + url: https://github.com/axolotl-ai-cloud/axolotl + description: > + Streamlined fine-tuning toolkit with YAML configs for LoRA, full fine-tune, DPO, and multi-GPU training. + detail: > + Best developer experience for fine-tuning. One YAML config covers model, dataset, and training params. + sort_order: 2 + - name: Unsloth + url: https://github.com/unslothai/unsloth + description: > + 2-5x faster fine-tuning with 70% less memory via custom CUDA kernels and optimized backpropagation. + detail: > + Drop-in speedup for QLoRA training. Study the memory optimizations to understand the efficiency gains. + sort_order: 3 + - name: TRL (Transformer Reinforcement Learning) + url: https://github.com/huggingface/trl + description: > + RLHF, DPO, PPO, and reward modeling library from Hugging Face for alignment training. + detail: > + The standard library for alignment. Study DPO vs PPO: when direct preference optimization beats full RLHF. + sort_order: 4 + - name: OpenAI Fine-Tuning + url: https://platform.openai.com/docs/guides/fine-tuning + description: > + API-based fine-tuning for GPT-4o and GPT-4o-mini with automatic hyperparameter selection. + detail: > + Easiest path to fine-tuning. Compare API fine-tuning cost/quality vs self-hosted LoRA on open models. + sort_order: 5 + - name: Anthropic Constitutional AI + url: https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback + description: > + Self-supervised alignment where the model critiques and revises its own outputs against principles. + detail: > + Study the principle-based alignment approach: how to define behavioral constraints without human labeling. + sort_order: 6 + + - id: multimodal + title: Multimodal Systems + objective: > + Go beyond text - images, audio, video, and cross-modal reasoning in one system. + color: "#4ade80" + sort_order: 7 + resources: + - name: GPT-4o + url: https://openai.com/index/hello-gpt-4o/ + description: > + Natively multimodal model processing text, images, and audio in a unified architecture. + detail: > + The production standard for multimodal. Study how unified tokenization enables cross-modal reasoning. + sort_order: 1 + - name: Google Gemini + url: https://deepmind.google/technologies/gemini/ + description: > + Natively multimodal with long-context (1M+ tokens), video understanding, and code generation. + detail: > + Study the long-context multimodal pattern: processing entire videos and documents in a single call. + sort_order: 2 + - name: LLaVA + url: https://llava-vl.github.io + description: > + Open-source vision-language model connecting CLIP visual encoder to LLaMA language model. + detail: > + The reference architecture for open VLMs. Study the visual instruction tuning dataset and training pipeline. + sort_order: 3 + - name: OpenAI Whisper + url: https://github.com/openai/whisper + description: > + Robust speech recognition across languages, accents, and noise conditions with zero-shot generalization. + detail: > + Production-grade ASR. Study the encoder-decoder architecture and how it handles multilingual transcription. + sort_order: 4 + - name: Twelve Labs + url: https://www.twelvelabs.io + description: > + Video understanding API with temporal search, summarization, and generation from video content. + detail: > + Study how video embeddings differ from image embeddings: temporal awareness and action recognition. + sort_order: 5 + - name: Pixtral / Qwen-VL + url: https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct + description: > + Open-weight vision-language models approaching GPT-4o quality on visual reasoning benchmarks. + detail: > + Track the open VLM frontier. Compare Qwen-VL, Pixtral, and InternVL on your domain-specific tasks. + sort_order: 6 + + - id: reasoning + title: Reasoning & Planning + objective: > + Unlock multi-step reasoning - chain-of-thought, tree search, and self-consistency. + color: "#55cdff" + sort_order: 8 + resources: + - name: OpenAI o1 / o3 + url: https://openai.com/index/learning-to-reason-with-llms/ + description: > + Chain-of-thought reasoning models with internal deliberation for math, science, and coding. + detail: > + Study the test-time compute scaling paradigm: spending more inference tokens improves reasoning quality. + sort_order: 1 + - name: Claude Extended Thinking + url: https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking + description: > + Explicit thinking traces in Claude for complex analysis, planning, and multi-step problem solving. + detail: > + Study how exposing the reasoning chain improves transparency and enables better prompt engineering. + sort_order: 2 + - name: DeepSeek-R1 + url: https://github.com/deepseek-ai/DeepSeek-R1 + description: > + Open-weight reasoning model trained with RL to generate detailed chain-of-thought before answering. + detail: > + The open-source reasoning frontier. Study the RL training recipe: how reinforcement learning teaches reasoning. + sort_order: 3 + - name: Tree of Thoughts + url: https://github.com/princeton-nlp/tree-of-thought-llm + description: > + Deliberate problem solving via tree search over reasoning paths with evaluation and backtracking. + detail: > + Study the search-over-thoughts pattern: BFS/DFS over reasoning branches with LLM-as-evaluator. + sort_order: 4 + - name: Self-Consistency (Wang et al.) + url: https://arxiv.org/abs/2203.11171 + description: > + Sample multiple reasoning paths and take majority vote. Simple technique that reliably boosts accuracy. + detail: > + The cheapest reasoning improvement: sample N completions, majority-vote the answer. Works with any model. + sort_order: 5 + - name: LATS (Language Agent Tree Search) + url: https://github.com/laetitia-teo/lats + description: > + Monte Carlo tree search for LLM agents combining reasoning, acting, and planning with environment feedback. + detail: > + Study MCTS for agents: how tree search + LLM evaluation enables planning in complex environments. + sort_order: 6 diff --git a/curriculum/tracks/applied-systems.yaml b/curriculum/tracks/applied-systems.yaml new file mode 100644 index 0000000..662e4b0 --- /dev/null +++ b/curriculum/tracks/applied-systems.yaml @@ -0,0 +1,229 @@ +id: applied-systems +title: Applied Systems +description: > + Production ML systems beyond model training - LLMOps, recommendation engines, + data pipelines, 3D vision, and distributed training at scale. +difficulty: intermediate +track_type: resource +modules: + - id: llmops + title: LLMOps + objective: > + Run LLMs in production without surprises - eval, tracing, guardrails, and reliability. + color: "#55cdff" + sort_order: 1 + resources: + - name: LangSmith + url: https://www.langchain.com/langsmith + description: > + Tracing, evaluation datasets, and regression checks for LLM apps. + detail: > + Use to practice observability and experiment comparison. + sort_order: 1 + - name: Langfuse + url: https://langfuse.com + description: > + Open-source LLM observability, prompts, and scoring pipelines. + detail: > + Use to drill telemetry schema and incident debugging. + sort_order: 2 + - name: Arize Phoenix + url: https://phoenix.arize.com + description: > + LLM tracing, retrieval analysis, and quality diagnostics. + detail: > + Use for retrieval error triage and quality root-cause analysis. + sort_order: 3 + - name: Weights & Biases Weave + url: https://wandb.ai/site/weave + description: > + Model/app evaluation and experiment tracking for LLM workflows. + detail: > + Use for side-by-side prompt/pipeline iteration practice. + sort_order: 4 + - name: Guardrails AI + url: https://www.guardrailsai.com + description: > + Validation and policy guardrails for structured LLM outputs. + detail: > + Use to rehearse fail-safe output enforcement patterns. + sort_order: 5 + + - id: recsys + title: RecSys + objective: > + Build recommendations that actually convert - retrieval, ranking, and experimentation. + color: "#ffc47c" + sort_order: 2 + resources: + - name: Recommender Systems Handbook + url: https://link.springer.com/book/10.1007/978-1-4899-7637-6 + description: > + Classical and modern recommendation methods with system context. + detail: > + Use as foundational theory for interview tradeoff answers. + sort_order: 1 + - name: ACM RecSys Conference + url: https://recsys.acm.org + description: > + Current research trends in ranking, retrieval, and personalization. + detail: > + Use to stay current on evaluation and modeling directions. + sort_order: 2 + - name: NVIDIA Merlin + url: https://developer.nvidia.com/merlin + description: > + Industrial recommendation stack patterns and tooling. + detail: > + Use for practical pipeline architecture examples. + sort_order: 3 + - name: Eugene Yan (Applied RecSys) + url: https://eugeneyan.com + description: > + Production recommendation and search system case studies. + detail: > + Use for interview-ready system narratives and metrics framing. + sort_order: 4 + - name: Shaped Blog + url: https://www.shaped.ai/blog + description: > + Modern personalization, retrieval-ranking stacks, and online learning. + detail: > + Use for current production patterns and tradeoff examples. + sort_order: 5 + + - id: dataops + title: DataOps + objective: > + Keep your data pipelines healthy - orchestration, quality, lineage, and reliability. + color: "#5bb86e" + sort_order: 3 + resources: + - name: Apache Airflow + url: https://airflow.apache.org + description: > + Workflow orchestration patterns, scheduling, and operational controls. + detail: > + Use to practice DAG design and failure recovery patterns. + sort_order: 1 + - name: dbt Docs + url: https://docs.getdbt.com + description: > + Transformation modeling, testing, and analytics engineering workflow. + detail: > + Use to drill model contracts, tests, and deployment workflows. + sort_order: 2 + - name: Dagster + url: https://dagster.io + description: > + Asset-oriented orchestration and data platform software design. + detail: > + Use for lineage-aware orchestration and asset health concepts. + sort_order: 3 + - name: DataHub + url: https://datahubproject.io + description: > + Metadata platform and end-to-end lineage across data assets. + detail: > + Use for catalog, ownership, and governance interview scenarios. + sort_order: 4 + - name: Great Expectations + url: https://greatexpectations.io + description: > + Automated data quality assertions and validation pipelines. + detail: > + Use for reliability guardrails and data contract enforcement. + sort_order: 5 + + - id: 3d_vision + title: 3D Vision + objective: > + Reconstruct and understand 3D scenes - NeRFs, Gaussian Splatting, and spatial AI. + color: "#f472b6" + sort_order: 4 + resources: + - name: Nerfstudio + url: https://nerf.studio + description: > + Modular framework for NeRF development - training, visualization, and export of neural radiance fields. + detail: > + Hands-on practice with NeRF pipelines and scene reconstruction. + sort_order: 1 + - name: gsplat + url: https://docs.gsplat.studio + description: > + Optimized 3D Gaussian Splatting library for real-time novel view synthesis. + detail: > + Study why Gaussian Splatting is overtaking NeRFs for real-time applications. + sort_order: 2 + - name: Open3D + url: http://www.open3d.org + description: > + Open-source library for 3D data processing - point clouds, meshes, RGB-D images, and visualization. + detail: > + Essential toolkit for 3D computer vision pipelines. + sort_order: 3 + - name: Habitat (Meta AI) + url: https://aihabitat.org + description: > + High-performance 3D simulation platform for embodied AI research - navigation, manipulation, and rearrangement. + detail: > + Study the sim-to-real pipeline and how 3D understanding enables robot navigation. + sort_order: 4 + - name: 3D Gaussian Splatting (Original Paper) + url: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/ + description: > + The seminal paper on representing scenes as collections of 3D Gaussians for real-time rendering. + detail: > + Read for the core algorithm: why Gaussians, how splatting works, and the quality-speed tradeoff vs NeRFs. + sort_order: 5 + + - id: distributed_ml + title: Distributed ML + objective: > + Train models across hundreds of GPUs without losing your mind - parallelism and fault tolerance. + color: "#4ade80" + sort_order: 5 + resources: + - name: DeepSpeed + url: https://www.deepspeed.ai + description: > + Microsoft's distributed training library: ZeRO stages, pipeline parallelism, mixed precision, and inference optimization. + detail: > + Study ZeRO-1/2/3 memory partitioning - it's the most asked-about distributed training concept. + sort_order: 1 + - name: Megatron-LM + url: https://github.com/NVIDIA/Megatron-LM + description: > + NVIDIA's framework for training multi-billion parameter models with tensor and pipeline parallelism. + detail: > + Study tensor parallelism (column/row splitting) and pipeline parallelism (micro-batching). + sort_order: 2 + - name: PyTorch FSDP + url: https://pytorch.org/docs/stable/fsdp.html + description: > + Fully Sharded Data Parallel - PyTorch-native ZeRO-3 implementation for large model training. + detail: > + Know FSDP wrapping policies, mixed precision, and activation checkpointing. + sort_order: 3 + - name: Ray Train + url: https://docs.ray.io/en/latest/train/train.html + description: > + Distributed training orchestration with fault tolerance, elastic scaling, and multi-framework support. + detail: > + Study how Ray abstracts distributed training across heterogeneous clusters. + sort_order: 4 + - name: Horovod + url: https://horovod.ai + description: > + Uber's distributed training framework using ring-AllReduce for efficient gradient synchronization. + detail: > + Understand ring-AllReduce vs tree-AllReduce and how Horovod simplifies multi-GPU training. + sort_order: 5 + - name: Scaling Laws (Chinchilla / Kaplan et al.) + url: https://arxiv.org/abs/2203.15556 + description: > + Compute-optimal training: how to allocate compute budget between model size and data volume. + detail: > + Know the Chinchilla ratio (~20 tokens per parameter) and how it changed LLM training strategies. + sort_order: 6 diff --git a/curriculum/tracks/behavioral-design.yaml b/curriculum/tracks/behavioral-design.yaml new file mode 100644 index 0000000..9ac22cd --- /dev/null +++ b/curriculum/tracks/behavioral-design.yaml @@ -0,0 +1,317 @@ +id: behavioral-design +title: Behavioral Design +description: > + Persuasion frameworks, engagement loops, and product psychology patterns. +difficulty: intermediate +track_type: resource +modules: + - id: frameworks + title: Frameworks + objective: > + The psychology models behind why people stay, buy, and come back. + sort_order: 1 + resources: + - name: "Fogg Behavior Model (B=MAP) - BJ Fogg" + description: "You don't need to increase motivation if you make the behavior easy enough and trigger it at the right time." + detail: "One-tap likes, frictionless sharing, push notifications timed to high-motivation moments (loneliness, boredom)." + resource_type: knowledge + sort_order: 1 + - name: "Hook Model - Nir Eyal" + description: "Variable rewards create compulsive checking. The investment phase (profile building, follower accumulation) increases switching costs." + detail: "Instagram notification -> open app -> scroll feed (variable content) -> post/comment (investment in social graph)." + resource_type: knowledge + sort_order: 2 + - name: "Operant Conditioning - B.F. Skinner" + description: "Slot machines and social feeds use identical reward schedules. Unpredictable rewards are more addictive than predictable ones." + detail: "Pull-to-refresh (slot machine lever), algorithmic feed randomization, unpredictable like counts." + resource_type: knowledge + sort_order: 3 + - name: "Dual Process Theory - Daniel Kahneman" + description: "Design for System 1 and users will act before they think. Infinite scroll, autoplay, and one-click actions all bypass deliberation." + detail: "Autoplay next episode, infinite scroll with no stopping cue, swipe-based interactions (Tinder, TikTok)." + resource_type: knowledge + sort_order: 4 + - name: "Six Principles of Persuasion - Robert Cialdini" + description: "Social proof (like counts, view counts) and scarcity (limited-time offers, disappearing content) are the most weaponized in tech." + detail: "\"X people are viewing this\" (Booking.com), disappearing stories (Snapchat), follower counts as authority signals." + resource_type: knowledge + sort_order: 5 + + - id: feed_design + title: "Feed & Content" + objective: > + How feeds keep you scrolling - ranking, sequencing, and content packaging tactics. + sort_order: 2 + resources: + - name: Infinite Scroll + description: "Content loads endlessly with no natural stopping point, eliminating the pause that would trigger a conscious decision to stop." + detail: "Removes completion cues. The brain never receives a 'finished' signal, so the default behavior is to keep going." + resource_type: knowledge + sort_order: 1 + - name: Autoplay + description: "Next video/episode starts automatically. Stopping requires active effort; continuing is passive." + detail: "Exploits status quo bias and loss aversion. Opting out feels like losing something vs. doing nothing." + resource_type: knowledge + sort_order: 2 + - name: Pull-to-Refresh + description: "Physical gesture that mimics a slot machine lever pull, creating a tactile reward loop." + detail: "Variable-ratio reinforcement. Each pull might reveal new content (reward) or not, creating compulsive repetition." + resource_type: knowledge + sort_order: 3 + - name: Algorithmic Feed + description: "Content ordered by engagement prediction rather than chronology. Shows you what maximizes time-on-app, not what's newest." + detail: "Collaborative filtering + reinforcement learning. Optimizes for engagement proxies (clicks, dwell time, shares) which correlate with emotional arousal." + resource_type: knowledge + sort_order: 4 + - name: Short-Form Vertical Video + description: "Bite-sized content in full-screen vertical format that requires minimal cognitive investment per unit." + detail: "Low effort per item + variable reward per swipe = highest dopamine-per-minute of any content format." + resource_type: knowledge + sort_order: 5 + - name: Sound-On Default + description: "Auto-playing audio captures attention involuntarily and increases emotional engagement with content." + detail: "Audio is processed pre-attentively - you react to sound before you consciously decide to. Increases dwell time significantly." + resource_type: knowledge + sort_order: 6 + - name: Clickbait / Curiosity Gap + description: "Headlines that open an information gap without closing it, creating an irresistible urge to click." + detail: "Loewenstein's information gap theory: the brain treats an open question as an unresolved tension that must be closed." + resource_type: knowledge + sort_order: 7 + - name: Engagement Bait Algorithms + description: "Recommendation systems that learn individual vulnerabilities and exploit them to maximize session length." + detail: "Multi-armed bandit optimization that treats each user as an independent exploitation problem. Finds your specific triggers." + resource_type: knowledge + sort_order: 8 + + - id: social_loops + title: Social Loops + objective: > + Why you keep coming back - identity, reciprocity, and social pressure loops. + sort_order: 3 + resources: + - name: Like Counts / Reactions + description: "Public quantification of social approval that creates a dopamine feedback loop for both poster and audience." + detail: "Social comparison theory + variable reward. Each check might show new likes (or not), creating compulsive monitoring." + resource_type: knowledge + sort_order: 1 + - name: View / Play Counts + description: "Public metrics that create social proof and drive content creators into optimization loops." + detail: "Social proof (Cialdini) - high view counts signal value, creating a winner-take-all attention economy." + resource_type: knowledge + sort_order: 2 + - name: Read Receipts / Typing Indicators + description: "Showing when someone has seen your message creates social obligation to respond immediately." + detail: "Exploits reciprocity norm and social anxiety. Leaving a message 'on read' feels like a social violation." + resource_type: knowledge + sort_order: 3 + - name: Streaks + description: "Consecutive-day usage counters that create artificial commitment through loss aversion." + detail: "Loss aversion is 2x stronger than equivalent gains. A 100-day streak feels too valuable to break, even if the activity itself has no value." + resource_type: knowledge + sort_order: 4 + - name: Follower / Friend Counts + description: "Public social capital metrics that create status hierarchies and competitive accumulation." + detail: "Status games + quantified social comparison. The number becomes the goal, detached from actual relationship quality." + resource_type: knowledge + sort_order: 5 + - name: Social Reciprocity Triggers + description: "Notifications that someone interacted with you, creating obligation to interact back." + detail: "Cialdini's reciprocity principle: receiving creates a felt obligation to give back. Platforms engineer mutual obligations." + resource_type: knowledge + sort_order: 6 + + - id: variable_rewards + title: Variable Rewards + objective: > + The slot machine in every app - unpredictable rewards that build habits. + sort_order: 4 + resources: + - name: Loot Box / Gacha Mechanics + description: "Randomized rewards with varying rarity that create gambling-like compulsion loops." + detail: "Variable-ratio reinforcement (Skinner). The unpredictability of reward magnitude drives compulsive repetition. Identical to slot machines." + resource_type: knowledge + sort_order: 1 + - name: Disappearing Content (Stories) + description: "Content that expires after 24 hours, creating urgency and FOMO that drives frequent checking." + detail: "Scarcity principle (Cialdini) + loss aversion. Content that disappears feels more valuable. Missing it feels like loss." + resource_type: knowledge + sort_order: 2 + - name: Feed Refresh Randomization + description: "Each feed refresh shows different content, making each visit a unique 'pull' of the slot machine." + detail: "Intermittent reinforcement. Sometimes the feed is boring, sometimes it's perfect - the uncertainty is what creates compulsion." + resource_type: knowledge + sort_order: 3 + - name: Micro-Reward Variability + description: "Small, unpredictable rewards scattered throughout the experience - new followers, likes, comments arriving at random intervals." + detail: "Each notification is a mini-reward with uncertain timing and magnitude. The brain treats the phone as a reward-dispensing device." + resource_type: knowledge + sort_order: 4 + + - id: friction + title: "Friction & Dark Patterns" + objective: > + How products make it hard to leave - friction design and dark patterns. + sort_order: 5 + resources: + - name: Friction Asymmetry + description: "Signing up is one click; deleting your account requires 15 steps, phone calls, and waiting periods." + detail: "Asymmetric friction design - make desired behaviors frictionless and undesired behaviors maximally effortful." + resource_type: knowledge + sort_order: 1 + - name: Confirm-shaming + description: "Opt-out text designed to make the user feel bad about their choice. 'No, I don't want to save money.'" + detail: "Social pressure + loss framing. The opt-out is phrased as self-harm, making the user feel stupid for declining." + resource_type: knowledge + sort_order: 2 + - name: Default-On Settings + description: "Privacy-invasive, attention-capturing, or monetization features are enabled by default. Changing requires finding buried settings." + detail: "Status quo bias (Kahneman). 90%+ of users never change defaults. The default IS the choice for most people." + resource_type: knowledge + sort_order: 3 + - name: One-Click Purchase + description: "Removing deliberation time from buying decisions. The faster the purchase, the less rational evaluation occurs." + detail: "Eliminates the cooling-off period where System 2 might intervene. Impulse buying becomes the default mode." + resource_type: knowledge + sort_order: 4 + - name: Roach Motel Pattern + description: "Easy to get into, nearly impossible to get out of. Subscriptions, accounts, data exports deliberately obstructed." + detail: "Sunk cost fallacy + procedural friction. Users stay because leaving is too painful, not because the product is good." + resource_type: knowledge + sort_order: 5 + + - id: notifications + title: "Notifications & Lock-in" + objective: > + The science of pulling you back in - notification timing, triggers, and lock-in. + sort_order: 6 + resources: + - name: Push Notification Batching + description: "Strategically timing notifications to arrive when users are most likely to re-engage (morning, lunch, evening)." + detail: "Fogg's prompt timing - trigger must arrive at a high-motivation moment. ML models predict optimal send times per user." + resource_type: knowledge + sort_order: 1 + - name: FOMO Notifications + description: "'Your friend just posted for the first time in a while,' 'You have unseen memories,' 'Trending near you.'" + detail: "Fear of missing out exploits social belonging needs. Missing content feels like missing a social event." + resource_type: knowledge + sort_order: 2 + - name: Badge Counts (Red Dots) + description: "Unread counters on app icons that create visual tension demanding resolution." + detail: "Zeigarnik effect - incomplete tasks create psychological tension. The red badge is an unresolved task that demands attention." + resource_type: knowledge + sort_order: 3 + - name: Time-Delayed Notifications + description: "Holding back notifications to deliver them strategically rather than in real-time." + detail: "Creates unpredictable reward timing. User never knows when the next notification will arrive, increasing checking behavior." + resource_type: knowledge + sort_order: 4 + - name: Recommendation Engines + description: "Algorithmic content suggestions that create an endless tunnel of 'next' items to consume." + detail: "Collaborative filtering finds patterns across millions of users to predict what will keep YOU specifically engaged longest." + resource_type: knowledge + sort_order: 5 + - name: Collaborative Filtering + description: "'Users like you also watched/bought/liked...' - leveraging collective behavior to predict individual preferences." + detail: "Social proof at scale. The recommendation feels personalized but is actually a statistical prediction from aggregate behavior." + resource_type: knowledge + sort_order: 6 + - name: Taste Profiles / Filter Bubbles + description: "Increasingly narrow content personalization that traps users in comfortable echo chambers." + detail: "Confirmation bias amplification. The algorithm shows you more of what you already engage with, creating a shrinking worldview." + resource_type: knowledge + sort_order: 7 + - name: Social Graph Lock-in + description: "Your social connections become the switching cost. Leaving the platform means losing access to your network." + detail: "Network effects + sunk cost. Years of relationship building become hostage. The platform doesn't need to be good, just irreplaceable." + resource_type: knowledge + sort_order: 8 + + - id: gamification + title: "Gamification & Temporal" + objective: > + Streaks, progress bars, and time pressure - the mechanics of long-term engagement. + sort_order: 7 + resources: + - name: Progress Bars / Completion Loops + description: "Visual indicators showing how close you are to completing a profile, level, or achievement." + detail: "Goal gradient effect - effort increases as you approach a goal. An 80% complete profile feels like unfinished business." + resource_type: knowledge + sort_order: 1 + - name: Badges & Achievements + description: "Virtual rewards for platform-desired behaviors that create a collection instinct." + detail: "Operant conditioning + completionism. Each badge is a micro-reward that shapes behavior toward platform goals." + resource_type: knowledge + sort_order: 2 + - name: Leaderboards / Rankings + description: "Public competitive rankings that exploit status-seeking and social comparison." + detail: "Social comparison theory (Festinger). Rankings create winners and losers, driving both groups to increase engagement." + resource_type: knowledge + sort_order: 3 + - name: Creator Monetization + description: "Revenue sharing that turns users into content-producing employees with variable compensation." + detail: "Variable-ratio reinforcement applied to income. Viral posts create intermittent large rewards, driving compulsive content creation." + resource_type: knowledge + sort_order: 4 + - name: Hiding Time Indicators + description: "Removing or minimizing clock displays, session length indicators, and usage data from the interface." + detail: "Time blindness. Without temporal cues, users lose track of how long they've been engaged. The session extends unnoticed." + resource_type: knowledge + sort_order: 5 + - name: Removing Endpoints + description: "Eliminating natural stopping points in the content consumption experience." + detail: "Without a 'done' signal, the default is to continue. Removing pagination, episode counts, and 'end of feed' signals keeps users going." + resource_type: knowledge + sort_order: 6 + - name: Live / Ephemeral Content + description: "Real-time content (live streams, live events) that creates urgency through irreversibility." + detail: "Scarcity + FOMO. Live content can't be consumed later (or feels lesser when recorded). Missing it is permanent." + resource_type: knowledge + sort_order: 7 + - name: Limited-Time Events + description: "Seasonal events, flash sales, and time-bounded content that create artificial urgency." + detail: "Scarcity principle + loss aversion. Time pressure disables deliberate thinking and triggers impulsive action." + resource_type: knowledge + sort_order: 8 + + - id: case_studies + title: Case Studies + objective: > + How TikTok, Instagram, Duolingo, and others apply these patterns in the real world. + sort_order: 8 + resources: + - name: "Meta (Facebook/Instagram)" + description: "The social comparison machine" + detail: "News Feed Algorithm; Instagram's Social Comparison Engine; Growth Team Tactics" + resource_type: knowledge + sort_order: 1 + - name: TikTok + description: "The attention singularity" + detail: "For You Page Algorithm; Full-Screen Vertical Format; Creator Incentive Structure" + resource_type: knowledge + sort_order: 2 + - name: YouTube + description: "The radicalization pipeline" + detail: "Recommendation Algorithm; Autoplay + Up Next; Thumbnail/Title Optimization" + resource_type: knowledge + sort_order: 3 + - name: Snapchat + description: "The teen engagement machine" + detail: "Streaks; Snap Map; Disappearing Content" + resource_type: knowledge + sort_order: 4 + - name: Apple + description: "The ecosystem lock-in architect" + detail: "iMessage Blue Bubble; Ecosystem Interdependence; App Store Control" + resource_type: knowledge + sort_order: 5 + - name: Amazon + description: "The friction elimination machine" + detail: "1-Click Buy; Prime Membership; Dark Patterns in Cancellation" + resource_type: knowledge + sort_order: 6 + - name: Netflix + description: "The binge engineering pioneer" + detail: "Autoplay Everything; Personalized Artwork; Removal of Episode Counts" + resource_type: knowledge + sort_order: 7 diff --git a/curriculum/tracks/bio-augmentation.yaml b/curriculum/tracks/bio-augmentation.yaml new file mode 100644 index 0000000..be4e21b --- /dev/null +++ b/curriculum/tracks/bio-augmentation.yaml @@ -0,0 +1,385 @@ +id: bio-augmentation +title: Bio-Augmentation +description: > + Human augmentation from biology to brain-computer interfaces - foundational + biology, neurotech, wearables, biohacking, live translation, and the convergence + of human-machine fusion. +difficulty: intermediate +track_type: resource +modules: + - id: foundations + title: Bio Foundations + objective: > + The biology you need to understand before hacking it - cells, DNA, and the + brain. + color: "#55cdff" + sort_order: 1 + resources: + - name: MIT OpenCourseWare - Biology (7.013) + url: https://ocw.mit.edu/courses/7-013-introductory-biology-spring-2018/ + description: > + Introductory biology covering cell structure, genetics, molecular biology, + and biochemistry. + detail: > + Start here. Covers DNA replication, gene expression, protein synthesis - the + vocab you need for everything else. + sort_order: 1 + - name: Khan Academy - Biology & Genetics + url: https://www.khanacademy.org/science/biology + description: > + Visual, step-by-step biology from cells to genetics to human physiology. + detail: > + Use for gap-filling. Jump to the specific unit you need (genetics, molecular + bio, human body systems). + sort_order: 2 + - name: Neuroscience Online (UTHealth) + url: https://nba.uth.tmc.edu/neuroscience/ + description: > + Free open-access neuroscience textbook covering neurons, synapses, sensory + systems, and motor control. + detail: > + Essential for understanding BCI. Focus on chapters 1-4 (cellular + neuroscience) and 8 (somatosensory). + sort_order: 3 + - name: NHGRI Genomics Education + url: https://www.genome.gov/about-genomics + description: > + NIH's primer on genomics: DNA, genes, chromosomes, genetic variation, and + personalized medicine. + detail: > + Read the fact sheets first. Covers CRISPR, gene therapy, pharmacogenomics in + plain language. + sort_order: 4 + - name: Molecular Biology of the Cell (Alberts) + url: https://www.ncbi.nlm.nih.gov/books/NBK21054/ + description: > + The standard reference textbook for cell and molecular biology, freely + available via NCBI. + detail: > + Deep reference. Read chapters 4-7 (DNA, gene expression, proteins) when you + need real depth. + sort_order: 5 + - name: 3Blue1Brown - Biology Essentials + url: https://www.youtube.com/c/3blue1brown + description: > + Visual math and science explanations. Look for videos on information theory, + neural networks, and signal processing. + detail: > + Not biology-specific but the mathematical intuition applies directly to + biosignal processing and neural coding. + sort_order: 6 + + - id: neurotech + title: Neurotech & BCI + objective: > + Read and write to the brain directly - BCIs, neural implants, and where the + field is heading. + color: "#ffc47c" + sort_order: 2 + resources: + - name: Neuralink + url: https://neuralink.com + description: > + Implantable BCI with 1024+ electrode threads. First human trials ongoing for + paralysis patients. + detail: > + Track the N1 implant progress - electrode count, signal quality, and the + robotic insertion system. + sort_order: 1 + - name: Synchron Stentrode + url: https://synchron.com + description: > + Endovascular BCI inserted via blood vessels - no open brain surgery required. + FDA breakthrough device. + detail: > + Study the less-invasive approach: stent-based electrode sits in a blood + vessel near motor cortex. + sort_order: 2 + - name: BrainGate + url: https://www.braingate.org + description: > + Academic BCI research consortium. Pioneered intracortical recording for + cursor control and robotic arm operation. + detail: > + Read the published papers - they are the scientific foundation for commercial + BCIs like Neuralink. + sort_order: 3 + - name: Kernel Flow + url: https://www.kernel.co + description: > + Non-invasive neuroimaging headset using time-domain fNIRS to measure brain + hemodynamics. + detail: > + Study the non-invasive BCI approach - lower resolution but no surgery. + Important for consumer applications. + sort_order: 4 + - name: Paradromics + url: https://paradromics.com + description: > + High-bandwidth implantable BCI targeting speech restoration with 65,000+ + electrode channels. + detail: > + Track the high-channel-count approach - more data from the brain means + richer control signals. + sort_order: 5 + - name: OpenBCI + url: https://openbci.com + description: > + Open-source EEG hardware and software for brain-computer interface research + and development. + detail: > + Hands-on entry point. Buy the Cyton board and start reading your own EEG + signals. + sort_order: 6 + + - id: wearables + title: Wearables & Sensors + objective: > + Turn your body into a data stream - wearables, biosensors, and continuous + health monitoring. + color: "#5bb86e" + sort_order: 3 + resources: + - name: Whoop + url: https://www.whoop.com + description: > + Continuous strain, recovery, and sleep tracking via PPG and accelerometer. + Used by elite athletes. + detail: > + Study the recovery score algorithm - HRV, resting HR, respiratory rate, + sleep quality combined. + sort_order: 1 + - name: Oura Ring + url: https://ouraring.com + description: > + Ring-form-factor health tracker measuring sleep stages, HRV, SpO2, skin + temperature, and activity. + detail: > + Best sleep tracker on the market. Study how temperature trends predict + illness and cycle phases. + sort_order: 2 + - name: Apple Watch Health Sensors + url: https://www.apple.com/apple-watch/health/ + description: > + ECG, blood oxygen, temperature sensing, crash detection. FDA-cleared + medical-grade sensors in a consumer device. + detail: > + Track Apple's health sensor roadmap - blood pressure and glucose monitoring + are coming. + sort_order: 3 + - name: Dexcom CGM + url: https://www.dexcom.com + description: > + Continuous glucose monitoring - real-time blood sugar tracking via + subcutaneous sensor. + detail: > + Even non-diabetics use CGMs. Study how real-time glucose data changes eating + and exercise behavior. + sort_order: 4 + - name: Levels Health + url: https://www.levels.com + description: > + Metabolic health platform built on CGM data - glucose response scoring and + dietary optimization. + detail: > + Study the data layer on top of hardware: how raw sensor data becomes + actionable health insights. + sort_order: 5 + - name: Muse Headband + url: https://choosemuse.com + description: > + Consumer EEG headband for meditation and neurofeedback with real-time brain + state visualization. + detail: > + Entry-level brain sensing. Limited but useful for understanding EEG signals + and neurofeedback loops. + sort_order: 6 + + - id: biohacking + title: Biohacking + objective: > + Optimize your body systematically - sleep, nutrition, longevity, and + performance protocols. + color: "#eb5757" + sort_order: 4 + resources: + - name: Huberman Lab Podcast + url: https://www.hubermanlab.com + description: > + Stanford neuroscientist covering sleep, focus, hormones, exercise science, + and brain optimization protocols. + detail: > + The single best source for evidence-based protocols. Start with sleep, light + exposure, and dopamine episodes. + sort_order: 1 + - name: Peter Attia - The Drive + url: https://peterattiamd.com + description: > + Longevity medicine: exercise, nutrition, sleep, pharmacology, and healthspan + optimization frameworks. + detail: > + Deep dives on Zone 2 training, VO2max, cancer screening, and the longevity + framework from his book Outlive. + sort_order: 2 + - name: Bryan Johnson Blueprint + url: https://blueprint.bryanjohnson.com + description: > + Extreme longevity protocol: 100+ supplements, strict diet, biomarker + tracking, organ-age measurements. + detail: > + Study as the extreme end of the spectrum. The data collection methodology is + more valuable than the specific protocols. + sort_order: 3 + - name: Examine.com + url: https://examine.com + description: > + Evidence-based supplement and nutrition database with effect sizes, dosages, + and study quality ratings. + detail: > + Always check here before taking any supplement. Look at the Human Effect + Matrix for real evidence. + sort_order: 4 + - name: Skin Care by Hyram / Dr. Dray + url: https://www.youtube.com/@DrDray + description: > + Dermatologist covering evidence-based skincare: retinoids, SPF, active + ingredients, and anti-aging science. + detail: > + Cut through beauty marketing. Focus on the core actives: retinol, vitamin C, + niacinamide, SPF, AHA/BHA. + sort_order: 5 + - name: FoundMyFitness (Rhonda Patrick) + url: https://www.foundmyfitness.com + description: > + Micronutrient science, sauna protocols, cold exposure, genetics-based health + optimization. + detail: > + Deeper biochemistry than Huberman. Study the sulforaphane, omega-3, and + sauna/cold exposure episodes. + sort_order: 6 + + - id: translation + title: Live Translation + objective: > + Speak any language in real time - translation devices and multilingual AI for + your daily life. + color: "#5e6ad2" + sort_order: 5 + resources: + - name: Meta SeamlessM4T + url: https://ai.meta.com/research/seamless-communication/ + description: > + Multimodal translation model supporting speech-to-speech, speech-to-text, + and text-to-speech across 100+ languages. + detail: > + State of the art for multilingual AI. Study the architecture - it handles + EN/FR/ZH in a single model. + sort_order: 1 + - name: Google Translate + Pixel Buds + url: https://store.google.com/category/earbuds + description: > + Real-time conversation translation via earbuds. Google Translate supports 133 + languages with neural MT. + detail: > + The consumer baseline. Test the conversation mode with French and Chinese - + note latency and accuracy limits. + sort_order: 2 + - name: Timekettle Translator Earbuds + url: https://www.timekettle.co + description: > + Dedicated translation earbuds (WT2, M3) supporting 40+ languages with + bidirectional real-time translation. + detail: > + Purpose-built hardware vs phone-based translation. Study the dual-earpiece + sharing mode for conversations. + sort_order: 3 + - name: DeepL Translator + url: https://www.deepl.com + description: > + Highest-quality text translation, particularly strong for European languages + and increasingly for Chinese. + detail: > + Best for written translation quality. Compare its FR-EN and ZH-EN output + against Google Translate. + sort_order: 4 + - name: Whisper (OpenAI) + url: https://openai.com/research/whisper + description: > + Open-source speech recognition model supporting 99 languages with strong + multilingual performance. + detail: > + The ASR backbone for many translation pipelines. Study how it handles + code-switching (mixing FR/EN/ZH). + sort_order: 5 + - name: NLLB (No Language Left Behind) + url: https://ai.meta.com/research/no-language-left-behind/ + description: > + Meta's open-source translation model covering 200+ languages, especially + low-resource languages. + detail: > + Understand the training methodology. Important for the multilingual AI + landscape beyond just EN/FR/ZH. + sort_order: 6 + + - id: convergence + title: Convergence + objective: > + Where all of this converges - augmented humans and the near-future of + human-machine fusion. + color: "#f472b6" + sort_order: 6 + resources: + - name: Neuralink + AI Agents + url: https://waitbutwhy.com/2017/04/neuralink.html + description: > + Tim Urban's deep dive on Neuralink and the case for brain-computer bandwidth + as the bottleneck for human-AI symbiosis. + detail: > + Essential reading. Covers the biological stack from neurons to cortex and why + bandwidth matters. + sort_order: 1 + - name: Ray Kurzweil - The Singularity Is Nearer + url: https://www.singularityisnearer.com + description: > + Updated predictions on human-machine merger timelines, nanobots, brain + uploading, and exponential technology curves. + detail: > + Read critically. The timeline predictions are optimistic but the technology + convergence analysis is valuable. + sort_order: 2 + - name: DARPA Biological Technologies Office + url: https://www.darpa.mil/about/offices/bto + description: > + Military R&D programs in neural interfaces, biosensors, human performance + enhancement, and bio-machine interfaces. + detail: > + DARPA funds the frontier. Track programs like N3 (non-surgical neural + interfaces) and BTO biosecurity work. + sort_order: 3 + - name: Humanity+ / World Transhumanist Association + url: https://www.humanityplus.org + description: > + Transhumanist community and ethics framework for human enhancement + technologies. + detail: > + Study the ethical frameworks. Augmentation raises questions about access, + inequality, identity, and regulation. + sort_order: 4 + - name: Biohacking Village (DEF CON) + url: https://www.villageb.io + description: > + DEF CON community exploring security and hacking of medical devices, + implants, and biosensors. + detail: > + The security angle. When your body runs software, attack surfaces become + deeply personal. + sort_order: 5 + - name: IEEE Brain Initiative + url: https://brain.ieee.org + description: > + IEEE's standards and research coordination for neurotechnology, brain data, + and neuroethics. + detail: > + Track the standardization efforts. Interoperability standards will shape who + can build for the brain. + sort_order: 6 diff --git a/curriculum/tracks/cognitive-toolkit.yaml b/curriculum/tracks/cognitive-toolkit.yaml new file mode 100644 index 0000000..0a1431d --- /dev/null +++ b/curriculum/tracks/cognitive-toolkit.yaml @@ -0,0 +1,1038 @@ +id: cognitive-toolkit +title: Cognitive Toolkit +description: > + Mental models, decision frameworks, and cognitive techniques for better thinking. +difficulty: intermediate +track_type: resource +modules: + - id: foundation + title: Foundation + objective: > + The mental models that shape how people decide, buy, and follow. + sort_order: 1 + resources: + - name: "Daniel Kahneman - Thinking, Fast and Slow" + description: "The two systems: fast/emotional vs slow/rational. Your character knows most people run on System 1. He designs for System 1." + resource_type: knowledge + sort_order: 1 + - name: "Richard Thaler & Cass Sunstein - Nudge" + description: "\"Choice architecture\" - you don't force people, you design the environment so the desired choice is the path of least resistance. Your character calls himself a \"choice architect.\"" + resource_type: knowledge + sort_order: 2 + - name: "Captology (B.J. Fogg, Stanford)" + description: "The science of persuasive technology - designing software to be psychologically compulsive. Your character's product team has a captology expert." + resource_type: knowledge + sort_order: 3 + - name: "Gregory Bateson - Steps to an Ecology of Mind" + description: "Change the environment, change the mind. Your character doesn't try to convince anyone - he reshapes the information ecology." + resource_type: knowledge + sort_order: 4 + - name: "Gustave Le Bon - Psychology of Crowds" + description: "Crowds are emotional, suggestible, and need simple narratives. Your character designs for crowds, not individuals." + resource_type: knowledge + sort_order: 5 + + - id: operating_system + title: Operating System + objective: > + Build systems that self-correct - feedback loops and adaptive behavioral control. + sort_order: 2 + resources: + - name: Measure + description: "People's behavior, emotions, attention (the data)." + resource_type: knowledge + sort_order: 1 + - name: Adjust + description: "Tweak the algorithm, the feed, the notification timing." + resource_type: knowledge + sort_order: 2 + - name: Observe + description: "Did they comply? Did engagement go up? Did resistance drop?" + resource_type: knowledge + sort_order: 3 + - name: Push + description: "Go further. Test the next boundary." + resource_type: knowledge + sort_order: 4 + - name: Repeat + description: "The loop never stops." + resource_type: knowledge + sort_order: 5 + + - id: techniques + title: Techniques + objective: > + Practical techniques for capturing attention and building habits that stick. + sort_order: 3 + resources: + - name: Attention economy + description: "Treats human attention as an extractable resource - the \"new oil.\"" + detail: "Euphemism: Engagement metrics" + resource_type: knowledge + sort_order: 1 + - name: Persona management software + description: "Fake profiles, bot armies, manufactured consensus. AI-powered = scales to millions." + detail: "Euphemism: Community management tools" + resource_type: knowledge + sort_order: 2 + - name: Astroturfing + description: "Manufacturing the appearance of popular support." + detail: "Euphemism: Grassroots activation / organic growth campaigns" + resource_type: knowledge + sort_order: 3 + - name: Nudge architecture + description: "Designing so people do what you want while feeling they chose it." + detail: "Euphemism: UX optimization / default settings" + resource_type: knowledge + sort_order: 4 + - name: Captology + description: "Slot-machine psychology: variable reward schedules, streaks, notifications timed to dopamine cycles." + detail: "Euphemism: Engagement loops / retention features" + resource_type: knowledge + sort_order: 5 + - name: Schismogenesis + description: "Fragmenting users into opposed bubbles so they fight each other instead of questioning the platform." + detail: "Euphemism: Community segmentation / personalized experiences" + resource_type: knowledge + sort_order: 6 + - name: Scotomization + description: "Keeping users inside comfortable information bubbles so they never encounter reality." + detail: "Euphemism: Content curation / safe spaces" + resource_type: knowledge + sort_order: 7 + - name: Carpet bombing + description: "Constant information overload that exhausts critical thinking." + detail: "Euphemism: Always-on content strategy" + resource_type: knowledge + sort_order: 8 + - name: Double bind + description: "Users can't tell if their emotions are valid or if they're being manipulated - so they defer to the platform." + detail: "Euphemism: Trust & Safety" + resource_type: knowledge + sort_order: 9 + - name: Character assassination + description: "Selectively destroying reputations of people who threaten the ecosystem." + detail: "Euphemism: Content moderation / community guidelines enforcement" + resource_type: knowledge + sort_order: 10 + - name: Compromat + description: "You have everything on everyone. You never use it - until you need to." + detail: "Euphemism: Data retention policies" + resource_type: knowledge + sort_order: 11 + + - id: worldview + title: Worldview + objective: > + The worldview behind persuasion systems - where optimization meets manipulation. + sort_order: 4 + resources: + - name: On users + description: "They're not customers. They're the product. But they can't know that. The first rule is: conceal the objective." + detail: "Direct from Bateson's 1941 declaration." + resource_type: knowledge + sort_order: 1 + - name: On democracy + description: "We don't interfere with democracy. We are democracy now. More people vote on our platform every day than in any election." + resource_type: knowledge + sort_order: 2 + - name: On regulation + description: "The DSA, GDPR - they think they're regulating us. They're actually creating barriers to entry for competitors. We want regulation. We just want to write it." + resource_type: knowledge + sort_order: 3 + - name: On critics + description: "'Conspiracist' is the most efficient word in the language - it makes everything they say radioactive without you having to address a single fact." + resource_type: knowledge + sort_order: 4 + - name: On emotions + description: "Fear of one's own emotions is more useful than the emotions themselves. A user who's afraid of being angry is a user who self-censors. A user who self-censors is a user who stays on platform." + detail: "The video's concept of induced psychosis - people becoming afraid of their own reactions." + resource_type: knowledge + sort_order: 5 + - name: On crises + description: "Never create a crisis. That's amateur. Just be ready. When it comes - and it always comes - you ride it. That's the judo move." + detail: "Naomi Klein's Shock Doctrine, reframed for tech." + resource_type: knowledge + sort_order: 6 + - name: On the agentic state + description: "The beautiful thing about process is that nobody's responsible. The algorithm did it. The policy required it. The AI recommended it. Nobody pulled the trigger, but the shot was fired." + detail: "Milgram, scaled to technology." + resource_type: knowledge + sort_order: 7 + + - id: library + title: Library + objective: > + The books and essays behind this playbook - your reading list for cognitive leverage. + sort_order: 5 + resources: + # Books actually read + - name: "Thinking, Fast and Slow" + description: "Cognitive biases as exploitable features." + detail: "Daniel Kahneman - actually read" + resource_type: knowledge + sort_order: 1 + - name: Nudge + description: "Choice architecture manual." + detail: "Richard Thaler & Cass Sunstein - actually read" + resource_type: knowledge + sort_order: 2 + - name: Steps to an Ecology of Mind + description: "Environment shapes cognition." + detail: "Gregory Bateson - actually read" + resource_type: knowledge + sort_order: 3 + - name: Psychology of Crowds + description: "Crowd behavior is predictable." + detail: "Gustave Le Bon - actually read" + resource_type: knowledge + sort_order: 4 + - name: The Lucifer Principle + description: "How systems recycle dissent to sustain themselves." + detail: "Howard Bloom - actually read" + resource_type: knowledge + sort_order: 5 + # Books displayed (performative) + - name: Meditations + description: "Performative stoicism for boardroom credibility." + detail: "Marcus Aurelius - displayed for guests" + resource_type: knowledge + sort_order: 6 + - name: Some Stoicism bestseller + description: "Signals intellectual depth without revealing actual playbook." + detail: "Various - displayed for guests" + resource_type: knowledge + sort_order: 7 + # Books feared + - name: We + description: "The original dystopia - describes the world he's building." + detail: "Yevgeny Zamyatin - feared" + resource_type: knowledge + sort_order: 8 + - name: The Shock Doctrine + description: "Documents exactly how crises are exploited. Too close to home." + detail: "Naomi Klein - feared" + resource_type: knowledge + sort_order: 9 + - name: The Culture of Narcissism + description: "Describes the psychological landscape he depends on." + detail: "Christopher Lasch - feared" + resource_type: knowledge + sort_order: 10 + + - id: playbook + title: Playbook + objective: > + Turn theory into daily practice - routines and checklists for product teams. + sort_order: 6 + resources: + # Feed & Content Design + - name: Infinite scroll + description: "Eliminates natural stopping points. Removes the pagination break that would let users disengage." + detail: "Category: Feed & Content Design" + resource_type: knowledge + sort_order: 1 + - name: Autoplay next + description: "Netflix auto-plays with a countdown. YouTube chains the next video. Removes the active decision to continue." + detail: "Category: Feed & Content Design" + resource_type: knowledge + sort_order: 2 + - name: Pull-to-refresh + description: "Mimics a slot machine lever. Variable reward each time you pull down. Based on Skinner's variable ratio reinforcement schedule." + detail: "Category: Feed & Content Design" + resource_type: knowledge + sort_order: 3 + - name: Algorithmic feeds + description: "Replaced chronological timelines (~2016). Optimizes for engagement, not recency. Makes the feed feel \"infinite\" because there's always something relevant." + detail: "Category: Feed & Content Design" + resource_type: knowledge + sort_order: 4 + # Social Validation Loops + - name: Like/reaction counts + description: "Public social proof. Creates both posting incentive (seeking likes) and browsing incentive (seeing what's popular)." + detail: "Category: Social Validation Loops" + resource_type: knowledge + sort_order: 5 + - name: View/play counts + description: "Signals popularity, creates bandwagon effect, and gives creators a score to chase." + detail: "Category: Social Validation Loops" + resource_type: knowledge + sort_order: 6 + - name: Read receipts & typing indicators + description: "Creates social pressure to respond promptly. Turns every conversation into a real-time obligation." + detail: "Category: Social Validation Loops" + resource_type: knowledge + sort_order: 7 + - name: Streak mechanics + description: "Snapchat streaks, Duolingo streaks, GitHub contribution graphs. Loss aversion keeps users returning daily." + detail: "Category: Social Validation Loops" + resource_type: knowledge + sort_order: 8 + - name: Follower counts + description: "Public scoreboard. Gamifies social relationships." + detail: "Category: Social Validation Loops" + resource_type: knowledge + sort_order: 9 + # Notifications & Re-engagement + - name: Push notification batching + description: "\"3 people liked your post\" is more compelling than individual notifications. Creates curiosity gap." + detail: "Category: Notifications & Re-engagement" + resource_type: knowledge + sort_order: 10 + - name: FOMO notifications + description: "\"You're missing posts from [person]\", \"A post is getting lots of engagement nearby.\" Manufactured urgency." + detail: "Category: Notifications & Re-engagement" + resource_type: knowledge + sort_order: 11 + - name: Email digests + description: "\"Here's what you missed\", \"X posted for the first time in a while.\" Re-engagement hooks." + detail: "Category: Notifications & Re-engagement" + resource_type: knowledge + sort_order: 12 + - name: Badge counts + description: "Red notification dots. Exploits completionism - people feel compelled to \"clear\" them." + detail: "Category: Notifications & Re-engagement" + resource_type: knowledge + sort_order: 13 + - name: Time-delayed notifications + description: "Not sent immediately. Timed for when you're likely idle (e.g., after lunch). Maximizes re-open rate." + detail: "Category: Notifications & Re-engagement" + resource_type: knowledge + sort_order: 14 + # Variable Reward Mechanics + - name: Loot box / mystery reward patterns + description: "TikTok's For You page is essentially a slot machine. Each swipe is a pull. The unpredictability is the hook." + detail: "Category: Variable Reward Mechanics" + resource_type: knowledge + sort_order: 15 + - name: Stories that disappear + description: "Scarcity + FOMO. Content expires in 24h so you check frequently." + detail: "Category: Variable Reward Mechanics" + resource_type: knowledge + sort_order: 16 + - name: Refresh randomization + description: "Same feed, different order on refresh. Teaches users that \"there might be something new\" even when there isn't." + detail: "Category: Variable Reward Mechanics" + resource_type: knowledge + sort_order: 17 + # Content Format Optimization + - name: Short-form video + description: "Low commitment per unit = more units consumed. Completion rates are high, so the algorithm gets rapid signal." + detail: "Category: Content Format Optimization" + resource_type: knowledge + sort_order: 18 + - name: Vertical full-screen + description: "Eliminates peripheral distractions. Total immersion. One piece of content = your entire visual field." + detail: "Category: Content Format Optimization" + resource_type: knowledge + sort_order: 19 + - name: Sound-on defaults + description: "TikTok made audio integral. Creates a more immersive, harder-to-disengage-from experience." + detail: "Category: Content Format Optimization" + resource_type: knowledge + sort_order: 20 + - name: Clickbait optimization + description: "Thumbnail A/B testing (MrBeast style). Curiosity gap headlines. Platforms reward high CTR." + detail: "Category: Content Format Optimization" + resource_type: knowledge + sort_order: 21 + # Friction Asymmetry + - name: Easy to start, hard to stop + description: "Sign-up is one click (SSO). Deleting your account is buried 6 menus deep." + detail: "Category: Friction Asymmetry" + resource_type: knowledge + sort_order: 22 + - name: Dark patterns in unsubscribe + description: "\"Are you sure?\" then \"You'll lose your data\" then \"How about a discount?\" then \"Call us to cancel.\"" + detail: "Category: Friction Asymmetry" + resource_type: knowledge + sort_order: 23 + - name: Default-on settings + description: "Autoplay, notifications, data sharing are all opt-out, not opt-in." + detail: "Category: Friction Asymmetry" + resource_type: knowledge + sort_order: 24 + - name: One-click purchasing + description: "Amazon's patent. Removes the friction that would give you a moment to reconsider." + detail: "Category: Friction Asymmetry" + resource_type: knowledge + sort_order: 25 + # Personalization & Lock-in + - name: Recommendation engines + description: "The more you use it, the better it gets, the harder it is to switch (data moat)." + detail: "Category: Personalization & Lock-in" + resource_type: knowledge + sort_order: 26 + - name: Collaborative filtering + description: "\"People like you also watched...\" Creates a sense that the platform \"knows you.\"" + detail: "Category: Personalization & Lock-in" + resource_type: knowledge + sort_order: 27 + - name: Taste profiles as identity + description: "Spotify Wrapped, Netflix percentages (\"98% match\"). Makes the algorithm feel like a personal relationship." + detail: "Category: Personalization & Lock-in" + resource_type: knowledge + sort_order: 28 + - name: Social graph lock-in + description: "Your friends are here. Moving platforms means losing connections. Network effects as retention." + detail: "Category: Personalization & Lock-in" + resource_type: knowledge + sort_order: 29 + # Temporal Manipulation + - name: Hiding time indicators + description: "TikTok and Instagram removed clocks / made them less visible during use. Users lose track of time." + detail: "Category: Temporal Manipulation" + resource_type: knowledge + sort_order: 30 + - name: Removing natural endpoints + description: "No \"you're all caught up.\" No finite playlist. No \"end of feed.\"" + detail: "Category: Temporal Manipulation" + resource_type: knowledge + sort_order: 31 + - name: Live content + description: "Twitch, Instagram Live, Twitter Spaces. \"If you leave, you miss it.\" Synchronous FOMO." + detail: "Category: Temporal Manipulation" + resource_type: knowledge + sort_order: 32 + - name: Limited-time events + description: "Fortnite concerts, Snapchat Discover, Instagram drops. Manufactured urgency." + detail: "Category: Temporal Manipulation" + resource_type: knowledge + sort_order: 33 + # Gamification + - name: Progress bars + description: "LinkedIn \"profile completeness.\" Exploits the Zeigarnik effect (incomplete tasks nag at you)." + detail: "Category: Gamification" + resource_type: knowledge + sort_order: 34 + - name: Achievements / badges + description: "Reddit karma, Stack Overflow reputation, Google Maps Local Guide levels." + detail: "Category: Gamification" + resource_type: knowledge + sort_order: 35 + - name: Leaderboards + description: "Apple Screen Time comparisons, Fitbit friend rankings. Competition drives engagement." + detail: "Category: Gamification" + resource_type: knowledge + sort_order: 36 + - name: Creator monetization tiers + description: "YouTube Partner Program thresholds, TikTok Creator Fund. Turns users into employees with KPIs." + detail: "Category: Gamification" + resource_type: knowledge + sort_order: 37 + # Structural / Platform-Level + - name: Cross-app deep linking + description: "WhatsApp shares open in Instagram, which opens in Chrome, which opens the app store. Every app captures you into its ecosystem." + detail: "Category: Structural / Platform-Level" + resource_type: knowledge + sort_order: 38 + - name: Super app bundling + description: "WeChat (messaging + payments + social + shopping). Once you're in, everything is there. No reason to leave." + detail: "Category: Structural / Platform-Level" + resource_type: knowledge + sort_order: 39 + - name: Platform-controlled distribution + description: "Creators depend on the algorithm. They must post frequently, in the right format, at the right time. The platform sets the rules, creators comply." + detail: "Category: Structural / Platform-Level" + resource_type: knowledge + sort_order: 40 + + - id: operators + title: Operators + objective: > + The people who run these systems - archetypes, roles, and how they operate. + sort_order: 7 + resources: + # Behavioral models + - name: "B.J. Fogg - Behavior = MAP" + description: "Motivation + Ability + Prompt must converge at the same moment. Key insight: don't increase motivation - reduce friction." + detail: "His Stanford students went on to found/lead growth at Instagram, LinkedIn, Fitbit." + resource_type: knowledge + sort_order: 1 + - name: "Nir Eyal - The Hook Model" + description: "Trigger (external then internal) -> Action (simplest behavior) -> Variable Reward (tribe/hunt/self) -> Investment (data, content, reputation). Investment loads the next trigger." + resource_type: knowledge + sort_order: 2 + - name: "B.F. Skinner - Variable Ratio Reinforcement" + description: "A pigeon rewarded on a random schedule presses the lever compulsively. Mathematically identical to a slot machine, a social media feed, and a loot box." + detail: "Skinner (1986): \"The gambling industry is the largest application of my work.\" Social media is the second largest." + resource_type: knowledge + sort_order: 3 + - name: "Robert Cialdini - Six Weapons of Influence" + description: "Social proof, Reciprocity, Scarcity, Authority, Commitment/Consistency, Liking - applied at platform scale." + resource_type: knowledge + sort_order: 4 + # Cialdini principles detail + - name: "Cialdini - Social proof" + description: "\"1.2M views\", \"Your friend liked this\", star ratings." + detail: "Category: Six Weapons of Influence" + resource_type: knowledge + sort_order: 5 + - name: "Cialdini - Reciprocity" + description: "Free trials, free storage, \"we gave you something, now sign up.\"" + detail: "Category: Six Weapons of Influence" + resource_type: knowledge + sort_order: 6 + - name: "Cialdini - Scarcity" + description: "\"Only 2 left!\", Stories that expire, limited drops." + detail: "Category: Six Weapons of Influence" + resource_type: knowledge + sort_order: 7 + - name: "Cialdini - Authority" + description: "Verified badges, \"recommended by experts\", editorial picks." + detail: "Category: Six Weapons of Influence" + resource_type: knowledge + sort_order: 8 + - name: "Cialdini - Commitment / Consistency" + description: "Profile completion bars, streaks, sunk cost of curated playlists." + detail: "Category: Six Weapons of Influence" + resource_type: knowledge + sort_order: 9 + - name: "Cialdini - Liking" + description: "Personalized UI, friendly tone, avatars, \"people like you.\"" + detail: "Category: Six Weapons of Influence" + resource_type: knowledge + sort_order: 10 + # Company case studies + - name: "Meta (Facebook / Instagram)" + description: "The Most Scientifically Rigorous. 2012 emotional contagion study, \"People You May Know\", notification tuning, the Like button, Facebook Files (Haugen 2021), Chamath Palihapitiya growth critique." + resource_type: knowledge + sort_order: 11 + - name: "TikTok (ByteDance)" + description: "The Algorithm Perfected. Zero-friction entry, full-screen vertical video, multi-armed bandit algorithm, micro-reward variability tuning, Chinese version has age limits the international version lacks." + resource_type: knowledge + sort_order: 12 + - name: "Google / YouTube" + description: "Radicalization by Recommendation. Guillaume Chaslot's AlgoTransparency, 2012 watch-time shift, YouTube Kids Elsagate, 70% of watch time from recommendations." + resource_type: knowledge + sort_order: 13 + - name: "Snap (Snapchat)" + description: "Weaponized Social Pressure. Snapstreaks and loss aversion, Snap Map social surveillance, disappearing content urgency." + resource_type: knowledge + sort_order: 14 + - name: Apple + description: "Friction Removal as Empire. Face ID unlocking frequency, Apple Pay spending psychology, Screen Time as cure for their own disease." + resource_type: knowledge + sort_order: 15 + - name: Amazon + description: "Purchase Behavior Engineering. One-Click Buy patent, collaborative filtering (+35% basket), Prime sunk cost, Subscribe & Save automation, Project Iliad cancellation obstruction (FTC sued 2023)." + resource_type: knowledge + sort_order: 16 + - name: Netflix + description: "Eliminating the Decision to Stop. Autoplay next episode, post-play previews, skip intro, simplified rating system." + resource_type: knowledge + sort_order: 17 + # Backlash figures + - name: Tristan Harris + description: "Founded Center for Humane Technology. Star of The Social Dilemma (2020). Coined \"the attention economy\" framing." + detail: "ex-Google design ethicist" + resource_type: knowledge + sort_order: 18 + - name: Aza Raskin + description: "\"It's as if they took behavioral cocaine and just sprinkled it all over your interface.\"" + detail: "inventor of infinite scroll" + resource_type: knowledge + sort_order: 19 + - name: Roger McNamee + description: "Wrote Zucked (2019), arguing Facebook knowingly exploited psychological vulnerabilities." + detail: "early Facebook investor" + resource_type: knowledge + sort_order: 20 + + - id: social_dynamics + title: Social Dynamics + objective: > + Applied psychology for one-on-one interactions - influence, rapport, and social dynamics. + sort_order: 8 + resources: + # Core Principles + - name: Non-neediness + description: "Neediness is the single strongest repellent in interpersonal dynamics. It signals low status, scarcity mindset, and emotional dependency." + detail: "Willingness to walk away from any interaction. Not performing indifference - actually having a life full enough that no single person's validation matters." + resource_type: knowledge + sort_order: 1 + - name: Polarization over approval + description: "Trying to be liked by everyone produces lukewarm responses. Taking clear positions repels some and magnetizes others. Net effect: stronger connections with compatible people." + detail: "Express genuine preferences and opinions. Don't soften everything to avoid offense." + resource_type: knowledge + sort_order: 2 + - name: Vulnerability as signal strength + description: "Calibrated vulnerability signals confidence - you're secure enough to expose imperfection. Paradoxically increases perceived status." + detail: "Share genuine stories of failure, uncertainty, or emotion. The key word is 'genuine.' Performed vulnerability is detected instantly and backfires." + resource_type: knowledge + sort_order: 3 + - name: Investment asymmetry + description: "People value what they invest in (IKEA effect, cognitive dissonance). The person investing more in a relationship values it more." + detail: "Create opportunities for the other person to invest - ask for small favors (Ben Franklin effect), let them contribute ideas." + resource_type: knowledge + sort_order: 4 + - name: Pre-selection & social proof + description: "Humans outsource mate evaluation. Being seen as desired by others signals quality more efficiently than any self-presentation." + detail: "Mixed-gender social circles. Warm introductions. Being visibly valued by people whose opinion matters." + resource_type: knowledge + sort_order: 5 + - name: Frame control + description: "Whoever defines the frame of the interaction controls its dynamics. 'I'm interviewing for your approval' vs 'We're both figuring out if this is interesting' are radically different power structures." + detail: "Set collaborative frames ('Let's see if we vibe') not evaluative ones ('I hope you like me')." + resource_type: knowledge + sort_order: 6 + # High-Leverage Variables + - name: Volume of social exposure + description: "The single highest-ROI variable. Meeting 5 people a week vs 50 changes everything. Most 'game' advice is optimization on the margins compared to simply increasing throughput." + detail: "Category: High-Leverage Variables" + resource_type: knowledge + sort_order: 7 + - name: Physical presentation + description: "Not genetics - grooming, fit, posture, energy. The controllable 80%. Well-fitted clothes, clean skin, good sleep, and physical fitness outperform any conversational technique." + detail: "Category: High-Leverage Variables" + resource_type: knowledge + sort_order: 8 + - name: Status signaling + description: "Competence in a visible domain. Not wealth display - demonstrated skill, social proof, leadership in a group." + detail: "Category: High-Leverage Variables" + resource_type: knowledge + sort_order: 9 + - name: Comfort with rejection + description: "The ability to be rejected without it affecting your state. This is trained, not innate. Each rejection that doesn't destroy you raises your baseline confidence." + detail: "Category: High-Leverage Variables" + resource_type: knowledge + sort_order: 10 + # Conversation Mechanics + - name: Statements > questions + description: "'You look like you're from somewhere interesting' beats 'Where are you from?' Statements invite collaboration. Questions demand performance." + detail: "Category: Conversation Mechanics" + resource_type: knowledge + sort_order: 11 + - name: Cold reads + description: "Making an assumption about someone ('You're definitely the organized friend in your group'). If right, they feel seen. If wrong, they correct you - either way, rapport." + detail: "Category: Conversation Mechanics" + resource_type: knowledge + sort_order: 12 + - name: Push-pull + description: "Alternating between showing interest and playful disqualification. Creates emotional range. Monotone positivity (or negativity) flatlines engagement." + detail: "Category: Conversation Mechanics" + resource_type: knowledge + sort_order: 13 + - name: Active disinterest in outcome + description: "Paradox: the less you try to steer the conversation toward a specific outcome, the more natural and attractive the interaction becomes." + detail: "Category: Conversation Mechanics" + resource_type: knowledge + sort_order: 14 + - name: Escalation through honesty + description: "Rather than manufactured moves - just say what you're thinking. 'I find you interesting and I'd like to keep talking' is more effective than any scripted line because it's rare." + detail: "Category: Conversation Mechanics" + resource_type: knowledge + sort_order: 15 + # Environmental Design + - name: Venue selection + description: "Where you spend time determines who you meet. Co-working spaces, sport clubs, language classes, gallery openings - environments self-select for shared interests." + detail: "Category: Environmental Design" + resource_type: knowledge + sort_order: 16 + - name: Social circle engineering + description: "Your network is your net worth - socially too. Host events. Be the connector. The person who brings people together occupies the highest-status node in the graph." + detail: "Category: Environmental Design" + resource_type: knowledge + sort_order: 17 + - name: Proximity + repeated exposure + description: "The mere exposure effect: familiarity breeds attraction. Regulars at the same cafe, gym, class. Repeated low-stakes encounters build comfort before any 'approach.'" + detail: "Category: Environmental Design" + resource_type: knowledge + sort_order: 18 + - name: Context switching + description: "Meeting someone at a bar vs meeting them at a climbing gym vs meeting them through a friend. Same people, different frames. Non-nightlife contexts reduce evaluative pressure." + detail: "Category: Environmental Design" + resource_type: knowledge + sort_order: 19 + # Inner Game + - name: Identity over technique + description: "Techniques are band-aids. 'What would an attractive person do?' is the wrong question. 'What kind of person do I want to be?' is the right one." + detail: "Category: Inner Game" + resource_type: knowledge + sort_order: 20 + - name: Outcome independence + description: "The single most repeated concept in every serious framework. If your emotional state depends on whether someone responds positively, you've already lost the frame." + detail: "Category: Inner Game" + resource_type: knowledge + sort_order: 21 + - name: Rejection as data + description: "Reframe: rejection isn't failure, it's a preference mismatch. She doesn't like you != you're unlikeable. It means this specific pairing doesn't work." + detail: "Category: Inner Game" + resource_type: knowledge + sort_order: 22 + - name: "The 'enough' threshold" + description: "You already have enough - skills, looks, stories, value. The belief in deficiency ('I need to be X first') is the actual obstacle. Readiness is a decision, not a state." + detail: "Category: Inner Game" + resource_type: knowledge + sort_order: 23 + # Anti-patterns + - name: "Anti-pattern: Scripted openers" + description: "Detectable within seconds. The person feels like a target, not a human. Any technique that requires memorization will feel incongruent." + detail: "Category: Anti-Patterns" + resource_type: knowledge + sort_order: 24 + - name: "Anti-pattern: Negging" + description: "Backhanded compliments signal insecurity, not confidence. Works only on people with low self-esteem - and that's not a filter you want to be using." + detail: "Category: Anti-Patterns" + resource_type: knowledge + sort_order: 25 + - name: "Anti-pattern: Excessive availability" + description: "Responding instantly every time, rearranging your schedule constantly, always saying yes. Signals you have nothing else going on." + detail: "Category: Anti-Patterns" + resource_type: knowledge + sort_order: 26 + - name: "Anti-pattern: Covert contracts" + description: "'I did X so she should give me Y.' Unspoken expectations breed resentment. If you're being nice with an agenda, it's not generosity - it's a transaction." + detail: "Category: Anti-Patterns" + resource_type: knowledge + sort_order: 27 + - name: "Anti-pattern: Identity performing" + description: "Pretending to be someone you're not is unsustainable. The gap between persona and person destroys trust." + detail: "Category: Anti-Patterns" + resource_type: knowledge + sort_order: 28 + # Reading list + - name: "Models (Mark Manson)" + description: "Anti-manipulation framework. Attraction through genuine non-neediness and honest self-expression. The best single book on the topic." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 29 + - name: "Influence (Robert Cialdini)" + description: "The six weapons work identically in romance as in sales. Reciprocity, scarcity, social proof - same mechanisms, different context." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 30 + - name: "The Game (Neil Strauss)" + description: "The pickup artist origin story. Useful as anthropology - documents what happens when you systematize seduction. Follow-up (The Truth) documents why it implodes." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 31 + - name: "The Art of Seduction (Robert Greene)" + description: "Historical archetypes of seducers. Treats seduction as a strategic art with character types: the Siren, the Rake, the Charmer, the Charismatic." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 32 + - name: "Attached (Amir Levine & Rachel Heller)" + description: "Attachment theory (anxious, avoidant, secure). Explains why some dynamics work on some people and self-destruct with others." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 33 + - name: "The Laws of Human Nature (Robert Greene)" + description: "Broader than dating - the emotional undercurrents driving all human behavior. Envy, narcissism, grandiosity, conformity." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 34 + - name: "Mating in Captivity (Esther Perel)" + description: "The tension between security and desire. Why domesticity kills attraction. How to maintain polarity in long-term relationships." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 35 + - name: "The Rational Male (Rollo Tomassi)" + description: "Evolutionary psychology lens on intersexual dynamics. Controversial framework - useful as a model, dangerous as an ideology. Read critically." + detail: "Category: Reading List" + resource_type: knowledge + sort_order: 36 + + - id: ai_leverage + title: AI Leverage + objective: > + High-ROI ways to use AI in your daily life - career, health, finance, and learning. + sort_order: 9 + resources: + # Dating & Social at Scale + - name: Profile Photo Optimization Pipeline + description: "Feed all your photos to GPT-4o and rank by dating app effectiveness. A/B test on Photofeeler. Enhance with Remini. Rotate top 3 weekly based on match rate data." + detail: "Domain: Dating & Social at Scale | Tool: GPT-4o Vision + Photofeeler + Remini AI | Difficulty: easy | Cost: $20/mo | Leverage: 2-3x match rate." + resource_type: knowledge + sort_order: 1 + - name: Bio & Opener Generation at Scale + description: "Feed Claude your personality traits, humor style, and 20 real messages. Generate bio variations per platform and context-specific openers." + detail: "Domain: Dating & Social at Scale | Tool: Claude with your voice profile | Difficulty: easy | Cost: $20/mo | Leverage: 3-5x response rate." + resource_type: knowledge + sort_order: 2 + - name: Social Calendar & Venue Discovery Engine + description: "AI as social coordinator: generates a weekly plan of events based on city, interests, schedule. Target: 3-4 social touchpoints per week." + detail: "Domain: Dating & Social at Scale | Tool: ChatGPT + Luma + Eventbrite + Zapier | Difficulty: medium | Cost: $20/mo | Leverage: Programmatic serendipity." + resource_type: knowledge + sort_order: 3 + - name: Date Logistics Optimizer + description: "Build a venue database tagged by neighborhood, vibe, price. Claude picks the optimal venue + suggests time slots based on her profile." + detail: "Domain: Dating & Social at Scale | Tool: Claude + personal venue database | Difficulty: medium | Cost: $20/mo | Leverage: 15-20 min saved per date." + resource_type: knowledge + sort_order: 4 + # Financial Optimization + - name: Negotiation Prep Engine + description: "Before any negotiation: brief Claude on positions, market data, your BATNA. Generate opening scripts, anticipate objections, role-play 3 rounds." + detail: "Domain: Financial Optimization | Tool: Claude with role-play | Difficulty: easy | Cost: $20/mo | Leverage: $5,000-30,000 per major negotiation." + resource_type: knowledge + sort_order: 5 + - name: Tax Optimization Research + description: "Upload previous return to Claude. Identifies missed deductions, entity structure changes, timing strategies. Prep to ask your CPA the right questions." + detail: "Domain: Financial Optimization | Tool: Claude (long context) + IRS publications | Difficulty: medium | Cost: $20/mo | Leverage: $2,000-15,000/year." + resource_type: knowledge + sort_order: 6 + - name: Investment Research Accelerator + description: "ChatGPT pulls earnings transcripts and reports. Claude analyzes competitive moat, key risks, bull/bear thesis. For building your own thesis faster." + detail: "Domain: Financial Optimization | Tool: ChatGPT browsing + Claude | Difficulty: medium | Cost: $20-40/mo | Leverage: 10x faster research." + resource_type: knowledge + sort_order: 7 + - name: Side Income Idea Validation + description: "Describe skills, available hours, capital. Claude generates ranked side income ideas by time-to-first-dollar, scalability, skill alignment." + detail: "Domain: Financial Optimization | Tool: Claude + Google Trends + ChatGPT | Difficulty: medium | Cost: $20/mo | Leverage: Compress weeks of market research into hours." + resource_type: knowledge + sort_order: 8 + - name: Deal & Price Intelligence + description: "For purchases over $200: best time to buy, price history, refurbished vs new analysis, retailer price-matching. Set up Make.com automations." + detail: "Domain: Financial Optimization | Tool: ChatGPT + CamelCamelCamel + Make.com | Difficulty: easy | Cost: Free-$20/mo | Leverage: 15-30% savings, $2,000-5,000/year." + resource_type: knowledge + sort_order: 9 + # Career & Status Building + - name: LinkedIn Content Machine + description: "One deep-thought post per week manually, then Claude extracts 3 derivative posts, generates comments for big accounts, repurposes into threads/newsletter." + detail: "Domain: Career & Status Building | Tool: Claude + Typefully | Difficulty: medium | Cost: $20 + $12/mo | Leverage: 5-10x content output." + resource_type: knowledge + sort_order: 10 + - name: Personal Brand Voice Training + description: "Feed Claude 20-30 of your best communications. It analyzes your voice patterns. Save as system prompt. Update quarterly." + detail: "Domain: Career & Status Building | Tool: Claude with system prompt | Difficulty: medium | Cost: $20/mo | Leverage: Eliminates 'sounds like AI' problem." + resource_type: knowledge + sort_order: 11 + - name: Strategic Networking Outreach + description: "Identify 50 people to know in 12 months. Claude generates personalized outreach referencing something specific. Track in CRM. Follow up every 6-8 weeks." + detail: "Domain: Career & Status Building | Tool: Claude + LinkedIn + Apollo.io | Difficulty: hard | Cost: $20 + $0-99/mo | Leverage: 10x higher response rate." + resource_type: knowledge + sort_order: 12 + - name: Interview Prep Simulation + description: "Give Claude the JD, company values, your resume. Full behavioral + technical interview over 3 rounds with feedback. ChatGPT voice for verbal practice." + detail: "Domain: Career & Status Building | Tool: Claude role-play + ChatGPT Voice | Difficulty: easy | Cost: $20/mo | Leverage: Equivalent to $300-500 coaching." + resource_type: knowledge + sort_order: 13 + - name: Ghostwritten Thought Leadership + description: "Record 10-minute voice memo. Claude extracts thesis, structures 1,200-word article, matches voice profile. Edit 15 min. Publish weekly." + detail: "Domain: Career & Status Building | Tool: Claude + voice memos + Midjourney | Difficulty: medium | Cost: $20 + $10/mo | Leverage: 4-6 hours reduced to 45 minutes." + resource_type: knowledge + sort_order: 14 + # Email & Communication + - name: Email Triage Automation + description: "Every incoming email classified by GPT-4 into 4 buckets: respond today, respond this week, FYI only, unsubscribe candidate. Auto-apply Gmail labels." + detail: "Domain: Email & Communication | Tool: GPT-4 API + Zapier + Gmail | Difficulty: hard | Cost: $20 + $20/mo Zapier | Leverage: 30-45 min/day saved." + resource_type: knowledge + sort_order: 15 + - name: Smart Reply Drafting + description: "Paste email thread, add one line about intent ('decline politely', 'negotiate timeline'). Claude drafts reply. For important emails, ask for 3 variations." + detail: "Domain: Email & Communication | Tool: Claude in browser | Difficulty: easy | Cost: $20/mo | Leverage: 60-70% time reduction." + resource_type: knowledge + sort_order: 16 + - name: Meeting Prep Briefs + description: "Before any meeting: paste their LinkedIn, company page, recent news. Get 1-page brief with talking points, questions, areas of mutual value." + detail: "Domain: Email & Communication | Tool: Claude + LinkedIn | Difficulty: easy | Cost: $20/mo | Leverage: Disproportionate social capital." + resource_type: knowledge + sort_order: 17 + - name: Personal CRM with AI Follow-ups + description: "Contact database with last interaction, relationship strength, topics discussed. Claude scans contacts not touched in 30+ days, drafts follow-ups." + detail: "Domain: Email & Communication | Tool: Clay.com or Notion + Claude | Difficulty: hard | Cost: $20 + $0-59/mo | Leverage: Maintain 150+ active relationships." + resource_type: knowledge + sort_order: 18 + - name: Difficult Conversation Scripting + description: "Before any hard conversation: Claude drafts opening using nonviolent communication, anticipates 3 emotional responses, gives de-escalation scripts." + detail: "Domain: Email & Communication | Tool: Claude with role-play | Difficulty: easy | Cost: $20/mo | Leverage: Removes avoidance instinct." + resource_type: knowledge + sort_order: 19 + # Health & Performance + - name: Custom Meal Plan Generator + description: "Give Claude macro targets, restrictions, cooking skill, budget, 10 foods you enjoy. Get 7-day plan with grocery list. Regenerate weekly." + detail: "Domain: Health & Performance | Tool: Claude + MyFitnessPal | Difficulty: easy | Cost: $20/mo | Leverage: Eliminates nutrition decision fatigue." + resource_type: knowledge + sort_order: 20 + - name: Periodized Workout Programming + description: "Give Claude training history, equipment, schedule, goals, injuries. 12-week periodized program with progressive overload. Adjusts weekly based on actual performance." + detail: "Domain: Health & Performance | Tool: Claude + training log | Difficulty: medium | Cost: $20/mo | Leverage: 30-50% better results vs random programming." + resource_type: knowledge + sort_order: 21 + - name: Supplement Stack Audit + description: "Give Claude current stack, goals, medications. Evaluates evidence grade per supplement, checks interactions, suggests dosage/timing and cheaper alternatives." + detail: "Domain: Health & Performance | Tool: Claude + Examine.com + PubMed | Difficulty: easy | Cost: $20/mo | Leverage: Prevents $100-300/month waste." + resource_type: knowledge + sort_order: 22 + - name: Sleep Data Analysis + description: "Export 30 days of sleep data. Claude identifies optimal bedtime window, behavior-quality correlations, environmental changes to test." + detail: "Domain: Health & Performance | Tool: Claude + Oura/Whoop data | Difficulty: medium | Cost: $20/mo + wearable | Leverage: 10% sleep improvement cascades." + resource_type: knowledge + sort_order: 23 + - name: Doctor Visit Prep + description: "Describe symptoms, timeline, history. Claude generates differential diagnosis list, questions to ask, tests to request, urgency flags. Print and bring." + detail: "Domain: Health & Performance | Tool: Claude + medical history | Difficulty: easy | Cost: $20/mo | Leverage: 3x more value from 15-minute visits." + resource_type: knowledge + sort_order: 24 + # Legal & Admin + - name: Contract & Lease Review + description: "Paste any contract. Claude summarizes obligations, flags unusual clauses, identifies missing protections, compares to standards, drafts amendments." + detail: "Domain: Legal & Admin | Tool: Claude (200k context) | Difficulty: easy | Cost: $20/mo | Leverage: Saves $500-2,000 per contract." + resource_type: knowledge + sort_order: 25 + - name: Dispute Resolution Letters + description: "Give Claude facts, regulations, desired outcome. Drafts escalation sequence: polite request, formal demand, regulatory complaint, small claims prep." + detail: "Domain: Legal & Admin | Tool: Claude with legal tone | Difficulty: medium | Cost: $20/mo | Leverage: Resolves 70-80% of disputes without litigation." + resource_type: knowledge + sort_order: 26 + - name: Bureaucracy Navigation + description: "For any government process: ChatGPT finds forms, deadlines, requirements. Claude builds step-by-step plan with common pitfalls and sequencing issues." + detail: "Domain: Legal & Admin | Tool: ChatGPT browsing + Claude | Difficulty: medium | Cost: $20/mo | Leverage: 5-20 hours saved per process." + resource_type: knowledge + sort_order: 27 + - name: Real Estate Analysis + description: "Paste listing and comps. Claude calculates true ownership cost, flags red flags, estimates negotiation room, compares to renting." + detail: "Domain: Legal & Admin | Tool: Claude + Zillow/Redfin data | Difficulty: medium | Cost: $20/mo | Leverage: $10,000-15,000 better negotiation." + resource_type: knowledge + sort_order: 28 + - name: Insurance Claim Optimization + description: "Upload policy. Claude checks coverage per specific language, drafts claim using matching terminology, identifies documentation needed, drafts appeal letters." + detail: "Domain: Legal & Admin | Tool: Claude + policy upload | Difficulty: medium | Cost: $20/mo | Leverage: Flips information asymmetry." + resource_type: knowledge + sort_order: 29 + # Learning Acceleration + - name: Socratic AI Tutor + description: "Set Claude as Socratic tutor: never give answers directly, ask leading questions, explain the mental model after you reach the answer." + detail: "Domain: Learning Acceleration | Tool: Claude with system prompt | Difficulty: easy | Cost: $20/mo | Leverage: 2-3x retention vs passive reading." + resource_type: knowledge + sort_order: 30 + - name: Personalized Curriculum Design + description: "Give Claude current level, target, hours/week, learning style. Get 90-day curriculum with weekly milestones, resources, and monthly applied projects." + detail: "Domain: Learning Acceleration | Tool: Claude + roadmap.sh | Difficulty: easy | Cost: $20/mo | Leverage: Eliminates tutorial hell." + resource_type: knowledge + sort_order: 31 + - name: Book & Content Compression + description: "Upload a book. Get core ideas, behavioral changes, strongest counter-argument, Anki flashcards. Read fully only if the compression hooks you." + detail: "Domain: Learning Acceleration | Tool: Claude (200k context) + PDF upload | Difficulty: easy | Cost: $20/mo | Leverage: 80% of value in 5 minutes." + resource_type: knowledge + sort_order: 32 + - name: Spaced Repetition Card Generation + description: "After learning anything, Claude generates 10-15 Anki cards following the 20 rules of formulating knowledge. 15 min creation + 10 min daily review." + detail: "Domain: Learning Acceleration | Tool: Claude + Anki | Difficulty: medium | Cost: $20/mo | Leverage: Highest-ROI learning technique in cognitive science." + resource_type: knowledge + sort_order: 33 + - name: Cross-Domain Concept Translation + description: "Ask Claude to explain X as if you're an expert in Y. Cross-domain analogies form deep understanding instantly. The Feynman method, automated." + detail: "Domain: Learning Acceleration | Tool: Claude with analogy generation | Difficulty: easy | Cost: $20/mo | Leverage: 3-5x faster understanding." + resource_type: knowledge + sort_order: 34 + # Module 48 - Model Recruitment + - name: Paris Model Scouting Pipeline + description: "Define casting criteria. AI drafts personalized outreach DMs. Batch scrape agency rosters + Instagram, score against criteria, generate outreach for top 20." + detail: "Domain: Module 48 - Model Recruitment | Tool: Claude + Instagram API + Make.com | Difficulty: medium | Cost: $20/mo | Leverage: Full week compressed to 2-3 hours." + resource_type: knowledge + sort_order: 35 + - name: International Model Outreach (Non-Paris) + description: "For London, Berlin, Milan, NYC, Seoul. Research local agencies, open casting calls. Generate city-specific outreach with adapted tone per market." + detail: "Domain: Module 48 - Model Recruitment | Tool: Claude + Instagram + Model Mayhem | Difficulty: hard | Cost: $20/mo | Leverage: Months of networking compressed to days per city." + resource_type: knowledge + sort_order: 36 + - name: Casting Brief Generator + description: "Describe concept, mood, setting. Claude generates professional casting brief with measurements, aesthetic references, wardrobe, logistics, usage rights, day rate context." + detail: "Domain: Module 48 - Model Recruitment | Tool: Claude + Midjourney | Difficulty: easy | Cost: $20 + $10/mo | Leverage: Attracts better talent, prevents scope creep." + resource_type: knowledge + sort_order: 37 + - name: TFP / Collaboration Negotiation Scripts + description: "AI drafts TFP or reduced-rate collaboration proposals that feel fair. Scripts for approaching models, responding to rate quotes, setting usage boundaries." + detail: "Domain: Module 48 - Model Recruitment | Tool: Claude with fashion industry context | Difficulty: easy | Cost: $20/mo | Leverage: Look experienced from your first shoot." + resource_type: knowledge + sort_order: 38 + # Module 48 - Pre-Launch & Organic Growth + - name: Pre-Launch Hype Sequence + description: "AI designs 6-week pre-launch content calendar: tease, build, buzz, launch. Claude writes every caption, CTA, and email. Schedule and execute on autopilot." + detail: "Domain: Module 48 - Pre-Launch | Tool: Claude + Typefully + Canva/Figma | Difficulty: medium | Cost: $20/mo | Leverage: Launch to demand, not into a void." + resource_type: knowledge + sort_order: 39 + - name: Organic Instagram Growth Engine + description: "AI analyzes top-performing posts, reverse-engineers patterns. Generates weekly plan: feed posts, Stories, Reels. Key: 10 genuine comments/day on adjacent accounts." + detail: "Domain: Module 48 - Pre-Launch | Tool: Claude + Later/Planoly + Insights | Difficulty: medium | Cost: $20/mo | Leverage: 200-500 new followers/week organically." + resource_type: knowledge + sort_order: 40 + - name: UGC & Micro-Influencer Outreach + description: "Identify micro-influencers (1k-20k) by analyzing hashtags, engagement, demographics. Generate personalized gifting proposals. Scale to 20-30 per month." + detail: "Domain: Module 48 - Pre-Launch | Tool: Claude + Instagram + Notion CRM | Difficulty: medium | Cost: $20/mo + product | Leverage: 3-5x better conversion than macro." + resource_type: knowledge + sort_order: 41 + - name: Email List Building & Nurture + description: "AI designs landing page copy, 5-email welcome sequence, weekly newsletter template. All in brand voice. Each email has one CTA." + detail: "Domain: Module 48 - Pre-Launch | Tool: Claude + Klaviyo/Mailchimp | Difficulty: medium | Cost: $20/mo + $0-20/mo | Leverage: Email converts 5-10x higher than social." + resource_type: knowledge + sort_order: 42 + - name: Supplier & Manufacturer Research + description: "AI researches manufacturers by product type and MOQ across regions. Drafts professional inquiry emails. Compares quotes with scoring matrix." + detail: "Domain: Module 48 - Pre-Launch | Tool: ChatGPT browsing + Claude | Difficulty: hard | Cost: $20/mo | Leverage: Research 30, contact 15, compare 8." + resource_type: knowledge + sort_order: 43 + - name: Trend & Competitor Intelligence + description: "Weekly AI scan: competitor launches, trending silhouettes/colors, trade show trends, pricing analysis. Claude synthesizes into 1-page actionable brief." + detail: "Domain: Module 48 - Pre-Launch | Tool: ChatGPT browsing + Claude | Difficulty: medium | Cost: $20/mo | Leverage: 70% of WGSN signal for $20/month." + resource_type: knowledge + sort_order: 44 + # Freelance Business + - name: Client Research & Proposal Generator + description: "Paste client's website, blog posts, job listings, tech stack. Claude generates tailored proposal with problem analysis, skill mapping, 3 pricing options." + detail: "Domain: Freelance Business | Tool: Claude + company website + LinkedIn | Difficulty: easy | Cost: $20/mo | Leverage: 25-40% close rate vs 5-10% generic." + resource_type: knowledge + sort_order: 45 + - name: Rate Benchmarking & Negotiation + description: "AI researches market rates for your exact service stack. Builds data-backed rate card with justification language." + detail: "Domain: Freelance Business | Tool: ChatGPT browsing + Claude | Difficulty: easy | Cost: $20/mo | Leverage: Most freelancers underprice by 20-40%." + resource_type: knowledge + sort_order: 46 + - name: Automated Admin & Invoicing + description: "AI designs freelance OS: project tracker, contract templates, automated invoice reminders, time tracking summaries. Claude writes SOWs from 3-line briefs." + detail: "Domain: Freelance Business | Tool: Claude + Notion/Airtable + Make.com | Difficulty: hard | Cost: $20 + $10-20/mo | Leverage: Reclaim 8-12 hours/week." + resource_type: knowledge + sort_order: 47 + - name: Portfolio & Case Study Writer + description: "For each project: what they needed, what you built, what the outcome was. Claude generates structured case study: challenge, approach, result, tech, client quote." + detail: "Domain: Freelance Business | Tool: Claude + your project data | Difficulty: easy | Cost: $20/mo | Leverage: Portfolio with case studies converts 3x better." + resource_type: knowledge + sort_order: 48 + - name: Cold Outreach at Scale + description: "Define ICP. AI identifies 100 companies/month via Apollo.io. Claude generates personalized cold emails referencing funding, product issues, job gaps. 3-email sequence." + detail: "Domain: Freelance Business | Tool: Claude + Apollo.io + Lemlist | Difficulty: hard | Cost: $20 + $50-100/mo | Leverage: 5 new conversations/month." + resource_type: knowledge + sort_order: 49 + # Language Learning (Daily) + - name: AI Conversation Partner + description: "Daily 15-minute conversation in target language. System prompt corrects grammar in-line, gives 3 repeated mistakes and 5 new vocab at session end." + detail: "Domain: Language Learning | Tool: ChatGPT Voice Mode or Claude | Difficulty: easy | Cost: $20/mo | Leverage: $30-50/hour tutor for $20/month unlimited." + resource_type: knowledge + sort_order: 50 + - name: Contextual Vocabulary Builder + description: "Tell Claude what you'll be doing this week. Get 30-40 situation-specific vocabulary words with example sentences. Export to Anki." + detail: "Domain: Language Learning | Tool: Claude + Anki | Difficulty: easy | Cost: $20/mo | Leverage: 4-5x better retention than word lists." + resource_type: knowledge + sort_order: 51 + - name: Immersion Content Curator + description: "AI curates daily immersion diet matched to your level and interests: YouTube channel, podcast, social accounts, news source in target language." + detail: "Domain: Language Learning | Tool: ChatGPT browsing + Claude | Difficulty: easy | Cost: $20/mo | Leverage: Removes the discovery problem." + resource_type: knowledge + sort_order: 52 + - name: Writing Correction Loop + description: "Write daily 100-200 word journal entry in target language. Claude returns corrected version, grammar explanations, native rephrasing, one advanced structure." + detail: "Domain: Language Learning | Tool: Claude with writing analysis | Difficulty: easy | Cost: $20/mo | Leverage: Pattern recognition for your specific errors." + resource_type: knowledge + sort_order: 53 + - name: Grammar Pattern Drilling + description: "Tell Claude which structure you struggle with. It explains with 3 examples, gives 10 fill-in exercises of increasing difficulty, corrects, repeats until 8/10 right." + detail: "Domain: Language Learning | Tool: Claude Socratic mode | Difficulty: easy | Cost: $20/mo | Leverage: Targeted drilling on YOUR weak points." + resource_type: knowledge + sort_order: 54 + # Travel & Lifestyle Optimization + - name: Flight & Hotel Deal Hunting + description: "Tell Claude destination, dates, budget. Research cheapest booking window, best travel day, nearby airports, hotel vs Airbnb, credit card points strategies." + detail: "Domain: Travel & Lifestyle | Tool: ChatGPT browsing + Google Flights + Kayak | Difficulty: easy | Cost: $20/mo | Leverage: 20-40% savings, $1,000-3,000/year." + resource_type: knowledge + sort_order: 55 + - name: City & Experience Optimizer + description: "Give Claude city, interests, budget, days. Get day-by-day itinerary optimized for geographic clustering, local favorites over tourist traps, reservation timing." + detail: "Domain: Travel & Lifestyle | Tool: Claude + Google Maps + local blogs | Difficulty: easy | Cost: $20/mo | Leverage: Local knowledge that would take 3 trips." + resource_type: knowledge + sort_order: 56 + - name: Relocation Research Assistant + description: "Claude compares cities across cost of living, tax implications, visa, quality of life, internet, coworking, social scene, healthcare. Weighted scorecard based on YOUR priorities." + detail: "Domain: Travel & Lifestyle | Tool: Claude + Numbeo + local forums | Difficulty: medium | Cost: $20/mo | Leverage: Systematic comparison across 20+ factors." + resource_type: knowledge + sort_order: 57 diff --git a/curriculum/tracks/databases.yaml b/curriculum/tracks/databases.yaml new file mode 100644 index 0000000..934bcc1 --- /dev/null +++ b/curriculum/tracks/databases.yaml @@ -0,0 +1,372 @@ +id: databases +title: Databases +description: > + Master the database landscape - SQLite internals, PostgreSQL at scale, DuckDB analytics, + NoSQL tradeoffs, architecture patterns, and interview-ready knowledge. +difficulty: intermediate +track_type: resource +modules: + - id: sqlite + title: SQLite + objective: > + Internals, advanced SQL, performance tuning, and the concurrency model - everything to master the most deployed database. + color: "#55cdff" + sort_order: 1 + resources: + - name: SQLite Official Docs + url: https://sqlite.org/docs.html + description: > + Authoritative reference for every SQL feature, PRAGMA, and API. + detail: > + Start here for any SQLite question - the docs are unusually clear. + sort_order: 1 + - name: How SQLite Works (Fly.io) + url: https://fly.io/blog/sqlite-internals-btree/ + description: > + Deep dive into B-tree page layout, cell format, and how SQLite stores data on disk. + detail: > + Read this to understand what happens under SELECT and INSERT at the page level. + sort_order: 2 + - name: SQLite Performance Tuning (phiresky) + url: https://phiresky.github.io/blog/2020/sqlite-performance-tuning/ + description: > + Practical PRAGMA settings and schema patterns for 10-100x speedups. + detail: > + Apply these PRAGMAs to any new SQLite project - they compound. + sort_order: 3 + - name: SQLite Concurrency (10000 Meters) + url: https://www.sqlite.org/wal.html + description: > + WAL mode, reader-writer concurrency, checkpointing, and lock states. + detail: > + Essential for understanding why WAL is the default for server workloads. + sort_order: 4 + - name: SQLite FTS5 Docs + url: https://sqlite.org/fts5.html + description: > + Full-text search engine built into SQLite - tokenizers, ranking, and snippets. + detail: > + Use when you need search without adding Elasticsearch. + sort_order: 5 + - name: CMU Database Group - SQLite + url: https://www.youtube.com/watch?v=gpxnbly9bz4 + description: > + Andy Pavlo's lecture on SQLite internals - architecture, VDBE, and design philosophy. + detail: > + Best single video for understanding SQLite's architecture end-to-end. + sort_order: 6 + + - id: postgresql + title: PostgreSQL + objective: > + When and why Postgres, key extensions, JSONB, partitioning, and the features that make it the default choice. + color: "#ffc47c" + sort_order: 2 + resources: + - name: PostgreSQL Official Docs + url: https://www.postgresql.org/docs/current/ + description: > + Comprehensive reference - the gold standard for database docs. + detail: > + Bookmark the index and query planner chapters. + sort_order: 1 + - name: pgvector + url: https://github.com/pgvector/pgvector + description: > + Vector similarity search in Postgres - IVFFlat, HNSW indexes for embeddings. + detail: > + Use when you need vector search without a separate vector DB. + sort_order: 2 + - name: Crunchy Data Blog + url: https://www.crunchydata.com/blog + description: > + Production Postgres patterns, extensions, and performance deep dives. + detail: > + Best blog for practical Postgres knowledge beyond the docs. + sort_order: 3 + - name: pganalyze + url: https://pganalyze.com/docs + description: > + Query performance analysis, index advisor, and EXPLAIN visualization. + detail: > + Use their EXPLAIN visualizer to debug slow queries. + sort_order: 4 + - name: Just Use Postgres (Stephan Schmidt) + url: https://www.amazingcto.com/postgres-for-everything/ + description: > + The case for Postgres as your only database - queue, cache, search, and more. + detail: > + Read for the architectural argument, then know when to break the rule. + sort_order: 5 + - name: PostGIS + url: https://postgis.net/documentation/ + description: > + Geospatial extension - spatial indexes, distance queries, geometry types. + detail: > + Mandatory knowledge if you touch location-based features. + sort_order: 6 + + - id: duckdb + title: DuckDB + objective: > + Columnar analytics in-process - vectorized execution, zero-copy Parquet, and when to reach for it over SQLite or Pandas. + color: "#5bb86e" + sort_order: 3 + resources: + - name: DuckDB Official Docs + url: https://duckdb.org/docs/ + description: > + Complete reference for SQL dialect, data import, Python API, and extensions. + detail: > + The docs are excellent - check here first for any feature. + sort_order: 1 + - name: MotherDuck Blog + url: https://motherduck.com/blog/ + description: > + Cloud DuckDB service - hybrid execution, sharing, and production patterns. + detail: > + Read for the serverless analytics architecture vision. + sort_order: 2 + - name: DuckDB vs SQLite vs Pandas + url: https://duckdb.org/why_duckdb.html + description: > + Why DuckDB exists - the gap between SQLite (OLTP) and Pandas (single-threaded). + detail: > + Read to understand when DuckDB is the right tool vs alternatives. + sort_order: 3 + - name: DuckDB + Arrow Integration + url: https://duckdb.org/docs/guides/python/sql_on_arrow.html + description: > + Zero-copy querying of Arrow tables - no data movement overhead. + detail: > + Key pattern for integrating DuckDB into data pipelines. + sort_order: 4 + - name: endjin DuckDB Deep Dive + url: https://endjin.com/blog/2024/10/the-ultimate-guide-to-duckdb + description: > + Architecture overview, vectorized execution engine, and extension system. + detail: > + Best single article for understanding DuckDB internals. + sort_order: 5 + + - id: mongodb_redis + title: MongoDB & Redis + objective: > + Document model fit and antifit, Redis data structures, caching patterns, and the DynamoDB comparison. + color: "#eb5757" + sort_order: 4 + resources: + - name: MongoDB University + url: https://learn.mongodb.com/ + description: > + Free courses on document modeling, aggregation, indexing, and Atlas. + detail: > + Take the M001 and M320 (data modeling) courses. + sort_order: 1 + - name: Redis University + url: https://university.redis.io/ + description: > + Free courses on data structures, caching, streams, and search. + detail: > + Focus on RU101 (intro) and RU202 (streams) for interview prep. + sort_order: 2 + - name: Redis Data Structures + url: https://redis.io/docs/latest/develop/data-types/ + description: > + Complete guide to strings, hashes, lists, sets, sorted sets, streams, and HyperLogLog. + detail: > + Know when to use each data structure - this is the Redis interview question. + sort_order: 3 + - name: DynamoDB Guide (Alex DeBrie) + url: https://www.dynamodbguide.com/ + description: > + Single-table design, access patterns, GSI strategies, and the DynamoDB mental model. + detail: > + Essential if interviewing at AWS shops or building serverless. + sort_order: 4 + - name: MongoDB Schema Design Patterns + url: https://www.mongodb.com/blog/post/building-with-patterns-a-summary + description: > + Bucket, computed, subset, extended reference, and other schema patterns. + detail: > + Know when to embed vs reference - the core modeling decision. + sort_order: 5 + + - id: architecture + title: Architecture Patterns + objective: > + Polyglot persistence, CQRS, event sourcing, cache-aside, and the patterns that connect databases to systems. + color: "#5e6ad2" + sort_order: 5 + resources: + - name: Designing Data-Intensive Applications + url: https://dataintensive.net + description: > + The bible of data systems - replication, partitioning, consistency, and batch/stream processing. + detail: > + Read chapters 5-9 for distributed database fundamentals. + sort_order: 1 + - name: microservices.io Patterns + url: https://microservices.io/patterns/data/database-per-service.html + description: > + Database-per-service, saga, CQRS, event sourcing, and API composition patterns. + detail: > + Reference catalog for data patterns in microservices. + sort_order: 2 + - name: Martin Fowler - CQRS + url: https://martinfowler.com/bliki/CQRS.html + description: > + Command Query Responsibility Segregation - separate read and write models. + detail: > + Start here before diving into event sourcing. Understand why, not just how. + sort_order: 3 + - name: AWS Well-Architected (Data) + url: https://docs.aws.amazon.com/wellarchitected/latest/framework/perf-data.html + description: > + Purpose-built databases, caching strategies, and data access patterns. + detail: > + Good mental model for picking managed database services. + sort_order: 4 + - name: Event Sourcing (Greg Young) + url: https://www.eventstore.com/event-sourcing + description: > + Store events, not state. Derive current state by replaying the event log. + detail: > + Know the tradeoffs: full audit trail vs query complexity and storage growth. + sort_order: 5 + + - id: comparison + title: Comparison + objective: > + A decision framework for picking the right database - the 10-database matrix and the 'just use Postgres' analysis. + color: "#f472b6" + sort_order: 6 + resources: + - name: DB-Engines Ranking + url: https://db-engines.com/en/ranking + description: > + Monthly popularity rankings across all database categories. + detail: > + Check trends, not absolute numbers. Useful for context. + sort_order: 1 + - name: DataCamp - DuckDB vs SQLite + url: https://www.datacamp.com/blog/duckdb-vs-sqlite + description: > + Head-to-head comparison of the two embedded databases for different workloads. + detail: > + Good framework for explaining OLTP vs OLAP tradeoffs in interviews. + sort_order: 2 + - name: Stack Overflow Developer Survey + url: https://survey.stackoverflow.co/2024/#technology-most-popular-technologies + description: > + What developers actually use - database popularity by usage. + detail: > + Reference for market demand and hiring trends. + sort_order: 3 + - name: CMU Database Group Lectures + url: https://15445.courses.cs.cmu.edu/ + description: > + Andy Pavlo's database systems course - the best free database internals education. + detail: > + Watch the storage, indexing, and query processing lectures. + sort_order: 4 + - name: Use The Index, Luke + url: https://use-the-index-luke.com/ + description: > + SQL indexing and tuning explained with B-tree internals. Database-agnostic. + detail: > + Best single resource for understanding how indexes work. + sort_order: 5 + + - id: local_first + title: Local-First & Edge + objective: > + SQLite at the edge - Litestream, Turso, cr-sqlite, Electric SQL, and the local-first movement. + color: "#4ade80" + sort_order: 7 + resources: + - name: Local-First Software (Ink & Switch) + url: https://www.inkandswitch.com/local-first/ + description: > + The foundational paper on local-first principles - ownership, collaboration, longevity. + detail: > + Read this first to understand the philosophy before the tools. + sort_order: 1 + - name: Litestream + url: https://litestream.io/ + description: > + Continuous streaming replication of SQLite to S3/GCS/Azure. Disaster recovery for embedded DBs. + detail: > + Use for any production SQLite deployment that needs backup. + sort_order: 2 + - name: Turso (libSQL) + url: https://turso.tech/ + description: > + Edge-replicated SQLite fork. Embedded replicas with server-side primary. + detail: > + Evaluate for multi-region apps that want SQLite's simplicity at the edge. + sort_order: 3 + - name: Electric SQL + url: https://electric-sql.com/ + description: > + Postgres-to-SQLite sync. Active-active local-first with Postgres as the source of truth. + detail: > + Most mature Postgres-to-local sync for offline-first apps. + sort_order: 4 + - name: cr-sqlite + url: https://github.com/vlcn-io/cr-sqlite + description: > + CRDT-based merge for SQLite. Multi-writer conflict resolution without a server. + detail: > + Study for understanding how CRDTs apply to relational data. + sort_order: 5 + - name: sqlite-vec + url: https://github.com/asg017/sqlite-vec + description: > + Vector search extension for SQLite. KNN queries on embeddings in-process. + detail: > + Use for local RAG systems or embedded ML applications. + sort_order: 6 + + - id: interviews + title: Interview Prep + objective: > + ACID with real failures, CAP theorem, isolation levels, indexing strategies, and system design decisions. + color: "#55cdff" + sort_order: 8 + resources: + - name: Designing Data-Intensive Applications + url: https://dataintensive.net + description: > + The single most important book for database and distributed systems interviews. + detail: > + Read at least chapters 2, 3, 5, 7, and 9 before any senior interview. + sort_order: 1 + - name: NeetCode SQL + url: https://neetcode.io/practice + description: > + Curated SQL practice problems organized by pattern and difficulty. + detail: > + Do 2-3 problems daily to build SQL muscle memory. + sort_order: 2 + - name: DataLemur + url: https://datalemur.com/ + description: > + SQL interview questions from FAANG companies with detailed solutions. + detail: > + Focus on window functions and CTEs - they dominate interviews. + sort_order: 3 + - name: System Design Interview (Alex Xu) + url: https://www.amazon.com/System-Design-Interview-insiders-Second/dp/B08CMF2CQF + description: > + Database-heavy system design cases - URL shortener, chat, feed, rate limiter. + detail: > + Practice the database schema design for each case study. + sort_order: 4 + - name: Use The Index, Luke + url: https://use-the-index-luke.com/ + description: > + B-tree indexing explained visually. Covers composite indexes, partial indexes, and query plans. + detail: > + Best resource for answering 'how would you optimize this query?'. + sort_order: 5 diff --git a/curriculum/tracks/embodied-ai.yaml b/curriculum/tracks/embodied-ai.yaml new file mode 100644 index 0000000..a9744cc --- /dev/null +++ b/curriculum/tracks/embodied-ai.yaml @@ -0,0 +1,425 @@ +id: embodied-ai +title: Embodied AI +description: > + Explore the full landscape of AI in the physical world - world models, robot + foundation models, humanoid robotics, service robots, autonomous vehicles, + agentic automation, edge inference, and the physical AI industry. +difficulty: intermediate +track_type: resource +modules: + - id: world_models + title: World Models + objective: > + How AI learns to predict and plan in the physical world - not just process text. + color: "#55cdff" + sort_order: 1 + resources: + - name: Yann LeCun - AMI Labs (Meta) + url: https://ai.meta.com/blog/v-jepa-yann-lecun-ai-model-video-joint-embedding-predictive-architecture/ + description: > + JEPA architecture for learning world models through latent prediction rather + than pixel generation. + detail: > + Study the theoretical foundation: why LeCun argues world models, not + autoregressive token prediction, are the path to AMI. + sort_order: 1 + - name: World Labs (Fei-Fei Li) + url: https://www.worldlabs.ai + description: > + Spatial intelligence startup building large world models for 3D scene + understanding and generation. + detail: > + Track the spatial AI thesis and how it differs from language-first + approaches. + sort_order: 2 + - name: NVIDIA Cosmos + url: https://developer.nvidia.com/cosmos + description: > + World foundation models for physical AI - video generation, driving + simulation, and robotics planning. + detail: > + Study how Cosmos bridges simulation and real-world prediction for embodied + systems. + sort_order: 3 + - name: Google DeepMind Genie 2 + url: https://deepmind.google/discover/blog/genie-2-a-large-scale-foundation-world-model/ + description: > + Foundation world model generating interactive 3D environments from single + images. + detail: > + Understand action-conditioned generation and how it enables training + embodied agents in imagination. + sort_order: 4 + - name: DreamerV3 + url: https://danijar.com/project/dreamerv3/ + description: > + Model-based RL agent that learns a world model and achieves human-level play + across diverse domains. + detail: > + The canonical reference for world-model-based reinforcement learning in + embodied settings. + sort_order: 5 + + - id: core + title: Embodied AI + objective: > + From simulation to real robots - physical reasoning, manipulation, and + navigation. + color: "#ffc47c" + sort_order: 2 + resources: + - name: Google DeepMind Robotics + url: https://deepmind.google/discover/blog/?category=robotics + description: > + RT-2, RT-X, and foundation models for robot control via language grounding. + detail: > + Track how vision-language-action models are closing the sim-to-real gap. + sort_order: 1 + - name: NVIDIA Isaac Sim + url: https://developer.nvidia.com/isaac-sim + description: > + GPU-accelerated simulation for training robot policies at scale before + physical deployment. + detail: > + Study sim-to-real transfer pipelines and domain randomization. + sort_order: 2 + - name: Open X-Embodiment + url: https://robotics-transformer-x.github.io + description: > + Cross-embodiment dataset and models enabling knowledge transfer across + different robot platforms. + detail: > + Understand how shared datasets unlock generalization across robot + morphologies. + sort_order: 3 + - name: Hugging Face LeRobot + url: https://github.com/huggingface/lerobot + description: > + Open-source toolkit for real-world robotics with pretrained policies and + datasets. + detail: > + Hands-on practice with imitation learning and policy fine-tuning. + sort_order: 4 + - name: Physical Intelligence (pi) + url: https://www.physicalintelligence.company + description: > + Building general-purpose robot foundation models trained on diverse physical + tasks. + detail: > + Watch for breakthroughs in generalist manipulation policies. + sort_order: 5 + + - id: humanoid + title: Humanoid Robotics + objective: > + The race to build robots that work alongside people - Atlas, Optimus, Figure, + and more. + color: "#5bb86e" + sort_order: 3 + resources: + - name: Figure AI + url: https://www.figure.ai + description: > + Figure 02 humanoid with OpenAI partnership for conversational reasoning and + autonomous task execution. + detail: > + Study the LLM-to-actuator pipeline and BMW factory deployment. + sort_order: 1 + - name: Tesla Optimus + url: https://www.tesla.com/optimus + description: > + Leveraging Tesla FSD neural nets and Dojo for humanoid robot perception and + control. + detail: > + Track the vertical integration play: AI chips, data, and manufacturing at + scale. + sort_order: 2 + - name: Boston Dynamics Atlas + url: https://bostondynamics.com/atlas + description: > + Electric Atlas with advanced manipulation, whole-body control, and industrial + applications. + detail: > + Study the transition from hydraulic research platform to commercial electric + humanoid. + sort_order: 3 + - name: 1X Technologies + url: https://www.1x.tech + description: > + NEO humanoid designed for home environments with learned behaviors from + neural network policies. + detail: > + Watch the consumer humanoid market thesis and safety approach. + sort_order: 4 + - name: Agility Robotics Digit + url: https://agilityrobotics.com + description: > + Purpose-built for warehouse logistics with Amazon deployment partnership. + detail: > + Study the focused use-case strategy vs general-purpose humanoids. + sort_order: 5 + - name: Unitree + url: https://www.unitree.com + description: > + Low-cost humanoid and quadruped robots making embodied AI accessible for + research and deployment. + detail: > + Track the cost disruption angle: $16K humanoid vs $100K+ competitors. + sort_order: 6 + + - id: service + title: Service Robotics + objective: > + Robots already at work - restaurants, hospitals, warehouses, and last-mile + delivery. + color: "#eb5757" + sort_order: 4 + resources: + - name: Bear Robotics Servi + url: https://www.bearrobotics.ai + description: > + Autonomous food service robots deployed in restaurants, hotels, and casinos. + detail: > + Study the unit economics of robot waitstaff vs human labor costs. + sort_order: 1 + - name: Savioke Relay + url: https://www.savioke.com + description: > + Autonomous delivery robots for hotels, hospitals, and high-rises. + detail: > + Track the hospitality automation ROI and guest experience data. + sort_order: 2 + - name: Nuro + url: https://www.nuro.ai + description: > + Purpose-built autonomous delivery vehicles for groceries, food, and packages. + detail: > + Study the regulatory path for driverless delivery on public roads. + sort_order: 3 + - name: Serve Robotics + url: https://www.serverobotics.com + description: > + Sidewalk delivery robots partnered with Uber Eats for last-mile autonomous + delivery. + detail: > + Track the Uber partnership and sidewalk autonomy regulatory landscape. + sort_order: 4 + - name: Diligent Robotics Moxi + url: https://www.diligentrobots.com + description: > + Hospital service robot handling supply delivery, reducing nurse walking time + by 30%. + detail: > + Study healthcare labor augmentation and clinical workflow integration. + sort_order: 5 + + - id: autonomous + title: Autonomous Systems + objective: > + Vehicles and drones that navigate the real world without a human at the wheel. + color: "#5e6ad2" + sort_order: 5 + resources: + - name: Waymo + url: https://waymo.com + description: > + Fully autonomous ride-hailing in San Francisco, Phoenix, LA. Most mature + commercial self-driving. + detail: > + Study the sensor fusion stack and how they achieved commercial scale. + sort_order: 1 + - name: Tesla FSD + url: https://www.tesla.com/autopilot + description: > + Vision-only self-driving using end-to-end neural networks trained on fleet + data. + detail: > + Track the camera-only vs lidar debate and real-world safety data. + sort_order: 2 + - name: Cruise + url: https://www.getcruise.com + description: > + GM-backed autonomous vehicles with urban robotaxi operations. + detail: > + Study the regulatory setbacks and recovery strategy post-2023 incidents. + sort_order: 3 + - name: Skydio + url: https://www.skydio.com + description: > + Autonomous drones for infrastructure inspection, public safety, and defense. + detail: > + Study the enterprise drone autonomy stack and computer vision pipeline. + sort_order: 4 + - name: Zipline + url: https://www.flyzipline.com + description: > + Autonomous drone delivery for medical supplies and consumer goods at national + scale. + detail: > + Track the longest-running commercial drone delivery operation globally. + sort_order: 5 + + - id: agentic + title: Agentic Automation + objective: > + AI doing the work of knowledge workers - customer service, back-office, and + beyond. + color: "#f472b6" + sort_order: 6 + resources: + - name: Sierra AI + url: https://sierra.ai + description: > + Enterprise AI agents for customer service replacing traditional contact + centers. Founded by Bret Taylor. + detail: > + Study the conversational AI agent architecture for enterprise support. + sort_order: 1 + - name: Decagon + url: https://decagon.ai + description: > + AI customer support agents with enterprise-grade reliability and compliance. + detail: > + Track how AI agents handle edge cases, escalation, and knowledge grounding. + sort_order: 2 + - name: UiPath + url: https://www.uipath.com + description: > + RPA platform evolving into AI-powered agentic automation for enterprise + workflows. + detail: > + Study the RPA-to-AI-agent evolution and enterprise adoption. + sort_order: 3 + - name: Anthropic Computer Use + url: https://docs.anthropic.com/en/docs/agents-and-tools/computer-use + description: > + Claude operating computers via screenshots and mouse/keyboard - + general-purpose digital agent. + detail: > + Study the computer-use paradigm: how LLMs interact with arbitrary software. + sort_order: 4 + - name: Cognition Devin + url: https://www.cognition.ai + description: > + Autonomous AI software engineer handling full development tasks end-to-end. + detail: > + Track the software engineering agent benchmark and real-world adoption. + sort_order: 5 + - name: Adept AI + url: https://www.adept.ai + description: > + AI agents that interact with enterprise software through natural language + commands. + detail: > + Study the action model approach: training AI to use software like humans do. + sort_order: 6 + + - id: edge_inference + title: Edge Inference + objective: > + Run models on tiny hardware at real-time speed - the last mile from training + to deployment. + color: "#4ade80" + sort_order: 7 + resources: + - name: NVIDIA TensorRT + url: https://developer.nvidia.com/tensorrt + description: > + High-performance deep learning inference optimizer and runtime for NVIDIA + GPUs - the standard for production edge deployment. + detail: > + Learn the full pipeline: PyTorch to ONNX to TensorRT engine. Master INT8 + calibration and layer fusion. + sort_order: 1 + - name: ONNX Runtime + url: https://onnxruntime.ai + description: > + Cross-platform inference engine supporting CPU, GPU, and NPU hardware. The + universal intermediate format for model deployment. + detail: > + Use as the portable inference layer: export once to ONNX, deploy anywhere + (Jetson, x86, ARM, browser). + sort_order: 2 + - name: NVIDIA Jetson Orin + url: https://developer.nvidia.com/embedded/jetson-orin + description: > + Edge AI computer for robotics - up to 275 TOPS in 60W. The standard + hardware for on-device robot inference. + detail: > + Target platform for proof projects. Orin Nano ($250) for entry, Orin NX for + production robots. + sort_order: 3 + - name: Qualcomm AI Hub + url: https://aihub.qualcomm.com + description: > + Optimize and deploy models on Qualcomm Snapdragon chips - phones, XR + headsets, IoT devices, and drones. + detail: > + Study the mobile/drone edge inference stack. Relevant for autonomous drones + and wearable AI. + sort_order: 4 + - name: Apache TVM + url: https://tvm.apache.org + description: > + Open-source compiler framework that optimizes ML models for any hardware + backend (CPU, GPU, FPGA, custom accelerators). + detail: > + Deep dive into how model compilation works across hardware targets. Advanced + but fundamental knowledge. + sort_order: 5 + - name: ExecuTorch (Meta) + url: https://pytorch.org/executorch + description: > + PyTorch's on-device inference framework - deploy PyTorch models to mobile, + embedded, and edge with minimal changes. + detail: > + The PyTorch-native path to edge: no ONNX export needed. Watch for robotics + adoption alongside LeRobot. + sort_order: 6 + + - id: physical-ai + title: Physical AI + objective: > + Prep for the next wave of AI roles - world models, sim-to-real, 3D vision, + and physical AI. + color: "#ffc47c" + sort_order: 8 + resources: + - name: NVIDIA Physical AI + url: https://developer.nvidia.com/physical-ai + description: > + NVIDIA's physical AI platform: Isaac Sim, Cosmos, and the full sim-to-real + stack. + detail: > + Study the end-to-end pipeline from simulation to real-world robot deployment. + sort_order: 1 + - name: World Labs + url: https://www.worldlabs.ai + description: > + Fei-Fei Li's spatial intelligence company building large world models. + detail: > + Track the spatial AI thesis and job openings in this space. + sort_order: 2 + - name: Figure AI Careers + url: https://www.figure.ai/careers + description: > + Humanoid robotics company hiring for world model, perception, and control + roles. + detail: > + Study their job descriptions to understand the skill requirements for + physical AI roles. + sort_order: 3 + - name: Physical Intelligence (pi) + url: https://www.physicalintelligence.company + description: > + General-purpose robot foundation models. Raised $400M+. + detail: > + Track the company building the GPT moment for robotics. + sort_order: 4 + - name: 1X Technologies + url: https://www.1x.tech + description: > + NEO humanoid built with learned neural network policies. + detail: > + Study the consumer humanoid thesis and their ML-first approach. + sort_order: 5 diff --git a/curriculum/tracks/freelance-strategy.yaml b/curriculum/tracks/freelance-strategy.yaml new file mode 100644 index 0000000..2656e77 --- /dev/null +++ b/curriculum/tracks/freelance-strategy.yaml @@ -0,0 +1,156 @@ +id: freelance-strategy +title: Freelance Strategy +description: > + Build a sustainable freelance practice - positioning, pricing, and growth. +difficulty: intermediate +track_type: resource +modules: + - id: realtime_systems + title: Real-Time Systems + objective: > + Build AI products that feel instant - streaming UX, event pipelines, and low-latency infra. + color: "#55cdff" + sort_order: 1 + resources: + - name: LiveKit + url: https://livekit.io + description: Real-time transport infrastructure for audio, video, and data channels used in interactive AI products. + detail: Useful when you need low-latency sessions. Voice is one use case, not the only one. + sort_order: 1 + - name: Ably + url: https://ably.com/docs + description: Managed pub/sub and WebSocket infrastructure with global edge fan-out and delivery guarantees. + detail: Great for shipping real-time updates fast without running custom socket infrastructure. + sort_order: 2 + - name: NATS + url: https://docs.nats.io + description: Lightweight event bus for low-latency messaging, request/reply, and streaming via JetStream. + detail: Strong choice for control planes, internal signaling, and event-driven AI workers. + sort_order: 3 + - name: Apache Kafka + url: https://kafka.apache.org/documentation/ + description: Durable event streaming for high-throughput pipelines, replayable logs, and consumer groups. + detail: Best when you need auditable event history and independent downstream consumers. + sort_order: 4 + - name: MDN WebSocket API + url: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API + description: Core browser/server bidirectional transport for live UX, streaming updates, and control messages. + detail: Know heartbeats, reconnect strategy, auth refresh, and backpressure handling. + sort_order: 5 + - name: Cloudflare Durable Objects + url: https://developers.cloudflare.com/durable-objects/ + description: Stateful edge compute for room/session coordination and shared low-latency state. + detail: Useful for collaborative AI, session routing, and deterministic per-session state handling. + sort_order: 6 + + - id: apis_at_scale + title: APIs at Scale + objective: > + Design APIs that handle real traffic - rate limiting, caching, observability, and scaling. + color: "#ffc47c" + sort_order: 2 + resources: + - name: Kong Gateway + url: https://docs.konghq.com + description: "API gateway: rate limiting, auth, load balancing, observability plugins, and service mesh integration." + detail: Know gateway patterns cold. Most production APIs sit behind Kong, Envoy, or AWS API Gateway. + sort_order: 1 + - name: gRPC Documentation + url: https://grpc.io/docs/ + description: "High-performance RPC framework: protobuf, streaming, deadlines, and service-to-service communication." + detail: gRPC is the default for internal APIs at scale. Practice protobuf schemas and bidirectional streaming. + sort_order: 2 + - name: Designing Data-Intensive Applications + url: https://dataintensive.net + description: "The bible for distributed systems: replication, partitioning, consistency, and batch/stream processing." + detail: Read chapters on replication and partitioning. Every system design interview draws from this book. + sort_order: 3 + - name: FastAPI + url: https://fastapi.tiangolo.com + description: "Modern Python API framework: async, type hints, auto-docs, WebSocket support, and dependency injection." + detail: The go-to for Python ML/AI APIs. Know how to structure a production FastAPI service with middleware. + sort_order: 4 + - name: Hono + url: https://hono.dev + description: "Ultra-fast edge-first web framework: works on Cloudflare Workers, Deno, Bun, and Node. TypeScript-native." + detail: Increasingly used for high-performance TypeScript APIs. Study the middleware and edge deployment patterns. + sort_order: 5 + + - id: ai_agent_infra + title: AI Agent Infra + objective: > + Ship AI agents that work at scale - orchestration, guardrails, cost control, and deployment. + color: "#5bb86e" + sort_order: 3 + resources: + - name: LangGraph + url: https://langchain-ai.github.io/langgraph/ + description: "Stateful agent orchestration: graph-based workflows, checkpointing, human-in-the-loop, and multi-agent coordination." + detail: The leading framework for production agent architectures. Study graph topologies and state management. + sort_order: 1 + - name: CrewAI + url: https://docs.crewai.com + description: Multi-agent orchestration with role-based agents, task delegation, and process management. + detail: Simpler than LangGraph for multi-agent setups. Study the role/task/process abstraction. + sort_order: 2 + - name: Anthropic Tool Use Docs + url: https://docs.anthropic.com/en/docs/build-with-claude/tool-use + description: "Claude's native tool calling: function definitions, structured outputs, and multi-turn tool use patterns." + detail: Master tool-use patterns. This is the core primitive for every AI agent. + sort_order: 3 + - name: OpenAI Assistants API + url: https://platform.openai.com/docs/assistants/overview + description: "Managed agent infrastructure: threads, runs, tools, file search, and code interpreter." + detail: Understand what managed agent APIs abstract vs what you'd build custom at a startup. + sort_order: 4 + - name: Letta (MemGPT) + url: https://docs.letta.com + description: Stateful agent framework with persistent memory, tool execution, and long-running agent deployment. + detail: Study the memory architecture - long-term memory is the hardest unsolved problem in production agents. + sort_order: 5 + - name: Temporal + url: https://temporal.io + description: "Durable execution engine: workflow orchestration, retries, timeouts, and exactly-once execution guarantees." + detail: Not AI-specific but critical for production agents. Temporal solves the reliability layer that agents need. + sort_order: 6 + + - id: production_hardening + title: Production Hardening + objective: > + Make your system survive production - observability, deployments, incidents, and chaos testing. + color: "#eb5757" + sort_order: 4 + resources: + - name: Grafana + Prometheus Stack + url: https://grafana.com/docs/grafana/latest/ + description: "Open-source observability: metrics (Prometheus), logs (Loki), traces (Tempo), and dashboards (Grafana)." + detail: The default observability stack. Know how to instrument a service and build actionable dashboards. + sort_order: 1 + - name: OpenTelemetry + url: https://opentelemetry.io/docs/ + description: "Vendor-neutral telemetry standard: traces, metrics, and logs with auto-instrumentation for major frameworks." + detail: OTel is the standard. Learn to instrument Python and TypeScript services with spans and custom metrics. + sort_order: 2 + - name: Google SRE Books + url: https://sre.google/books/ + description: "Site Reliability Engineering canon: SLOs, error budgets, toil reduction, incident response, and on-call practices." + detail: Read chapters on SLOs, monitoring, and incident management. These concepts come up in every production role. + sort_order: 3 + - name: k6 Load Testing + url: https://k6.io/docs/ + description: "Modern load testing: scripted scenarios, thresholds, CI integration, and distributed testing." + detail: Know how to load test an API before launch. Practice writing k6 scripts with realistic traffic patterns. + sort_order: 4 + - name: Fly.io / Railway + url: https://fly.io/docs/ + description: "Edge deployment platforms: containers, global distribution, auto-scaling, and production Postgres." + detail: Know how to deploy and scale services globally. Practice zero-downtime deployments. + sort_order: 5 + + - id: positioning + title: Positioning + objective: > + Become the obvious hire - proof projects, outreach strategy, and what signals top 0.01%. + color: "#5e6ad2" + sort_order: 5 + resources: [] diff --git a/curriculum/tracks/frontend-engineering.yaml b/curriculum/tracks/frontend-engineering.yaml new file mode 100644 index 0000000..e5fcadd --- /dev/null +++ b/curriculum/tracks/frontend-engineering.yaml @@ -0,0 +1,357 @@ +id: frontend-engineering +title: Frontend Engineering +description: > + Deep reference for modern frontend development - state management, component patterns, + data fetching, performance, TypeScript, testing, and architecture at scale. +difficulty: intermediate +track_type: resource +modules: + - id: state + title: State Management + objective: > + The five kinds of state, when to reach for a library, and patterns that keep your app predictable. + color: "#55cdff" + sort_order: 1 + resources: + - name: Zustand + url: https://github.com/pmndrs/zustand + description: > + Minimal, unopinionated state management with a hooks-first API and no boilerplate. + detail: > + Start here for most apps. Understand slices, selectors, and middleware (persist, devtools). + sort_order: 1 + - name: Jotai + url: https://jotai.org + description: > + Atomic state primitives inspired by Recoil - bottom-up, composable, and TypeScript-native. + detail: > + Best for derived state and when you want fine-grained reactivity without selectors. + sort_order: 2 + - name: XState + url: https://stately.ai/docs/xstate + description: > + Finite state machines and statecharts for complex UI flows with visualizable logic. + detail: > + Use for multi-step forms, auth flows, or any UI with more than 3 states and transitions between them. + sort_order: 3 + - name: TanStack Store + url: https://tanstack.com/store + description: > + Framework-agnostic reactive store from the TanStack ecosystem. + detail: > + Useful when you need a store that works across React, Solid, Vue - or as a learning model for signals. + sort_order: 4 + - name: Valtio + url: https://github.com/pmndrs/valtio + description: > + Proxy-based state that feels like mutable JavaScript but triggers React re-renders automatically. + detail: > + Good mental model for understanding proxy-based reactivity. Compare with MobX's approach. + sort_order: 5 + - name: Legend State + url: https://legendapp.com/open-source/state/v3/ + description: > + Signal-based state with fine-grained reactivity, persistence plugins, and sync adapters. + detail: > + Study the fine-grained reactivity model - it's where React state management is heading. + sort_order: 6 + + - id: components + title: Component Patterns + objective: > + Composition, compound components, headless UI, and hooks that make components reusable without over-abstraction. + color: "#ffc47c" + sort_order: 2 + resources: + - name: Radix Primitives + url: https://www.radix-ui.com/primitives + description: > + Unstyled, accessible UI primitives with compound component patterns and data-attribute styling. + detail: > + The gold standard for headless components. Study how they compose with asChild and manage focus. + sort_order: 1 + - name: React Aria (Adobe) + url: https://react-spectrum.adobe.com/react-aria/ + description: > + Hook-based accessibility primitives that separate behavior from rendering entirely. + detail: > + Read the hooks source to understand how ARIA patterns work under the hood. + sort_order: 2 + - name: Headless UI + url: https://headlessui.com + description: > + Tailwind Labs' unstyled, accessible components designed for Tailwind CSS integration. + detail: > + Compare with Radix - same problem, different API surface. Understand the tradeoffs. + sort_order: 3 + - name: Downshift + url: https://github.com/downshift-js/downshift + description: > + Primitives for building accessible combobox, select, and autocomplete components. + detail: > + A masterclass in the render prop and hooks patterns for maximum flexibility. + sort_order: 4 + - name: Shadcn/ui + url: https://ui.shadcn.com + description: > + Copy-paste component collection built on Radix + Tailwind. Own your components, no npm dependency. + detail: > + Study how it wraps Radix primitives with Tailwind styling - it's the modern component library pattern. + sort_order: 5 + - name: Ark UI + url: https://ark-ui.com + description: > + Headless component library from the Chakra team, built on state machines (Zag.js). + detail: > + Compare with Radix and React Aria - state machine-driven components are a different paradigm. + sort_order: 6 + + - id: data_layer + title: Data Layer + objective: > + Fetching, caching, mutations, optimistic updates, and real-time sync - everything between your UI and your API. + color: "#5bb86e" + sort_order: 3 + resources: + - name: TanStack Query + url: https://tanstack.com/query + description: > + Server state management - caching, deduplication, background refetching, optimistic updates. + detail: > + Understand stale-while-revalidate, query keys, mutations, and infinite queries. The mental model matters more than the API. + sort_order: 1 + - name: SWR + url: https://swr.vercel.app + description: > + Lightweight data fetching with stale-while-revalidate strategy from Vercel. + detail: > + Compare with TanStack Query - simpler API, fewer features. Good for understanding the core SWR pattern. + sort_order: 2 + - name: tRPC + url: https://trpc.io + description: > + End-to-end typesafe APIs without code generation - your backend types flow to the frontend. + detail: > + Study how it eliminates the API contract layer. Pairs with TanStack Query under the hood. + sort_order: 3 + - name: Relay + url: https://relay.dev + description: > + Meta's GraphQL client with compiler-driven data fetching and fragment colocation. + detail: > + The most opinionated client. Study fragment colocation and how it solves the waterfall problem. + sort_order: 4 + - name: Apollo Client + url: https://www.apollographql.com/docs/react + description: > + Full-featured GraphQL client with normalized caching, local state, and reactive variables. + detail: > + Understand normalized cache vs document cache (TanStack Query). Know when GraphQL is worth the complexity. + sort_order: 5 + - name: Ky + url: https://github.com/sindresorhus/ky + description: > + Tiny HTTP client built on fetch with retries, hooks, JSON shortcuts, and timeout handling. + detail: > + When you don't need a caching layer - just a better fetch. Good for understanding what fetch lacks. + sort_order: 6 + + - id: performance + title: Performance + objective: > + React's rendering model, memoization traps, virtualization, code splitting, and making 60fps feel effortless. + color: "#eb5757" + sort_order: 4 + resources: + - name: React Compiler + url: https://react.dev/learn/react-compiler + description: > + Automatic memoization at build time - the compiler decides what to memo so you don't have to. + detail: > + Understand what it auto-memoizes and what it can't. This is where manual useMemo/useCallback is heading. + sort_order: 1 + - name: Million.js + url: https://million.dev + description: > + Block virtual DOM that makes React components up to 70% faster by compiling away diffing. + detail: > + Study the block virtual DOM concept - it's a different approach to React performance than memoization. + sort_order: 2 + - name: TanStack Virtual + url: https://tanstack.com/virtual + description: > + Headless virtualization for lists, tables, and grids - render only what's visible. + detail: > + Essential for any list over 100 items. Understand how it measures and positions elements. + sort_order: 3 + - name: Partytown + url: https://partytown.builder.io + description: > + Move third-party scripts to web workers to keep the main thread free. + detail: > + Solves the analytics/tracking script performance problem. Understand the proxy architecture. + sort_order: 4 + - name: web.dev Performance + url: https://web.dev/learn/performance + description: > + Google's comprehensive guide to Core Web Vitals, loading, rendering, and runtime performance. + detail: > + The canonical reference for LCP, FID, CLS, INP. Know what each metric measures and how to fix it. + sort_order: 5 + - name: React Scan + url: https://github.com/aidenybai/react-scan + description: > + Visualize React component renders in real-time - see exactly what re-renders and why. + detail: > + Use alongside React DevTools Profiler. Faster feedback loop for spotting unnecessary renders. + sort_order: 6 + + - id: typescript + title: Advanced TypeScript + objective: > + Generics, inference, branded types, discriminated unions, and type-level programming that catches bugs at compile time. + color: "#5e6ad2" + sort_order: 5 + resources: + - name: Type Challenges + url: https://github.com/type-challenges/type-challenges + description: > + Collection of TypeScript type-level puzzles from easy to extreme - learn generics by doing. + detail: > + Work through Easy and Medium challenges. The type-level thinking transfers directly to library authoring. + sort_order: 1 + - name: Total TypeScript + url: https://www.totaltypescript.com + description: > + Matt Pocock's TypeScript courses covering generics, type transformations, and advanced patterns. + detail: > + The best resource for going from 'I use TypeScript' to 'I think in TypeScript'. Free tutorials are excellent. + sort_order: 2 + - name: ts-pattern + url: https://github.com/gvergnaud/ts-pattern + description: > + Exhaustive pattern matching for TypeScript with type narrowing and discriminated union support. + detail: > + Replaces switch statements with something safer. Study how it narrows types through matching. + sort_order: 3 + - name: Zod + url: https://zod.dev + description: > + Schema validation with automatic TypeScript type inference - define once, validate and type everywhere. + detail: > + The standard for runtime validation with static types. Understand z.infer and schema composition. + sort_order: 4 + - name: Effect + url: https://effect.website + description: > + TypeScript framework for typed errors, dependency injection, concurrency, and composable programs. + detail: > + Advanced - study the typed error channel and how it makes impossible states unrepresentable. + sort_order: 5 + - name: TypeScript Handbook + url: https://www.typescriptlang.org/docs/handbook/ + description: > + Official handbook covering the type system from basics to advanced generics and conditional types. + detail: > + Re-read the generics and conditional types sections after you have some experience. They click differently. + sort_order: 6 + + - id: testing + title: Testing + objective: > + Component tests, integration tests, E2E, mocking strategies, and accessibility testing that actually prevents regressions. + color: "#f472b6" + sort_order: 6 + resources: + - name: Testing Library + url: https://testing-library.com + description: > + Test components the way users use them - queries by role, text, and label instead of implementation details. + detail: > + The guiding principle: 'The more your tests resemble the way your software is used, the more confidence they give you.' + sort_order: 1 + - name: Vitest + url: https://vitest.dev + description: > + Vite-native test runner with Jest-compatible API, ESM support, and blazing fast watch mode. + detail: > + Understand the jsdom vs happy-dom environments, vi.mock hoisting, and inline snapshots. + sort_order: 2 + - name: Playwright + url: https://playwright.dev + description: > + Cross-browser E2E testing with auto-waiting, network interception, and visual regression support. + detail: > + Master locators (getByRole, getByText), auto-waiting, and the trace viewer for debugging failures. + sort_order: 3 + - name: MSW (Mock Service Worker) + url: https://mswjs.io + description: > + API mocking at the network level - intercepts requests in both browser and Node.js environments. + detail: > + The right way to mock APIs in tests. Understand request handlers and how they compose with Testing Library. + sort_order: 4 + - name: Axe-core + url: https://github.com/dequelabs/axe-core + description: > + Automated accessibility testing engine that catches WCAG violations in your components. + detail: > + Integrate with vitest-axe or @axe-core/playwright. Catches ~30% of a11y issues automatically. + sort_order: 5 + - name: Storybook + url: https://storybook.js.org + description: > + Component development environment with visual testing, documentation, and interaction testing. + detail: > + Use for component isolation and visual regression. The interaction testing addon replaces many integration tests. + sort_order: 6 + + - id: architecture + title: Architecture + objective: > + File structure, module boundaries, monorepo patterns, and decisions that keep large codebases navigable. + color: "#4ade80" + sort_order: 7 + resources: + - name: Bulletproof React + url: https://github.com/alan2207/bulletproof-react + description: > + Opinionated React architecture guide - project structure, patterns, and best practices at scale. + detail: > + The reference architecture for feature-based folder structure. Study the boundaries between features. + sort_order: 1 + - name: Nx + url: https://nx.dev + description: > + Monorepo build system with dependency graph, affected commands, and module boundary enforcement. + detail: > + Understand project boundaries, the dependency graph, and how module federation enables micro-frontends. + sort_order: 2 + - name: Turborepo + url: https://turbo.build/repo + description: > + Incremental build system for monorepos - caches everything, runs only what changed. + detail: > + Compare with Nx. Turborepo is simpler (just builds/tasks), Nx is richer (lint rules, generators). + sort_order: 3 + - name: Module Federation + url: https://module-federation.io + description: > + Runtime module sharing between independently deployed applications - the micro-frontend primitive. + detail: > + Understand shared dependencies, version negotiation, and when micro-frontends are worth the complexity. + sort_order: 4 + - name: Feature-Sliced Design + url: https://feature-sliced.design + description: > + Architectural methodology for frontend projects - layers, slices, and segments with explicit import rules. + detail: > + An opinionated layer system. Compare with Bulletproof React's feature-based approach. + sort_order: 5 + - name: Patterns.dev + url: https://www.patterns.dev + description: > + Comprehensive catalog of design patterns, rendering patterns, and performance patterns for modern web apps. + detail: > + Read the rendering patterns section (SSR, SSG, ISR, streaming) and the React patterns section. + sort_order: 6 diff --git a/curriculum/tracks/gpu-for-ai.yaml b/curriculum/tracks/gpu-for-ai.yaml new file mode 100644 index 0000000..b547ae6 --- /dev/null +++ b/curriculum/tracks/gpu-for-ai.yaml @@ -0,0 +1,512 @@ +id: gpu-for-ai +title: GPU for AI +description: > + Master GPU hardware and software for AI workloads - architecture, CUDA programming, + distributed training, memory optimization, cloud strategy, profiling, networking, + and alternatives to NVIDIA. +difficulty: intermediate +track_type: resource +modules: + - id: architecture + title: GPU Architecture + objective: > + Understand the hardware under your models - Tensor Cores, memory hierarchy, + and what specs actually matter. + color: "#55cdff" + sort_order: 1 + resources: + - name: NVIDIA H100 Whitepaper + url: https://resources.nvidia.com/en-us-tensor-core + description: > + Hopper architecture deep dive: 4th-gen Tensor Cores, Transformer Engine, + FP8 support, HBM3 at 3.35TB/s. + detail: > + The canonical reference for modern AI GPU architecture. Study the memory + hierarchy diagram and Tensor Core operation modes. + sort_order: 1 + - name: NVIDIA Blackwell (B200/GB200) + url: https://www.nvidia.com/en-us/data-center/technologies/blackwell-architecture/ + description: > + 5th-gen Tensor Cores, 192GB HBM3e at 8TB/s, NVLink 5.0, and the two-die + design doubling transistor count. + detail: > + Track the generational leap: 2x memory bandwidth, 4x FP4 throughput. + Understand why Blackwell changes training economics. + sort_order: 2 + - name: GPU Architecture Fundamentals (Lei Mao) + url: https://leimao.github.io/tags/CUDA/ + description: > + Clear technical blog covering SM architecture, warp scheduling, memory + coalescing, and occupancy optimization. + detail: > + Best free resource for understanding GPU internals at the hardware level. + Read the CUDA memory model posts first. + sort_order: 3 + - name: NVIDIA GPU Computing History + url: https://developer.nvidia.com/blog/tag/architecture/ + description: > + Evolution from Kepler to Blackwell: how each generation added capabilities + for AI (Tensor Cores, TF32, FP8). + detail: > + Understand the trajectory: what changed between generations and why each + improvement matters for AI workloads. + sort_order: 4 + - name: Understanding HBM (High Bandwidth Memory) + url: https://www.micron.com/products/high-bandwidth-memory + description: > + How HBM stacks work: 3D-stacked DRAM dies connected via TSVs, delivering + 10x bandwidth over GDDR6. + detail: > + Memory bandwidth is the #1 bottleneck for LLM inference. Understand why + HBM3e matters more than peak FLOPS. + sort_order: 5 + - name: Tensor Core Deep Dive + url: https://developer.nvidia.com/blog/programming-tensor-cores-cuda-9/ + description: > + How Tensor Cores execute matrix multiply-accumulate operations and why they + dominate AI throughput. + detail: > + Study the warp-level matrix operations (WMMA). Understand FP16/BF16/TF32/FP8 + precision modes and when to use each. + sort_order: 6 + + - id: cuda + title: CUDA Programming + objective: > + Write GPU code from scratch - kernels, shared memory, and custom CUDA for AI + workloads. + color: "#ffc47c" + sort_order: 2 + resources: + - name: NVIDIA CUDA Toolkit + url: https://developer.nvidia.com/cuda-toolkit + description: > + The foundational programming model for GPU compute - parallel kernels, + memory management, and the entire NVIDIA software ecosystem. + detail: > + Understand the CUDA programming model (grids, blocks, threads) even if you + never write raw CUDA - it explains why GPU libraries work the way they do. + sort_order: 1 + - name: CUDA by Example (Book) + url: https://developer.nvidia.com/cuda-example + description: > + Hands-on introduction to CUDA programming with practical examples covering + parallel patterns, memory, and synchronization. + detail: > + The best starting point for CUDA. Work through the examples - understanding + threads, blocks, and shared memory is foundational. + sort_order: 2 + - name: Triton (OpenAI) + url: https://github.com/triton-lang/triton + description: > + Python-like language for writing GPU kernels without raw CUDA. Powers PyTorch + custom ops and Flash Attention. + detail: > + The practical path to custom GPU kernels for AI engineers. Higher productivity + than CUDA with 80-90% of the performance. + sort_order: 3 + - name: CUTLASS (NVIDIA) + url: https://github.com/NVIDIA/cutlass + description: > + Template library for high-performance matrix multiplication on Tensor Cores. + The building block behind cuBLAS and TensorRT. + detail: > + Advanced - study this after understanding Tensor Cores. Shows how production + GEMM kernels achieve peak hardware utilization. + sort_order: 4 + - name: ThunderKittens (Stanford) + url: https://github.com/HazyResearch/ThunderKittens + description: > + Embedded DSL for writing GPU kernels in terms of hardware-level operations + on warp tiles. Simplifies Tensor Core programming. + detail: > + Emerging alternative to Triton for kernel development. Study the warp-tile + abstraction for understanding hardware-mapped programming. + sort_order: 5 + - name: GPU Mode Community + url: https://github.com/gpu-mode + description: > + Community lectures and resources on GPU programming, kernel optimization, + and CUDA internals. + detail: > + Watch the lecture series for practical GPU programming knowledge. Good + complement to official NVIDIA documentation. + sort_order: 6 + + - id: distributed + title: Distributed Training + objective: > + Scale training across many GPUs - parallelism strategies, DeepSpeed, and + multi-node setups. + color: "#5bb86e" + sort_order: 3 + resources: + - name: DeepSpeed (Microsoft) + url: https://github.com/microsoft/DeepSpeed + description: > + Multi-GPU and multi-node training with ZeRO optimizer stages, pipeline + parallelism, and mixed precision. + detail: > + The go-to library for training models that don't fit on one GPU. Study ZeRO + stages 1-3 to understand memory vs communication tradeoffs. + sort_order: 1 + - name: PyTorch FSDP + url: https://pytorch.org/docs/stable/fsdp.html + description: > + Fully Sharded Data Parallel - PyTorch-native distributed training sharding + model, optimizer, and gradient states across GPUs. + detail: > + The PyTorch-native alternative to DeepSpeed. Compare FSDP vs ZeRO for your + model size and cluster topology. + sort_order: 2 + - name: Megatron-LM (NVIDIA) + url: https://github.com/NVIDIA/Megatron-LM + description: > + Large-scale transformer training with 3D parallelism (data + tensor + + pipeline) optimized for NVIDIA hardware. + detail: > + The reference implementation for training 100B+ parameter models. Study the + 3D parallelism strategy and sequence parallelism. + sort_order: 3 + - name: PyTorch Distributed Overview + url: https://pytorch.org/tutorials/beginner/dist_overview.html + description: > + Official guide covering DDP, FSDP, RPC, and pipeline parallelism APIs in + PyTorch. + detail: > + Start here for the fundamentals. Understand DDP first (simplest), then + graduate to FSDP and tensor parallelism. + sort_order: 4 + - name: Hugging Face Accelerate + url: https://github.com/huggingface/accelerate + description: > + Wrapper library making multi-GPU and multi-node training accessible with + minimal code changes. + detail: > + Best developer experience for distributed training. Abstracts DeepSpeed/FSDP + behind a simple API. + sort_order: 5 + - name: "Lilac: The Illustrated DeepSpeed ZeRO" + url: https://www.microsoft.com/en-us/research/blog/zero-deepspeed-new-system-optimizations-enable-training-models-with-over-100-billion-parameters/ + description: > + Visual explanation of ZeRO stages: how partitioning optimizer states, + gradients, and parameters reduces memory per GPU. + detail: > + Essential reading. The ZeRO paper is the most important distributed training + concept - understand stages 1, 2, and 3. + sort_order: 6 + + - id: memory + title: Memory Optimization + objective: > + Fit larger models and train faster - Flash Attention, mixed precision, and + memory tricks. + color: "#eb5757" + sort_order: 4 + resources: + - name: Flash Attention + url: https://github.com/Dao-AILab/flash-attention + description: > + IO-aware attention algorithm reducing HBM reads/writes from O(N^2) to O(N). + 2-4x speedup, now standard everywhere. + detail: > + Understand the core insight: attention is memory-bound, not compute-bound. + Tiling and recomputation trade compute for memory access. + sort_order: 1 + - name: Gradient Checkpointing + url: https://pytorch.org/docs/stable/checkpoint.html + description: > + Trade compute for memory by recomputing activations during backward pass + instead of storing them. + detail: > + Enables training 2-4x larger models on the same GPU. Understand the + compute/memory tradeoff and where to place checkpoints. + sort_order: 2 + - name: Mixed Precision Training (NVIDIA) + url: https://developer.nvidia.com/blog/mixed-precision-training-deep-neural-networks/ + description: > + FP16/BF16 training with FP32 master weights and loss scaling. 2x memory + reduction and faster Tensor Core utilization. + detail: > + BF16 is the default for modern training. Understand why loss scaling is + needed for FP16 but not BF16. + sort_order: 3 + - name: bitsandbytes + url: https://github.com/bitsandbytes-foundation/bitsandbytes + description: > + 8-bit and 4-bit optimizers and quantization for training and inference. + Enables QLoRA fine-tuning on consumer GPUs. + detail: > + The key enabler for running large models on small GPUs. Study 4-bit + NormalFloat (NF4) quantization and paged optimizers. + sort_order: 4 + - name: Activation Recomputation Strategies + url: https://pytorch.org/docs/stable/distributed.algorithms.ddp_comm_hooks.html + description: > + Selective recomputation of activations during backward pass - balancing + memory savings against compute overhead. + detail: > + Beyond basic checkpointing: learn selective strategies that recompute only + the memory-heavy layers (attention, large FFN). + sort_order: 5 + - name: Memory-Efficient Attention Variants + url: https://github.com/facebookresearch/xformers + description: > + xFormers library with memory-efficient attention, fused operations, and + composable transformer building blocks. + detail: > + Practical toolkit for memory optimization. Study the fused kernels: combining + operations reduces memory traffic. + sort_order: 6 + + - id: cloud + title: Cloud GPU Strategy + objective: > + Spend less on GPUs - spot pricing, provider comparison, and when on-prem beats + cloud. + color: "#5e6ad2" + sort_order: 5 + resources: + - name: Lambda Labs GPU Cloud + url: https://lambdalabs.com/service/gpu-cloud + description: > + On-demand H100 and A100 instances at competitive pricing. Simple API, no + reserved commitment required. + detail: > + Good for burst training. Compare Lambda on-demand pricing vs hyperscaler + reserved instances for your workload pattern. + sort_order: 1 + - name: CoreWeave + url: https://www.coreweave.com + description: > + GPU-native cloud built for AI workloads with Kubernetes-based orchestration, + InfiniBand networking, and H100 clusters. + detail: > + Study the purpose-built GPU cloud architecture. Better networking than + hyperscalers for distributed training. + sort_order: 2 + - name: RunPod + url: https://www.runpod.io + description: > + Serverless GPU platform with spot pricing, persistent storage, and one-click + template deployments. + detail: > + Best for inference and short training runs. Spot instances at 60-70% discount + for fault-tolerant workloads. + sort_order: 3 + - name: vast.ai + url: https://vast.ai + description: > + GPU marketplace connecting renters with idle hardware. Lowest prices but + variable reliability. + detail: > + Study the GPU rental economics. Useful for experimentation but not production + training. + sort_order: 4 + - name: NVIDIA DGX Cloud + url: https://www.nvidia.com/en-us/data-center/dgx-cloud/ + description: > + NVIDIA-managed multi-node GPU clusters with full-stack software optimization. + The premium tier for large-scale training. + detail: > + Understand when managed infrastructure justifies the premium: guaranteed + availability, optimized networking, NVIDIA support. + sort_order: 5 + - name: GPU Cost Calculator (Epoch AI) + url: https://epochai.org/blog/training-compute-of-frontier-ai-models + description: > + Analysis of training compute costs for frontier models. Understand the + economics driving GPU demand. + detail: > + Put GPU costs in context: what does it actually cost to train GPT-4-class + models? How does that scale? + sort_order: 6 + + - id: profiling + title: GPU Profiling + objective: > + Find and fix GPU bottlenecks - profiling, compute vs memory bound, and + systematic optimization. + color: "#f472b6" + sort_order: 6 + resources: + - name: NVIDIA Nsight Systems + url: https://developer.nvidia.com/nsight-systems + description: > + System-wide performance analysis showing CPU-GPU interaction, kernel launches, + memory transfers, and pipeline bubbles. + detail: > + The first profiling tool to reach for. Gives the big picture: where is time + spent, where are the gaps? + sort_order: 1 + - name: NVIDIA Nsight Compute + url: https://developer.nvidia.com/nsight-compute + description: > + Kernel-level profiler showing warp occupancy, memory throughput, instruction + mix, and roofline analysis. + detail: > + Use after Nsight Systems identifies slow kernels. The roofline model tells + you if a kernel is compute-bound or memory-bound. + sort_order: 2 + - name: PyTorch Profiler + url: https://pytorch.org/tutorials/recipes/recipes/profiler_recipe.html + description: > + Built-in profiling for PyTorch operations with TensorBoard integration, GPU + kernel tracing, and memory tracking. + detail: > + The easiest way to profile Python-level training code. Use + torch.profiler.profile() to trace GPU operations. + sort_order: 3 + - name: torch.cuda.memory_stats() + url: https://pytorch.org/docs/stable/generated/torch.cuda.memory_stats.html + description: > + Real-time GPU memory tracking: allocated, reserved, peak usage, and + fragmentation metrics. + detail: > + Essential for debugging OOM errors. Call before and after operations to find + memory spikes. + sort_order: 4 + - name: GPU Roofline Model + url: https://developer.nvidia.com/blog/roofline-model-gpu/ + description: > + Framework for understanding whether a workload is compute-bound or + memory-bandwidth-bound on specific hardware. + detail: > + The most important mental model for GPU optimization. Plot your kernel on the + roofline to know which optimization to apply. + sort_order: 5 + - name: Holistic Trace Analysis (Meta) + url: https://github.com/facebookresearch/HolisticTraceAnalysis + description: > + Automated analysis of distributed training traces: idle time, communication + overhead, and load imbalance detection. + detail: > + For distributed training profiling. Identifies scaling bottlenecks across + multi-GPU and multi-node setups. + sort_order: 6 + + - id: networking + title: Cluster Networking + objective: > + The networking that makes or breaks multi-GPU scaling - NVLink, InfiniBand, + and topology design. + color: "#4ade80" + sort_order: 7 + resources: + - name: NVIDIA NVLink & NVSwitch + url: https://www.nvidia.com/en-us/data-center/nvlink/ + description: > + GPU-to-GPU interconnect at 900GB/s (NVLink 4) and 1.8TB/s (NVLink 5). + NVSwitch enables all-to-all GPU communication. + detail: > + NVLink bandwidth determines tensor parallelism efficiency. Understand why + intra-node (NVLink) vs inter-node (InfiniBand) matters. + sort_order: 1 + - name: InfiniBand (NVIDIA Networking) + url: https://www.nvidia.com/en-us/networking/products/infiniband/ + description: > + 400Gb/s inter-node networking with RDMA for zero-copy data transfers. The + standard for GPU cluster interconnects. + detail: > + Study RDMA and GPUDirect: how data moves between GPUs on different nodes + without touching the CPU. + sort_order: 2 + - name: NCCL (NVIDIA Collective Communications) + url: https://github.com/NVIDIA/nccl + description: > + Optimized all-reduce, all-gather, and broadcast primitives for multi-GPU + communication. Used by PyTorch DDP and FSDP. + detail: > + Understand the collective operations: all-reduce for gradient sync, + all-gather for FSDP forward pass, reduce-scatter for backward. + sort_order: 3 + - name: GPUDirect RDMA + url: https://developer.nvidia.com/gpudirect + description: > + Direct GPU-to-GPU memory access across nodes, bypassing CPU and system + memory. Eliminates copy overhead. + detail: > + The performance secret of well-configured GPU clusters. Without GPUDirect, + multi-node scaling hits a wall. + sort_order: 4 + - name: Ultra Ethernet Consortium + url: https://ultraethernet.org + description: > + Open standard for AI-optimized Ethernet networking. Alternative to + InfiniBand with broader vendor support. + detail: > + Track the InfiniBand vs Ethernet competition. Ultra Ethernet aims to match + IB performance at lower cost. + sort_order: 5 + - name: Cluster Topology Design + url: https://docs.nvidia.com/dgx-superpod/reference-architecture/latest/index.html + description: > + NVIDIA DGX SuperPOD reference architecture: how to wire up thousands of GPUs + with optimal bandwidth and fault tolerance. + detail: > + Study fat-tree vs rail-optimized topologies. Understand why cluster + networking is as important as the GPUs themselves. + sort_order: 6 + + - id: alternatives + title: Beyond NVIDIA + objective: > + Know when to look beyond NVIDIA - AMD, Google TPUs, Groq, and where + alternatives win. + color: "#55cdff" + sort_order: 8 + resources: + - name: AMD MI300X & ROCm + url: https://www.amd.com/en/products/accelerators/instinct/mi300.html + description: > + 192GB HBM3 at 5.3TB/s, 1.3x memory capacity vs H100. ROCm software stack + with native PyTorch support. + detail: > + The most credible NVIDIA alternative. Study where MI300X matches H100 + (memory-bound inference) vs where it trails (Tensor Core throughput). + sort_order: 1 + - name: Google TPU v5p / Trillium + url: https://cloud.google.com/tpu + description: > + Custom AI accelerator with high-bandwidth ICI interconnect. Powers Gemini + training and is available via GCP. + detail: > + Study the TPU architecture: systolic array design, ICI networking, and + JAX/XLA programming model. Different paradigm from CUDA. + sort_order: 2 + - name: Intel Gaudi 3 + url: https://www.intel.com/content/www/us/en/products/details/processors/ai-accelerators/gaudi.html + description: > + Intel's AI accelerator targeting training and inference with integrated RoCE + networking and competitive pricing. + detail: > + Track Intel's play as a third GPU vendor. Gaudi has some AWS adoption but + ecosystem maturity lags NVIDIA. + sort_order: 3 + - name: Groq LPU + url: https://groq.com + description: > + Deterministic inference chip with no HBM - uses SRAM for ultra-low latency. + Specialized for token generation. + detail: > + Study the SRAM-only architecture: why it achieves extreme token/sec but can't + train models. Inference-only hardware. + sort_order: 4 + - name: Cerebras WSE-3 + url: https://www.cerebras.net + description: > + Wafer-scale engine: single chip with 4 trillion transistors. Eliminates + multi-GPU communication overhead for training. + detail: > + Study the radical approach: one giant chip vs many small GPUs. Understand the + memory and cooling challenges at wafer scale. + sort_order: 5 + - name: AWS Trainium / Inferentia + url: https://aws.amazon.com/machine-learning/trainium/ + description: > + Amazon's custom AI chips for training (Trainium) and inference (Inferentia). + Tight integration with SageMaker. + detail: > + Study the hyperscaler custom silicon trend. Lower cost per FLOP but narrower + software support than NVIDIA. + sort_order: 6 diff --git a/curriculum/tracks/interview-prep.yaml b/curriculum/tracks/interview-prep.yaml new file mode 100644 index 0000000..dbe2ffd --- /dev/null +++ b/curriculum/tracks/interview-prep.yaml @@ -0,0 +1,138 @@ +id: interview-prep +title: Interview Prep +description: > + Prepare for technical interviews - system design, coding, and behavioral. +difficulty: intermediate +track_type: resource +modules: + - id: faang + title: FAANG Prep + objective: > + Sharpen your coding skills with drills, mock interviews, and a weekly prep rhythm. + color: "#55cdff" + sort_order: 1 + resources: + - name: NeetCode + url: https://neetcode.io + description: Structured DSA roadmaps and curated coding problems. + detail: Use for daily algorithm reps and pattern memorization. + sort_order: 1 + - name: AlgoMonster + url: https://algo.monster + description: Pattern-first interview prep with implementation templates. + detail: Use when you want to learn fast classification of problems. + sort_order: 2 + - name: AlgoExpert.io + url: https://www.algoexpert.io + description: Video-first explanations with medium/hard interview sets. + detail: Use to sharpen coding explanation speed before live rounds. + sort_order: 3 + - name: Interviewing.io + url: https://interviewing.io + description: Anonymous mock interviews and transcript-style feedback. + detail: Use weekly for pressure testing and communication practice. + sort_order: 4 + - name: Codemia + url: https://codemia.io + description: Community problems and collaborative coding interview practice. + detail: Use to diversify problem exposure and peer review loops. + sort_order: 5 + + - id: system_design + title: System Design Prep + objective: > + Practice designing systems under pressure - case studies, drills, and mock interviews. + color: "#5bb86e" + sort_order: 2 + resources: + - name: Designing Data-Intensive Applications + url: https://dataintensive.net + description: Foundational distributed-systems and data-system principles. + detail: Use as the base theory layer for tradeoff reasoning. + sort_order: 1 + - name: System Design Interview (Alex Xu) + url: https://www.amazon.com/System-Design-Interview-insiders-Second/dp/B08CMF2CQF + description: Interview-focused architecture templates and common system cases. + detail: Use for concise frameworks and quick recap sheets. + sort_order: 2 + - name: HelloInterview + url: https://www.hellointerview.com + description: Role-tailored system design prompts and structured answer guides. + detail: Use to practice problem framing and clarifying questions. + sort_order: 3 + - name: Exponent + url: https://www.tryexponent.com + description: System design lessons and mock-interview walkthroughs. + detail: Use for visual case breakdowns and timed answer practice. + sort_order: 4 + - name: DesignGurus + url: https://www.designgurus.io + description: Catalog of system design interview scenarios and drills. + detail: Use to expand scenario coverage beyond common cases. + sort_order: 5 + - name: Codemia + url: https://codemia.io + description: Community-driven architecture prompts and iterative feedback. + detail: Use to practice whiteboard flow and architecture narration. + sort_order: 6 + + - id: take_home + title: Take-Homes + objective: > + Practice real take-home assignments from actual interview processes and learn the patterns. + color: "#4ade80" + sort_order: 3 + resources: + # Take-home tab uses seeded assignment data, not PrepResource[]. + # The 8 seeded assignments are localStorage-backed interactive content, + # not static resource links. Listing them here for reference. + - name: "Stripe - Build a Rate Limiter Service" + url: "" + description: "Design and implement a rate-limiting service with multiple strategies (fixed window, sliding window, token bucket)." + detail: "4-6 hours, any backend language. Medium difficulty." + sort_order: 1 + - name: "Datadog - Log Aggregation Pipeline" + url: "" + description: "Build a simplified log ingestion pipeline that handles 1000+ events/second with time range and severity queries." + detail: "8 hours, Go or Python. Hard difficulty." + sort_order: 2 + - name: "Plaid - Transaction Categorizer" + url: "" + description: "Build a web app for viewing bank transactions and assigning categories with a rules engine." + detail: "4 hours, React + Node/Python. Medium difficulty." + sort_order: 3 + - name: "Notion - Kanban Board" + url: "" + description: "Build a Kanban board with drag-and-drop, card CRUD, and persistence. Focus on UX polish and accessibility." + detail: "3-4 hours, React or Vue. Medium difficulty." + sort_order: 4 + - name: "Scale AI - Text Classification Pipeline" + url: "" + description: "Build an end-to-end text classification pipeline with training, evaluation, and a prediction API." + detail: "6-8 hours, Python + HuggingFace or scikit-learn. Hard difficulty." + sort_order: 5 + - name: "Figma - Collaborative Cursor Presence" + url: "" + description: "Build a multi-user real-time cursor presence app using WebSockets on a shared canvas." + detail: "4-6 hours, TypeScript + WebSocket. Hard difficulty." + sort_order: 6 + - name: "Generic - URL Shortener" + url: "" + description: "Design and implement a URL shortener with redirect, click analytics, and scaling notes." + detail: "2-3 hours, any language. Easy difficulty." + sort_order: 7 + - name: "Airbnb - ETL Pipeline for Event Data" + url: "" + description: "Build an ETL pipeline with deduplication, schema validation, enrichment, and dead-letter queue logic." + detail: "6 hours, Python + SQL. Medium difficulty." + sort_order: 8 + + - id: interview_feedback + title: Interview Feedback + objective: > + Track what went wrong in past interviews and extract lessons for next time. + color: "#55cdff" + sort_order: 4 + resources: [] + # Interview feedback tab is a localStorage-backed CRUD interface (company, role, + # date, stage, outcome, feedback, lessons). No static resource links. diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 92beabb..cd49927 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -4,13 +4,10 @@ import { Activity, BarChart3, Blocks, - BookOpen, Brain, BriefcaseBusiness, CalendarDays, CheckSquare, - ChevronDown, - ChevronRight, Cog, Cpu, Database, @@ -754,69 +751,6 @@ function get_databases_view(tab: string | undefined): ViewId { return (found?.view as ViewId) ?? "databases_overview"; } -const CULTURE_GENERALE_SCIENCES_ITEMS = [ - { - label: "Physique", - track: "sciences", - tab: "physics", - view: "culture_generale_sciences_physics", - }, - { - label: "Theorie de l'Information", - track: "sciences", - tab: "information_theory", - view: "culture_generale_sciences_information_theory", - }, - { - label: "Bio & Neurosciences", - track: "sciences", - tab: "biology_neuro", - view: "culture_generale_sciences_biology_neuro", - }, -] as const; - -const CULTURE_GENERALE_HUMANITES_ITEMS = [ - { - label: "Philo des Sciences", - track: "humanites", - tab: "philo_science", - view: "culture_generale_humanites_philo_science", - }, - { - label: "Philosophie Francaise", - track: "humanites", - tab: "french_philo", - view: "culture_generale_humanites_french_philo", - }, - { - label: "Litterature & Culture", - track: "humanites", - tab: "literature", - view: "culture_generale_humanites_literature", - }, -] as const; - -const CULTURE_GENERALE_SCIENCES_SOCIALES_ITEMS = [ - { - label: "Economie & Jeux", - track: "sciences_sociales", - tab: "economics", - view: "culture_generale_sciences_sociales_economics", - }, - { - label: "Philo Politique", - track: "sciences_sociales", - tab: "political_philo", - view: "culture_generale_sciences_sociales_political_philo", - }, - { - label: "Histoire & Civilisation", - track: "sciences_sociales", - tab: "history", - view: "culture_generale_sciences_sociales_history", - }, -] as const; - function read_expandable_nav_state(): Record { try { const saved = window.localStorage.getItem(SUB_NAV_EXPANDED_KEY); @@ -2181,7 +2115,6 @@ export function Sidebar({ const current_conversation_id = active_view === "chat" ? (params.conversationId ?? null) : null; const sidebar_scroll_ref = useRef(null); - const [reference_show_all, set_reference_show_all] = useState(false); const [recent_chats_expanded, set_recent_chats_expanded] = useState(() => { try { const saved = window.localStorage.getItem(RECENT_CHATS_EXPANDED_KEY); @@ -2464,14 +2397,14 @@ export function Sidebar({ onClick={() => navigate({ to: "/learn" })} /> navigate({ to: "/learn/lenses" })} - /> - navigate({ to: "/learn/levels" })} + label="Dev Reference" + active={active_view.startsWith("reference_dev_ref")} + onClick={() => + navigate({ + to: "/reference", + search: { section: "dev-ref" }, + }) + } /> navigate({ to: "/culture-generale" })} /> - navigate({ to: "/cognitive-toolkit" })} - /> - navigate({ to: "/behavioral-design" })} - />
@@ -2896,1237 +2819,6 @@ export function Sidebar({ /> -
- - {/* Reference (collapsed by default) */} -
-
- } - label="Reference" - active={active_view.startsWith("reference_")} - onClick={() => navigate({ to: "/reference" })} - /> -
- {sidebarExpanded && ( - toggle_expandable_nav("reference")} - className="p-1 text-[var(--sb-sidebar-text-muted)] hover:text-[var(--sb-text-primary)] transition-colors" - label={ - expandable_nav.reference - ? "Minimize reference tabs" - : "Expand reference tabs" - } - tooltipSide="right" - > - {expandable_nav.reference ? ( - - ) : ( - - )} - - )} -
- -

- Interview Prep -

- {PREP_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { section: "prep", tab: item.tab }, - }) - } - /> - ))} - - - {DEV_REF_LANGUAGE_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { section: "dev-ref", tab: item.tab }, - }) - } - /> - ))} - - - - {DEV_REF_STACK_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { section: "dev-ref", tab: item.tab }, - }) - } - /> - ))} - -

- Databases -

- {DATABASES_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { section: "databases", tab: item.tab }, - }) - } - /> - ))} -

- Applied Systems -

- - navigate({ - to: "/reference", - search: { section: "applied-systems", tab: "llmops" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "applied-systems", tab: "recsys" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "applied-systems", tab: "dataops" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "applied-systems", tab: "evals" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "applied-systems", tab: "worldmodels" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "applied-systems", tab: "3d_vision" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "applied-systems", - tab: "distributed_ml", - }, - }) - } - /> - - {reference_show_all && ( - <> -

- Maths — Zero to One -

- - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "zero_to_one", - tab: "methode", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "zero_to_one", - tab: "diagnostic", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "zero_to_one", - tab: "college", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "zero_to_one", - tab: "lycee", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "zero_to_one", - tab: "terminale", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "zero_to_one", - tab: "evaluation", - }, - }) - } - /> -

- Maths — Prepa ML -

- - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "methode", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "linear_algebra", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "analysis", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "probability", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "applied_ml", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "geometry_3d", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "dynamics_physics", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "math-refresh", - track: "prepa_ml", - tab: "evaluation", - }, - }) - } - /> -

- Elite Freelance -

- - navigate({ - to: "/reference", - search: { - section: "elite-freelance", - tab: "realtime_systems", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "elite-freelance", - tab: "apis_at_scale", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "elite-freelance", - tab: "ai_agent_infra", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "elite-freelance", - tab: "production_hardening", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "elite-freelance", - tab: "positioning", - }, - }) - } - /> -

- AI Engineering -

- - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "inference" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "agents" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "evals" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "retrieval" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "memory" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "fine_tuning" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "multimodal" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "ai-engineering", tab: "reasoning" }, - }) - } - /> -

- Frontend Engineering -

- - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "state" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "components" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "data_layer" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "performance" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "typescript" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "testing" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "frontend-eng", tab: "architecture" }, - }) - } - /> -

- GPUs for AI -

- navigate({ to: "/how-gpu-works", search: {} })} - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "architecture" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "cuda" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "distributed" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "memory" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "cloud" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "profiling" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "networking" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "gpu-for-ai", tab: "alternatives" }, - }) - } - /> -

- Embodied AI -

- - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "world_models" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "core" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "humanoid" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "service" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "autonomous" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "agentic" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "embodied-ai", tab: "edge_inference" }, - }) - } - /> -

- Bio-Augmentation -

- - navigate({ - to: "/reference", - search: { - section: "bio-augmentation", - tab: "foundations", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "bio-augmentation", tab: "neurotech" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "bio-augmentation", tab: "wearables" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "bio-augmentation", - tab: "biohacking", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "bio-augmentation", - tab: "translation", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "bio-augmentation", - tab: "convergence", - }, - }) - } - /> -

- Chinese Learning -

- - navigate({ - to: "/reference", - search: { section: "chinese", tab: "dashboard" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "chinese", tab: "vocab" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "chinese", tab: "lessons" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "chinese", tab: "review" }, - }) - } - /> -

- Cantonese Learning -

- - navigate({ - to: "/reference", - search: { section: "cantonese", tab: "dashboard" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "cantonese", tab: "vocab" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "cantonese", tab: "lessons" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "cantonese", tab: "review" }, - }) - } - /> -

- Culture Generale — Sciences -

- {CULTURE_GENERALE_SCIENCES_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { - section: "culture-generale", - track: item.track, - tab: item.tab, - }, - }) - } - /> - ))} -

- Culture Generale — Humanites -

- {CULTURE_GENERALE_HUMANITES_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { - section: "culture-generale", - track: item.track, - tab: item.tab, - }, - }) - } - /> - ))} -

- Culture Generale — Sciences Sociales -

- {CULTURE_GENERALE_SCIENCES_SOCIALES_ITEMS.map((item) => ( - - navigate({ - to: "/reference", - search: { - section: "culture-generale", - track: item.track, - tab: item.tab, - }, - }) - } - /> - ))} -

- Cognitive Toolkit -

- - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "foundation", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "operating_system", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "techniques", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "worldview", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "cognitive-toolkit", tab: "library" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "cognitive-toolkit", tab: "playbook" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "operators", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "social_dynamics", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "cognitive-toolkit", - tab: "ai_leverage", - }, - }) - } - /> -

- Behavioral Design -

- - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "frameworks", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "feed_design", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "social_loops", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "variable_rewards", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { section: "behavioral-design", tab: "friction" }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "notifications", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "gamification", - }, - }) - } - /> - - navigate({ - to: "/reference", - search: { - section: "behavioral-design", - tab: "case_studies", - }, - }) - } - /> - - )} -
{/* Personal */}
diff --git a/frontend/src/lib/api/endpoints.ts b/frontend/src/lib/api/endpoints.ts index 9096337..bb7225f 100644 --- a/frontend/src/lib/api/endpoints.ts +++ b/frontend/src/lib/api/endpoints.ts @@ -1887,4 +1887,23 @@ export const api = { `/curriculum/tracks/${encodeURIComponent(trackId)}/modules/${encodeURIComponent(moduleId)}/progress`, ); }, + + getCurriculumModuleResources(trackId: string, moduleId: string) { + return apiRequest<{ + track_id: string; + module_id: string; + resources: import("./types").TrackResource[]; + total: number; + }>( + `/curriculum/tracks/${encodeURIComponent(trackId)}/modules/${encodeURIComponent(moduleId)}/resources`, + ); + }, + + getCurriculumTrackResources(trackId: string) { + return apiRequest<{ + track_id: string; + resources: import("./types").TrackResource[]; + total: number; + }>(`/curriculum/tracks/${encodeURIComponent(trackId)}/resources`); + }, }; diff --git a/frontend/src/lib/api/types.ts b/frontend/src/lib/api/types.ts index 62a873b..7013e30 100644 --- a/frontend/src/lib/api/types.ts +++ b/frontend/src/lib/api/types.ts @@ -1536,14 +1536,27 @@ export interface TeachingLensSummary { // --- Curriculum --- +export interface TrackResource { + id: number; + name: string; + url: string | null; + description: string; + detail: string | null; + resource_type: "link" | "reference" | "knowledge"; + sort_order: number; + metadata_json: string | null; +} + export interface CurriculumTrackSummary { id: string; title: string; description: string; difficulty: string; + track_type: "concept" | "resource"; is_published: boolean; module_count: number; concept_count: number; + resource_count: number; } export interface CurriculumTrackListResponse { @@ -1557,7 +1570,9 @@ export interface CurriculumModuleSummary { objective: string; estimated_time_minutes: number; sort_order: number; + color: string | null; concept_count: number; + resource_count: number; } export interface CurriculumTrackDetail { @@ -1565,6 +1580,7 @@ export interface CurriculumTrackDetail { title: string; description: string; difficulty: string; + track_type: "concept" | "resource"; is_published: boolean; modules: CurriculumModuleSummary[]; } @@ -1584,7 +1600,9 @@ export interface CurriculumModuleDetail { objective: string; estimated_time_minutes: number; sort_order: number; + color: string | null; concepts: CurriculumConceptRef[]; + resources: TrackResource[]; } export interface CurriculumModuleProgress { diff --git a/frontend/src/lib/query/keys.ts b/frontend/src/lib/query/keys.ts index 2064511..bb95718 100644 --- a/frontend/src/lib/query/keys.ts +++ b/frontend/src/lib/query/keys.ts @@ -183,4 +183,6 @@ export const queryKeys = { ["curriculum-module", trackId, moduleId] as const, curriculumModuleProgress: (trackId: string, moduleId: string) => ["curriculum-module-progress", trackId, moduleId] as const, + curriculumTrackResources: (trackId: string) => + ["curriculum-track-resources", trackId] as const, }; diff --git a/frontend/src/routes/curriculum.tsx b/frontend/src/routes/curriculum.tsx index 7d21f9a..ae1f014 100644 --- a/frontend/src/routes/curriculum.tsx +++ b/frontend/src/routes/curriculum.tsx @@ -6,15 +6,15 @@ const CurriculumTracksView = lazy(() => })), ); -const CurriculumTrackDetailView = lazy(() => - import("../views/CurriculumTrackDetailView").then((m) => ({ - default: m.CurriculumTrackDetailView, +const TrackDetailView = lazy(() => + import("../views/TrackDetailView").then((m) => ({ + default: m.TrackDetailView, })), ); -const CurriculumModuleDetailView = lazy(() => - import("../views/CurriculumModuleDetailView").then((m) => ({ - default: m.CurriculumModuleDetailView, +const ModuleDetailView = lazy(() => + import("../views/TrackDetailView").then((m) => ({ + default: m.ModuleDetailView, })), ); @@ -37,7 +37,7 @@ export function CurriculumTracksRoute() { export function CurriculumTrackDetailRoute() { return ( }> - + ); } @@ -45,7 +45,7 @@ export function CurriculumTrackDetailRoute() { export function CurriculumModuleDetailRoute() { return ( }> - + ); } diff --git a/frontend/src/views/CurriculumTracksView.tsx b/frontend/src/views/CurriculumTracksView.tsx index e7ad3ce..248fd40 100644 --- a/frontend/src/views/CurriculumTracksView.tsx +++ b/frontend/src/views/CurriculumTracksView.tsx @@ -1,6 +1,12 @@ import { useNavigate } from "@tanstack/react-router"; import { motion } from "motion/react"; -import { BookOpen, Clock, Layers, GraduationCap } from "lucide-react"; +import { + BookOpen, + Clock, + Layers, + GraduationCap, + Link as LinkIcon, +} from "lucide-react"; import { useDocumentTitle } from "../hooks/useDocumentTitle"; import { PremiumHero, PremiumPage } from "../components/layout/PremiumShell"; import { api } from "../lib/api/endpoints"; @@ -33,7 +39,7 @@ export function CurriculumTracksView() { @@ -73,6 +79,10 @@ function TrackCard({ index: number; onClick: () => void; }) { + const isResource = track.track_type === "resource"; + const itemCount = isResource ? track.resource_count : track.concept_count; + const itemLabel = isResource ? "resource" : "concept"; + return ( - - {track.concept_count} concept - {track.concept_count !== 1 ? "s" : ""} + {isResource ? ( + + ) : ( + + )} + {itemCount} {itemLabel} + {itemCount !== 1 ? "s" : ""} diff --git a/frontend/src/views/DevRefView.tsx b/frontend/src/views/DevRefView.tsx index f309c13..5274f7f 100644 --- a/frontend/src/views/DevRefView.tsx +++ b/frontend/src/views/DevRefView.tsx @@ -1,4 +1,4 @@ -import { useSearch } from "@tanstack/react-router"; +import { useSearch, useNavigate } from "@tanstack/react-router"; import { CodeBlock } from "../components/CodeBlock"; import { useDocumentTitle } from "../hooks/useDocumentTitle"; @@ -8683,8 +8683,125 @@ const TAB_CONTENT: Record< // Main view // --------------------------------------------------------------------------- +const TAB_CATEGORIES: { label: string; tabs: DevRefTab[] }[] = [ + { + label: "Languages & Shell", + tabs: [ + "python", + "sql", + "rust", + "cpp", + "typescript", + "go", + "linux", + "bash", + "tmux", + "swift", + "nodejs", + ], + }, + { + label: "Frontend", + tabs: [ + "react", + "tanstack_router", + "vite", + "tailwind", + "radix_ui", + "framer_motion", + "d3", + "vitest", + "playwright", + ], + }, + { + label: "Backend & APIs", + tabs: [ + "fastapi", + "httpx", + "graphql", + "grpc", + "rest_api_design", + "pydantic", + "oauth", + "sse", + "nginx", + "pytest", + ], + }, + { + label: "AI & Retrieval", + tabs: [ + "anthropic", + "langchain", + "openai", + "chromadb", + "cohere", + "embeddings", + "langfuse", + "arize", + ], + }, + { + label: "Databases", + tabs: ["postgresql", "redis", "sqlite", "mongodb", "duckdb", "clickhouse"], + }, + { label: "Data Processing", tabs: ["polars", "pandas", "spark", "kafka"] }, + { + label: "Data Platform", + tabs: [ + "databricks", + "snowflake", + "bigquery", + "dbt", + "airflow", + "astronomer", + "dagster", + "airbyte", + "iceberg", + "data_governance", + ], + }, + { + label: "ML & Deep Learning", + tabs: [ + "pytorch", + "scikit_learn", + "huggingface", + "cuda", + "model_serving", + "ray", + "mlflow", + "feast", + "sagemaker", + "vertex_ai", + ], + }, + { + label: "Infra & DevOps", + tabs: [ + "git", + "docker", + "kubernetes", + "helm", + "terraform", + "github_actions", + "flyio", + "aws", + "gcp", + "cloudflare_workers", + "temporal", + ], + }, + { + label: "Observability & Cost", + tabs: ["opentelemetry", "prometheus", "grafana", "sentry", "finops"], + }, +]; + export function DevRefView() { const search = useSearch({ strict: false }) as { tab?: string }; + const navigate = useNavigate(); const active_tab: DevRefTab = TAB_ORDER.includes(search.tab as DevRefTab) ? (search.tab as DevRefTab) : "python"; @@ -8704,6 +8821,46 @@ export function DevRefView() { description={active_tab_meta.description} /> + {/* Category-grouped tab navigator */} +
+ {TAB_CATEGORIES.map((cat) => ( +
+ + {cat.label} + + {cat.tabs.map((tab) => { + const isActive = tab === active_tab; + const meta = TAB_META[tab]; + return ( + + ); + })} +
+ ))} +
+
+ {/* Tab navigator */} +
+ {TAB_ORDER.map((tab) => { + const isActive = tab === active_tab; + return ( + + ); + })} +
+
= { + beginner: "Beginner", + intermediate: "Intermediate", + advanced: "Advanced", +}; + +const READINESS_CONFIG: Record< + string, + { label: string; color: string; bg: string } +> = { + rich: { + label: "Rich", + color: "#4ade80", + bg: "rgba(74, 222, 128, 0.08)", + }, + grounded: { + label: "Grounded", + color: "#55cdff", + bg: "rgba(85, 205, 255, 0.08)", + }, + scaffolded: { + label: "Scaffolded", + color: "#ffc47c", + bg: "rgba(255, 196, 124, 0.08)", + }, +}; + +export function TrackDetailView() { + const { trackId } = useParams({ strict: false }) as { trackId: string }; + const navigate = useNavigate(); + + const { data: track, isLoading } = useQuery( + queryKeys.curriculumTrack(trackId), + () => api.getCurriculumTrack(trackId), + { staleTimeMs: 30_000 }, + ); + + useDocumentTitle(track?.title ?? "Track"); + + if (isLoading || !track) { + return ( + + +
+
+
+ + ); + } + + if (track.track_type === "resource") { + return ; + } + + return ( + + + + +
+ + + {track.modules.length} module + {track.modules.length !== 1 ? "s" : ""} + +
+ +
+ {track.modules.map((mod, i) => ( + + navigate({ + to: "/learn/tracks/$trackId/modules/$moduleId", + params: { trackId, moduleId: mod.id }, + }) + } + /> + ))} +
+
+ ); +} + +function ResourceTrackView({ trackId }: { trackId: string }) { + const search = useSearch({ strict: false }) as { tab?: string }; + const navigate = useNavigate(); + + const { data: track } = useQuery( + queryKeys.curriculumTrack(trackId), + () => api.getCurriculumTrack(trackId), + { staleTimeMs: 30_000 }, + ); + + const activeId = track + ? (track.modules.find((m) => m.id === search.tab)?.id ?? + track.modules[0]?.id ?? + "") + : ""; + + const { data: mod } = useQuery( + queryKeys.curriculumModule(trackId, activeId), + () => api.getCurriculumModule(trackId, activeId), + { staleTimeMs: 30_000, enabled: !!activeId }, + ); + + if (!track) return null; + + const activeMod = track.modules.find((m) => m.id === activeId); + const tabColor = activeMod?.color ?? "#55cdff"; + + return ( + + + + + {/* Tab bar */} +
+ {track.modules.map((m) => { + const isActive = m.id === activeId; + return ( + + ); + })} +
+ + {/* Module stats */} +
+ + + {activeMod?.resource_count ?? 0} resource + {(activeMod?.resource_count ?? 0) !== 1 ? "s" : ""} + +
+ + {/* Resources grid */} +
+ {mod?.resources.map((resource, i) => ( + + ))} +
+ + {mod?.resources.length === 0 && ( +
+ No resources in this module yet. +
+ )} +
+ ); +} + +function BackButton() { + const navigate = useNavigate(); + return ( + + ); +} + +function ConceptModuleRow({ + module: mod, + index, + onClick, +}: { + module: CurriculumModuleSummary; + index: number; + onClick: () => void; +}) { + return ( + +
+ {index + 1} +
+
+
+ {mod.title} +
+

+ {mod.objective} +

+
+
+ + + {mod.concept_count} + + + + {mod.estimated_time_minutes}m + + +
+
+ ); +} + +export function ModuleDetailView() { + const { trackId, moduleId } = useParams({ strict: false }) as { + trackId: string; + moduleId: string; + }; + const navigate = useNavigate(); + + const { data: mod, isLoading } = useQuery( + queryKeys.curriculumModule(trackId, moduleId), + () => api.getCurriculumModule(trackId, moduleId), + { staleTimeMs: 30_000 }, + ); + + const { data: progress } = useQuery( + queryKeys.curriculumModuleProgress(trackId, moduleId), + () => api.getCurriculumModuleProgress(trackId, moduleId), + { staleTimeMs: 30_000 }, + ); + + useDocumentTitle(mod?.title ?? "Module"); + + if (isLoading || !mod) { + return ( + + +
+
+
+ + ); + } + + const accentColor = mod.color ?? "#55cdff"; + const hasResources = mod.resources.length > 0; + const hasConcepts = mod.concepts.length > 0; + + return ( + + + + + +
+ {hasConcepts && ( + + + {mod.concepts.length} concept + {mod.concepts.length !== 1 ? "s" : ""} + + )} + {hasResources && ( + + + {mod.resources.length} resource + {mod.resources.length !== 1 ? "s" : ""} + + )} + + + {mod.estimated_time_minutes} min + + {progress && progress.total > 0 && ( + + {progress.completed} of {progress.total} done + + )} +
+ + {hasConcepts && ( +
+ {mod.concepts.map((concept, i) => ( + + navigate({ + to: "/learn/$conceptId", + params: { conceptId: concept.concept_id }, + }) + } + /> + ))} +
+ )} + + {hasResources && ( +
+ {mod.resources.map((resource, i) => ( + + ))} +
+ )} +
+ ); +} + +function ConceptRow({ + concept, + index, + onClick, +}: { + concept: CurriculumConceptRef; + index: number; + onClick: () => void; +}) { + const readiness = + READINESS_CONFIG[concept.readiness_state] ?? READINESS_CONFIG.scaffolded; + + return ( + +
+ {concept.sort_order} +
+
+
+ {concept.title} +
+
+
+ + {readiness.label} + + +
+
+ ); +}