Pré-requisitos
- Conta criada em app.testly.com.br
- Projeto React 16.8+ (Vite, CRA ou Next.js)
- Node.js 14+
Instalação
- npm
- yarn
- pnpm
Passo 1 — Configure o Provider
Envolva sua aplicação com oTestlyProvider no arquivo raiz. Você configura isso uma única vez.
- React / Vite
- Next.js (App Router)
- Next.js (Pages Router)
App.tsx
.env
Desenvolvendo localmente?
O Testly tem duas chaves por organização para você nunca misturar dados de teste com dados reais:| Chave | Formato | Quando usar |
|---|---|---|
| Produção | tk_live_... | App em produção — eventos contam nas suas métricas |
| Desenvolvimento | tk_test_... | Ambiente local — eventos ficam completamente isolados |
.env
.env.local
Passo 2 — Crie o experimento no dashboard
- Acesse app.testly.com.br e clique em Novo Experimento
- Preencha o nome — o slug é gerado automaticamente (ex:
homepage-cta-test) - Defina o KPI de conversão (ex:
cta_clicked) - O experimento é criado já em estado ativo (running)
O dashboard mostra o código pronto para copiar em cada experimento — incluindo a API Key e o slug correto.
Passo 3 — Integre no seu app
Você tem duas opções para integrar o experimento. Escolha a que preferir:- 🤖 Pedir pra IA (mais rápido)
- ✍️ Manual
Depois de criar o experimento, o dashboard mostra a aba “Pedir pra IA” com um prompt pronto — sua API Key, slug e evento de conversão já preenchidos.Cole no Claude Code, Cursor, Windsurf ou qualquer IA do seu editor. Ela faz tudo:
Como funciona
Múltiplos experimentos
Você pode usar váriosuseExperiment no mesmo componente ou em componentes diferentes:
control do hero-headline e no variant-b do pricing-layout ao mesmo tempo.
Troubleshooting
variant retorna null e não muda
variant retorna null e não muda
Causa mais comum: a API Key no
TestlyProvider não corresponde à organização onde o experimento foi criado.Checklist:- Abra app.testly.com.br/settings → copie a API Key da seção API Key
- Confirme que essa mesma key está no
TestlyProviderdo seu app - Verifique se o experimento está listado no seu dashboard (não no de outra conta)
- Confirme que o slug no
useExperiment('...')é idêntico ao slug exibido no dashboard
variant retorna null mas o experimento existe
variant retorna null mas o experimento existe
O SDK retorna
null quando o experimento não está em estado running. Isso acontece quando:- O experimento foi pausado ou arquivado no dashboard
- O experimento foi concluído automaticamente (winner encontrado)
- A API Key usada pertence a uma organização diferente da que criou o experimento
draft ou paused, ative-o.Variante muda a cada refresh
Variante muda a cada refresh
Isso não deveria acontecer — o SDK usa cache local para manter consistência.Causas possíveis:
- Código limpando o
localStorageem algum lugar - Navegação privada (sem persistência entre abas)
userIddiferente sendo gerado a cada render
config={{ debug: true }} e verifique os logs no console.Conversões não aparecem no dashboard
Conversões não aparecem no dashboard
Checklist:
- ✅
convert('nome_do_evento')está sendo chamado? - ✅ O nome do evento usa snake_case (ex:
cta_clicked, nãoCTA Clicked)? - ✅ A impressão foi registrada antes? (automático, mas verifique com
debug: true) - ✅ O experimento está em estado running?
Atingi o limite do plano gratuito
Atingi o limite do plano gratuito
O plano gratuito permite 1 experimento ativo e 10.000 impressões/mês.Se você atingiu o limite de impressões, o SDK continua funcionando — mas novas impressões não são registradas (conversões nunca são bloqueadas).Para criar mais experimentos sem afetar seus limites, ative o Dev Mode no painel lateral e use a chave
tk_test_ — experimentos de teste são ilimitados.Para aumentar os limites de produção, faça upgrade para o Pro — R$79/mês, experimentos ilimitados, 100k impressões.Próximos Passos
useExperiment
Referência completa do hook principal
Exemplos práticos
Hero section, pricing, CTA — veja implementações reais
Configuração avançada
Debug mode, dedupConversions, userId customizado
Integração com IA
Use Claude Code ou Cursor para implementar experimentos automaticamente

