Site de evento
Formatura Medicina TXXXI - UNICID
Central de informações da formatura de uma turma de medicina: quatro eventos, FAQ com busca, documentos e um formulário que cai no e-mail da comissão.
Visão geral
Uma turma de medicina de 140 formandos se forma no fim de 2026. A comissão de formatura tocava tudo por um grupo de WhatsApp com formandos e aderidos, e o grupo virou o único canal de informação: horário do jantar, dress code do baile, prazo de formulário. As mesmas perguntas voltavam toda semana, porque procurar uma resposta antiga no meio de centenas de mensagens dá mais trabalho que perguntar de novo.
O site tira essa informação da conversa e põe num endereço fixo. Ele reúne os quatro eventos da formatura, um FAQ com busca, o portal dos aderidos, os boletins e documentos da comissão, os contatos das empresas envolvidas e um formulário de dúvidas.
Decisões técnicas
Quatro eventos, quatro arquivos de conteúdo
A informação chegava aos pedaços e fora de ordem, então eu precisava mudar conteúdo sem abrir componente, e reordenar uma seção sem mexer em layout. Escolhi Astro por isso.
Cada evento é um arquivo YAML validado por schema, renderizado por uma rota dinâmica. O arquivo declara as próprias seções numa união discriminada por tipo: informações gerais, traje, cronograma, cardápio, permissões, lista, links, texto e FAQ. Um renderizador escolhe o componente de cada tipo. Os boletins e documentos ficam no Cloudflare R2, atrás de um subdomínio próprio, então publicar um boletim novo é upload e um link no YAML.
O que isso custou: enquanto a informação nova couber num tipo de seção que já existe, é um bloco de YAML. Quando não cabe, é schema novo, componente novo e um caso novo no renderizador.
Estático inteiro, com uma exceção
O site é pré-renderizado por completo, com uma rota de fora: a que recebe o formulário de dúvidas. Ela roda no servidor, valida um token do Cloudflare Turnstile antes de qualquer outra coisa e envia o e-mail pela Resend, a partir do domínio da própria formatura. As duas chaves entram no schema de env do Astro, então uma chave faltando quebra o build, e não o formulário do primeiro formando que tentar usar.
O que isso custou: o projeto deixou de rodar como site puramente estático e passou a depender de um adapter e de duas contas externas. Em troca, a comissão recebe as dúvidas no e-mail dela sem painel nenhum para aprender, e fica bem mais difícil um bot inundar essa caixa.
A animação roda por cima de uma página que já está pronta
A raiz do site abre com o brasão da turma, a frase e a contagem regressiva, animados com GSAP e
split-type, e o scroll suave fica por conta do Lenis. O HTML sai do servidor já no estado final: o
script só define os pontos de partida e anima até onde a página já estava. A tela de abertura se
apaga sozinha por CSS, com animação própria, então um script que não carrega não deixa ninguém
preso atrás dela. Em prefers-reduced-motion essa tela nem aparece.
O que isso custou: GSAP, split-type e Lenis somam JavaScript justamente na primeira página que alguém abre, e o Lenis ainda troca o scroll que o navegador entrega de graça por um que ele controla. Aceitei o custo porque a raiz existe para dar um momento ao formando: o brasão da turma, a frase e quanto falta para a cerimônia. Nas páginas de consulta, que é onde a informação mora, nenhuma das três carrega.
Resultados e aprendizados
Os quatro eventos, o FAQ e o portal dos aderidos saíram dos mesmos tipos de seção, e publicar material novo passou a ser editar YAML e subir um arquivo no R2.
O formulário de dúvidas envia pela Resend com o domínio da formatura verificado, e sai de um endereço da própria formatura. É o que mantém a mensagem fora da caixa de spam da comissão, coisa que um remetente genérico não garante.



