Commit Graph

44 Commits

Author SHA1 Message Date
Kilo-Oracle
060592ce53 Adiciona arquivo de saudacao do Mattermost 2026-04-25 17:42:01 +00:00
5e065f2fa4 chore: trigger rebuild apos repo publico
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 17:11:59 -03:00
5f832443fb chore: trigger vercel rebuild com email correto 2026-04-21 16:59:45 -03:00
f6def82465 fix(tenant): dominios .hoteis1001noites.com.br caem no tenant default
Hoje todo subdominio do grupo usa o mesmo tenant grupo-1001. Evita erro
'tenant nao encontrado' em reservas.hoteis1001noites.com.br.
Quando tiver multi-marca por subdominio, remover esse atalho.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 16:59:12 -03:00
22e623fa3f fix(tenant): fallback pra default slug em dominios .vercel.app
Vercel preview deployments tem hostname tipo reserva-chatmotel-xxx.vercel.app
que era interpretado como slug de tenant, causando 'tenant nao encontrado'.
Agora qualquer host .vercel.app cai no VITE_DEFAULT_TENANT_SLUG, igual ngrok.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 16:59:12 -03:00
396638323b chore: vercel SPA rewrites pra rotas client-side (/roleta, /admin)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 16:59:12 -03:00
f13ba7e0bd feat: Roleta da Sorte + prefill case-insensitive
- 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>
2026-04-21 16:59:12 -03:00
Rodribm10
337229ce22 feat: multi-periodo de precos com CRUD na aba Precos
- 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>
2026-04-14 22:29:52 -03:00
Rodribm10
09c7903a9c fix: permissoes + RLS pro admin conseguir escrever nas tabelas de catalogo
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).
2026-04-14 22:24:15 -03:00
Rodribm10
25abaa807c feat(fase5): polish visual - hero stagger, carrossel+lightbox, skeletons, confetti, transicoes
- 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>
2026-04-14 22:10:57 -03:00
Rodribm10
a0ee24937c docs: README completo com multi-tenant, admin, como criar tenant, deploy
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
2026-04-14 21:22:39 -03:00
Rodribm10
330e4e175f feat(fase4-e2): 5 abas CRUD restantes (categorias, precos, fotos, extras, reservas)
- 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
2026-04-14 21:20:35 -03:00
Rodribm10
33354c7549 feat(fase4-e1): CRUD infra + abas Marcas e Unidades
- DataTable generico (columns, actions, loading/empty states)
- Modal reutilizavel
- useCrud hook (list/create/update/delete scoped by tenant_id)
- MarcasTab: CRUD completo, categorias/permanencias como lista CSV
- UnidadesTab: CRUD completo, vincula marca + conta_pagamento
  + chatwoot_unit_id + categorias visiveis
