Todos instalados:
- ✅ React 19
- ✅ Tailwind CSS 4
- ✅ Recharts
- ✅ Lucide React
- ✅ Framer Motion
/components/dashboard/
├── utils/
│ ├── dashboardCalculations.js (funções de cálculo)
│ └── formatters.js (formatadores)
├── hooks/
│ └── useDashboardData.js (hook principal)
├── atoms/
│ ├── KPICard.jsx (card reutilizável)
│ └── Alert.jsx (componente de alerta)
├── sections/
│ ├── HeroKPI.jsx (4 KPIs principais)
│ ├── RevenueChart.jsx (gráfico receita)
│ ├── OccupancyChart.jsx (gráfico ocupação)
│ ├── PropertyRevenue.jsx (receita por propriedade)
│ ├── AlertsPanel.jsx (panel de alertas)
│ └── CalendarIntegration.jsx (calendário otimizado)
├── Dashboard.jsx (container principal)
├── Dashboard_Redesign.jsx (nova versão)
└── dashboard-redesign.module.css (estilos específicos)
Execute no terminal:
cd front-end/src/components/dashboard
mkdir utils hooks atoms sections stylesArquivo: utils/dashboardCalculations.js
Contém: Todas as funções de cálculo da Etapa 3
Tamanho: ~3KB
Arquivo: hooks/useDashboardData.js
Contém: Hook que chama API e processa dados
Dependências: dashboardCalculations.js
// Card reutilizável com:
// - Label + valor principal (monospace)
// - Trend indicator (up/down)
// - Progress bar
// - Hover effects
// - 4 temas de cor (emerald, blue, amber, purple)
Props:
- label: string
- value: string | number
- icon?: React.Component
- trend?: 'up' | 'down'
- trendValue?: number
- subtext?: string
- color?: 'emerald' | 'blue' | 'amber' | 'purple'
- progress?: number (0-100)
- onClick?: () => void// Componente de alerta com 4 severidades:
// - critical (red)
// - warning (amber)
// - success (emerald)
// - info (blue)
Props:
- id: string
- title: string
- description?: string
- action?: string
- severity?: 'critical' | 'warning' | 'success' | 'info'
- onDismiss?: (id) => void// Exibe 4 KPIs em grid responsivo
// Usa: KPICard (4x)
Props:
- revenue: number
- occupancy: number
- bookings: number
- rating: number
- revenueGrowth?: number (%)
- occupancyTrend?: number (%)// Area Chart - Receita ao longo do tempo
// Usa: Recharts AreaChart
Props:
- data: Array<{ month, value, bookings }>
- isLoading?: boolean// Bar Chart - Ocupação semanal
// Usa: Recharts BarChart
Props:
- data: Array<{ day, occupancy }>
- isLoading?: boolean// Donut/Pie Chart - Receita por propriedade
// Usa: Recharts PieChart
Props:
- data: Array<{ id, name, revenue }>
- isLoading?: boolean// Panel com alertas priorizados
// Usa: Alert (múltiplos)
Props:
- alerts: { critical: [], warning: [], info: [] }
- onDismiss?: (id) => void// Orquestra tudo
// Usa: useDashboardData hook
// Renderiza: Todas as seções acima
Estrutura:
1. useD ashboardData() → carrega dados
2. Loading state → skeleton ou spinner
3. Error state → erro message
4. Success → renderiza todas seções
Layout (Tailwind):
- max-w-7xl container
- px-6 / px-8 padding
- gap-6 entre seções
- grid responsivo{
"bookings": [
{
"id": "b1",
"propertyId": "p1",
"guestName": "João Silva",
"checkInDate": "2026-04-25T14:00:00Z",
"checkOutDate": "2026-04-28T11:00:00Z",
"totalPrice": 1500.00,
"status": "confirmed",
"reviewedByHost": false
}
],
"properties": [
{
"id": "p1",
"title": "Apartamento Praia",
"location": "Praia, SC",
"isActive": true
}
],
"reviews": [
{
"id": "r1",
"bookingId": "b1",
"rating": 4.8,
"comment": "Excelente!"
}
],
"today": {
"checkins": 2,
"checkouts": 1,
"pendingBookings": 0
}
}--emerald-50: #f0fdf4
--emerald-600: #16a34a
--blue-50: #eff6ff
--blue-600: #2563eb
--amber-50: #fffbeb
--amber-600: #d97706
--red-50: #fef2f2
--red-600: #dc2626
--slate-50: #f8fafc
--slate-900: #0f172b// Card base
className="rounded-2xl border border-slate-200 bg-white p-6 shadow-sm hover:shadow-lg transition-all"
// KPI valor
className="text-4xl font-bold text-slate-900 font-mono"
// Label
className="text-xs font-semibold uppercase tracking-widest"
// Progress bar
className="h-1.5 bg-slate-200 rounded-full overflow-hidden"import Dashboard_Redesign from '@/components/dashboard/Dashboard_Redesign';
// Em sua página/rota
export default function HostPage() {
return (
<div className="min-h-screen bg-slate-50">
<Dashboard_Redesign />
</div>
);
}API: /dashboard/host
↓
useDashboardData() hook
├→ calculateMonthlyRevenue()
├→ calculateWeeklyOccupancy()
├→ calculatePerformanceMetrics()
├→ calculateRevenueByProperty()
├→ calculateFinancialMetrics()
└→ generateAlerts()
↓
Dashboard_Redesign
├→ HeroKPI (metrics + finance)
├→ RevenueChart (revenueData)
├→ OccupancyChart (occupancyData)
├→ PropertyRevenue (propertyData)
├→ AlertsPanel (alerts)
└→ CalendarSection (events)
- Criar pasta
utils/e adicionardashboardCalculations.js - Criar pasta
hooks/e adicionaruseDashboardData.js - Criar pasta
atoms/e adicionarKPICard.jsx,Alert.jsx - Criar pasta
sections/e adicionar todos 6 componentes - Criar
Dashboard_Redesign.jsxcontainer - Importar em sua rota/página
- Testar com dados da API
- Ajustar cores/espaçamento conforme necessário
- Adicionar responsividade (mobile)
- Otimizar performance (useMemo, lazy load)
- Dark mode tema
- Export dados (CSV/PDF)
- Comparação período (mês anterior)
- Filtros avançados
- Integração com Stripe (dados reais)
- Notificações push de alertas
- Analytics avançado
- A/B testing de preços
Dúvidas? Consulte:
DASHBOARD_COMPONENTS_GUIDE.js- Código baseplan.md- Visão geral do projeto- Componentes existentes em
/components/dashboard/
Status: 🟢 Pronto para implementação
Última atualização: 2026-04-25
Autor: Dashboard Redesign Agent