case_01 · portal público · 2025
EmpreendeAfogados

Como uma feira de empreendedorismo passou a acontecer online, das inscrições ao mapa de stands.
- Cliente
- Prefeitura Municipal de Afogados da Ingazeira
- Área
- Secretaria de Administração / Sala do Empreendedor
- Parceiros
- Sebrae e CDL
- Entrega
- Portal web instalável (PWA) + painel administrativo
// lead
Todo ano, a Feira do Empreendedorismo de Afogados da Ingazeira reúne centenas de expositores e milhares de visitantes. Organizar tudo isso pede método e um lugar só. A gente construiu o portal que leva o atendimento da Sala do Empreendedor e toda a gestão da feira para o celular.
01/ contexto
Uma feira que movimenta a região
Afogados da Ingazeira, em Pernambuco, é referência comercial para as cidades vizinhas. A Sala do Empreendedor da Prefeitura orienta quem quer abrir, formalizar ou fazer crescer um negócio.
A Feira do Empreendedorismo, organizada com Sebrae e CDL, é a maior do gênero na região. Em 2025, chegou à 8ª edição com mais de 250 expositores e mais de 15 mil visitantes.
02/ desafio
Muita gente, muitas etapas, um só lugar
Cada edição envolve inscrever expositores, conferir dados, distribuir stands, orientar quem vai expor e informar o público. Feito à mão, isso consome a equipe e gera dúvida para todo mundo.
O objetivo era claro: o empreendedor resolve tudo pelo celular, e a equipe da Sala acompanha cada inscrição num painel.
// objetivo
Inscrever, consultar, escolher o stand e se orientar na feira, sem sair de casa.
03/ processo
De rascunho a produto no ar
step_01 · wireframes
Rascunhos primeiro.
Mapeamos cada caminho: o do expositor, o do visitante e o da equipe. Validamos o fluxo antes de pensar em cor.
step_02 · ui
Interface para quem tem pressa.
Telas simples, letras grandes e botões fáceis de tocar. Pensado para o celular, que é onde o empreendedor está.
step_03 · código
Do protótipo ao portal.
Desenvolvemos o portal e o painel administrativo, testamos com a equipe e colocamos no ar a tempo da feira.

