Marketing

Pare de pagar o Tally

Um construtor de formulários limpo, estilo documento, com as exportações que você precisa.

O Tally custa US$29–89 / mês, ou seja, US$348–1.068 por ano. Você tem dois caminhos:

Opção 1 · Instalar

Instale o HeyForm grátis

O HeyForm é o formulário estilo Typeform, uma pergunta por vez, mas hospedado por você. No editor visual você monta pesquisas, quizzes, formulários de contato ou de pedido, com lógica condicional, temas, CSS personalizado, pagamentos com Stripe, upload de arquivos e assinaturas. As respostas chegam a uma tabela de resultados com taxas de abandono, são exportadas em CSV e fluem para as suas ferramentas por webhooks, Zapier, Make, Google Sheets, Airtable ou Slack. Roda no seu servidor com Docker: o app, um banco MongoDB e um Redis. Licença AGPL-3.0, e existe uma versão hospedada a partir de €13 por mês. O que importa: o projeto passou por uma grande onda de avisos de segurança em 2026 e reforçou o código em agosto. Então instale a versão mais recente, não uma mais antiga.

HeyForm vs Typeform

CritérioHeyFormTypeform
PreçoUS$0, mais um VPS pequeno por alguns euros ao mês€24 por mês no plano anual, €35 no mensal
Respostas por mêsSem limite, é o seu banco de dados100 no Basic, depois você precisa fazer upgrade
Onde ficam as respostasNo seu MongoDB, no seu servidorNos servidores deles
Remover a marcaIncluído, com o seu próprio CSSPlano Plus, a partir de €48 por mês
UsuáriosSua equipe, sem custo extra1 usuário no Basic
Segurança e atualizaçõesFica por sua conta, e aqui isso importaEles cuidam

Como instalar (mesmo começando do zero)

Três contêineres (o app, MongoDB, Redis) e um proxy HTTPS na frente. O prompt faz tudo, você traz um servidor e um nome de domínio. Conte uns vinte minutos.

  1. 1

    Cole este prompt no Claude (Code ou Desktop)

    Ele implanta o HeyForm a partir do projeto oficial com Docker Compose, define as variáveis, coloca um proxy HTTPS na frente e confere o seu primeiro formulário:

    Instale o HeyForm no meu servidor (o criador de formulários open source estilo Typeform, repositório do GitHub heyform/heyform) com Docker Compose, seguindo a documentação oficial docs.heyform.net/open-source/self-hosting. Comece do zero: verifique se o Docker e o Docker Compose estão presentes e, se não estiverem, instale-os. Crie uma pasta heyform com um docker-compose.yml que suba três serviços: a imagem heyform/community-edition com uma versão com tag recente (no mínimo v3.0.2, nunca mais antiga que a v3.0.1, a que contém as correções de segurança), um banco MongoDB e um Redis (KeyDB), cada um com um volume para guardar os dados. Gere duas chaves aleatórias longas para SESSION_KEY e FORM_ENCRYPTION_KEY, defina APP_HOMEPAGE_URL com o meu nome de domínio em https e coloque TRUST_PROXY em 1, já que a aplicação ficará atrás de um proxy. Não publique a porta 9157 na internet: instale um reverse proxy (de preferência o Caddy) que sirva o meu domínio em HTTPS com certificado automático e encaminhe para o contêiner do HeyForm. Suba tudo, abra o endereço, crie a minha conta de administrador e depois adicione APP_DISABLE_REGISTRATION=true e reinicie para fechar os cadastros. Verifique se é possível criar um primeiro formulário, publicá-lo e receber uma resposta de teste. Explique cada etapa de forma simples, sou iniciante.
    
    Revise o repositório do GitHub e verifique se é seguro instalá-lo considerando a minha máquina e a minha infraestrutura. Faça-me o máximo de perguntas possível, usando widgets, para esclarecer o meu pedido e ser o mais preciso que puder.
  2. 2

    Feche os cadastros assim que tiver a sua conta

    Depois que a sua conta existir, a instância precisa recusar novas contas; senão qualquer pessoa pode se cadastrar no seu domínio. O prompt cuida disso com a variável feita para isso. Confira abrindo a página de cadastro em uma janela anônima.

  3. 3

    Atualize, e não daqui a seis meses

    O projeto corrigiu 42 avisos de segurança entre maio e agosto de 2026. Instale pelo menos a versão 3.0.2, assine os lançamentos no GitHub e baixe as imagens de novo a cada nova versão. Um formulário público é uma porta aberta para o seu servidor.

