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 a521729..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, @@ -67,6 +64,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 +143,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" @@ -751,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); @@ -1512,652 +1449,672 @@ 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 === + "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 === - "cloud_consulting" - ? "career_foundations_cloud" + "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; 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); @@ -2384,6 +2341,97 @@ 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: "/reference", + search: { section: "dev-ref" }, + }) + } + /> + navigate({ to: "/chinese" })} + /> + navigate({ to: "/cantonese" })} + /> + navigate({ to: "/math" })} + /> + navigate({ to: "/culture-generale" })} + /> +
navigate({ to: "/career-accelerator" })} /> @@ -2456,6 +2505,12 @@ export function Sidebar({ }) } /> + } + label="Foundations" + active={active_view.startsWith("career_foundations")} + onClick={() => navigate({ to: "/career-foundations" })} + />
@@ -2463,7 +2518,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 +2562,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" })} + />
@@ -2748,1316 +2818,7 @@ 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", - }, - }) - } - /> - - )} -
- {/* 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 +2923,22 @@ export function Sidebar({ } /> - {/* Side Projects */} + {/* Business */} + {sidebarExpanded && }
} - 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 +2949,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 +2994,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 +3227,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 +3314,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/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/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/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/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/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 ( + + ); + })} +
+
+ + + {/* Curriculum tracks */} +
+ {TRACKS.map((track, ti) => ( + + + +
+ {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. +

+
+ + ); +} diff --git a/frontend/src/views/TrackDetailView.tsx b/frontend/src/views/TrackDetailView.tsx new file mode 100644 index 0000000..6c4f3cd --- /dev/null +++ b/frontend/src/views/TrackDetailView.tsx @@ -0,0 +1,454 @@ +import { useParams, useNavigate, useSearch } from "@tanstack/react-router"; +import { motion } from "motion/react"; +import { + ArrowLeft, + BookOpen, + Clock, + Layers, + ChevronRight, + Link as LinkIcon, +} from "lucide-react"; +import { useDocumentTitle } from "../hooks/useDocumentTitle"; +import { PremiumHero, PremiumPage } from "../components/layout/PremiumShell"; +import { ResourceCard } from "../components/ui/ResourceCard"; +import { api } from "../lib/api/endpoints"; +import { useQuery } from "../lib/query/useQuery"; +import { queryKeys } from "../lib/query/keys"; +import type { + CurriculumModuleSummary, + CurriculumConceptRef, +} from "../lib/api/types"; + +const DIFFICULTY_LABEL: Record = { + 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} + + +
+
+ ); +}