// domínio: regras puras, iguais no navegador e no servidorexport const inscricao = z.object({ documento: cpfOuCnpj(), telefone: z.string().min(10), segmento: z.enum(SEGMENTOS), stands: z.number().int().min(1).max(5),}); // o valor gravado é sempre calculado no servidorconst valor = precoDaInscricao(dados, fase);
Telas do portal. Dados pessoais fictícios ou desfocados.
04/ decisões técnicas
Por trás da tela
Para quem gosta de detalhes: as escolhas que deixaram o portal rápido, seguro e fácil de manter.
Next.js · Supabase · PWA · Vercel
01O navegador nunca fala direto com o bancoToda leitura e escrita passa por funções no servidor. Quem abre as ferramentas do navegador não encontra nada para explorar.
- problema
- Na primeira versão, cadastro, consulta e envio de arquivos rodavam no navegador, protegidos por regras permissivas.
- decisão
- Tudo passou para edge functions no servidor; o acesso direto às tabelas foi revogado e os arquivos ficaram privados.
- por quê
- Preço, janela de stand e quem pode ver o quê ficam num único lugar confiável.
02Segurança sem senha para o expositorPara consultar a inscrição, basta o CPF ou CNPJ e os 4 últimos dígitos do telefone cadastrado.
- problema
- O CNPJ é público; consultar só com ele exporia dados de terceiros. Exigir conta e senha afastaria quem não está acostumado.
- decisão
- Documento + 4 dígitos do telefone, com bloqueio temporário após erros e a mesma resposta para documento inexistente ou telefone errado.
- por quê
- Segurança proporcional ao risco, sem atrito, e força bruta inviável.
03Dois expositores nunca ficam com o mesmo standSe duas empresas escolhem o mesmo stand no mesmo segundo, só uma leva, e a outra é orientada a escolher outro.
- problema
- Com várias janelas abertas ao mesmo tempo, duas confirmações simultâneas recebiam sucesso.
- decisão
- Chave única por edição e número do stand, e uma função transacional no banco que confere janela, quantidade e intervalo de uma vez.
- por quê
- A garantia fica no banco, não no “quem clicou primeiro”.
04Escolha de stand com hora marcadaA organização libera janelas individuais e avisa cada expositor por notificação e por WhatsApp.
- problema
- Liberar para todos ao mesmo tempo geraria disputa injusta e pico de acesso no Wi-Fi do evento.
- decisão
- Janelas por intervalo ou lista de stands, avisos por push e WhatsApp, e lembretes a cada 5 minutos enquanto a janela está aberta.
- por quê
- Ordem previsível, carga distribuída e aviso até para quem não ativou notificações.
05Rápido no pico, sem mostrar preço erradoAs páginas aguentam muita gente ao mesmo tempo e nunca exibem um valor desatualizado.
- problema
- No lançamento e na feira, muita gente abre o site junto; consultar tudo a cada visita sobrecarregaria o servidor.
- decisão
- Configurações em cache por cerca de 30 segundos, limpas na hora quando a equipe muda algo. Em falha, as vendas aparecem como encerradas.
- por quê
- O pico vira no máximo uma consulta a cada meio minuto.
06O valor é sempre calculado no servidorO formulário mostra uma prévia do investimento, mas o valor gravado vem sempre do servidor.
- problema
- Regras de CPF, CNPJ, telefone e preço duplicadas em dois lugares tendem a divergir.
- decisão
- Regras e validações numa camada de domínio, espelhadas nas funções do servidor.
- por quê
- Resposta imediata para quem preenche, sem brecha para alterar o preço no navegador.
07Feito para rede ruim e para iPhoneInstala como app, abre rápido nas visitas seguintes e tem página própria quando a internet cai.
- problema
- O público usa celular, muitas vezes no 3G ou no Wi-Fi lotado da praça, e o iPhone só entrega notificações a apps instalados.
- decisão
- Service worker próprio que guarda só o que não muda, página offline e passo a passo de instalação para cada aparelho.
- por quê
- Carregamento rápido e nenhum dado desatualizado vindo do cache.
08Proteção contra abuso, sem servidor extraTentativas repetidas são limitadas, e quem esbarra no limite recebe uma mensagem clara dizendo quanto esperar.
- problema
- Endpoints públicos podiam ser usados para descobrir documentos ou encher a fila com cadastros falsos.
- decisão
- Contadores por rota no próprio Postgres, com o IP guardado só como hash.
- por quê
- Proteção compatível com a LGPD e sem infraestrutura adicional.
09Documentos financeiros com link que expiraBoletos e comprovantes ficam guardados em área privada e só abrem por links temporários.
- problema
- Links permanentes ou uploads sem checagem são risco para documentos financeiros.
- decisão
- Arquivos privados, links assinados de curta duração e conferência do conteúdo real de cada imagem enviada.
- por quê
- Um link vazado expira sozinho, e um arquivo disfarçado não chega à equipe.
10Um painel que a equipe opera sozinhaPreços, vendas, conteúdo do portal e exportações ficam nas mãos da Sala do Empreendedor, sem depender de programador.
- problema
- Cada ajuste de preço ou número do portal exigiria um desenvolvedor.
- decisão
- Configurações, editor de conteúdo, edição de cadastros e exportações em Excel, PDF e CSV, com a autorização conferida no servidor.
- por quê
- Autonomia durante a feira, sem abrir mão do controle de acesso.
05/ números
A 8ª edição em números
Na 8ª edição, em 2025: mais de 250 expositores, mais de 15 mil visitantes, mais de 2,6 milhões de reais em negócios no evento, mais de 6,5 milhões de reais em negócios futuros e NPS 9,0.
Dados da organização da feira, 8ª edição (2025). Os resultados são do evento; o portal foi parte do caminho.
06/ selo
Nível máximo do Sebrae
A Sala do Empreendedor de Afogados da Ingazeira conquistou o Selo Diamante de Referência em Atendimento do Sebrae [ANO DO SELO], o nível máximo nacional para Salas do Empreendedor. A presença digital é um dos critérios avaliados, e o portal que desenvolvemos faz parte dessa conquista.
empreendedorafdaingazeira.com.br





