---
name: learning-path-patterns
scope: domain
target: ultrathink-educational-platform
description: |
Comprehensive guide to Learning Path patterns for the Ultrathink educational platform. This skill covers the conceptual difference between Study Areas (courses) and Proposed Paths (sequences of courses), data modeling, UI/UX patterns, and implementation guidelines.
Learn how to structure Learning Paths correctly: a Proposed Path is NOT a container of loose flashcards, but a curated sequence of Study Areas (courses). Each path references existing courses with metadata like order, availability status, and estimated hours.
Real-world examples are taken from the Hub MVP implementation (US-044), including caminhoExemploData.js, HubView.jsx, and LearningPathView.jsx. The skill demonstrates the reference pattern used for "Desenvolvedor Backend" path that sequences Bash, Linux, Docker, and DevOps courses.
Key topics include data schema design (cursos array with ordem, areaId, disponivel flags), computed properties (getters for statistics), navigation patterns (path -> course -> lesson), availability states (disponivel: true/false with badges), and how to add new paths without duplicating course data.
This skill is essential for implementing new Learning Paths, maintaining the Hub MVP pattern, scaling to multiple paths, and ensuring UI/UX consistency across the educational platform. Includes the correct mental model for Course vs Path separation.
keywords: |
learning-path, trilha, caminho-proposto, area-de-estudo, curso, navegacao,
hub, educacional, sequencia, cursos, disponibilidade, ordem, mvp,
composite-pattern, entity-reference, data-modeling
allowed-tools: |
Read, Write, Edit, Grep, Glob, Bash
---
# Learning Path Patterns
> **Padrao de Trilhas de Aprendizado para Sistema Educacional Corporativo**
>
> **Versao:** 1.0.0
> **Ultima Atualizacao:** 2025-11-22
> **Target:** Hub MVP (US-044)
> **Projeto:** Ultrathink - Plataforma B2B de Treinamento Tecnico
---
## Indice
1. [Overview](#-overview)
2. [Conceito Fundamental: Curso vs Caminho](#-conceito-fundamental-curso-vs-caminho)
3. [Schema de Dados](#-schema-de-dados)
4. [Padroes de UI/UX](#-padroes-de-uiux)
5. [Implementacao de Referencia](#-implementacao-de-referencia)
6. [Como Adicionar Novos Caminhos](#-como-adicionar-novos-caminhos)
7. [Antipadroes a Evitar](#-antipadroes-a-evitar)
8. [Exemplos do Projeto](#-exemplos-do-projeto)
9. [Referencias](#-referencias)
---
## Overview
Esta skill documenta o **padrao correto** para modelar e implementar **Caminhos de Aprendizado** (Learning Paths) no sistema Ultrathink.
**O que voce vai aprender:**
- Diferenca entre Area de Estudo (curso) e Caminho Proposto (trilha)
- Como estruturar dados para caminhos escalavel
- Padroes de UI para mostrar disponibilidade de cursos
- Navegacao correta: Hub -> Caminho -> Curso -> Aula
- Como adicionar novos caminhos sem duplicar dados
**Por que esta skill e importante:**
- **Clareza conceitual:** Evita confusao entre curso e trilha
- **Escalabilidade:** Mesmo curso pode estar em multiplos caminhos
- **Manutencao:** Atualizar curso atualiza todas as trilhas
- **UX consistente:** Usuario entende hierarquia intuitivamente
- **MVP focus:** Mostra apenas conteudo padronizado
**Contexto da US-044:**
O Hub anterior mostrava 13 areas + flashcards soltos em "Caminhos".
A US-044 simplificou para MVP: 1 Area (Bash) + 1 Caminho correto (sequencia de cursos).
---
## Conceito Fundamental: Curso vs Caminho
### ERRADO (antes da US-044)
```
Caminho de Aprendizado = Container de Flashcards
- Flashcard 1: "O que e variavel?"
- Flashcard 2: "Sintaxe de loop"
- ...
Problema: Mistura conceitos, nao referencia cursos reais
```
### CORRETO (depois da US-044)
```
Area de Estudo (Curso):
- Entidade autocontida
- Tem: video, modulos, notas, flashcards
- Exemplo: Bash, C, Rust
Caminho Proposto (Trilha):
- Sequencia ordenada de CURSOS
- Referencia Areas de Estudo existentes (ou planejadas)
- Exemplo: "Desenvolvedor Backend" = Bash -> Linux -> Docker -> DevOps
```
### Analogia do Design Pattern
**Composite vs Entity Reference:**
```
Entity (Area de Estudo):
{
id: "bash",
name: "Bash Shell Scripting",
modules: 16,
hours: 32,
flashcards: [...], // Dados REAIS aqui
sections: [...] // Conteudo REAL aqui
}
Composite (Caminho Proposto):
{
id: "backend-developer",
name: "Desenvolvedor Backend",
cursos: [
{ areaId: "bash", ordem: 1, disponivel: true }, // REFERENCIA
{ areaId: "linux", ordem: 2, disponivel: false }, // REFERENCIA
{ areaId: "docker", ordem: 3, disponivel: false } // REFERENCIA
]
}
```
**Beneficio:** Se `bash` for atualizado (mais modulos, novos flashcards), TODOS os caminhos que referenciam `bash` refletem automaticamente.
---
## Schema de Dados
### Schema de Caminho Proposto (caminhoExemploData.js)
```javascript
export const caminhoExemplo = {
// Identificacao
id: 'backend-developer',
name: 'Desenvolvedor Backend',
icon: 'trilha',
description: 'Caminho proposto para dominar desenvolvimento backend...',
badge: 'exemplo', // 'exemplo' | 'popular' | 'novo' | null
// Sequencia ordenada de cursos (REFERENCIAS, nao dados duplicados)
cursos: [
{
ordem: 1, // Posicao na sequencia
areaId: 'bash', // Referencia a studyAreas.js
nome: 'Bash Shell Scripting', // Display name (pode ser diferente)
icone: 'terminal',
descricao: 'Fundamentos de linha de comando...',
modules: 16, // Estatisticas (sync com Area)
hours: 32,
disponivel: true, // Clicavel ou nao
destaque: 'Padrao de referencia' // Badge especial (opcional)
},
{
ordem: 2,
areaId: 'linux',
nome: 'Linux Fundamentals',
icone: 'linux',
descricao: 'Sistema operacional, administracao...',
modules: 12,
hours: 24,
disponivel: false, // "Em breve" badge
destaque: null
}
// ... mais cursos
],
// Estatisticas calculadas (getters)
get totalCursos() { return this.cursos.length; },
get cursosDisponiveis() { return this.cursos.filter(c => c.disponivel).length; },
get totalModules() { return this.cursos.reduce((sum, c) => sum + c.modules, 0); },
get totalHours() { return this.cursos.reduce((sum, c) => sum + c.hours, 0); },
get modulesDisponiveis() {
return this.cursos.filter(c => c.disponivel).reduce((sum, c) => sum + c.modules, 0);
},
get hoursDisponiveis() {
return this.cursos.filter(c => c.disponivel).reduce((sum, c) => sum + c.hours, 0);
}
};
// Exportar dicionario de caminhos
export const caminhosPropostos = {
'backend-developer': caminhoExemplo
};
```
### Schema de Area de Estudo (studyAreas.js)
```javascript
export const studyAreas = [
{
name: "Bash",
icon: "terminal",
description: "Shell scripting, automacao e linha de comando",
modules: 16,
hours: 32,
badge: "Integrado", // Status do sistema integrado
hasIntegratedApp: true, // Tem LearningSystem dedicado
key: "bash", // ID para navegacao
flashcards: [...] // Flashcards REAIS
}
];
```
**Regra de Ouro:**
- `studyAreas.js` contem dados REAIS (flashcards, metricas)
- `caminhoExemploData.js` contem REFERENCIAS + metadados de ordenacao
---
## Padroes de UI/UX
### Padrao 1: Card de Caminho no Hub
```jsx
// HubView.jsx - Secao de Caminhos Propostos