Ficha Técnica
A comunidade tech brasileira produz uma quantidade absurda de eventos — meetups, conferências, hackathons — mas a divulgação vive espalhada entre Instagram, grupos de WhatsApp e threads perdidas. O divulga.dev nasceu para ser o lugar único onde essa agenda mora: uma lista curada, filtrável e sempre atualizada de eventos de tecnologia no Brasil.
O problema
Quem quer participar de eventos precisa seguir dezenas de perfis e torcer pro algoritmo mostrar. Quem organiza precisa gritar em todos os canais ao mesmo tempo. Faltava um agregador neutro, rápido e sem fricção — sem login para consultar, sem app para instalar.
Como funciona
- Agenda pública agrupada por mês, com suporte a eventos de múltiplos dias.
- Filtros combináveis: busca textual, formato (presencial/online/híbrido), estado, categoria e período — tudo sincronizado na URL, então qualquer filtro é compartilhável por link.
- Página de detalhe com status temporal calculado em tempo real ("É hoje!", "Amanhã", "Acontecendo agora", "Já aconteceu") e eventos relacionados.
- Adicionar à agenda com um clique: deep links para Google Calendar, Outlook Live e Outlook 365, além de download de arquivo
.icsgerado dinamicamente. - Curadoria: eventos entram como pendentes (via importador em lote) e só aparecem ao público depois de aprovados na área de moderação.
Arquitetura
Monolito Next.js 15 (App Router) com Server Components e Server Actions falando direto com SQLite via better-sqlite3 — sem ORM, sem backend separado, sem overhead. Duas portas de entrada de dados: o painel admin e um importador CLI que faz upsert idempotente por slug.
Visão de componentes e infraestrutura:
Fluxo de dados (moderação e leitura pública):
O público só enxerga eventos com status = 'aprovado' — o filtro é fixo em toda query pública, não existe caminho de código que vaze um evento pendente.
Decisões técnicas que valem a pena contar
Datas "dia inteiro" sem bug de timezone. Todo evento é all-day, e o padrão ICS (e o Google/Outlook) exige DTEND exclusivo — o dia seguinte ao fim real. O código calcula isso com Date.UTC e formata datas fazendo split manual da string ISO, em vez de new Date(iso), justamente para nunca sofrer deslocamento de fuso. É o tipo de detalhe que quebra silenciosamente em produção quando ignorado.
SQLite como banco de produção. Para um site de leitura intensa e escrita rara (moderação), better-sqlite3 síncrono em modo WAL entrega latência de microssegundos sem custo de infraestrutura. A instância é cacheada em globalThis para sobreviver ao hot-reload do Next, e o pacote é declarado como serverExternalPackages para ficar fora do bundle.
Importação em lote idempotente. O importador CLI valida o JSON de entrada e faz upsert por slug — rodar duas vezes não duplica nada. Eventos importados entram como pendentes por padrão; a flag --aprovar publica direto quando a fonte é confiável.
Auth stateless de operador único. O painel tem um único operador, então a autenticação é deliberadamente mínima: token derivado por SHA-256 em cookie httpOnly, sem tabela de sessões, sem dependência externa. Complexidade proporcional ao problema.
Stack
Next.js 15 (App Router) · React 19 · TypeScript strict · better-sqlite3 (WAL) · CSS puro · Google Analytics condicional.
Status
No ar em divulga.dev, com agenda seedada com dezenas de eventos de 2026. Próximos passos no radar: formulário público de submissão de eventos (hoje a entrada é via moderação/importador) e feed RSS/iCal da agenda completa.
Curtiu o projeto?
Se quiser conversar sobre esse projeto, arquitetura ou uma oportunidade de trabalho, é só me chamar. 🚀
contato@racoelho.com.br