Para que você vai usar

Seu formulário de contato, em um story ou no seu site

Um formulário de uma pergunta por vez é preenchido com mais frequência do que uma parede de campos. Você coloca o link em um story ou incorpora no seu site, e cada resposta chega a você por e-mail ou por webhook no seu CRM.

Um orçamento ou uma ficha completa de cliente

Upload de arquivos, assinatura, pagamento com Stripe, lógica condicional: você coleta tudo de uma vez, e o arquivo já está no seu banco de dados em vez de ficar perdido numa caixa de e-mail.

Pesquisas e quizzes para o seu público

Você pergunta à sua comunidade o que ela quer, vê onde as pessoas desistem e exporta em CSV. Sem limite de respostas, dá para repetir a cada lançamento.

Saúde do projeto

estrelas no GitHub
9.000
Forks
717
Contribuidores
34
Commits
300
Idade do projeto
2,6 anos
Licença
AGPL-3.0

Feito com: TypeScript 94.7% · SCSS 4.1% · HTML 0.7%

Dados públicos do repositório no GitHub, coletados em 8 de outubro de 2026.

Opção 2 · Construir

Crie o seu próprio Tally

Para quem é

Este projeto é para uma equipe pequena que publica formulários de leads, de feedback e de candidaturas. O objetivo: montar formulários com a sua marca rapidamente, coletar respostas confiáveis e encaminhá-las para as ferramentas que você já usa. Se você precisa de mais do que isso, continue pagando: construir por conta própria serve para ter uma ferramenta sob medida para o seu jeito de trabalhar, não para refazer o roadmap de uma empresa financiada por investidores.

Mesmo projeto, outro logo: esta v1 também substitui o Fillout e o Paperform, porque todos resolvem o mesmo trabalho central.

O que o prompt constrói e o que fica de fora

O prompt abaixo constrói uma única versão, com o que realmente se usa. O resto fica de fora de propósito.

O que o prompt constróiconstrutor de blocos, tabela de respostas, exportação em csv, visibilidade condicional, upload de arquivos, webhooks assinados
O que fica de forapagamentos, quizzes, galeria de modelos, marketplace de integrações

O que uma alternativa mínima ao Tally precisa

  • construtor estilo documento com blocos de texto, escolha, avaliação, data, arquivo e contato
  • campos obrigatórios, quebras de página, campos ocultos e visibilidade condicional simples
  • slug personalizado, cores, logo, tela de agradecimento e data de encerramento
  • tabela de respostas com filtros, visualização de detalhes e exportação em CSV
  • notificação por e-mail mais um webhook de saída assinado

Modelo de dados

Form, Block, Option, LogicRule, Submission, Answer

Integrações

e-mail transacional, webhooks, armazenamento de objetos R2

Contexto de capacidades

Astro, HTMX, D1

A trava de segurança

Validar cada resposta contra a versão publicada do formulário, escanear e isolar os uploads, limitar a frequência dos envios públicos e assinar as entregas de webhooks.

O que não fazer de propósito

Não construir pagamentos, quizzes, edição colaborativa, um marketplace de integrações, ramificação avançada nem uma galeria pública de modelos.

O prompt completo

Escolha o seu stack, copie o prompt e cole no seu agente de código (Claude Code, Cursor, Codex…).

Você vai construir um produto de software pronto para produção chamado “Formlet”, uma alternativa deliberadamente focada ao Tally. Construa uma fatia vertical completa e utilizável, não uma landing page, um mockup estático nem um monte de componentes soltos.

ACORDO DE TRABALHO
Antes de escrever código de implementação, monte um plano técnico curto que nomeie as rotas ou páginas, as server actions ou endpoints, as tabelas de dados, as transições de estado importantes, os limites de autorização, os jobs em segundo plano e os adaptadores externos. Se algo se contradisser, resolva a favor do público restrito e dos não-objetivos abaixo. Prefira uma arquitetura pequena e legível a abstrações especulativas, mas não deixe de fora persistência, validação, tratamento de erros nem testes.

