O NutriApp é um projeto de estudos: plataforma de saúde conectando pacientes, nutricionistas, médicos e personal trainers, cada perfil enxergando só o que sua permissão libera.
Stack: React 19 + TypeScript, TanStack Start (SSR, rotas file-based e server functions), Tailwind v4 + shadcn/ui, react-hook-form + Zod para formulários tipados, TanStack Query para cache, e Lovable Cloud (Supabase) com Postgres e Row Level Security.
O maior desafio foi o controle de acesso por papéis. Três tabelas centrais — profiles, user_roles e pacientes — todas com RLS ativado. Paciente lê só seus próprios registros; profissionais e administradores enxergam todos os pacientes. Pra evitar recursão de política (problema clássico de RLS), criei funções SECURITY DEFINER como has_role e is_profissional, quebrando o ciclo de verificação.
Autenticação e segurança:
Login por email/senha, com rota administrativa separada (/admin/login)
Server functions protegidas com requireSupabaseAuth, checando papel antes de qualquer ação administrativa
Validação client-side com Zod: senha entre 6-72 caracteres, email até 255, telefone opcional
Usuários criados por admin já nascem confirmados e ativos, reduzindo fricção operacional
Automação como diferencial: o perfil de saúde calcula IMC em tempo real e gera um plano inicial baseado no objetivo selecionado (emagrecimento, ganho de massa ou controle de patologias) — reduzindo trabalho manual do profissional.
Aprendizados principais:
RLS bem modelado desde o início evita gambiarra depois — pensar em papéis antes da primeira quere economiza retrabalho.
Verificação de papel precisa estar no backend, nunca só na UI.
Separar login de paciente/profissional do login admin simplifica segurança e UX ao mesmo tempo.
Top comments (0)