Refatoração realizada em 2025-01-17 para eliminar duplicação de dados
Todos os dados das cantorias estão centralizados em um único arquivo:
📁 public/data/acervo.json ← ÚNICA FONTE DE VERDADE
- ✅ Sem duplicação de dados
- ✅ Fácil manutenção - edita-se apenas um arquivo
- ✅ Consistência garantida em toda aplicação
- ✅ Build automático copia para
dist/via Vite
vilanova/
├── public/data/
│ ├── acervo.json ← 🎯 FONTE ÚNICA (cantorias + estrofes)
│ ├── estilos.json ← Informações sobre estilos de repente
│ └── README.md ← Documentação detalhada
│
├── repentes/
│ ├── *.txt ← Transcrições de cantorias (texto puro)
│ └── README.md ← Documentação das transcrições
│
└── dist/client/data/ ← 🤖 GERADO automaticamente pelo build
├── acervo.json (cópia de public/data/acervo.json)
└── estilos.json (cópia de public/data/estilos.json)
Estes arquivos foram deletados para eliminar duplicação:
- ❌
public/data/cantorias.json - ❌
repentes/acervo-estruturado.json - ❌
repentes/cantorias.json - ❌
dist/client/data/cantorias.json
{
"repentes": [
// ... cantorias existentes
{
"id": "nova-cantoria-2025",
"slug": "nova-cantoria-titulo-amigavel",
"titulo": "Nova Cantoria Incrível",
"estilo": {
"nome": "Martelo Alagoano",
"slug": "martelo-alagoano",
"versos_por_estrofe": 10,
"metrica": "decassílabos (10 sílabas)",
"esquema_rima": "ABBAACCDDC",
"mote_fixo": "Nos dez pés de martelo Alagoano (3x)"
},
"cantadores": [
{
"nome": "Cantador Exemplo",
"slug": "cantador-exemplo"
}
],
"local": "Caruaru, PE",
"ano": 2025,
"duracao": "5:30",
"contexto": "Descrição do contexto da cantoria",
"estrofes": [
{
"numero": 1,
"cantador": "Cantador Exemplo",
"versos": [
"Primeiro verso da estrofe",
"Segundo verso da estrofe",
// ... mais versos
],
"tema": "Tema abordado nesta estrofe"
}
// ... mais estrofes
],
"links": {
"youtube": "https://www.youtube.com/watch?v=ID_DO_VIDEO",
"spotify": null
},
"transcricao_path": "/repentes/nova-cantoria.txt",
"audio_path": null,
"destaque": true
}
],
"metadata": {
"ultima_atualizacao": "2025-01-17",
"total_repentes": 12, // ← Atualizar
"total_estrofes_catalogadas": 65 // ← Atualizar
}
}Sempre que adicionar/remover cantorias, atualize:
metadata.total_repentesmetadata.total_estrofes_catalogadasmetadata.ultima_atualizacao
Crie um arquivo texto em /repentes/:
repentes/nova-cantoria.txtnpm run dev- Vite serve arquivos diretamente de
public/ - Mudanças em
public/data/acervo.jsonrefletem imediatamente - Hot Module Replacement (HMR) funciona normalmente
npm run build- Vite copia
public/→dist/client/ - Arquivos JSON são copiados automaticamente
- Não edite arquivos em
dist/manualmente!
npm run deploy- Usa o conteúdo de
dist/gerado pelo build - Deploy no Cloudflare Workers/Pages
Todos os componentes React importam do mesmo lugar:
// Padrão usado em todos os componentes
import acervoData from "../../../public/data/acervo.json";
import estilosData from "../../../public/data/estilos.json";
// Uso
const cantorias = acervoData.repentes;
const totalRepentes = acervoData.metadata.total_repentes;home.tsx- Estatísticas e exemplos destacadoscantorias.tsx- Lista paginada de cantoriascantoria.tsx- Página individual de cada cantoriacantadores.tsx- Lista agregada de cantadorescantador.tsx- Perfil individual de cantadorestilos.tsx- Lista de estilos com exemplosestilo.tsx- Página individual de cada estilo
Antes de adicionar uma nova cantoria, verifique:
- ID único (sem conflitos com IDs existentes)
- Slug amigável para URL (minúsculas, hífens)
- Estilo correto com esquema de rima válido
- Cantadores com nomes consistentes
- Links válidos (YouTube, Spotify)
- Estrofes estruturadas corretamente (se disponível)
- Metadados atualizados (total_repentes, total_estrofes, data)
- JSON válido (sem erros de sintaxe)
- Destaque apropriado (true/false)
Para validar o JSON:
# Verificar sintaxe
jq . public/data/acervo.json > /dev/null && echo "✅ JSON válido"
# Contar repentes
jq '.metadata.total_repentes' public/data/acervo.json
# Contar estrofes
jq '[.repentes[].estrofes | length] | add' public/data/acervo.json
# Listar IDs (verificar duplicatas)
jq '.repentes[].id' public/data/acervo.json | sort | uniq -d- Documentação detalhada:
/public/data/README.md - Sobre transcrições:
/repentes/README.md - Guia de contribuição:
/README.md
Última atualização: 2025-01-17 Responsável pela refatoração: Eliminação de arquivos duplicados