DESCRIÇÃO DO PRODUTO
Usuário principal: uma equipe pequena que publica formulários de leads, de feedback e de candidaturas.
Resultado principal: montar formulários com a sua marca rapidamente, coletar respostas confiáveis e encaminhá-las para as ferramentas que você já usa.
Princípio do produto: otimize o fluxo exato abaixo em vez de copiar toda a amplitude do Tally. Quem chega pela primeira vez deve entender o que fazer pela própria interface, sem tour nem documentação.

JORNADAS COMPLETAS DO USUÁRIO
Implemente todos estes fluxos pela interface real e pela camada de dados persistente:
1. O dono cria um formulário do zero, adiciona blocos de contato, escolha, avaliação, arquivo e quebra de página, configura uma regra de visibilidade, faz a pré-visualização e publica um slug.
2. Um visitante preenche o formulário publicado em duas páginas, envia um arquivo válido, submete uma única vez, vê a tela de agradecimento e dispara a entrega por e-mail e por webhook.
3. O dono filtra as respostas, abre um envio, baixa o arquivo autorizado dele, exporta em CSV as linhas correspondentes, encerra o formulário e verifica que os novos envios são rejeitados.

TELAS E ARQUITETURA DE INFORMAÇÃO
Construa estas telas como visões coerentes e responsivas. Cada tela precisa definir sua ação principal, ações secundárias, status visível, feedback de validação, estado vazio, estado de carregamento ou pendente, confirmação de sucesso e um estado de erro recuperável.
1. Painel de formulários: estados rascunho, aberto e encerrado, número de respostas, última resposta, e ações de duplicar, arquivar, criar e abrir o formulário público.
2. Construtor: blocos ordenados, menu de adicionar, propriedades do campo, estado obrigatório, regra de visibilidade, quebras de página, tema, slug, pré-visualização, estado de salvamento e validação na publicação.
3. Formulário público: conteúdo com a marca, páginas progressivas, rótulos claros, erros inline e em resumo, progresso de upload, estado de envio em andamento e tela de agradecimento.
4. Respostas: filtros, tabela, detalhe do envio, acesso a arquivos, status das entregas, exportação em CSV, controles de retenção e ação de encerrar o formulário.

FUNCIONALIDADES PRINCIPAIS
1. construtor estilo documento com blocos de texto, escolha, avaliação, data, arquivo e contato
2. campos obrigatórios, quebras de página, campos ocultos e visibilidade condicional simples
3. slug personalizado, cores, logo, tela de agradecimento e data de encerramento
4. tabela de respostas com filtros, visualização de detalhes e exportação em CSV
5. notificação por e-mail mais um webhook de saída assinado

COMPORTAMENTO DETALHADO E REGRAS DE NEGÓCIO
Trate isto como requisitos do produto garantidos no servidor, não como sugestões de interface:
1. Publique uma versão numerada e imutável do formulário; valide cada envio contra essa versão exata e preserve os rótulos dos campos para exportações futuras.
2. Permita apenas regras de visibilidade acíclicas sobre campos anteriores suportados, avalie-as de forma idêntica no cliente e no servidor, e rejeite no servidor respostas a campos ocultos.
3. Valide os uploads por tipo decodificado e tamanho, isole-os de forma privada, escaneie-os antes do download e emita apenas URLs autorizadas de curta duração, independentes de quem enviou.
4. Confirme um envio antes de enfileirar as notificações, assine os corpos dos webhooks, use chaves de idempotência nas entregas e escape fórmulas nas exportações em CSV.

