Centro de Estudos Kátia Ferreira — formação em estética injetável.
Projeto em fase inicial. Ainda não há código de aplicação — o repositório contém o material de identidade visual, sua análise e o schema do banco versionado.
| Caminho | Descrição |
|---|---|
IDV - CARTAO + RECEITUARIO.jpg |
Material original de identidade visual (papel timbrado + cartões de visita) |
public/logo.png |
Logo oficial (emblema, fundo transparente) |
roteiro-video.md |
Roteiro sugerido para o vídeo institucional |
identidade-visual.md |
Análise da identidade: logotipo, paleta (amostrada por pixel), tipografia, contatos e pontos em aberto |
supabase/config.toml |
Configuração do stack Supabase local |
supabase/migrations/ |
Schema do banco, versionado. Fonte única da verdade |
.github/workflows/supabase.yml |
Valida as migrations em PR e aplica em produção no push para main |
.env.example |
Modelo das variáveis de ambiente |
- Editor / assistente: VSCode + Claude Code
- Versionamento: Git + GitHub (
Jadirconsult/cekferreira) - Deploy: Vercel
- Banco de dados: Supabase — projeto
caavdgcujaibwjwjsjzl(https://caavdgcujaibwjwjsjzl.supabase.co) - Pagamentos: Asaas
O schema mora no Git, não no SQL Editor. O fluxo é:
edita/cria arquivo em supabase/migrations/ → PR → CI valida em banco limpo
→ merge em main → CI aplica em produção
Em Settings → Secrets and variables → Actions, criar o environment production e adicionar:
| Secret | Onde obter |
|---|---|
SUPABASE_ACCESS_TOKEN |
Supabase → Account → Access Tokens |
SUPABASE_DB_PASSWORD |
Senha do banco: Project Settings → Database (pode ser redefinida ali) |
O ref do projeto (caavdgcujaibwjwjsjzl) está no próprio workflow — ele faz parte da URL pública e não é segredo.
npx supabase login # uma vez
npx supabase link --project-ref caavdgcujaibwjwjsjzl
npx supabase start # sobe Postgres + Studio locais (requer Docker)
npx supabase migration new nome_da_mudanca
npx supabase db reset # reaplica tudo do zero e testaRegra: nunca alterar o schema de produção pelo SQL Editor do dashboard. Isso dessincroniza o histórico de migrations e o próximo db push passa a falhar ou a sobrescrever mudanças. Toda mudança entra como migration.
cursos → inscricoes ← alunos, e pagamentos pendurado em inscricoes (com asaas_payment_id).
RLS está ligado nas quatro tabelas. A única policy pública é leitura de cursos com status = 'ativo'. Inserções (inscrição, pagamento) devem passar por rota server-side usando a service_role key — nunca a anon key direto do navegador.
Next.js (App Router) + TypeScript. Landing page mobile-first que bifurca o visitante entre as duas trilhas de formação: quem está começando na área (B2C) e quem já tem clínica (B2B). Não trata de atendimento a pacientes — isso terá site próprio.
O catálogo de cursos é lido do Supabase e revalidado a cada 5 minutos; com o catálogo vazio, a página renderiza um estado vazio próprio em vez de conteúdo fabricado.
Direção visual e tokens: DESIGN.md. Verdade de produto: PRODUCT.md.
npm install
npm run dev # http://localhost:3000
npm run build # build de produçãoPrecisa de .env.local preenchido — copie de .env.example.
-
Importe
Jadirconsult/cekferreiraem vercel.com. O framework é detectado sozinho. -
Em Settings → Environment Variables, cadastre as duas chaves públicas:
Nome Valor NEXT_PUBLIC_SUPABASE_URLhttps://caavdgcujaibwjwjsjzl.supabase.coNEXT_PUBLIC_SUPABASE_ANON_KEYa chave anon do projeto SUPABASE_SERVICE_ROLE_KEYnão é necessária hoje — a página só lê dados públicos. Só cadastre quando existir rota server-side de inscrição. -
Sem essas variáveis o build não quebra: a página sobe com o catálogo vazio.
- Confirmar posicionamento da marca. O schema assume centro de treinamento B2B, mas o material de identidade é de clínica/spa B2C ("Organic Beauty Center"). Ver "Pontos de atenção" em
identidade-visual.md. - Confirmar os dados de contato divergentes (telefone fixo e andar/sala) apontados na mesma seção.