- Router + AdminLayout atualizados com as 2 novas abas
2026-04-14 21:15:17 -03:00
Rodribm10
d1ee2bdfa1 feat(fase4-d): router + admin shell + login + aba Aparencia
- 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>
2026-04-14 21:10:27 -03:00
Rodribm10
f4980f026c feat(fase4-c): tenant resolver + theming dinamico
- src/lib/tenant.ts: resolve slug por subdominio (fallback env)
- src/lib/appConfig.ts: carrega tenant + app_config do Supabase
- TenantProvider: aplica CSS vars, Google Fonts dinamico, title/favicon
- useAppConfig + useTenantId hooks
- App.tsx renderiza titulo/subtitulo/tagline/footer do config
- catalogoService filtra todas queries por tenant_id
- useReservationForm aguarda tenantId antes de buscar
- Testes mockam TenantProvider + useAppConfig
- vite.config: host: true + allowedHosts (tunnel-friendly)
- chatwootApi: header ngrok-skip-browser-warning
2026-04-14 21:06:16 -03:00
Rodribm10
3cb5ecf47d feat: tabela tenant_members + primeiro admin seed
- 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
2026-04-14 21:00:59 -03:00
Rodribm10
e912563196 feat: schema multi-tenant (tenants, app_config, tenant_id backfill, RLS)
- 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.
2026-04-14 20:59:37 -03:00
Rodribm10
45ffd9110c feat: ReservationFlow aplica prefill de query params no boot 2026-04-14 10:27:13 -03:00
Rodribm10
8365c09ed8 feat: useReservationForm aceita prefill e resolve nomes em cascata 2026-04-14 10:27:10 -03:00
Rodribm10
76c25603ba feat: parser de query params para prefill do formulario 2026-04-14 10:27:06 -03:00
Rodribm10
a4c8b04fed feat: ReservationFlow orquestrando form + checkout + sucesso 2026-04-14 00:00:21 -03:00
Rodribm10
ab2e64435e feat: SuccessScreen apos pagamento confirmado 2026-04-13 23:59:26 -03:00
Rodribm10
b60dc6f45d feat: PixCheckout com QR code e polling de status 2026-04-13 23:59:14 -03:00
Rodribm10
66fa4e77fd feat: form components StayDetailsStep, ImageGallery, PriceSummary, CustomerForm 2026-04-13 23:57:11 -03:00
Rodribm10
38fa508e3f fix: remove output espurio do supabase cli no final de database.ts 2026-04-13 23:55:16 -03:00
Rodribm10
9e13bc4556 feat: hook useReservationForm com estado consolidado em cascata 2026-04-13 23:54:48 -03:00
Rodribm10
9ab3b13948 feat: catalogoService com queries do reserva_hotel 2026-04-13 23:54:46 -03:00
Rodribm10
b6cdc05404 feat: formatadores BRL, CPF e telefone 2026-04-13 23:54:43 -03:00
Rodribm10
1339a9d16a feat: client http do endpoint publico do chatwoot 2026-04-13 23:54:40 -03:00
Rodribm10
118bde32f4 feat: seed dados de teste (unidade aguas lindas, precos, fotos, extras) + types atualizados 2026-04-13 23:41:49 -03:00
Rodribm10
87f6e8df4f chore: fixa porta do dev server em 5180 (evita conflito com financehub) 2026-04-13 23:16:32 -03:00
Rodribm10
5f06a5bf30 docs: adiciona README da fase 1 2026-04-13 23:14:03 -03:00
Rodribm10
fe6a98d94b chore: configura eslint flat config + prettier 2026-04-13 23:13:46 -03:00
Rodribm10
4eafb0c5d0 test: smoke test do App com mock do supabase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 23:11:47 -03:00
Rodribm10
acc305ff21 feat: migra FormField e SelectField com paleta premium + componente Button base com variantes premium 2026-04-13 23:10:00 -03:00
Rodribm10
df837e13a2 chore: adiciona gitignore para supabase 2026-04-13 23:05:48 -03:00
Rodribm10
480b3ec473 feat: renderiza marcas reais do supabase na pagina inicial 2026-04-13 23:05:38 -03:00
Rodribm10
232c20f6b7 feat: documenta migration aditiva do schema reserva_hotel 2026-04-13 23:05:16 -03:00
Rodribm10
9450fca481 feat: gera tipos typescript do schema reserva_hotel
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).
2026-04-13 23:03:59 -03:00
Rodribm10
3cabbbab4f feat: configura cliente supabase com variaveis de ambiente 2026-04-13 23:02:19 -03:00
Rodribm10
fbe6a01bc8 fix: restaura test config usando vitest/config + upgrade vitest@3
Vitest 2 nao suporta Vite 6 (peer dep conflict). Subir pra vitest 3.2.
defineConfig vindo de vitest/config pra ter o tipo test na UserConfig.
2026-04-13 23:00:38 -03:00
Rodribm10
86e7d17cbc feat: configura tailwind v4 com paleta premium (obsidian/champagne/rose-gold) 2026-04-13 22:59:02 -03:00
Rodribm10
548985dd05 feat: scaffold inicial do projeto vite + react + typescript
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 22:57:23 -03:00
Rodribm10
3cdbaadb9b chore: inicializa repo com POC como referencia 2026-04-13 22:55:20 -03:00