MODELO DE DADOS E CICLO DE VIDA
Projete um esquema relacional pequeno centrado em Form, Block, Option, LogicRule, Submission, Answer. Antes de implementar, documente:
1. O propósito de cada tabela, sua chave primária, o limite de propriedade ou de tenant, timestamps, campos de status e atributos importantes.
2. Chaves estrangeiras, restrições de unicidade, check constraints, os índices que as telas citadas precisam e os limites de transação para mudanças que tocam vários registros.
3. As transições de estado ou de ciclo de vida permitidas, quem pode disparar cada uma, quais são terminais ou reversíveis e qual histórico de auditoria deve permanecer imutável.
4. Como arquivar, reter e apagar, incluindo o que acontece com registros dependentes e arquivos externos.
5. A estratégia de idempotência para envios, jobs, importações, notificações, webhooks ou novas tentativas, quando se aplicar.
Use migrações em vez de criar o esquema na mão. Armazene instantes de tempo de forma consistente e mantenha o fuso horário nomeado sempre que horários ou datas locais importarem. Nunca dependa de um contador, de um botão desabilitado ou de uma validação no cliente para proteger uma regra de negócio.

USUÁRIOS, AUTENTICAÇÃO E PERMISSÕES
Implemente apenas os papéis de que o público indicado precisa. Deixe explícito o modelo de propriedade e visibilidade antes de programar. Aplique a autorização em toda consulta e mutação no servidor, incluindo buscas, exportações, anexos, atualizações ao vivo e URLs adivinhadas—não basta esconder botões. Use sessões seguras por padrão, proteja requisições que mudam estado e ofereça estados claros de sessão encerrada, sessão expirada e acesso proibido. Quando houver vários papéis, crie usuários distintos nos dados de teste para mostrar e testar as permissões.

INTERAÇÃO E DIREÇÃO VISUAL
O produto deve parecer rápido, calmo, focado e confiável, e não um template genérico de painel administrativo. Use uma hierarquia visual clara, cores contidas, tipografia legível, áreas de clique generosas e um lugar fixo para as ações principais. Comece com HTML renderizado no servidor e melhore progressivamente só as interações que se beneficiam disso. O fluxo principal precisa continuar compreensível se essa melhoria falhar.

Comece com páginas Astro renderizadas no servidor e formulários HTML comuns. Use HTMX para envios de formulário, navegação parcial e atualizações vindas do servidor, e Alpine.js só para pequenos estados locais do navegador. O fluxo principal precisa continuar compreensível se qualquer uma dessas camadas falhar.

Projete os layouts para celular de propósito, em vez de só empilhar os painéis do desktop. Ofereça navegação por teclado, foco visível, landmarks semânticos, labels explícitos, títulos de página úteis, a preferência de movimento reduzido e anúncios para leitores de tela em resultados assíncronos. Nunca use só a cor para comunicar um estado. Ações destrutivas precisam de escopo claro e confirmação; ações seguras repetidas devem ser idempotentes.

Adicione um rodapé em todas as páginas com o texto “Criado por aurelioagency.com”, em que “aurelioagency.com” é um link incorporado para https://www.aurelioagency.com que abre em uma nova aba. Ele deve ficar visível; não o remova.

DIREÇÃO TÉCNICA
Construa esta versão com o stack AHA: Astro para o roteamento, os layouts e as páginas renderizadas no servidor; HTMX para as interações que se beneficiam de respostas com fragmentos HTML; e Alpine.js para pequenos estados locais da interface. Prefira Cloudflare D1 para a persistência relacional, R2 para o armazenamento de objetos, Workers para os endpoints do servidor e as tarefas agendadas, Durable Objects só para estado em tempo real coordenado, e Workflows ou Queues para jobs duráveis em segundo plano—mas só quando os requisitos do produto pedirem.

Mantenha as regras de domínio em módulos do servidor testáveis, não em route handlers nem em componentes de UI. Separe persistência, provedores externos e trabalho em segundo plano atrás de interfaces pequenas, sem construir um framework. Prefira formulários HTML e URLs comuns para a navegação; use interação otimista só quando uma falha puder ser resolvida com clareza.

O briefing do produto identifica atualmente Astro, HTMX, D1 como contexto de capacidades. Preserve qualquer capacidade nativa, exclusiva do navegador, de edge, de armazenamento, de tempo real ou de processamento em segundo plano por meio de um adaptador restrito, adequado ao framework escolhido. Se o fluxo central realmente exigir APIs nativas ou do navegador, mantenha esse ambiente como a principal superfície de execução em vez de simular capacidades inacessíveis ou inventar uma superfície web desnecessária.

