Skip to content

Commit adf4736

Browse files
cursoragentlucis
andcommitted
feat: Add visual dashboard and improve home page layout
Co-authored-by: lucis <lucis@deco.cx>
1 parent fd49a2d commit adf4736

6 files changed

Lines changed: 561 additions & 51 deletions

File tree

MELHORIAS-VISUAIS-IMPLEMENTADAS.md

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
# ✅ Melhorias Visuais Implementadas
2+
3+
## 📅 Data: 2025-01-17
4+
5+
## 🎯 Objetivo
6+
7+
Melhorar a apresentação visual do conteúdo mantendo **100% do texto original**, tornando-o mais escaneável e impactante.
8+
9+
---
10+
11+
## ✅ Implementações Realizadas
12+
13+
### 1. **Hero Section: Métricas Visuais**
14+
15+
**Arquivo:** `view/src/routes/home.tsx` (linhas 67-71)
16+
17+
**Componente criado:** `view/src/components/hero/MetricPill.tsx`
18+
19+
**O que foi adicionado:**
20+
- Pills visuais mostrando:
21+
- **15 Cantorias**
22+
- **12 Cantadores**
23+
- **6 Estilos**
24+
- Design com bordas arredondadas, sombra e efeito hover
25+
- Cores consistentes com paleta do site
26+
27+
**Texto original:** Mantido 100% intacto
28+
29+
---
30+
31+
### 2. **Seção "O Que É Repente": Vídeo Embed**
32+
33+
**Arquivo:** `view/src/routes/home.tsx` (linhas 137-151)
34+
35+
**O que foi adicionado:**
36+
- Embed do YouTube da websérie "Entre Cordas e Poesia" - Episódio 1
37+
- Container responsivo aspect-video
38+
- Borda decorativa com a cor tema (#8B6F47)
39+
- Legenda explicativa abaixo do vídeo
40+
41+
**Texto original:** Mantido 100% intacto (vídeo adicionado **após** o parágrafo introdutório)
42+
43+
---
44+
45+
### 3. **Nova Seção: "Acervo em Números"**
46+
47+
**Arquivo:** `view/src/routes/home.tsx` (linhas 323-374)
48+
49+
**Componentes criados:**
50+
- `view/src/components/dashboard/MetricCard.tsx`
51+
- `view/src/components/dashboard/StyleBar.tsx`
52+
53+
**O que foi adicionado:**
54+
- **4 cards de métricas grandes:**
55+
- 🎵 15 Cantorias
56+
- 🎤 12 Cantadores
57+
- 📝 6 Estilos
58+
- 📜 84 Estrofes catalogadas
59+
60+
- **Gráfico de barras interativo:**
61+
- Mostra os 5 estilos mais frequentes no acervo
62+
- Barras animadas com gradiente
63+
- Dados calculados dinamicamente do acervo
64+
65+
- **CTA:** Botão "Explorar Acervo Completo"
66+
67+
**Posição:** Depois de "O Que É Repente", antes de "Os Cantadores"
68+
69+
**Conteúdo novo:** Curto e objetivo (2 parágrafos introdutórios + visualizações)
70+
71+
---
72+
73+
### 4. **Seção "Como Contribuir": Cards Reorganizados**
74+
75+
**Arquivo:** `view/src/routes/home.tsx` (linhas 1102-1162)
76+
77+
**Componente criado:** `view/src/components/contribute/ContribCard.tsx`
78+
79+
**O que foi mudado:**
80+
- Reorganização do conteúdo existente em **3 cards visuais:**
81+
82+
1. **🎨 Design** (DESTAQUE - PRECISAMOS DE AJUDA!)
83+
- Badge especial "⚠️ PRECISAMOS DE AJUDA!"
84+
- Badge "MÉDIO" de dificuldade
85+
- Link para issues de design no GitHub
86+
87+
2. **💻 Código**
88+
- Lista de áreas: Frontend, Backend, IA/ML, Database
89+
- Badge "MÉDIO" de dificuldade
90+
- Link para issues de dev no GitHub
91+
92+
3. **📝 Conteúdo**
93+
- Lista de tarefas: Transcrever, biografias, correções
94+
- Badge "FÁCIL" de dificuldade
95+
- Link para issues de conteúdo no GitHub
96+
97+
**Texto original:** Mantido e redistribuído nos cards (nada foi removido)
98+
99+
---
100+
101+
## 📂 Arquivos Criados
102+
103+
### Componentes React:
104+
105+
```
106+
view/src/components/
107+
├── hero/
108+
│ └── MetricPill.tsx # Pills de métricas no hero
109+
├── dashboard/
110+
│ ├── MetricCard.tsx # Cards grandes de métricas
111+
│ └── StyleBar.tsx # Gráfico de barras para estilos
112+
└── contribute/
113+
└── ContribCard.tsx # Cards de contribuição organizados
114+
```
115+
116+
### Componentes Reutilizáveis:
117+
- Todos os componentes aceitam props customizáveis
118+
- Design system consistente (cores, bordas, sombras)
119+
- Responsivos (mobile-first)
120+
- Efeitos de hover para interatividade
121+
122+
---
123+
124+
## 📊 Estrutura Final da Home
125+
126+
### ANTES:
127+
```
128+
1. Hero (texto denso)
129+
2. O Que É Repente (6 cards + exemplo)
130+
3. Os Cantadores
131+
4. O Problema
132+
5. A Solução
133+
6. O Que Já Temos
134+
7. Por Que Vilanova
135+
8. Como Contribuir (texto espalhado)
136+
9. Websérie (só texto)
137+
10. Footer
138+
```
139+
140+
### DEPOIS:
141+
```
142+
1. Hero (+ métricas visuais) ← NOVO
143+
2. O Que É Repente (+ vídeo embed) ← NOVO
144+
3. [NOVO] Acervo em Números (dashboard) ← NOVO
145+
4. Os Cantadores
146+
5. O Problema
147+
6. A Solução
148+
7. O Que Já Temos
149+
8. Por Que Vilanova
150+
9. Como Contribuir (cards organizados) ← NOVO
151+
10. Websérie (já tinha vídeo)
152+
11. Footer
153+
```
154+
155+
---
156+
157+
## 🎨 Design System
158+
159+
### Cores Utilizadas:
160+
- **Primary:** `#C84B31` (vermelho terracota)
161+
- **Secondary:** `#4A7C59` (verde sálvia)
162+
- **Accent:** `#D49B54` (dourado)
163+
- **Neutral:** `#2E5266` (azul escuro)
164+
- **Background:** `#F5EBE0` (bege claro)
165+
- **Border:** `#8B6F47` (marrom médio)
166+
167+
### Padrões Visuais:
168+
- Bordas: `border-2 border-[#8B6F47]`
169+
- Sombras: `shadow-lg`, `shadow-xl`
170+
- Transições: `transition-all duration-300`
171+
- Hover: `hover:-translate-y-1`, `hover:scale-105`
172+
- Arredondamento: `rounded-lg`, `rounded-full`
173+
174+
---
175+
176+
## ✅ Garantias Cumpridas
177+
178+
### O que esta implementação FEZ:
179+
- ✅ Adicionou elementos visuais (métricas, gráficos, vídeos)
180+
- ✅ Reorganizou layout para melhor hierarquia
181+
- ✅ Melhorou escaneabilidade
182+
- ✅ Manteve toda a profundidade do conteúdo
183+
184+
### O que esta implementação NÃO FEZ:
185+
- ❌ Não alterou/removeu/simplificou nenhum texto original
186+
- ❌ Não mudou tom de voz
187+
- ❌ Não reduziu explicações
188+
- ❌ Não removeu seções
189+
190+
---
191+
192+
## 📈 Benefícios Esperados
193+
194+
- ✅ Visitante entende a proposta mais rápido (métricas visuais no hero)
195+
- ✅ Vídeo ajuda na explicação (complementa o texto)
196+
- ✅ Dados do acervo mais claros (dashboard com gráficos)
197+
- ✅ Oportunidades de contribuição mais visíveis (cards destacados)
198+
- ✅ Todo o conteúdo original permanece intacto
199+
200+
---
201+
202+
## 🧪 Status dos Testes
203+
204+
-**Lint:** Nenhum erro de TypeScript ou ESLint
205+
-**Build:** Componentes compilam corretamente
206+
-**Imports:** Todas as dependências resolvidas
207+
-**Visual:** Aguardando review visual no navegador
208+
209+
---
210+
211+
## 🚀 Próximos Passos (Opcional)
212+
213+
### Melhorias futuras possíveis:
214+
1. **Animações de entrada:**
215+
- Usar `framer-motion` para animar cards ao scroll
216+
- Contadores animados para métricas
217+
218+
2. **Responsividade avançada:**
219+
- Testar em diferentes tamanhos de tela
220+
- Otimizar espaçamentos mobile
221+
222+
3. **Acessibilidade:**
223+
- Adicionar `aria-labels` descritivos
224+
- Garantir contraste de cores WCAG AA
225+
226+
4. **Performance:**
227+
- Lazy loading para vídeo embed
228+
- Otimização de imagens
229+
230+
---
231+
232+
## 📝 Notas de Implementação
233+
234+
### Por que componentes separados?
235+
- **Reutilização:** Componentes podem ser usados em outras páginas
236+
- **Manutenção:** Fácil de atualizar estilos globalmente
237+
- **Testes:** Cada componente pode ser testado isoladamente
238+
- **Type Safety:** Props tipadas com TypeScript
239+
240+
### Por que métricas dinâmicas?
241+
- **Sempre atualizadas:** Calculadas do acervo real
242+
- **Não duplicam dados:** Usa `acervoData` como fonte única
243+
- **Performance:** `useMemo` evita recalcular a cada render
244+
245+
### Por que gráfico de barras?
246+
- **Visual rápido:** Entendimento imediato das proporções
247+
- **Interativo:** Animação ao carregar página
248+
- **Escalável:** Adiciona automaticamente novos estilos
249+
250+
---
251+
252+
## 🎯 Conclusão
253+
254+
Implementação bem-sucedida das melhorias visuais propostas, mantendo 100% do texto original e adicionando elementos visuais que melhoram significativamente a experiência do usuário.
255+
256+
**Total de arquivos criados:** 4 componentes React
257+
**Total de linhas adicionadas:** ~300 linhas
258+
**Total de linhas modificadas em home.tsx:** ~150 linhas
259+
**Texto removido:** 0 palavras ✅
260+
261+
---
262+
263+
**Status:****COMPLETO**
264+
**Data:** 2025-01-17
265+
**Desenvolvedor:** Cursor AI Agent
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
interface ContribCardProps {
2+
title: string;
3+
icon: string;
4+
description: string;
5+
items: string[];
6+
actionLabel: string;
7+
actionUrl?: string;
8+
difficulty?: "easy" | "medium" | "hard";
9+
highlight?: boolean;
10+
}
11+
12+
export function ContribCard({
13+
title,
14+
icon,
15+
description,
16+
items,
17+
actionLabel,
18+
actionUrl,
19+
difficulty,
20+
highlight = false
21+
}: ContribCardProps) {
22+
const difficultyColors = {
23+
easy: "bg-[#4A7C59]",
24+
medium: "bg-[#D49B54]",
25+
hard: "bg-[#C84B31]",
26+
};
27+
28+
const difficultyLabels = {
29+
easy: "FÁCIL",
30+
medium: "MÉDIO",
31+
hard: "DIFÍCIL",
32+
};
33+
34+
return (
35+
<div className={`border-2 rounded-lg p-6 transition-all duration-300 hover:shadow-lg hover:-translate-y-1 ${
36+
highlight
37+
? "border-[#C84B31] bg-gradient-to-br from-[#C84B31]/5 to-[#D49B54]/5"
38+
: "border-[#8B6F47] bg-[#F5EBE0]"
39+
}`}>
40+
<div className="text-4xl mb-4">{icon}</div>
41+
42+
<h3 className="font-bold text-xl text-[#2E5266] mb-3">
43+
{title}
44+
</h3>
45+
46+
{highlight && (
47+
<div className="mb-3 inline-block">
48+
<span className="text-xs bg-[#C84B31] text-white px-3 py-1 rounded-full font-semibold">
49+
⚠️ PRECISAMOS DE AJUDA!
50+
</span>
51+
</div>
52+
)}
53+
54+
<p className="text-sm text-[#2E5266]/80 leading-relaxed mb-4">
55+
{description}
56+
</p>
57+
58+
{items.length > 0 && (
59+
<ul className="space-y-2 mb-4">
60+
{items.map((item, idx) => (
61+
<li key={idx} className="text-sm text-[#2E5266]/70 flex items-start gap-2">
62+
<span className="text-[#C84B31] mt-1"></span>
63+
<span>{item}</span>
64+
</li>
65+
))}
66+
</ul>
67+
)}
68+
69+
<div className="flex items-center gap-2 flex-wrap mt-4">
70+
{actionUrl ? (
71+
<a
72+
href={actionUrl}
73+
target="_blank"
74+
rel="noopener noreferrer"
75+
className="inline-flex items-center gap-2 text-sm bg-[#C84B31] text-white px-4 py-2 rounded-lg hover:bg-[#A63D40] transition-colors font-semibold"
76+
>
77+
{actionLabel}
78+
</a>
79+
) : (
80+
<button className="inline-flex items-center gap-2 text-sm bg-[#C84B31] text-white px-4 py-2 rounded-lg hover:bg-[#A63D40] transition-colors font-semibold">
81+
{actionLabel}
82+
</button>
83+
)}
84+
85+
{difficulty && (
86+
<span className={`text-xs ${difficultyColors[difficulty]} text-white px-3 py-1 rounded-full font-semibold`}>
87+
{difficultyLabels[difficulty]}
88+
</span>
89+
)}
90+
</div>
91+
</div>
92+
);
93+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
interface MetricCardProps {
2+
value: number;
3+
label: string;
4+
icon?: string;
5+
}
6+
7+
export function MetricCard({ value, label, icon = "📊" }: MetricCardProps) {
8+
return (
9+
<div className="bg-white rounded-lg p-6 border-2 border-[#8B6F47] hover:shadow-lg transition-all duration-300 hover:-translate-y-1">
10+
<div className="text-3xl mb-2">{icon}</div>
11+
<div className="text-5xl font-bold text-[#C84B31] mb-2">{value}</div>
12+
<div className="text-sm text-[#2E5266]/70 font-medium">{label}</div>
13+
</div>
14+
);
15+
}

0 commit comments

Comments
 (0)