# πŸ“ Estrutura do Projeto β€” ReservaMesa ## Estrutura de Pastas ``` reserva-mesa-dashboard/ β”‚ β”œβ”€β”€ πŸ“ app/ # Next.js App Router β”‚ β”œβ”€β”€ πŸ“ (auth)/ # Route group β€” nΓ£o autenticado β”‚ β”‚ β”œβ”€β”€ login/ β”‚ β”‚ β”‚ └── page.tsx # PΓ‘gina de login β”‚ β”‚ └── register/ β”‚ β”‚ └── page.tsx # Onboarding do restaurante β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ (dashboard)/ # Route group β€” autenticado β”‚ β”‚ β”œβ”€β”€ layout.tsx # Layout com sidebar β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx # Dashboard principal (/) β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ reservations/ β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx # Lista de reservas β”‚ β”‚ β”‚ β”œβ”€β”€ [id]/ β”‚ β”‚ β”‚ β”‚ └── page.tsx # Detalhe da reserva β”‚ β”‚ β”‚ └── new/ β”‚ β”‚ β”‚ └── page.tsx # Nova reserva manual β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ tables/ β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx # GestΓ£o de mesas (mapa visual) β”‚ β”‚ β”‚ └── settings/ β”‚ β”‚ β”‚ └── page.tsx # Configurar mesas β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ calendar/ β”‚ β”‚ β”‚ └── page.tsx # Vista calendΓ‘rio β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ analytics/ β”‚ β”‚ β”‚ └── page.tsx # RelatΓ³rios e estatΓ­sticas β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ settings/ β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx # DefiniΓ§Γ΅es do restaurante β”‚ β”‚ β”‚ β”œβ”€β”€ timeslots/ β”‚ β”‚ β”‚ β”‚ └── page.tsx # Configurar slots de tempo β”‚ β”‚ β”‚ └── notifications/ β”‚ β”‚ β”‚ └── page.tsx # PreferΓͺncias de notificaΓ§Γ£o β”‚ β”‚ β”‚ β”‚ β”‚ └── πŸ“ staff/ β”‚ β”‚ └── page.tsx # GestΓ£o de funcionΓ‘rios β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ api/ # API Routes Next.js β”‚ β”‚ β”œβ”€β”€ webhooks/ β”‚ β”‚ β”‚ └── route.ts # Webhooks externos β”‚ β”‚ └── export/ β”‚ β”‚ └── route.ts # Export de dados (CSV/PDF) β”‚ β”‚ β”‚ β”œβ”€β”€ layout.tsx # Root layout β”‚ β”œβ”€β”€ globals.css # Estilos globais β”‚ └── not-found.tsx β”‚ β”œβ”€β”€ πŸ“ components/ β”‚ β”œβ”€β”€ πŸ“ ui/ # Shadcn/UI components β”‚ β”‚ β”œβ”€β”€ button.tsx β”‚ β”‚ β”œβ”€β”€ calendar.tsx β”‚ β”‚ β”œβ”€β”€ dialog.tsx β”‚ β”‚ └── ... β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ layout/ β”‚ β”‚ β”œβ”€β”€ Sidebar.tsx # NavegaΓ§Γ£o lateral β”‚ β”‚ β”œβ”€β”€ Header.tsx # Topbar com notificaΓ§Γ΅es β”‚ β”‚ └── MobileNav.tsx # NavegaΓ§Γ£o mobile β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ dashboard/ β”‚ β”‚ β”œβ”€β”€ StatsCards.tsx # Cards de mΓ©tricas do dia β”‚ β”‚ β”œβ”€β”€ TodayTimeline.tsx # Timeline de reservas hoje β”‚ β”‚ β”œβ”€β”€ QuickActions.tsx # AΓ§Γ΅es rΓ‘pidas β”‚ β”‚ └── RecentActivity.tsx # Feed de atividade recente β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ reservations/ β”‚ β”‚ β”œβ”€β”€ ReservationCard.tsx # Card individual de reserva β”‚ β”‚ β”œβ”€β”€ ReservationTable.tsx # Tabela de reservas β”‚ β”‚ β”œβ”€β”€ ReservationForm.tsx # FormulΓ‘rio criar/editar β”‚ β”‚ β”œβ”€β”€ StatusBadge.tsx # Badge de status colorido β”‚ β”‚ └── ReservationFilters.tsx # Filtros de pesquisa β”‚ β”‚ β”‚ β”œβ”€β”€ πŸ“ tables/ β”‚ β”‚ β”œβ”€β”€ FloorPlan.tsx # Mapa visual do restaurante β”‚ β”‚ β”œβ”€β”€ TableCard.tsx # Card de mesa individual β”‚ β”‚ └── TableEditor.tsx # Editor de disposiΓ§Γ£o β”‚ β”‚ β”‚ └── πŸ“ analytics/ β”‚ β”œβ”€β”€ OccupancyChart.tsx # GrΓ‘fico de ocupaΓ§Γ£o β”‚ β”œβ”€β”€ RevenueChart.tsx # GrΓ‘fico de receita estimada β”‚ └── PeakHoursChart.tsx # HorΓ‘rios de pico β”‚ β”œβ”€β”€ πŸ“ lib/ β”‚ β”œβ”€β”€ firebase.ts # InicializaΓ§Γ£o Firebase β”‚ β”œβ”€β”€ firestore.ts # Helpers Firestore β”‚ β”œβ”€β”€ auth.ts # Helpers Auth β”‚ └── utils.ts # UtilitΓ‘rios gerais β”‚ β”œβ”€β”€ πŸ“ hooks/ β”‚ β”œβ”€β”€ useReservations.ts # Hook para reservas em RT β”‚ β”œβ”€β”€ useTables.ts # Hook para mesas em RT β”‚ β”œβ”€β”€ useRestaurant.ts # Hook dados do restaurante β”‚ └── useNotifications.ts # Hook notificaΓ§Γ΅es β”‚ β”œβ”€β”€ πŸ“ store/ β”‚ └── useAppStore.ts # Zustand store global β”‚ β”œβ”€β”€ πŸ“ types/ β”‚ β”œβ”€β”€ reservation.ts # Tipos de reserva β”‚ β”œβ”€β”€ table.ts # Tipos de mesa β”‚ β”œβ”€β”€ restaurant.ts # Tipos de restaurante β”‚ └── user.ts # Tipos de utilizador β”‚ β”œβ”€β”€ πŸ“ constants/ β”‚ └── index.ts # Constantes (status, zones, etc.) β”‚ β”œβ”€β”€ middleware.ts # ProteΓ§Γ£o de rotas Auth β”œβ”€β”€ next.config.js β”œβ”€β”€ tailwind.config.js β”œβ”€β”€ tsconfig.json └── package.json ``` --- ## PΓ‘ginas e Funcionalidades ### 🏠 Dashboard (`/`) - Total de reservas hoje - OcupaΓ§Γ£o atual (% de mesas ocupadas) - PrΓ³ximas chegadas (prΓ³ximas 2h) - Alertas: no-shows, cancelamentos recentes - Quick actions: Nova reserva, Check-in rΓ‘pido ### πŸ“‹ Reservas (`/reservations`) - Lista com filtros: data, status, zona, tamanho do grupo - Pesquisa por nome/telefone do cliente - AcΓ§Γ΅es inline: confirmar, sentar, cancelar, no-show - Criar reserva manual (para reservas por telefone) ### πŸ—ΊοΈ Mesas (`/tables`) - Mapa visual drag-and-drop do restaurante - Estado visual: livre (verde), reservada (amarelo), ocupada (vermelho) - Clicar numa mesa abre o painel com reserva atual - Modo de ediΓ§Γ£o para reconfigurar layout ### πŸ“… CalendΓ‘rio (`/calendar`) - Vista mensal/semanal/diΓ‘ria - Blocos coloridos por zona - Arrastar para mover reservas (com validaΓ§Γ£o de conflitos) ### πŸ“Š Analytics (`/analytics`) - Taxa de ocupaΓ§Γ£o por dia/semana/mΓͺs - HorΓ‘rios de maior procura - Taxa de cancelamentos e no-shows - Tempo mΓ©dio de ocupaΓ§Γ£o de mesa - Export CSV ### βš™οΈ ConfiguraΓ§Γ΅es (`/settings`) - Dados do restaurante (nome, morada, contacto, logo) - HorΓ‘rio de funcionamento - Slots de tempo disponΓ­veis para reserva - Capacidade mΓ‘xima por slot - NotificaΓ§Γ΅es (email, SMS β€” integraΓ§Γ΅es futuras) --- *VersΓ£o: 1.0.0 | Maio 2026*