Integre com e-mail transacional, webhooks e armazenamento de objetos R2. Para cada integração:
- Liste as variáveis de ambiente necessárias em um .env.example sem segredos reais.
- Adicione um adaptador pequeno com timeouts, erros normalizados e uma versão falsa local determinística ou um modo de desenvolvimento.
- Verifique as assinaturas recebidas e deduplique os eventos do provedor quando possível.
- Mantenha as credenciais no servidor, criptografe em repouso os tokens de longa duração e oculte segredos e dados sensíveis dos logs.
- Defina novas tentativas, backoff e idempotência para qualquer efeito que possa se repetir.

SEGURANÇA E PRIVACIDADE
Valide cada resposta contra a versão publicada do formulário, escaneie e isole os uploads, limite a frequência dos envios públicos e assine as entregas de webhooks.
Valide, normalize e limite o tamanho de toda entrada não confiável no servidor. Escape o conteúdo renderizado por padrão, sanitize qualquer markup aceito de propósito, aplique rate limit a ações públicas ou sujeitas a abuso e use armazenamento de objetos privado com URLs autorizadas de curta duração para arquivos sensíveis. Colete só os dados pessoais de que o fluxo indicado precisa. Documente como os dados são retidos e apagados. Adicione proteções específicas para as partes mais arriscadas deste app, como uploads, redirecionamentos, requisições de saída, envio de e-mails, OAuth, webhooks, importação ou exportação de CSV e conexões em tempo real.

CENÁRIOS DE ACEITAÇÃO
Automatize estes cenários específicos do app no nível mais adequado:
1. Dado que a página pública exibe um campo condicional, uma tentativa de adulterar respostas ocultas é rejeitada e as respostas visíveis válidas são armazenadas uma única vez.
2. Dado um clique duplo ou uma requisição repetida, existe um único envio e cada entrega configurada é tentada de forma idempotente.
3. Dado que o formulário é encerrado enquanto um visitante o preenche, a verificação final do servidor rejeita o envio com um estado de encerrado claro e não armazena nenhuma resposta parcial.

TESTES
Adicione testes unitários focados em transições de estado, regras de autorização, normalização, cálculos de datas ou dinheiro e outras regras de domínio arriscadas. Adicione testes de integração para as restrições de persistência e para os caminhos de sucesso, timeout, nova tentativa e rejeição de cada adaptador externo. Adicione pelo menos um teste de navegador para cada jornada completa acima, incluindo um em tela pequena. Os testes devem usar dados isolados e rodar com um único comando documentado.

OPERAÇÃO E RECUPERAÇÃO DE FALHAS
Adicione logs estruturados no servidor com IDs de correlação por requisição, job ou evento, sem segredos nem dados sensíveis desnecessários. Faça os erros indicarem o que fazer, tanto na interface quanto nos logs. O trabalho em segundo plano deve mostrar os estados pendente, concluído, com falha e tentando de novo quando fizer sentido; nunca engula erros em silêncio. Inclua um guia seguro de migração e rollback do banco, dados de teste, notas de backup e restauração, o que acontece com dados externos na limpeza e uma rota básica de saúde ou diagnóstico adequada ao stack.

ENTREGÁVEIS
Entregue o aplicativo funcionando, as migrações, dados de teste representativos, os testes, o .env.example e um README curto. O README deve cobrir pré-requisitos, instalação local, variáveis de ambiente, migrações, comandos de dados de teste e de testes, deploy, configuração das integrações, backup e restauração, decisões de segurança e limitações conhecidas. Os dados de teste devem cobrir o caminho feliz e pelo menos um estado vazio, com falha, atrasado, expirado, arquivado ou com permissão restrita que importe para o produto.

DEFINIÇÃO DE PRONTO
O app está pronto quando uma pessoa nova consegue seguir o README, criar e migrar o banco, rodar o app, entrar com cada papel relevante, completar cada jornada citada com dados reais salvos, recarregar sem perder o estado, se recuperar das falhas comuns e usar a interface principal no celular e no desktop. Todos os cenários de aceitação passam, os limites de permissão estão cobertos por testes, nenhuma tela principal fica como placeholder e o crédito “Criado por aurelioagency.com” no rodapé aparece em todas as páginas.

