Sobre o Projeto
Usuários pediam suporte a eventos recorrentes havia bastante tempo no app de agenda. É uma funcionalidade simples na aparência, mas que impacta arquitetura em armazenamento, consulta e renderização.
Participei do planejamento e da implementação ponta a ponta: esquema de dados, componentes de UI e exportação.
O Desafio
A agenda suportava apenas eventos com início e fim. Ao incluir recorrência, apareceu a pergunta central: armazenar cada ocorrência no banco?
Essa abordagem escalaria muito mal em volume e performance. Era necessário um modelo mais eficiente.
Solução: Expansão Virtual
1. Reuso de Padrão Existente
Já existia uma abordagem para eventos de múltiplos dias: salvar um registro e expandir no frontend para renderização. Estendi esse mesmo conceito para recorrência.
2. Padrão RRule
Adotamos RRule, padrão amplamente usado por calendários. Um evento semanal
vira um único documento com regra como FREQ=WEEKLY;BYDAY=TU, e o frontend
expande as ocorrências na visualização.
3. Corte de Escopo Deliberado
A primeira versão não permitia editar apenas uma ocorrência da série. Foi uma escolha consciente para entregar valor rapidamente sem atrasar meses.
O que Eu Construi
- Implementação da UI completa a partir do Figma.
- Dois novos componentes para o design system Vue 2: calendar picker e time scroll input.
- Ajustes no export para calendário para manter compatibilidade com Google Calendar, Outlook e similares.
Resultados
- Entrega no prazo da funcionalidade mais pedida.
- Banco enxuto com expansão virtual.
- Componentes reutilizáveis adicionados ao design system.
Ainda existe o gap de edição por ocorrência, mas a solução resolveu a maior parte dos cenários reais de uso com ótima relação entre prazo e impacto.