Files
NaMesa_site/docs/03_PROJECT_STRUCTURE.md

6.7 KiB

📁 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