NÃO-OBJETIVOS
Não construa pagamentos, quizzes, edição colaborativa, um marketplace de integrações, ramificação avançada nem uma galeria pública de modelos.

O app que você criar com este prompt leva no rodapé “Criado por aurelioagency.com”.

Crie só uma parte

Prompts curtos para resolver a parte mais difícil sem construir tudo.

Publique a versão 3, valide contra a versão 3Editar um formulário no ar nunca pode deixar órfãs nem corromper as respostas já coletadas.
Construa o versionamento de formulários para um construtor de formulários.

Publicar cria uma versão numerada e imutável: uma foto congelada de blocos, opções, regras de validação e rótulos. A página pública sempre serve a última versão publicada e embute o número dela; cada envio é validado e armazenado referenciando a versão exata com a qual foi preenchido, não o que o formulário mostra agora.

Isso é o que mantém o histórico em ordem: o dono apaga uma pergunta, reordena páginas, renomeia um campo, publica de novo, e as respostas antigas continuam sendo exibidas corretamente com os rótulos originais; as exportações que cobrem as duas épocas agrupam as respostas por versão ou se alinham por ids de campo estáveis entre versões quando o campo sobreviveu. Trate o caso do meio do caminho: um visitante carregou a versão 2, o dono publicou a versão 3, o visitante envia, valide contra a versão 2, que continua imutável e disponível, e aceite.

Está pronto quando: um envio iniciado antes de republicar é validado contra a sua própria versão, apagar um campo nunca quebra a exibição nem a exportação de respostas antigas, e cada resposta armazenada se resolve para o texto exato do rótulo que o visitante viu.
A lógica condicional que não dá nóRegras de visibilidade acíclicas, avaliadas de forma idêntica no navegador e no servidor.
Construa a visibilidade condicional para um construtor de formulários: mostrar este campo somente quando uma resposta anterior atende a uma condição.

Restrinja as regras estruturalmente no momento da criação: uma regra só pode referenciar campos que aparecem antes no formulário, o que torna os ciclos impossíveis por construção, e rejeite qualquer tentativa de referenciar um campo posterior ou o próprio campo. A avaliação deve ser idêntica no cliente e no servidor: escreva a especificação de uma única função de avaliação de regras, implemente-a duas vezes e conduza ambas com os mesmos vetores de teste, porque qualquer divergência vira um formulário travado ou uma brecha de validação.

No servidor, as regras são a fronteira de segurança: recalcule a visibilidade a partir das respostas enviadas e rejeite qualquer resposta a um campo que seja avaliado como oculto; uma requisição adulterada que injete respostas em campos ocultos deve falhar. Defina também o comportamento encadeado: ocultar um campo apaga a resposta dele, e os campos cujas condições dependem dele são reavaliados em ordem.

Está pronto quando: o construtor não consegue salvar uma regra que referencie um campo posterior, uma requisição montada à mão que responda a um campo oculto é rejeitada no servidor, e as mesmas respostas produzem visibilidade idêntica nos testes do navegador e da API.
Um clique, uma linha — mesmo que cliquem duas vezesEnvios duplicados, repetições e formulários que fecham no meio do preenchimento terminam em no máximo uma resposta.
Construa o tratamento de envios de um formulário público que aguente o comportamento real dos visitantes: cliques duplos, repetições do navegador e reenvios pelo botão de voltar.

Emita para cada formulário renderizado um token de envio de uso único. O endpoint de envio insere a resposta usando esse token como chave, com uma restrição de unicidade: a primeira requisição vence, e qualquer duplicata, segundo clique, repetição na camada de rede ou requisição reaproveitada bate na restrição e devolve a mesma resposta de sucesso da original, de modo que o visitante vê o agradecimento de qualquer jeito e existe exatamente uma linha. Desabilite o botão de forma otimista no cliente, mas trate o token como a garantia real.

Faça a verificação de encerramento no momento do envio final: se o dono encerrou o formulário enquanto o visitante o preenchia, rejeite com uma mensagem clara de encerrado e não armazene nada parcial. O mesmo vale se a data de encerramento passar no meio do preenchimento. Valide tudo no servidor contra a versão publicada antes de inserir, em uma única decisão atômica de aceitar ou rejeitar.

