[<-- BACK]
Esse projeto foi criado com o objetivo de estudar e demonstrar diferentes padroes de design.

Healthcare — Agendamento de Consultas

Plataforma web para agendamento de consultas médicas com papéis distintos para pacientes e médicos.

Problema

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.

Solução

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.

Outcome

  • Sistema funcional em produção (link abaixo)
  • Formulários com validação em tempo real e feedback claro para o usuário
  • Infraestrutura de monitoramento ativa via Sentry

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.

Tecnologias

  • Next.js + TypeScript + React
  • TailwindCSS
  • Zod (validação)
  • Sentry (monitoramento)
  • Vercel (deploy)

Links

  • Ver projeto ao vivo
  • Repositório no GitHub