Mapa interativo de competências para desenvolvedores backend — baseado no conceito de Círculos de Competência de Charlie Munger.
| Camada | Tecnologia |
|---|---|
| Frontend | Angular 17+ (Standalone + Signals) |
| Visualização | D3.js Circle Packing |
| Autenticação | Firebase Auth (Google) |
| Banco de dados | Firestore (tempo real) |
| Hospedagem | Firebase Hosting |
bun install- Acesse console.firebase.google.com
- Clique em "Adicionar projeto"
- Dê um nome (ex:
job-ready-developer) - Desative o Google Analytics (opcional)
- Clique em "Criar projeto"
- No dashboard do projeto, clique no ícone
</> - Registre o app com o apelido "Web"
- Copie as credenciais
firebaseConfig
Abra src/environments/environment.ts e substitua pelos seus valores:
export const environment = {
production: false,
firebase: {
apiKey: "AIza...",
authDomain: "seu-projeto.firebaseapp.com",
projectId: "seu-projeto",
storageBucket: "seu-projeto.appspot.com",
messagingSenderId: "123456789",
appId: "1:123456789:web:abc123"
},
adminUid: "" // Preencher no Passo 8
};- No Firebase Console → Firestore Database
- Clique em "Criar banco de dados"
- Escolha "Iniciar no modo de produção"
- Selecione a região (ex:
southamerica-east1)
- No Firebase Console → Authentication
- Clique em "Começar"
- Em "Provedores de login", ative o Google
- Configure o e-mail de suporte
- Salve
bun start- Faça login na aplicação com sua conta Google
- Abra o DevTools → Console do navegador
- No Firebase Console → Authentication → Users
- Copie seu UID (coluna User UID)
- Cole em
src/environments/environment.ts:adminUid: "seu-uid-aqui"
- Abra
firestore.rules - Substitua
"SEU_UID_DE_ADMIN"pelo seu UID - No Firebase Console → Firestore → Regras
- Cole o conteúdo do arquivo e publique
npm install -g firebase-tools
firebase login
firebase init hosting
bun run deploysrc/app/
├── models/
│ └── competency.model.ts # Tipos + mapa de dados padrão
├── services/
│ ├── auth.service.ts # Firebase Auth + Google Login
│ └── competency.service.ts # Firestore CRUD + progresso
├── guards/
│ └── auth.guard.ts # Proteção de rotas
├── components/
│ ├── map/ # 🗺️ Visualização D3 (rota /)
│ ├── auth/ # 🔐 Login (rota /login)
│ ├── dashboard/ # 📊 Progresso aluno (rota /dashboard)
│ └── admin/ # ⚙️ Painel admin (rota /admin)
├── app.routes.ts
├── app.config.ts
└── app.component.ts # Navbar global
- Todos podem ver sem login
- Círculos D3 interativos
- Clique em qualquer círculo → painel com recursos de aprendizado
- Requer login com Google
- Progresso geral (%)
- Progresso por área
- Marcar tópicos como concluídos
- Próximos passos sugeridos
- Apenas você (UID configurado)
- Editar títulos e URLs dos recursos
- Adicionar/remover recursos
- Alterações salvas no Firestore e refletem em tempo real para todos
Edite o arquivo src/app/models/competency.model.ts.
Estrutura de um nó:
{
id: 'minha-competencia', // único, sem espaços
name: 'Nome Exibido',
description: 'Descrição curta',
color: '#1e40af', // cor do círculo
icon: '⚡', // emoji
value: 3, // tamanho relativo no círculo (1-5)
resources: [
{
title: 'Nome do Recurso',
url: 'https://...',
type: 'video', // video | course | article | docs
language: 'pt' // pt | en
}
],
children: [ /* sub-competências */ ]
}- Mapa: leitura pública, escrita apenas pelo admin
- Progresso: cada aluno acessa apenas os próprios dados
- Admin: verificado por UID no client + regras no Firestore
Desenvolvido com ❤️ para seus alunos. Bons estudos! 🚀