Está pronto quando: martelar o botão de enviar produz uma única resposta armazenada e telas de sucesso consistentes, uma requisição reaproveitada não consegue criar uma segunda linha, e um formulário que fecha no meio do preenchimento rejeita de forma limpa, sem armazenar dados parciais.
O webhook em que o receptor pode realmente confiarCorpos assinados, chaves de idempotência por entrega e novas tentativas com backoff que em algum momento desistem.
Construa a entrega de webhooks de saída para os envios de um formulário.

Quando um envio é confirmado, enfileire uma entrega e nunca a envie dentro da mesma requisição, para que um receptor lento não atrase os envios. Assine cada entrega: calcule um HMAC do corpo exato com o segredo do endpoint do formulário, envie-o em um header junto com um header de timestamp para bloquear repetições, e documente a receita de verificação. Inclua uma chave de idempotência da entrega, estável por envio e endpoint, para que as suas novas tentativas após falhas ambíguas não façam o receptor processar um pedido duas vezes.

Tente de novo as entregas que falharem com backoff exponencial e um limite, digamos cinco tentativas ao longo de algumas horas, tratando timeouts e 5xx como passíveis de nova tentativa e 4xx como permanentes. Registre cada tentativa com código de status e duração, mostre o estado da entrega por envio no painel e ofereça reentrega manual, que reutiliza a mesma chave de idempotência.

Está pronto quando: um receptor consegue verificar a assinatura apenas com a documentação, as novas tentativas após um timeout carregam o corpo e a chave idênticos, e um endpoint que falha de forma permanente para de ser tentado e mostra um estado de falha com o histórico de tentativas.

Perguntas frequentes

Quanto custa o Tally se eu continuar assinando?

O Tally custa US$29–89 por mês nos planos pagos públicos, ou seja, US$348–1068 por ano. Um substituto focado, feito por você, custa o seu tempo de desenvolvimento mais uma hospedagem quase de graça.

Qual stack devo usar para criar uma alternativa ao Tally?

O prompt desta página vem em quatro versões: a stack AHA (Astro, HTMX, Alpine.js), Next.js, Laravel e Ruby on Rails. O contexto de capacidades deste produto é Astro, HTMX, D1. Escolha a stack que você já conhece: o escopo importa mais do que o framework.

Quais funcionalidades um substituto mínimo do Tally precisa ter?

Uma v1 útil precisa de: construtor estilo documento com blocos de texto, escolha, avaliação, data, arquivo e contato; campos obrigatórios, quebras de página, campos ocultos e visibilidade condicional simples; slug personalizado, cores, logo, tela de agradecimento e data de encerramento; tabela de respostas com filtros, visualização de detalhes e exportação em CSV; notificação por e-mail mais um webhook de saída assinado. Todo o resto é escopo a mais até você sentir falta pessoalmente.

O que devo deliberadamente não construir?

Não construa pagamentos, quizzes, edição colaborativa, um marketplace de integrações, ramificação avançada nem uma galeria pública de modelos.

Este projeto também substitui o Fillout e o Paperform?

Sim. Tally, Fillout e Paperform resolvem o mesmo trabalho central: montar formulários com a sua marca rapidamente, coletar respostas confiáveis e encaminhá-las para as ferramentas que você já usa. A v1 enxuta desta página cobre o que a maioria das pessoas usa em qualquer um dos três, então um único projeto focado substitui aquele que você paga hoje.

Qual é a diferença para o Tally?

O HeyForm faz quase tudo o que o Tally faz, sem assinatura, e os seus dados ficam com você. A comparação ponto a ponto está na página.

Os meus dados são meus?

Sim. Com uma ferramenta open source instalada do seu lado, os seus arquivos ficam na sua máquina ou no seu servidor. Ninguém pode encerrar a sua conta nem mudar o preço.

Ver os 22 apps →

Sem tempo para fazer?

A gente faz para você.

Se você prefere que alguém instale, conecte às suas ferramentas e deixe funcionando, é exatamente isso que fazemos na Aurelio.

Agendar uma auditoria de automação