- Nova rota pública /roleta/:token com animação 7s (cubic-bezier
desaceleração contínua) + landing aleatório dentro da slice vencedora.
- Aba admin /admin/roleta pra CRUD de prêmios (peso como probabilidade
relativa, % calculado em tempo real, validação "não pode tudo ser nada").
- Integração chatwootApi.notifyRouletteResult() — avisa backend quando
o prêmio é revelado.
- Fix: useReservationForm com matchCanonical() case-insensitive resolve
mismatch entre "pernoite"/"Pernoite" vindo do URL do Chatwoot vs
permanências canônicas da marca no Supabase.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- PrecosTab: lista periodos como chips clicaveis (editar/excluir inline)
- Modal de CRUD de periodo: nome + checkboxes dos 7 dias da semana
- Grid de precos filtrado pelo periodo selecionado
- Salvar afeta so o periodo ativo (delete + insert scoped)
- Nao permite excluir o ultimo periodo
- catalogoService.findPrecoForDate resolve o periodo pelo dia da semana
- useReservationForm usa findPrecoForDate quando checkinAt esta preenchido
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Antes: 'permission denied for table marcas' ao tentar criar/editar
qualquer entidade. Authenticated so tinha SELECT.
Agora:
- Grants de INSERT/UPDATE/DELETE pra authenticated nas 9 tabelas
- RLS enabled em todas
- Helper function is_tenant_member(bigint) via security definer
- Policies members_write_* permitem escrita apenas se user estiver
no tenant_members do tenant_id da row
- public_read_* mantem SELECT livre pro anon da pagina publica
- Reservas/reserva_extras continuam service_role-only (backend Chatwoot)
Aplicada via MCP. Testada com curl + JWT do admin (INSERT marcas = 201).
- HeroSection com reveal escalonado (framer-motion)
- ImageGallery com embla-carousel + lightbox full-screen + navegacao por teclado
- PriceSummary com pulse anime.js quando preco muda
- PixCheckout com QR code glow pulsante infinito
- SuccessScreen com confetti + check SVG desenhado
- Skeleton component + shimmer keyframe
- Button com active:scale press feedback
- ReservationFlow com AnimatePresence entre phases
- StayDetailsStep com stagger container
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Inclui:
- Arquitetura multi-tenant via subdominio + fallback dev
- Tabela de tenants de teste (grupo-1001 e motel-ocean)
- Credenciais de admin de teste
- Passo-a-passo pra criar novo tenant via SQL
- Documentacao das 8 abas do admin
- Instrucoes do bucket reserva-fotos no Supabase Storage
- Plano de deploy Vercel com wildcard domain
- CategoriasTab: edita marcas.categorias[] via lista reordenavel
- PrecosTab: grid categoria x permanencia, salva via delete + insert
- FotosTab: upload pro Supabase Storage (bucket reserva-fotos) + URL manual + reorder
- ExtrasTab: CRUD padrao com titulo/preco/descricao
- ReservasTab: read-only com filtros (status/datas) + link pra conversa no Chatwoot
- AdminLayout TABS com as 8 abas
- Router com todas as rotas
- react-router-dom + rotas / publica e /admin/*
- src/hooks/useAuth.ts com Supabase Auth
- AuthGate, LoginPage, AdminLayout com nav tabs e logout
- AparenciaTab edita identidade visual: textos, logo, 5 cores via
react-colorful, 2 fontes via dropdown curado (Fraunces/Playfair/etc)
- Apos salvar, TenantProvider.refresh() re-aplica tema
- App.tsx renomeado pra pages/ReservationPage.tsx
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- tenant_members mapeia auth.users a um tenant com role
- RLS: members_read_own (user ve so os tenants dos quais participa)
- Seed manual: admin@reserva.test (senha Admin1234!) associado ao
tenant grupo-1001 como admin
- Novas tabelas reserva_hotel.tenants e reserva_hotel.app_config
- Coluna tenant_id adicionada em todas as tabelas de catalogo/reservas
- Tenant default 'grupo-1001' criado + backfill das rows existentes
- RLS + grants pro anon ler tenants e app_config
- Types TS regenerados
Aplicado via MCP. Arquivos de migration sao source of truth historica.
Usa --project-id em vez de --linked pra evitar exigir senha do DB.
Tipos gerados diretamente do schema reserva_hotel do projeto InAudit Hotel
(acdvblhzzaneddlxqyst).