Plataforma web para agendamento de consultas médicas com papéis distintos para pacientes e médicos.
Sistemas de saúde lidam com dados sensíveis e fluxos multi-papel (paciente agenda, médico confirma/recusa). O desafio foi construir uma aplicação com validação robusta, separação de acesso por role e monitoramento em produção — com um stack moderno mas pragmático.
Aplicação fullstack em Next.js + TypeScript, usando APIs internas do Next.js para o backend:
Validação de dados: Zod como schema único compartilhado entre cliente e servidor, eliminando duplicação de validação e garantindo erros tipados.
const AppointmentSchema = z.object({
patientName: z.string().min(1, "Nome obrigatório"),
doctorId: z.string().uuid("Formato inválido"),
date: z.string().refine((val) => isValid(parseISO(val)), "Data inválida"),
});
// Mesma schema usada no cliente (feedback em tempo real) e na API route
export async function POST(req: Request) {
const parsed = AppointmentSchema.safeParse(await req.json());
if (!parsed.success) {
return Response.json({ errors: parsed.error.issues }, { status: 400 });
}
// salvar no banco...
}
Monitoramento: Sentry configurado em múltiplos ambientes para capturar erros de validação, performance e usabilidade em produção.
Deploy: Vercel com variáveis de ambiente isoladas por ambiente.
O que faria diferente: Implementar autenticação desde o início em vez de deixar como fase 2 — o sistema de roles fica muito mais simples quando a identidade do usuário está disponível em toda a stack desde o começo.